Hey all, I'm building an html5 canvas implementation for generating gcode, as a part of a large endeavor to make a unixy utilitarian toolchain for cnc. https://github.com/em/gcanvas

I am looking to you guys for some advice on how I should support ATC and manual tool changes.

There doesn't seem to be much of a standard on how manual tool changes are done.

Here are some of the options:

1) Handle it outside of Gcode, block stdin and prompt for the new tool through stderr.

2) Use the T command as if ATC were supported, and make a separate utility for manual ATC postprocessing.
This makes manual tool changes harder than they need to be and forces you to maintain a mapping table.

3) Just pause with a comment (is there even a standard pause or prompt command? I can only find M226 which seems to be a reprap thing.)

I'd also really appreciate any thoughts on where the spindle should move to make the tool change. I'd like to avoid an additional context property like toolChangeZ, but that is probably unavoidable.

I'd like the actual API to remain independent of units and deal with tool changes when toolDiameter is changed. I can easily detect if the tool is an integer in mm or fractional inch and prompt accordingly.

Any ideas are very appreciated. Thank you! : )

Also here's a bit of eye candy, testing non-zero winding rule example: https://cloudup.com/c4FDvrtZoG5