7 releases (4 breaking)

new 0.5.1 Apr 13, 2025
0.5.0 Mar 31, 2025
0.4.0 Mar 26, 2025
0.3.0 Mar 17, 2025
0.1.1 Dec 27, 2024

#540 in Parser implementations

Download history 256/week @ 2024-12-25 2/week @ 2025-01-01 5/week @ 2025-02-05 128/week @ 2025-02-12 15/week @ 2025-02-19 16/week @ 2025-02-26 2/week @ 2025-03-05 96/week @ 2025-03-12 34/week @ 2025-03-19 243/week @ 2025-03-26 40/week @ 2025-04-02

414 downloads per month
Used in gcode2obj

MIT license

91KB
2K SLoC

gcode-nom

Rust 2021 Edition.

crates.io Documentation

A library containing a full set of nom parsers for decoding gcode files.

Both .gcode files and binary .bgcode files are recognized.

Based on this library the workspace contains a series of visualization tools

  • gcode2obj - Generates "WaveFront Obj" files.
  • gcode2svg - Generates SVG files.
  • gcodeExtractThumbs - Extracts the images embedded in a binary-gcode file.
  • bgcodeViewer - Generates a report by turning on all the logging and them attempts to parse the file.

I intend the parsers to be as strictly compliant as possible. This is under-going rapid development. Please create issues here, or send me gcode files which expose unimplemented sections.

See nom - "A byte-oriented, zero-copy, parser combinator library"

Changelog

Between version 0.4 and 0.5 a major performance misconception was unpicked.

A 9.9MByte file is processed 60 times faster. Now in 1.3secs

[ See the assets folder associated with this repository "gear-holder-print-in-place_04n_022mm_pla_mk4_6h49m.bgcode" ]

Tools

gcode2obj

Generates obj files.

Pass the gcode file into StdIn - the obj file is sent to StdOut :-

cd gcode2obj
cargo run --release -- < ./assets/benchy.gcode > benchy.obj

If a filename is passed in as a command line parameter then a obj file will be dumped to StdOut.

cd gocode2obj
cargo run --release -- ../assets/X\ 6x6_0.15mm_PLA_MK3S_1h55m.gcode > X.obj

Which for example can be imported into blender for visualization.

Benchy in Blender Lego bricks Within blender :-

  1. This obj has been "Imported".
  2. Converted into a "Curve".
  3. Finally a circular bevel object has been applied to make the object solid [ A circle to represent a 0.1mm fibre].

gcode2svg

Generate svg files

Benchy in Blender

How to use

Pass the gcode file into StdIn - the SVG file is sent to StdOut :-

cd gcode2svg
cargo run --release -- < ./assets/benchy.gcode > benchy.svg

If a filename is passed in as a command line parameter then a svg file will be dumped to StdOut.

cd gocode2svg
cargo run --release -- ../assets/X\ 6x6_0.15mm_PLA_MK3S_1h55m.gcode > X.svg

gcodeExtractThumbs

Iterates over all the embedded thumbnail block and save the images to disk

cargo run --release  --  ../assets/both\ parts.bgcode

bgcodeViewer

Strict checking of binaries. validates blocks checksums, ensures 'block' parameters values are within valid ranges.

Pass the gcode file into StdIn - A summary file is written to StdOut

cd bgcodeViewer
cargo run --release  < ../assets/both\ parts.bgcode > summary.txt

Future work

see TODO

A Bevy app?

Dependencies

~2–2.8MB
~53K SLoC