New web-based CAM Slicer, GCode toolpath generator

I’ve been working on a new tool that does FDM, Laser and CAM all in one. Today I turned on the CAM mode for toolpath generation. I have an X-Carve at home and have tested importing the generated gcode into Easel and Chilipeppr. If you’re interested, please check out the intro video then head over to check out the tool (aka kiri:moto) … I hope you enjoy and find this highly useful. Keep in mind, this is the very first release of this code and you will certainly find deficiencies and bugs. I welcome your feedback and suggestions. New minor releases will likely go live every 1-3 days.


Very interested. If i have enough time i will try it this weekend.

please do. I just put out a release with a bunch of new features:

This looks terrific! I do a lot of raster 3D milling, and your roughing pass looks tons more efficient than dmap2gcode. I haven’t tried the resulting gcode on my XCarve yet, but I hope to in the next few days.

Is there a way that I can export the roughing pass separately from the finishing pass, or is there a pause in the gcode that will let me change bits?

Can I select which corner to place my origin instead of just having a check box for center?

Finally, it appears that selecting “linear x” generates passes with the majority of motion on the y-axis, which seems counter-intuitive to me.

You can select/deselect each step if you only want one and export separate gcode chunks. Alternatively, you can use different tools for roughing and finishing passes and it will emit an M6 tool change. You can setup two of the same tool with different tool #s if you just want a pause between passes. Also, you can customize the gcode template to add a full script on a tool change event. Adding more “intervention” scripting points is possible. If you need more control, just ask.

I’m pretty happy about the curves-only feature which makes it possible to do fast raster milling with chamfered and fillet edges top and bottom.

I understand the confusion on x/y linear. In the code, the linear passes are named for the axis of progression of traces. In the case of linear X, for each X increment it traces along Y.

also, for origin, you can uncheck “origin center” under output in which case the bottom left corner of the platform becomes 0,0 … then just move the part where you want to cut it from that offset.

Looks very clean and well organized. I will have to give it a try.

Thanks for the quick reply! I have a few more questions now, because I’m still getting confusing behavior:

When you say “select/deselect each step”, do you mean have the little tab for “roughing” or “finishing” expanded/collapsed, or do you mean checking/unchecking the process in the “layers” tab?

Does the roughing pass automatically do a raster-like pass over the whole domain?

Regarding moving the part to define my own origin—how do I move the part relative to the bed? It’s stuck in the middle. I don’t seem to be able to use the keyboard command “option-arrow” because I have no “option” key. And how would I do it accurately? (I have square parts and want the origin to be one of the corners, exactly.)

Also, hitting ‘s’ did not toggle layer view mode, it re-ran the slicer.

on the selection for finishing how would select as ball end mill

I agree it’s not entirely clear. Under the “roughing” pass, there is an “enable” checkbox. Under “finishing” there are three checkboxes to discretely enable/disable that form of finishing: “waterline”, “linear x” and “linear y”. Toggling those checkboxes will give you any one up to four passes in the generated gcode.

The layers checkboxes is just to enable/disable the already sliced-layer groups. Stepping through individual layers is another matter that I cover briefly in a youtube video. I’ll be posting more.

The roughing pass uses polygon offsets and is for large material removal. I recommend only using a flat endmill for this. Waterline finishing is also best with flat endmills. If you want to use a ball endmill, linear x/y (especially with curves-only checked) is good for that. I haven’t separated out linear finishing from waterline to enable different tool selections (soon). But experiment with flat endmills and curves-only linear x/y finishing. I think you will find very good results. I posted some pics of 1/8" endmills with 0.1 stepover that gives very smooth finishes.

Regarding part origin/offset, you first have to select the part by clicking on it. It will turn green. Then you can drag it where you want it. The trouble with putting the part at 0,0 is that the outline cuts (unless you are in pocket-only mode) will go outside the bounds of the part. I’m thinking about how to better handle this.

As for tool management, there is a “tools” menu under “system” on the left hand side. You can add/delete and number tools there. Then they will show up on the drop-downs on the right-hand side.

1 Like

Ahhhh, that makes sense! Maybe if the “linear x” tooltip said something like “enable raster finishing pass using y, then x movements”, for example. Or if all 5 of the “enable” checkboxes had a different color? Or maybe all options under a tab are greyed out until one of the “enable”-like boxes is checked? These are just my suggestions to make this more clear. This is a terrific tool, and I’d be delighted if my suggestions can help others adopt the tool.

As for part origin, I’m not eager to try to align my part to the bed origin by hand (I use “pocket only”). And since it’s really inconvenient to try to align my bit tip to the middle of the part after changing bits, I’ve figured out a workaround to get the origin to be one of the corners: set the bed width and depth to exactly the size of my part and uncheck “center”. The only remaining problem is that the bed sizes round to the nearest unit (so my 76.2mm part extends a little).

Another feature request, if you please: can [Esc] be used to cancel the current operation? When I hit “slice” on a complex piece, it can take a few minutes to calculate the path before returning control.

Overall, I fully expect this to become my primary g-code generator. Thanks for your hard work!

The UI will evolve substantially once I get the core engine finished. I’m going to add explicit stock controls which should alleviate the problem you’re having there. And I will add a way to cancel long operations. The update today should speed things up a bit. I have a few tricks up my sleeve that should dramatically speed up CAM, but they’re complex to implement and may take a week or so. Tabs to make cutouts easy are on my short list.

Thanks for the feedback!

Edit – you can always reload the page if you’re impatient to kill an operation :slight_smile:

Awesome. Once again, thanks for the prompt and responsive feedback. I’m not at all worried about the execution speed—my XCarve takes far longer to run these gcode decks than it takes to make them.

I tried it on a few models last night, and here are some observations:

  • The roughing pass is AMAZING—so fast and efficient. Probably 2-4x faster than what I had been using.

  • I’d prefer the “linear x|y” motions to begin from one corner and end at the opposite corner instead of starting in the middle of one face and then returning to that same point after one half has been done (again, I’m thinking of a square, bumpy surface). Going from corner to corner reduces the chances of accumulated tiny errors ruining the piece.

  • It seems that the roughing pass is leaving quite a bit more than what “leave stock” suggested. It’s off by approximately what I entered in “z top offset”. Is it possible that the roughing or finishing pass ignores “z top offset”?

I’ll look into more control around linear x/y cleanup. In general, I’ve found that the roughing / finishing passes are sufficient for vertical-only / horizontal-only faces, which is why I added “curves-only” for the linear cleanup. Try it out if you haven’t already. If your part has no surfaces with curves, then I don’t think you need linear finishing. Roughing and Waterline already auto-adjust cut-down levels to exactly clean flat surfaces.

The “z top offset” is the only real stock control available at the moment. It “pushes” your part down that distance from z top. If you use “z top offset”, then you either have to have a “facing” pass or “linear x/y” finishing without “curves-only” set (which causes linear x/y to, effectively, do the facing).

“leave stock” is entirely different. It’s the horizontal offset roughing adds to it’s pass which is left for waterline cleanup. This allows for fast roughing then slower finishing for smoother vertical faces. If a part is purely flat faces and vertical walls and the material allows it, you can really get away with just “roughing”. For most of my work, I rarely use waterline anymore and set “leave stock” to 0.

In contrast, my pieces have no flat areas whatsoever----the top surface is all “curves.” That seems to cause some problems in several areas that are probably not experienced by the average CNC user. My desire is to do a roughing pass with my 1/4" or 1/8" end mill and then a raster-scan finishing pass with a 1/32" V bit.

I generally have “origin top” checked and “z top offset” to about 1mm when I mill into my plywood—that removes the top thin veneer and lets me dig into the multiple layers beneath. Those features are useful and self-explanatory.

I thought “leave stock” defined the minimum distance between the roughing pass volume and the part itself, in any direction. I can see how this would require a little bit more computation (I’m a computational physicist, so that’s my specialty), and wasn’t sure if that’s what was being done. Regardless, the current behavior should work for my models, except that when using “pocket”, my V-bit finishing pass must dig through lots of material on the border of the piece. I don’t have a solution for that yet.

Also, I noticed that something changed between yesterday and today. Now my “linear y” slices seem to interpolate from the wrong position on the part. Maybe the following image will illustrate both the bug and my style of CNC project: kiri screen grab.

I can modify leave stock to offset the roughing z from planar surfaces … will think about it. But for your use case (terrain), this should roughly equate to what you want. As for the offset problem, did you rotate the part after the first slice then slice again? I have a bug where I’m not re-sending the part coordinates in that case. If not, I’m puzzled. Either way, I should be pushing code again later today. If it is a bug and I can find it, you should be back in business soon.

BTW, nice screenshot. The next push will default cut preview to 100% model opacity. But you can always change it on the right hand side under the “view” menu.

pocket only does have a bug with models like yours if you don’t have a roughing pass that clears away the outside. it’s on the top of my to-fix list.

for the time being, if you put “walls” around your part that extend to the highest Z point then enable “pocket only” it should work properly.

I didn’t rotate the part between the rough and finish slice operations. I do them individually, and not together, if that makes a difference.

Now I’m experiencing runs that won’t ever finish slicing—stuck on “topo tracing.” And some roughing slice attempts produce toolpaths outside of what I’d expect: kiri screen shot.

clearly I’ve made some sort of dis-improvement :confused: would you mind sharing the model with me?

so sorry about that. I did find and fix that bug. whew. it was horribly subtle.