juicy-gcode: SVG to G-Code converter

[ bsd3, graphics, program ] [ Propose Tags ]

SVG to G-code converter that aims to support almost all of the SVG features. It currently supports all of the shapes except images (not planned) and text (maybe once as you it can be converted to curves easily anyway). The flavor of the generated G-Code can be configured providing a configuration file.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5, 0.1.0.5.1, 0.1.0.5.2, 0.1.0.6, 0.1.0.7, 0.1.0.8, 0.1.0.9, 0.1.0.10, 0.2.0.1, 0.2.0.2, 0.2.1.0, 0.3.0.0, 1.0.0.0
Change log ChangeLog.md
Dependencies base (>=4.9 && <4.10), configurator (>=0.3 && <0.4), lens (>=4.14 && <4.15), linear (>=1.20 && <1.21), matrix (>=0.3 && <0.4), optparse-applicative (>=0.13 && <0.14), svg-tree (>=0.5 && <0.6), text (>=1.2 && <1.3) [details]
License BSD-3-Clause
Author dlacko
Maintainer dlacko@gmail.com
Category Graphics
Home page https://github.com/domoszlai/juicy-gcode
Bug tracker https://github.com/domoszlai/juicy-gcode/issues
Source repo head: git clone https://github.com/domoszlai/juicy-gcode
Uploaded by dlacko at 2016-10-31T11:26:25Z
Distributions NixOS:1.0.0.0
Reverse Dependencies 1 direct, 0 indirect [details]
Executables juicy-gcode
Downloads 6876 total (64 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-11-18 [all 2 reports]

Readme for juicy-gcode-0.1.0.0

[back to package description]

Synopsis

Haskell SVG to G-code converter. It aims to support almost all of the SVG features. The flavor of the generated G-Code can be configured providing a configuration file.

Installation and usage

  • Install the latest Haskell Platform if you do not have it yet
  • $ git clone https://github.com/domoszlai/juicy-gcode.git
  • $ cabal install juicy-gcode/juicy-gcode.cabal
  • $ juicy-gcode --help
juicy-gcode - The SVG to G-Code converter

Usage: juicy-gcode.exe SVGFILE [-f|--flavor CONFIGFILE] [-o|--output OUTPUTFILE]
                       [-d|--dpi DPI]
  Convert SVGFILE to G-Code

Available options:
  -h,--help                Show this help text
  SVGFILE                  The SVG file to be converted
  -f,--flavor CONFIGFILE   Configuration of G-Code flavor
  -o,--output OUTPUTFILE   The output G-Code file (default is standard output)
  -d,--dpi DPI             Density of the SVG file (default is 72 DPI)

Configuration

The default G-Code flavor configuration file is the following:

gcode
{
   begin = "G17;G90;G0 Z10;G0 X0 Y0;M3;G4 P2000.000000"
   end = "G0 Z10;M5;M2" 
   toolon =  "G00 Z10"
   tooloff = "G01 Z0 F10.00"
}

A new configuration file can be set by the --flavor or -f command line option.

Another configurable property is the resolution of the SVG image in DPI (dot per inch). It can be given by the --dpi or -d command line option. Default value is 72 DPI.

Limitations

Missing features:

  • text (easy with e.g. FontyFruity, maybe once, you can convert text to curves easily anyway)
  • filling (moderately difficult)
  • clipping (probably not easy, maybe once)
  • images (not planned)

Implementation

SVG images are built using the following shapes (all of these are subject of an arbitrary affine transformation):

  • lines
  • circles
  • ellipses
  • elliptic arcs with optional x axis rotation
  • quadratic and cubic bezier curves

In contrast G-Code implements only

  • lines
  • non-elliptical arcs

That means that only lines, circles and some arcs (non-elliptic ones without rotation) can be transleted to G-Code directly. If transformations are also counted, then only lines can be translated to G-Code directly as circles are not invariant under affine transformations. Because of this, the converter is implemented in two stages.

Stage 1

All the SVG drawing operations are translated to a list of MoveTo, LineTo and CubicBezierTo operations as these are invariant under affine transformations. Arcs, circles and ellipses can be easily approximated with bezier curves with a small error.

Stage 2

Cubic bezier curves are approximated with Biarcs using the algorithm described in [1] and explained here.