2.6 KiB
svg2gcode
Convert any SVG 1.1 path to gcode for a pen plotter, laser engraver, etc.
TODO
- Support all path variants
- Support group and path transforms
- Biarc interpolation (G2/G3 instead of many G1)
- Px, pc, in to mm
- Configurable DPI for px/pc to mm
- Sort paths by distance to reduce G0 distances
- Configurable start/end sequence
- Comments in GCode input
- Rustdocs
- End-to-end tests
Known bugs/issues
- Ellipse paths are dubious -- large_arc, sweep may need to be inverted
- Smooth curves should not use the control point when the previous curve is not of the same type (quadratic -> smooth cubic, cubic -> smooth quadratic)
- This is just a nit, it shouldn't matter if the SVG is correct
Demonstration
Input
cargo run --release -- examples/Vanderbilt_Commodores_logo.svg --off 'M4' --on 'M5' -o out.gcode
Output, rendered at https://ncviewer.com
cat out.gcode
FAQ / Interesting details
-
Use a 3D printer for plotting: (thanks @jeevank for sharing this) https://medium.com/@urish/how-to-turn-your-3d-printer-into-a-plotter-in-one-hour-d6fe14559f1a
-
Convert a PDF to GCode: follow this guide using Inkscape to convert a PDF to an SVG, then use it with svg2gcode
-
Are shapes, fill patterns supported? All objects can be converted to paths in Inkscape with
Object to Path
for use with this program. Not sure how practical fill patterns would be -- if you have ideas, feel free to open as issue or a PR. -
What about a generic PPD driver for using a plotter as a printer? I thought about doing something like this where you package ghostscript + inkscape + svg2gcode but that would take a lot of time