Interesting idea; I like the fact that it's focused on doing CAM operations rather than being some sort of general-purpose drawing application.
Why did you choose to do this in Flash, though?
Hi everyone
I've been coding a 2.5d cam program for the past couple of months, and I've finally have something to show! I call it PartKAM (that stands for Kick Ass Machining)
The idea is to have something simple and intuitive for hobbyists, and to be accessible from as many platforms as possible.
here are some of the features, and a quick intro to the program:
and here's the link to try it in your browser (you need to have flash 10 or higher!):
PartKAM!
be advised that it will almost definitely crash your browser! To save a local copy, right click here and click on "save target as".
WARNING: this is still very BETA and you should not trust anything that comes out of it!! There are definitely still bugs in the system and I've seen them pop up, so always simulate or do air cuts first!
It's a web-based app, so it's not going to be as fast as some of the offline ones, but it uses a very unique approach to offsetting that makes it quite speedy for certain types of geometry.
known bugs:
- occasionally you might see an island being completely ignored or a large anomalous area that is uncut. This is a known bug and caused by the island and the outer boundary's offset "wavefronts" not colliding for some reason. If you see this bug, try changing your stepover by a percent or two. If that doesn't work, post the file so I can examine it.
- after switching between inch/cm, the cut simulation is wonky.
I'm going to rest for a while (been coding all week..), but after that I'll start working on the bugs. Enjoy the program... if you dare![]()
___________________________
www.carveit.ca
Interesting idea; I like the fact that it's focused on doing CAM operations rather than being some sort of general-purpose drawing application.
Why did you choose to do this in Flash, though?
there were a couple of reasons for flash when I was starting the project
- I was familiar with flash development
- it offers a nice seamless user-experience on the web
- the cad tool I had was already coded in flash/actionscript
but during the course of development I realized that flash is perfect for this app because it uses a bitmap based approach to offsetting. Flash's rendering engine is expressly designed for rendering vector paths to bitmap, and it does this very fast at very high resolutions. (for something running on a vm inside a browser..)
___________________________
www.carveit.ca
Very impressive. It's not the sort of thing I would use on a daily basis, but it's perfect for my friends who want me to make them parts but want to do the design work themselves.
Looks pretty cool so far. But it definitely needs an "Undo!" function! (Not that I make misteak... mistakes or anything, you understand. But for those less fortunate. ;-)
hey, misteaks can be tasty : ]
undo seems to be a popular feature, so it's on the top of my feature-list. For now though I'm going to iron out the bugs in the existing features.
___________________________
www.carveit.ca
what open source license is your code available under?
what algorithm are you using for 2D offsets? pair-wise offset segments/arcs with a second phase where invalid loops are removed? a level-set or fast-marching-method based approach? or the voronoi diagram of Held&co?
or libarea on googlecode?
thanks,
AW
it's not open source yet. I am planning on releasing the source, but I'm still contemplating which license to use. I also need to clean it up a bit for public consumption.
I've tried implementing several methods, including the PWID algorithm as well as Held's voronoi approach, but encountered various blocking issues during implementation. In the end I came up with a bitmap-based approach that I haven't seen in literature. You can get the gist of it from this graphic:
in other words, I wasn't smart enough to do it the proper way, so I cheatedMaybe someone smarter than I can do it the proper way when I release the source.
that graphic isn't the end of it actually, there are a few extra steps after that to clean up the output. The key is that only closed loops are valid, so it's pretty easy to recognize and remove the "stubbles" that hang off of the chain.
___________________________
www.carveit.ca
Hey - sometimes the wrong way is the _best_ way! It's a pretty impressive accomplishment at any rate. Thanks for putting it out there!
There are a couple of features I'd like to see (besides the forementioned "Undo"). Being able to save the parameters for the toolpath would be great. I don't seem to see a way to do that, and when I'm trying different tool sizes to see what works best, having to re-enter all the parameters each time is kind of painful....
I also haven't been able to find a way to delete a toolpath once it's created, which would be nice.
Lastly, I don't know if this is a bug, or an overflow condition, or what, but when I try to get it to use a 0.005 inch engraving tool to generate a toolpath that works fine if I tell it to use a 0.0625 inch (for example) tool, it just sits there and looks at me funny. The parameter window for the toolpath never closes, and I never get a path. It just kind of "goes away". Any ideas?
to delete a toolpath, just select it and press delete.
if it ignores you when you hit ok, that usually indicates a stack overflow.. it seems that flash restricts you to 1000 stack values or something like that, which limits recursion depth. Does this happen with the follow-path (engraving) operation?
It also seems that the stack limit varies from system to system. I will be re-implementing some of the recursive algorithms with looping to fix this issue.
___________________________
www.carveit.ca
I just tried to import an SVG that I used Inkscape to trace from a monochrome bitmap of a line drawing. PartKam complained:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.partkart::SVGToPath/getUnit()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:346]
at com.partkart::PathParser/getUnit()[C:\Users\Jack\Documents\partkart\designer\com\partkart\PathParser.as:223]
at com.partkart::PathParser/parseSubPath()[C:\Users\Jack\Documents\partkart\designer\com\partkart\PathParser.as:94]
at com.partkart::PathParser/parse()[C:\Users\Jack\Documents\partkart\designer\com\partkart\PathParser.as:29]
at com.partkart::SVGToPath/parsePath()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:226]
at com.partkart::SVGToPath/parse()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:67]
at com.partkart::SVGToPath/parseG()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:334]
at com.partkart::SVGToPath/parse()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:85]
at com.partkart::SVGToPath/parseSvg()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:146]
at com.partkart::SVGToPath/parse()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGToPath.as:61]
at Main/processFile()[C:\Users\Jack\Documents\partkart\designer\Main.as:1072]
at com.partkart::SVGLoader/onLoadComplete()[C:\Users\Jack\Documents\partkart\designer\com\partkart\SVGLoader.as:79]
Does this happen for every svg file or just that particular file? could you upload the offending file? I have an idea of what's wrong from the debug message, but I need to go through it with the debugger to understand what it's attempting to do.
thanks
___________________________
www.carveit.ca