libprintcalc 0.2.0

Library for calculating 3D print job costs (material, print time, printer wear, electricity, labor, hardware) from sliced-file output.
Documentation

libprintcalc

Library for calculating 3D print job costs — material, print time, printer wear, electricity, labor and hardware — from real sliced-file output instead of manual entry.

The printcalc crate is the command-line tool built on it; printcalc-wasm is a browser frontend over the same code.

cargo add libprintcalc

Quick start

auto_job reads the printer and filament out of the sliced file itself and builds a costable job:

use libprintcalc::{auto_job, calculate, parse_slice_bytes, CostDefaults};

let slice = parse_slice_bytes(&bytes, "widget.gcode.3mf")?;
let auto = auto_job("widget", slice.clone(), slice, [], [], 1.5);
let breakdown = calculate(&auto.job, &CostDefaults::default())?;
println!("{:.2}", breakdown.total_cost);

Every match auto_job makes is a guess, returned with its confidence and what it matched on so you can show it and let the user correct it. A slot that matches nothing and states no price is left out of the job, so costing fails naming it rather than pricing it at zero.

See Embed the library for building jobs explicitly, supplying your own candidate profiles, and reporting unrecognized keys in user-supplied TOML.

Entry points

Everything is re-exported at the crate root.

parse_slice_bytes sliced-file bytes → SliceSummary
parse_job, parse_printer, parse_material TOML → model types
parse_toml the same, plus every key nothing claimed
read_slice_file, read_job, read_printer, read_material the same, from a path
create_printer, create_material build profiles in code
new_job a job from a source and explicit profiles
auto_job a job from the sliced file alone
calculate cost a job, resolving refs
calculate_cost the pure core, given resolved profiles

calculate_cost and parse_slice_bytes do no I/O at all. The disk helpers read; nothing in this crate writes — saving is the CLI's job. See Architecture.

Formats

Format Extension Feature
Bambu Studio 3MF .gcode.3mf bambu-3mf
Plain-text G-code .gcode gcode
PrusaSlicer binary G-code .bgcode prusa-bgcode
PrusaSlicer SLA .sl1, .sl1s prusa-sl1

bambu and prusa are umbrella features pulling in every format for that vendor; default = ["bambu", "prusa"] builds all four. Take only what you need:

cargo add libprintcalc --no-default-features --features prusa-sl1

Every parser produces the same SliceSummary, so nothing downstream knows which format it came from. What each one records is tabulated in Supported formats.

Multi-plate and multi-filament

Bambu .gcode.3mf plates can be costed individually or together. Any format with more than one filament slot — Bambu AMS, Prusa XL and Core One IDEX — is priced per slot against that slot's own profile.

Documentation

License

Apache-2.0