Compare commits

..
Author SHA1 Message Date
Hanif Koh 2b2c710626 Order GCodeWriter Initializers Like the Members Moved to Protected
The lift, speed and cached-extruder members now live in the protected section ahead of the private ones; list their initializers first so the list reads in construction order. No behaviour change.
2026-09-14 17:27:33 +08:00
Hanif Koh 2b1a7e38df Drop Redundant Belt Checks in BeltGCode
BeltGCode is only created for belt printers, so its hooks no longer re-check belt_printer, and the BBL-machine flag is set once on whichever writer survives init_belt_writer instead of on one about to be discarded.
2026-09-14 17:27:33 +08:00
Hanif Koh b4052ec99f Drop the Redundant Lift Type Alias in eager_lift
effective_type was a plain copy of the parameter.
2026-09-14 17:27:33 +08:00
Hanif Koh 14cf7861e0 Fix Belt Tooltip Spacing and Legend Casing
Drop double spaces in the belt tilt tooltips and match the preview legend header to
the "Belt printer" settings group.
2026-09-14 17:27:33 +08:00
Hanif Koh 18c08862a8 Align up_direction Position in TriangleSelector Fill Calls
seed_fill_select_triangles() now takes up_direction right after highlight_by_angle_deg, as select_patch() does.
2026-09-14 17:27:33 +08:00
Hanif Koh 62ef0fa4f8 Write the Standard Layer Change Tag on Belt Brim Apron Layers
Apron layers appended print_z to the layer change tag, unlike every other layer; write the plain tag line.
2026-09-14 17:27:33 +08:00
Hanif Koh a8a45439db Share One Build Plate Tilt Up-Direction Helper Across the GUI
The bed gravity arrow, volume rendering and the painter/support gizmos each rebuilt
the tilt up-vector from build_plate_tilt_x/y; use one helper that also tolerates
presets without the keys.
2026-09-14 17:27:33 +08:00
Hanif Koh 5cd6661280 Check the Belt Temperature Tower Model Load
Bail out like the other calibration paths when add_model() fails instead of
indexing the empty model.
2026-09-14 17:27:33 +08:00
Hanif Koh 33aec258da Skip CLI Wipe Tower Reservation on Belt Printers
Print::has_wipe_tower() is always false for belt printers, but CLI arrange, plate checks and the pre-slice tower clamp still reserved a phantom tower footprint and wrote a clamped wipe_tower_x/y into the config.
2026-09-14 17:27:33 +08:00
Hanif Koh 76aba24ddf Number Belt Extension Support Layers Sequentially
Extension layers were all created with id 0, so every one of them could be taken for the first layer by id-only checks (ooze-prevention standby temperature, cached layer ids). Renumber the support layers after inserting them.
2026-09-14 17:27:33 +08:00
Hanif Koh cb5b489e90 Invalidate Only G-code Export for Belt Output Options
gcode_back_transform, first_layer_plane* and belt_printer_infinite_y fell through to invalidate_all_steps(), which re-ran tool ordering, skirt/brim and G-code export on toggles that only affect G-code export.
2026-09-14 17:27:33 +08:00
Hanif Koh 19a085206c Print Belt Brim Aprons in Each Object's Brim Filament
Apron-only layers printed every band with the first tool, so objects with different brim filaments at the same apron Z shared one filament. Emit each brim filament's bands with its own toolchange.
2026-09-14 17:27:33 +08:00
Hanif Koh 708212a306 Share One Belt Brim Band Loop Between Apron-Only and Ordinary Layers
The ordinary-layer path kept its own copy of the apron band loop. Give emit_belt_brim_bands() an optional brim filament filter and call it from the per-extruder lambda; without a filter it still prints every band, so apron-only layers are unchanged.
2026-09-14 17:27:33 +08:00
Hanif Koh 3b302b4666 Derive Belt Support Tilt From Slicing Rotation in Print::apply
build_plate_tilt_x/y was synced from belt_slice_rotation* only by the printer Tab, so CLI or 3MF edits of the rotation left the support tilt stale.
2026-09-14 17:27:32 +08:00
Hanif Koh 4a7311bf01 Rebuild the Brim Type Combobox Only When Its Entries Change
toggle_options() now runs on every value change and mode switch; rebuild the
brim_type choices only when the leading-edge entry has to be added or removed.
2026-09-14 17:27:32 +08:00
Hanif Koh f2a11928f6 Read the Belt Tilt Only from the Belt G-code Header
Every printer's config block lists belt_slice_rotation_angle (default 45), so the processor marked all G-code as belt G-code: imported flat G-code got the belt view on a belt printer, and the belt-only Z handling in the processor ran for non-belt prints whose config block precedes the body. Take the angle only from outside the config block, where only the belt header writes it.
2026-09-14 17:27:32 +08:00
Hanif Koh 4ed56954e8 Limit Build Plate Tilt Range Below 90 Degrees
A 90 degree tilt has no finite gravity drift per layer, so the option range
now stops at 89 degrees, matching the cap applied by the support generators.
2026-09-14 17:27:32 +08:00
Hanif Koh 6e33f3f5dd Share and Clamp the Build Plate Tilt Shift in Support Generators
The three support generators each computed lh * tan(tilt), which overflows
coord_t at 90 degrees and flips sign beyond it (belt sync can write up to
180). One helper now returns the tilt slope with the tilt capped at 89 degrees.
2026-09-14 17:27:32 +08:00
Hanif Koh 5092831007 Apply the Belt Slicing Transform to Painted Supports and Seams
Painted support/seam facets, support volumes, seam occlusion, MMU and fuzzy skin painting (top/bottom
and side facets) and the adaptive infill octree used trafo_centered(), or trafo() with a centre-offset
shift, while the layers were sliced with the belt rotation, remap and Z lift; they now share
PrintObject::trafo_sliced().
2026-09-14 17:27:32 +08:00
Hanif Koh 9cca3093ee Keep the Plate Offset When Swapping in the Belt Writer
The belt writer replaced the plate-offset-carrying writer mid-export, so belt G-code for any plate but the first kept the plate origin and long-travel clipping used the wrong frame. GCode now remembers the offset and hands it to the new writer, and the writer's first-layer probes use the plate-local point it emits.
2026-09-14 16:41:40 +08:00
Hanif Koh 6873267a9c Remove Plate Tilt Keys from Per-Object Settings Tables
build_plate_tilt_x/y are printer-preset keys; listing them in the per-object
frequent-settings and object-table bundles stored ignored values in object
configs and crashed the object table on the process config lookup.
2026-09-14 16:41:40 +08:00
Hanif Koh 8e330f951a Merge Main into Belt Printer
Merge origin/main (00429da739) into belt-printer.

Conflicts resolved:
- src/CMakeLists.txt: keep both wxInspector workarounds.
- GCodeProcessor.cpp: keep the belt compare_pos / z_for_height lines.
- PrintObjectSlice.cpp: the belt bbox-Z guard also covers main's
  printable_region_ids bookkeeping.
- TreeSupport.cpp: the belt-floor check runs before main's PendingNode
  queueing.
- Tab.hpp: keep the belt fields, drop the removed upload description
  fields.
- tests/libslic3r/CMakeLists.txt: keep both test files.

Also included:
- eSUN PLA belt presets declare their own filament_id (OFkrxQC4) and
  scripts/filament_id_snapshot.json is regenerated, as main's filament_id
  check requires.
- Custom.json version bumped to 02.04.00.05 so the belt entries reach
  existing installs.
- Fix the ambiguous WithinRel call in the belt apron width test, which
  otherwise breaks the fff_print build.
2026-09-14 16:33:08 +08:00
Joseph Robertson c96945490b Belt Printer Sept 1 Rebase (#15526)
Also a bunch of bug fixes, thanks to the Baby Belt community for finding
issues!
2026-09-03 13:35:23 -05:00
harrierpigeon e5d4ad2aa7 Merge remote-tracking branch 'upstream/main' into haryr/aug25-rebase
# Conflicts:
#	src/libslic3r/Support/TreeSupport.cpp
2026-08-30 23:31:48 -05:00
harrierpigeonandClaude Opus 5 4fab8d0b39 fix: adapt belt sub-layer group emission to upstream m_writer unique_ptr
Upstream changed GCode::m_writer from a value to std::unique_ptr<GCodeWriter>;
the belt mixed_sub_layer_groups path still used value syntax and did not compile.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012ChxXYc6Dp46qAN9c2rQCe
2026-08-30 23:31:21 -05:00
harrierpigeon e341a9b84e Merge remote-tracking branch 'upstream/main' into haryr/aug25-rebase
# Conflicts:
#	src/libslic3r/GCode/ToolOrdering.cpp
#	src/libslic3r/Print.cpp
#	src/libslic3r/PrintApply.cpp
#	src/libslic3r/PrintConfig.cpp
#	src/slic3r/GUI/Tab.cpp
2026-08-30 23:30:51 -05:00
harrierpigeon a7bc054974 docs: authorize private build notifications 2026-08-25 10:27:21 -05:00
harrierpigeon 30351d40e1 tests: adapt belt brim coverage to upstream validation 2026-08-25 10:27:08 -05:00
harrierpigeon d289478618 Merge remote-tracking branch 'upstream/main' into haryr/aug25-rebase
# Conflicts:
#	resources/profiles/Custom.json
#	src/libslic3r/Brim.cpp
#	src/libslic3r/GCode.cpp
#	src/libslic3r/GCode.hpp
#	src/libslic3r/Preset.cpp
#	src/slic3r/GUI/3DScene.cpp
#	src/slic3r/GUI/ConfigManipulation.cpp
#	src/slic3r/GUI/GLCanvas3D.cpp
#	src/slic3r/GUI/Plater.cpp
2026-08-25 06:50:46 -05:00
Joseph Robertson 306e379a2a Multicolor Belt Support & various bug fixes (#15361)
# Description
lots of small bugfixes, and multicolor belt support.
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-24 23:23:47 -05:00
harrierpigeon 3d11b60e71 Harden belt purge tower replanning 2026-08-08 20:14:52 -05:00
Joseph Robertson e8597fe942 Merge pull request #61 from HarrierPigeon/belt/purgeTower
Add Purge Tower and Finalize Multicolor Support
2026-08-08 18:59:00 -05:00
harrierpigeon 99ee8893cd Fix belt purge tower activation and placement safety 2026-08-08 17:14:26 -05:00
harrierpigeon ee3e014f02 allow belt purge to skip unnecessary purge volume 2026-08-08 16:35:55 -05:00
harrierpigeon 3d270c2aa7 workable belt purge, via N-1 individual "purge objects" 2026-08-08 16:35:55 -05:00
harrierpigeon 5ea6ccc56a cleanup, early purge tower stop if no longer necessary 2026-08-08 16:35:55 -05:00
harrierpigeon bcfb09481c pull purge tower into its own files, make purge tower semi-transparent like other purge towers 2026-08-08 16:35:55 -05:00
harrierpigeon c80f1ab312 cancel top of purge tower early if no extra parts to print 2026-08-08 16:35:55 -05:00
harrierpigeon 131b61b726 auto purge tower height calculation works 2026-08-08 16:35:55 -05:00
harrierpigeon d367bcef92 extra height compensation 2026-08-08 16:35:55 -05:00
harrierpigeon 79c93733d3 purge tower additional compensation 2026-08-08 16:35:55 -05:00
harrierpigeon 7cc50d750c automated placement works 2026-08-08 16:35:55 -05:00
harrierpigeon 62d8f22f52 purge tower still centered on X max 2026-08-08 16:35:55 -05:00
harrierpigeon 60e9ee26c9 strategy incremental 2 2026-08-08 16:35:55 -05:00
harrierpigeon 854dae8dd2 strategy incremental 2026-08-08 16:35:54 -05:00
harrierpigeon ec4e9717d3 Part Two: Functional Results 2026-08-08 16:35:54 -05:00
harrierpigeon 88726d76e8 Purge tower part 1 2026-08-08 16:35:54 -05:00
Joseph Robertson 39b087d6ea fix non 45 degree slicing methods (#15181)
# Description
During the UI/UX improvements about a month ago, I got the transforms
wrong, and slicing at anything other than a 45 degree angle was
affected.

Validated on a baby belt pro at 30 & 45 degrees.


[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-08 12:37:17 -05:00
harrierpigeon 8b2e28817d fix non 45 degree slicing methods after regression created while cleaning up UI 2026-08-08 12:33:41 -05:00
Joseph Robertson ac9b5433b7 Belt printer: regression fixes + Belt Printer Brims (#15155) fixes (#15156)
## Summary

Fixes for the `belt-printer` branch ahead of upstreaming, in two groups
(10 commits). Targets `belt-printer` (not `main`) since group 2 fixes
the not-yet-merged Belt Printer Brims feature.

Every fix keeps non-belt (and brim-disabled) output unchanged; belt-only
behavior is corrected. All changed translation units and the two test
files were type-checked (`-fsyntax-only`); a full build + `ctest` still
needs to run in an environment with current deps.

## Group 1 — pre-existing belt-printer regressions

- **[HIGH] BuildVolume belt state not reset when leaving belt mode** —
toggling belt off (or switching belt→normal with matching bed geometry)
left the `BuildVolume` with `m_is_belt_printer=true` and inflated Y
bounds, so out-of-bounds objects were treated as printable on a normal
printer.
- **[HIGH] `GCodeProcessorResult::reset()` didn't clear belt fields**
(`belt_tilt_angle`, `belt_z_origin`, `preslice_remap_*`) — a reused
result corrupted a normal print's start-gcode preview Z.
- **[LOW-MED] `TreeSupport::drop_nodes`** — restored the single critical
section around node invalidation (the two `valid=false` writes had been
moved outside the mutex on the shared tree-support path); removed an
unused local.
- **[LOW] Support overhang hot paths** — avoid unconditional lower-layer
polygon copies when there is no build-plate tilt (`SupportMaterial`,
`TreeSupport3D`); untilted output matches upstream exactly.
- **[LOW] Render loop** — hoisted the frame-invariant slope
`up_direction`/`normal_z` (and their per-volume config lookup) out of
the per-volume loop.
- **[LOW] FDM-support "select by angle"** — restored the exact upstream
threshold when the build plate is untilted (the generalized form
differed for non-uniformly-scaled objects); tilted-gravity form kept
only under tilt.
- **[LOW] Printer tab tilt sync** — only clears the belt-derived
`build_plate_tilt` on a genuine in-place belt→off toggle (tracked,
seeded on preset load), no longer wiping a manually-set tilt.
- **[LOW / opt-in] Axis-remap G-code emission** — always emit full XYZ
under an active `gcode_remap_*`, apply the remap on all base
`travel_to_xyz` destinations, fall back to a linear lift for spiral/arc
under remap, sync `set_axis_remap` each export; fixed belt first-layer
travel speed. Identity/default output unchanged.

## Group 2 — Belt Printer Brims (#15155) fixes

- **[CRITICAL] Dropped brim at first belt contact** — a coincident brim
band on an object layer with no extrusion pass (zero-extrusion leading
slice, or belt support below the Z=0 floor with no coinciding object
extrusion) was never emitted. Now each coincident band's brim filament
is registered in `ToolOrdering`, each band is emitted exactly once in
its brim-filament pass, and an end-of-layer orphan sweep emits any band
whose object layer produced no visit.
- **[Multi-extruder] Wrong tool / double emission** — apron and
coincident bands now print once, in the correct brim-filament pass,
brim-first (were previously emitted with the active tool and could
double-emit per filament plan). Single-extruder / single-object output
is byte-identical apart from the previously-dropped bands now printing.
- **Inner-only predicate** — `has_belt_brim()` no longer reports a brim
(and no longer rejects the prime tower / spiral vase) for `inner_only` +
`brim_width=0` + leading/extra > 0, which produces no inner geometry;
mirrored in `wants_brim`.
- **ToolOrdering raft-gap comment** — clarified why raft-gap synthesis
is suppressed for all belt printers (belt has no rafts;
sub-object-bottom layers are apron / belt-support-below-floor /
lead-in). No behavior change.
- **Tests** — deterministic coverage: brim present at first belt contact
(support on/off), brim-before-perimeters once (no drop/double), single-
and multi-extruder tool selection with no doubling, multi-object
per-filament ordering, inner-only+leading-only not rejecting prime
tower/spiral, and inner-ring / leading-edge-only geometry units.

## Testing

- `-fsyntax-only` passes for all 16 changed source TUs + 2 test TUs
against this branch.
- Please run the full build and `ctest -R 'SkirtBrim|BeltBrim'` before
merging.

## Known follow-up (out of scope)

`extrude_arc_to_xy` does not remap its I-J center, so arc-fitted
*extrusions* under standalone axis-remap would be geometrically wrong —
a separate fix if that combination is supported.

Opened as **draft**.
2026-08-06 17:38:11 -05:00
harrierpigeon a453cb1eba tests: cover belt-brim first-contact emission, tool selection, inner/leading-edge, and predicate (E)
Deterministic tests for: coincident brim at first belt contact not dropped
(C), single- and multi-extruder brim tool selection with no doubling (B),
multi-object apron ordering, inner-only+leading-only not rejecting prime
tower/spiral (D), and inner/holed + leading-edge-only geometry.
2026-08-06 15:40:04 -05:00
harrierpigeon 1bd3404c03 Fix belt brim emission: dropped first-contact bands, tool selection, inner-only predicate (A,B,C,D)
- Emit coincident belt_brim_by_layer bands even when the leading object layer
  has no InstanceVisit (zero-extrusion lead-in / no coinciding support), so the
  brim at first belt contact is no longer dropped.
- Register each coincident band's brim filament in ToolOrdering and emit each
  band exactly once, in its brim-filament pass; emit ordinary-layer aprons in
  the brim pass before object extrusion (correct tool, brim-first) instead of
  with whatever tool was active.
- has_belt_brim(): inner-only brims need brim_width>0 (leading/extra produce no
  inner geometry), fixing spurious prime-tower/spiral rejection; mirror in
  wants_brim. Single-extruder/single-object output is unchanged except
  previously-dropped bands now print.
2026-08-06 15:40:04 -05:00
harrierpigeon c1a90fc451 Fix: correct axis-remap G-code emission and belt first-layer travel speed (B2, B3)
- BeltGCodeWriter::travel_to_xyz final branch used config.travel_speed
  instead of the computed first-layer-aware travel_speed.
- extrude_to_xyz decided emit_xyz vs emit_xy from pre-remap Z; emit full
  XYZ whenever an axis remap is active so remapped machine-Z is never
  dropped.
- base travel_to_xyz now applies apply_axis_remap() on all emitted
  destinations (standalone remap on non-belt printers was unremapped).
- spiral/arc travels fall back to normal linear lift under active remap
  (endpoint-only remap can't preserve arc plane/I-J).
- set_axis_remap() is now synced unconditionally each export to avoid a
  reused writer retaining a stale non-identity mapping.
2026-08-06 14:26:45 -05:00
harrierpigeon 7fc86db5f0 Fix: only clear belt-derived build_plate_tilt on genuine belt->off transition (R8)
update_fff() zeroed any build_plate_tilt matching the dormant belt-derived
tilt (default X/45) within 0.01, wiping a legitimate manual tilt on a
non-belt tilted-bed printer. Track the belt->non-belt transition and the
exact values belt-sync wrote, clearing only those on an in-place toggle;
reset tracking on preset load so preset switches never wipe tilt.
2026-08-06 14:26:45 -05:00
harrierpigeon 6fd2de76e6 Fix: preserve upstream select-by-angle behavior when build plate is untilted (R7)
select_facets_by_angle replaced upstream's limit.dot(down) threshold with
cos(threshold), changing facet selection for non-uniformly-scaled/mirror
objects on ALL printers. Restore the exact upstream computation when no
build-plate tilt is active; keep the tilted-gravity form only under tilt.
2026-08-06 14:26:45 -05:00
harrierpigeon f8fe5a07cd Perf: hoist frame-invariant slope up_direction/normal_z out of the per-volume render loop (R6)
Belt slope-shading changes recomputed up_direction (with a printer-preset
config lookup) and normal_z per volume; both are frame-invariant. Compute
once before the to_render loop and reuse the already-hoisted
support_normal_z. Uniforms are still set per volume; visuals unchanged.
2026-08-06 14:26:45 -05:00
harrierpigeon 049612022a Perf: avoid unconditional lower-layer polygon copies in support overhang paths (R4, R5)
SupportMaterial::detect_overhangs copied lower_layer_polygons per region
even without build-plate tilt; hoist the tilted copy out of the region
loop and use the original polygons directly when untilted. TreeSupport3D
flattened lslices_extrudable to Polygons unconditionally; restore the
upstream ExPolygons offset on the untilted path.
2026-08-06 14:26:45 -05:00
harrierpigeon 10810908a9 Fix: restore atomic node invalidation in TreeSupport::drop_nodes + drop unused var (R3, R9)
The 2-node merge moved the two valid=false writes outside the mutex that
upstream held together with the contact_nodes push_back; restore a single
critical section per branch (belt branch also guards to_buildplate).
Remove an unused top_interface_layers local in drop_nodes.
2026-08-06 14:26:45 -05:00
harrierpigeon 0d92180325 Fix: clear belt fields in GCodeProcessorResult::reset() (R2)
reset() cleared the sibling machine_frame_transform_active but not
belt_tilt_angle/belt_z_origin/preslice_remap_*; a reused result carried
stale belt metadata into a subsequent normal print, flipping the store_z
branch and corrupting start-gcode preview Z for non-belt prints.
2026-08-06 14:26:45 -05:00
harrierpigeon 88d5e9e442 Fix: reset BuildVolume belt state when leaving belt mode (R1)
Non-belt branch of set_bed_shape reset only the 3DBed renderer, not the
BuildVolume; Bed3D::set_shape early-returns on unchanged bed, so a
belt->normal switch or in-place belt toggle-off left the BuildVolume with
m_is_belt_printer=true and inflated Y bounds -> out-of-bounds objects
treated as printable on a normal printer.
2026-08-06 14:26:45 -05:00
Joseph Robertson c51d19f6b2 Add Belt Printer Brims (#15155)
# Description

This adds brim support to belt printers.

Added a new belt printer specific mode, Leading Edge Only and two new
belt-specific parameters, Leading Edge Brim Length, which increases the
number of brim lines on the side of the part printed first, and Extra
Brim Width, which increases the width of brims along the X axis. Because
belt printer first layers are effectively a single line, getting them to
stick properly can be a pain. This PR aims to help alleviate that, or at
least give more options for control.


<img width="1849" height="1043" alt="Screenshot from 2026-08-06
12-20-21"
src="https://github.com/user-attachments/assets/f963ed8e-53e7-48f8-a495-123cb9ae27f7"
/>



[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-06 14:18:21 -05:00
harrierpigeon 849e6493f8 Belt brim: offer "Leading edge only" only on belt printers
"Leading edge only" describes where a part meets a moving belt, so it has no
meaning on a fixed bed and should not clutter the Brim type dropdown there.

Filtered the same way support_style and wipe_tower_wall_type already are a few
lines above in TabPrint::toggle_options(): the field holds its own copy of the
option definition, and Choice maps the combobox selection straight onto that
copy's enum_values, so rewriting the values, the labels and the combobox items
together keeps the mapping correct.

The entry is kept when it is the current value, so opening a project that uses
it on a non-belt printer cannot leave the control displaying an option it does
not offer - which would silently rewrite the setting on the next edit.
Print::validate() already warns that it prints as an ordinary outer brim there.

Matches the scope of the existing precedents: the per-object override panel is
not filtered.
2026-08-06 03:54:19 -05:00
harrierpigeon b1905ebc20 Belt brim: fixes from review
Six issues found by reviewing the previous commit against belt-printer, two of
them release-blocking.

Data race (high).  Print::process() runs generate_support_material() for all
objects in a tbb::parallel_for, and make_belt_brim() runs at its tail, but
belt_brim_obstacles() read every OTHER object's support_layers() - which a
concurrent task may be inside clear_support_layers() deleting.  That is a
use-after-free, and even when it survives, the obstacle set depends on which
object finishes first.  Only this object's own supports are consulted now; they
are complete at that point.  Foreign objects still contribute their slices,
which are finished and immutable before the support phase.

Apron bands dropped (high), two separate causes.  An apron band prints below
its own object's first layer, but another object can already be printing at
that print_z, in which case process_layer() takes the ordinary path and never
emitted the band - the emission is now shared by both paths.  Separately, a
band whose print_z matched a support layer of the SAME object was overwritten
in the print-wide merge, which keeps one record per object per z and could not
detect the collision because LayerToPrint::layer() is null for a band.  The
per-object pairing loop is now a three-way merge over object, support and apron
streams, so each object contributes at most one record per z.

Multi-instance was far too strict (medium).  It refused belt brim for every
multi-instance object, killing plain brim width and inner brim too, and only
warned when a leading length was set.  Only movement ALONG the belt changes an
instance's belt-floor Z, so copies side by side ACROSS the belt share one set of
bands perfectly well; belt_brim_instances_compatible() now tests just that, and
the warning fires whenever the brim is actually suppressed.

Apron layer bookkeeping (medium).  Apron layers count toward m_layer_count and
advance m_layer_index, but emitted no Z/height tags, left m_last_layer_z,
m_max_layer_z and m_last_height stale - so the first object layer computed its
height against a pre-apron Z - and skipped before_layer_change_gcode and
layer_change_gcode entirely.  All of that now matches the ordinary path.

Obstacle cost (low).  belt_brim_obstacles() ran a full-plate union per band.
A bounding-box pre-filter drops non-overlapping objects before materialising any
polygon, and the union is skipped for trivial inputs.

Deliberately unchanged: every apron band still reports cooling layer_id 0.
CoolingBuffer uses it for the initial_layer_fan_speed override and the
close_fan_the_first_x_layers gate, and every band lies on the belt plane itself,
so it is all first-layer material by the only definition that means anything on
a belt.  Numbering the bands would ramp the fan up while still printing on the
belt.  Now documented at the assignment rather than left implicit.
2026-08-06 01:08:44 -05:00
harrierpigeon 55b4dca9bc Belt printers: brim laid onto the tilted belt, with a leading apron
A belt printer slices in a rotated frame, so the belt surface is a tilted
plane rather than the Z=0 bed plane.  Each slicing layer touches the belt
only along a narrow strip at its leading edge - about 0.2mm at 45 degrees -
so a part's first layer is really a first line, with almost no contact patch
to hold it down while the belt drags it forward.  Brim was hard-disabled on
belt printers, leaving no remedy at all.

Generate the brim on the belt plane instead.  The object's belt footprint is
the union over layers of each slice clipped to that layer's contact band; the
brim is offset from it in a "flattened" frame where the shear axis is
stretched by 1/cos(tilt), so ordinary Clipper offsets measure true on-belt
distance.  It is emitted as cross-belt lines, one per layer band, anchored to
a fixed fraction of the band so every line shares a nozzle-to-belt clearance
and therefore comes out the same width; flow is matched to the resulting band
pitch, keeping the sheet uniform and gap-free.

Three new controls, all belt-only:

  * Leading brim length - extends the brim ahead of the part along the belt,
    on every downhill-facing edge of its contact area.  This apron necessarily
    prints BELOW the object's first layer, since layer 0 is the part's leading
    contact, so it needs brim-only bands of its own.
  * Extra brim width - widens the brim sideways across the belt only.
  * Brim type "Leading edge only" - brim at the part's first belt contact and
    nothing after it.  Appended last in BrimType so no existing value shifts;
    degrades to an outer brim off belt printers, with a warning.

The apron bands are lightweight records rather than a Layer subclass, so no
fabricated Layer::id() can leak into initial-layer temperature selection, the
spiral vase probe, cooling or gradual interpolation.  They are generated in
posSupportMaterial because their print_z values must exist before ToolOrdering
is built at psWipeTower, and they are emitted from a short dedicated branch in
process_layer that runs before any layer pointer is dereferenced.

The footprint is closed before offsetting outwards: a belt contact patch is
often a broken-up strip, and the merged offset rings of two islands closer
than 2 x brim_width would otherwise fill the space between them - space that
lies under the part.

Also fixes a pre-existing bug where PrintObject::get_first_layer_bbox()
overwrote a valid bbox with an unassigned one on any belt printer with a brim
configured, because has_brim() was true while make_brim() returned early.

Belt brim is refused alongside the prime tower and spiral vase, and requires
one instance per PrintObject - translating an instance along the belt axis
changes its physical belt-floor Z.  Untilted belt printers are unchanged: they
still get no brim, since the plate brim is emitted out of skirt_brim_groups(),
which _make_skirt() never builds for a belt printer.
2026-08-06 01:08:44 -05:00
Joseph Robertson 386364f84b belt profiles: fix belt printer CI failures (slice check + setting_id) (#15127)
The belt-printer branch is failing two profile gates. Both stem from the
three belt-only vendors (Custom's generic belt printer, IdeaFormer,
Printcepts) not existing upstream, so upstream maintenance passed them
by.

Slice check: 4 of 1015 printers failed - Custom's MyBeltPrinter 0.2/0.4/
0.6/0.8 nozzle all fell back to "Default Setting". No process profile in
the Custom vendor listed any MyBeltPrinter in compatible_printers, and
Custom's fdm_belt_common pointed default_print_profile at "0.20mm
Standard @System", which does not exist in that vendor's index, so the
generic belt printer had no usable process at all. This gap dates to
when MyBeltPrinter was added (2026-04-07); it only started failing now
because the slice-check job is newer than that.

Adds two process profiles modelled on the sibling @MyKlipper ones:
  - 0.20mm Standard @MyBeltPrinter - 0.4/0.6/0.8 nozzles
  - 0.12mm Fine @MyBeltPrinter     - 0.2/0.4 nozzles
The split is forced by hardware: the 0.2 nozzle preset caps
max_layer_height at 0.16, so a single 0.20mm profile cannot legally
cover
it. fdm_belt_common now defaults to the standard profile and the 0.2
nozzle preset overrides to the fine one.

setting_id: 14 files failed the rules introduced in #14432. That
migration renumbered 7425 files across 61 vendors but skipped these
three, leaving BabyBelt Pro, IdeaFormer IR3 V2 and MyBeltPrinter
squatting the "G*" id space reserved for Bambu (GMPC0BBP01, GMIF001,
GM_BELT_00x) and four instantiated filament/process presets carrying no
setting_id at all. Regenerated with
scripts/assign_vendor_setting_ids.py.

Also repoints the identical dangling "0.20mm Standard @System" in
Printcepts' and IdeaFormer's fdm_belt_common at their own real process
profiles. That is a no-op today because both concrete printers override
it, but it is the same landmine that took out MyBeltPrinter.

Vendor index versions bumped so check_installed_vendor_profiles() will
re-install the corrected profiles over an existing install.

Note: changing a shipped preset's setting_id can orphan user presets
that reference it as base_id. #14432 accepted that tradeoff for 61
vendors; this keeps these three consistent with the rest.

Verified: orca_extra_profile_check.py reports 0 errors across 66 vendors
(was 14 files with errors), and OrcaSlicer_profile_validator -s slices
all 1015 printer presets successfully (was 4 failures).


[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-04 17:16:14 -05:00
harrierpigeon 725df64108 profiles: fix belt printer CI failures (slice check + setting_id)
The belt-printer branch is failing two profile gates. Both stem from the
three belt-only vendors (Custom's generic belt printer, IdeaFormer,
Printcepts) not existing upstream, so upstream maintenance passed them by.

Slice check: 4 of 1015 printers failed - Custom's MyBeltPrinter 0.2/0.4/
0.6/0.8 nozzle all fell back to "Default Setting". No process profile in
the Custom vendor listed any MyBeltPrinter in compatible_printers, and
Custom's fdm_belt_common pointed default_print_profile at
"0.20mm Standard @System", which does not exist in that vendor's index,
so the generic belt printer had no usable process at all. This gap dates
to when MyBeltPrinter was added (2026-04-07); it only started failing now
because the slice-check job is newer than that.

Adds two process profiles modelled on the sibling @MyKlipper ones:
  - 0.20mm Standard @MyBeltPrinter - 0.4/0.6/0.8 nozzles
  - 0.12mm Fine @MyBeltPrinter     - 0.2/0.4 nozzles
The split is forced by hardware: the 0.2 nozzle preset caps
max_layer_height at 0.16, so a single 0.20mm profile cannot legally cover
it. fdm_belt_common now defaults to the standard profile and the 0.2
nozzle preset overrides to the fine one.

setting_id: 14 files failed the rules introduced in #14432. That
migration renumbered 7425 files across 61 vendors but skipped these three,
leaving BabyBelt Pro, IdeaFormer IR3 V2 and MyBeltPrinter squatting the
"G*" id space reserved for Bambu (GMPC0BBP01, GMIF001, GM_BELT_00x) and
four instantiated filament/process presets carrying no setting_id at all.
Regenerated with scripts/assign_vendor_setting_ids.py.

Also repoints the identical dangling "0.20mm Standard @System" in
Printcepts' and IdeaFormer's fdm_belt_common at their own real process
profiles. That is a no-op today because both concrete printers override
it, but it is the same landmine that took out MyBeltPrinter.

Vendor index versions bumped so check_installed_vendor_profiles() will
re-install the corrected profiles over an existing install.

Note: changing a shipped preset's setting_id can orphan user presets that
reference it as base_id. #14432 accepted that tradeoff for 61 vendors;
this keeps these three consistent with the rest.

Verified: orca_extra_profile_check.py reports 0 errors across 66 vendors
(was 14 files with errors), and OrcaSlicer_profile_validator -s slices all
1015 printer presets successfully (was 4 failures).
2026-08-04 17:15:20 -05:00
Joseph Robertson c5bf238859 Update Belt-Printer Branch (#15087)
gets belt-printer on top of upstream again.
2026-08-03 02:09:41 -05:00
harrierpigeon f563df04f6 belt: default first_layer_plane to Auto, not BeltAffine
BeltAffine activates the FirstLayerPlane evaluator unconditionally, so on a
non-belt printer on_first_layer(point) stopped agreeing with the legacy
slicing-layer-0 test. Every per-path first-layer call site in _extrude then
took the non-first-layer branch, and first-layer speeds were skipped: brim
came out at the volumetric fallback (24.6 mm/s) instead of initial_layer_speed
(10 mm/s). This is the shared speed path, so it affected all printers on this
branch, not just belt ones.

Auto resolves to BeltAffine only when belt_printer is set with a non-zero
slicing rotation, and to XY (evaluator inactive, legacy behaviour) otherwise --
exactly what the option's own description already promised.

Caught by "Brim uses first layer speed" (upstream #14616), which arrived with
the upstream merge; the bad default dates back to a9bae54f20 (#30). Verified
against a pristine upstream/main build, which passes the same test.

tests/fff_print: 100/100 test cases, 1085 assertions (was 99/100).
Both belt regression tests still pass, confirming Auto still resolves to
BeltAffine for belt printers.

Note: this changes a config default. Projects and profiles that stored
first_layer_plane explicitly are unaffected; those relying on the default will
now get correct first-layer speeds on non-belt printers, so their G-code
changes accordingly.
2026-08-03 01:52:43 -05:00
harrierpigeon 613dad92a1 Add belt-printer regression test for prepare-stage move Z
Processes a minimal belt start sequence through GCodeProcessor::process_buffer
and asserts the move preceding the first extrusion keeps its real Z, so it can
no longer back-transform to model Y~=0 and produce the phantom extrusion line.

Belt printers are non-Bambu, so the processor uses the compatible reserved
tags ("TYPE:"); the test sets s_IsBBLPrinter=false (saved/restored via an RAII
guard) to mirror the real printer. Proven to fail without the fix (the
prepare-stage move's Z is pinned to the first-layer height, 0 here) and pass
with it.
2026-08-03 01:18:55 -05:00
harrierpigeon a83cd8aa29 Fix belt printer phantom extrusion line from Y=0 in preview
On a belt printer the sliced preview drew a stray extrusion-colored line
from Y~=0 to the model, rendered in the first extrusion role's color. It is
not a travel and does not occur on non-belt printers.

GCodeProcessor::store_move_vertex pins a move's stored Z to the first-layer
height during the start-G-code "prepare" stage. That is a harmless cosmetic
tidy-up on a normal printer, but on a belt printer the designed-view
back-transform couples machine Z into the rendered model Y (the belt tilt
mixes the height and belt-feed axes). Pinning Z back-transforms the last
prepare-stage move (the unretract before the first extrusion) to model
Y ~= 0, and libvgcode then draws a phantom extrusion segment from Y ~= 0 to
the first real toolpath.

Keep the real Z for belt printers (gated on belt_tilt_angle, parsed from the
G-code header before the body) so prepare-stage moves back-transform
correctly. Non-belt processing is byte-identical. The emitted G-code was
already correct; this is a preview-geometry fix.
2026-08-03 01:09:23 -05:00
harrierpigeon 02e313a115 Add belt-printer regression test for start-of-print gantry move
Locks in the fix from the previous commit. A fresh BeltGCodeWriter has an
unestablished planar position (is_current_position_clear() == false) and its
m_pos.xy is the origin (0,0). With a pending NormalLift z-hop, travel_to_xyz
used to lift in place via _travel_to_z(), which in belt mode shears the origin
into a machine Y ~= the layer Z — a move far up the gantry.

The test configures an X-tilt 45 deg belt transform, defers a z-hop via
lazy_lift, travels to a near-belt first point (transformed gantry Y ~= 1mm),
and asserts no emitted move has Y anywhere near the layer Z. Verified to fail
without the fix (max emitted Y = 100.0 vs the destination's ~1.0) and pass with
it.
2026-08-03 01:09:11 -05:00
harrierpigeon 04554abae6 Fix belt printer illegal gantry move at print start
On a belt printer the first travel of the print emitted a bogus move to
the bed corner with the nozzle far up the gantry, e.g.
  G1 X95 Y168.19 Z237.857 F12000
right after the first "; printing object" line. Y168 (≈ the layer Z)
is out of the gantry's range.

Root cause: the layer-change z-hop is deferred via lazy_lift and consumed
by the first BeltGCodeWriter::travel_to_xyz, whose NormalLift branch does a
separate lift-in-place via _travel_to_z(target.z()). On a normal printer
_travel_to_z emits a Z-only move, but in belt mode Z is coupled to Y/X, so
_travel_to_z re-emits the current m_pos through the belt shear. At print
start (and after custom gcode) m_pos.xy is still the uninitialised origin
(0,0), which the back-transform + axis-remap shear into machine
(X=bed_max, Y=layer_z) — the illegal move.

Guard the NormalLift branch on is_current_position_clear(), matching the
SlopeLift branch directly above it which already does so. When the position
isn't established there is nothing to lift over, and the xy_z_move that
follows travels straight to the destination with full XYZ, establishing the
correct position. Bookkeeping is unaffected: in this path m_lifted stays 0,
so no spurious restore move is produced.

Verified by re-slicing the repro project: the start-of-print move is now
G1 X44.946 Y.621 Z237.857 (straight to the first object point), no move
touches the bed-max X edge, and the max Y over the whole file is 62.8mm
(printable_height 100).
2026-08-03 00:15:24 -05:00
HarrierPigeon 0342e06d87 last step in fixing the g-code stuff up 2026-08-02 22:13:34 -05:00
HarrierPigeon 79fd847ce3 fix pre-slice warnings 2026-08-02 22:12:46 -05:00
HarrierPigeon 8f6802fff8 step one: post-process analysis 2026-08-02 22:12:09 -05:00
harrierpigeon b61ba98183 belt: adapt BeltGCodeWriter to upstream's per-extruder speed options
Upstream retyped travel_speed and travel_speed_z to ConfigOptionFloatsNullable
and initial_layer_travel_speed to ConfigOptionFloatsOrPercentsNullable, so the
scalar .value / get_abs_value() accessors no longer compile. BeltGCodeWriter.cpp
is belt-only and merged without conflict, so this only surfaced at build time.

Index them the way the base GCodeWriter does -- .get_at(m_cached_extruder_idx)
and get_abs_value_at(..., m_cached_extruder_idx) -- keeping belt's per-point
first_layer_for_point test rather than the base class's m_is_first_layer.

m_cached_extruder_idx moves from private to the existing protected block that
already exposes writer state to subclasses, so the belt writer resolves the
per-extruder index identically to the base writer instead of guessing one.
2026-08-02 16:20:22 -05:00
harrierpigeon 175075fd08 Merge upstream/main into belt-printer
Brings the belt-printer work up to date with 591 upstream commits.

Conflict resolutions (12 files, 42 hunks):

- GCode.cpp: adopted upstream's per-filament/per-nozzle config refactor
  (get_filament_config_index, NOZZLE_CONFIG), the extracted
  generate_timelapse_gcode + farthest-point timelapse, and the
  ConfigOptionFloatsNullable calibration options. Re-applied the belt
  hooks on top: init_belt_writer / axis remap / FirstLayerPlane setup,
  on_set_origin, the belt-corrected calib_z for the volumetric speed
  tower, and path_on_first_layer (belt's per-path first-layer test) in
  place of upstream's layer-index on_first_layer() in the acceleration,
  jerk and overhang-detection paths. Swept upstream's new m_writer.
  uses to m_writer-> since belt holds the writer by unique_ptr.
- interpolate_value_across_layers: kept upstream's banded stepping and
  belt's object-Z-span ratio; dropped upstream's duplicate ratio decl.
- Plater.cpp: took upstream's guarded add_model(...) early-returns and
  the VFA vfa_layer_height plumbing; kept the belt temp-tower path,
  _calib_apply_belt_mode and belt_calib_flip_ringing_tower. Dropped the
  VFA "cut upper" block, superseded upstream by model scaling.
- Brim.cpp: upstream's ObjectInstanceID-keyed brimAreaMap, keeping the
  belt early-return.
- 3DScene.cpp: kept both the belt build-plate tilt up_direction and
  upstream's per-extruder printable-height shading.
- GCodeViewer.cpp: kept upstream's dim-previous-layers setup and belt's
  exemption from the same-result early return.
- TreeSupport.cpp: upstream's >= 0 roof-layer fix inside belt's
  belt-floor branch.
- calib.cpp / GCode.hpp / GCodeWriter.{cpp,hpp} / Print.hpp: upstream's
  additions adapted to belt's pointer-held writer and helpers.
- Custom.json: kept profile version 02.04.00.03 (belt) over upstream's
  02.04.00.01; both bumped from 02.04.00.00.

Building this tree needs the wxInspector dependency, which upstream
added in the interim (python3 and wxWidgets 3.3.2 were already present
in the shared deps prefix).
2026-08-02 16:09:27 -05:00
Joseph Robertson 5428a0715d update belt-printer (#14446)
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-06-26 23:02:49 -05:00
Joseph Robertson 75770321dd Update Belt-Printer (#14425) 2026-06-25 22:40:26 -05:00
Joseph Robertson c950c3fb6b Add BabyBelt Pro Profile, Courtesy of Rexit (#14424) 2026-06-25 22:39:12 -05:00
Joseph Robertson 2ca843a38e Belt Printing: Bugfix: Solid Organic Tree Base, Slim Tree Skirt, Renderer (#14395)
* fix tree support brim
* treesupport3d part 1: more diagnostic logging.  (todo once things are fixed: remove this / gate it properly)
* make area under Z=0 in rotated slice pipeline not solid
* fix solid Z=0 layer for belt printers
* fix renderer
* clean up logging
* final review pass
2026-06-24 22:01:29 -05:00
Joseph Robertson 0ef7c6d581 Belt Printing: Update (#14393)
# Description

<!--
> Please provide a summary of the changes made in this PR. Include
details such as:
  > * What issue does this PR address or fix?
  > * What new features or enhancements does this PR introduce?
> * Are there any breaking changes or dependencies that need to be
considered?
-->

# Screenshots/Recordings/Graphs

<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->

## Tests

<!--
> Please describe the tests that you have conducted to verify the
changes made in this PR.
-->

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-06-24 21:34:53 -05:00
Joseph Robertson 34b0d36cda Belt Printer Initial Push (#14385)
# Description

Initial push - documentation available at #12998 

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-06-24 09:42:40 -05:00
Joseph Robertson d619c7e19c Merge branch 'belt-printer' into belt/baseChanges 2026-06-24 09:42:25 -05:00
Joseph Robertson 31b44cb731 Merge pull request #66 from HarrierPigeon/belt/tommyb-rendererChanges
Clean up and implement @tommasobbianchi's belt renderer changes
2026-06-23 00:27:39 -05:00
harrierpigeon ddbee84e68 render the G-code preview upright (designed view) + toggle UI 2026-06-23 00:14:17 -05:00
Joseph Robertson bf6cce1f40 Merge pull request #45 from tommasobbianchi/feat/belt-gcode-cartesian-preview
belt: render the G-code preview upright (model/Cartesian space)
2026-06-22 19:59:27 -05:00
Joseph Robertson 8bdf0df00a Merge branch 'main' into belt/baseChanges 2026-06-22 19:36:17 -05:00
Joseph Robertson d6c9187c71 Merge branch 'main' into belt/baseChanges 2026-06-22 19:36:17 -05:00
Ian Bassi 0cdfb88357 Lang: Gettext update (#14361) 2026-06-22 20:16:55 -03:00
foXaCe 14cec7239b i18n(fr): translate strings added after the post-refactor sync (#14304) 2026-06-22 20:13:19 -03:00
Heiko LiebscherandClaude Opus 4.8 86c6a1a66f Improve German (de) translation (#14352)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 15:40:14 -03:00
SoftFever 07f08dfe40 bump version to 2.5.0-dev 2026-06-22 00:50:51 +08:00
Noisyfox a4fb5af9e1 Don't allow adding more colors for non-semm printers on obj import color remapping dialog (#14275) 2026-06-21 18:20:58 +08:00
Tommaso Bianchi 8593d66a39 belt: correct the designed-view preview's belt-Z origin and reject mis-mapped outliers
The Cartesian designed-view preview over-extended the toolpaths past the model
shell by a height-proportional amount (up to ~20mm tall parts), most visibly on
long multi-part prints; compact parts like a calibration cube looked fine.

Two coupled causes:
- Belt start G-code that primes with a Z advance and a 'G92 Z0' reset leaves a
  constant machine-Z origin in the GCodeProcessor, so move positions are stored as
  gcode_Z + origin. The linear back-transform mixes that constant with the
  gantry-Y term, leaving a per-move designed-Y error that min-corner anchoring
  cannot cancel when an elevated move (e.g. a bridge) happens to cancel it at the
  bbox minimum. Expose GCodeProcessorResult::belt_z_origin (the m_origin[Z] left by
  the start G-code) and subtract it before the back-transform.
- Elevated features (bridges/overhangs) are mis-mapped by the linear inverse to
  outside the model body; build the anchor bbox only from moves within model_bb +/-
  10mm, with a fallback to the full bbox when the clip would drop the bulk (object
  placed away from the belt entry) so the gross-offset case still anchors.

Preview-only; G-code output is unchanged.
2026-06-21 06:48:44 +02:00
Tommaso Bianchi 3fc3b8a8ae belt: anchor the designed-view G-code preview onto the model bounding box
The belt designed (upright) preview back-transforms the machine-frame G-code
into model space with the linear belt inverse. That inverse recovers the
print's shape and orientation, but not the per-object placement/lift
translation: the object's position on the belt, the BeltSliceStrategy min-Z
lift, and the centering pre-translate are applied OUTSIDE
build_forward_transform() (see PrintObjectSlice.cpp), so its linear inverse
cannot undo them. The result was a constant offset (~20 mm on the belt-advance
axis) of the toolpaths from the model shell, on every model.

Recover the missing translation generally — independent of the offset's exact
source or the axis remap — by anchoring the back-transformed object body
(extrusions on layer_id >= 1, i.e. excluding the layer-0 prime/skirt) onto the
upright model bounding box, the same space the shells render in, and folding
that translation into the belt inverse before converting to libvgcode.

Replaces the previous Y=0 anchoring in LibVGCodeWrapper, which pinned the
toolpaths to the belt entry rather than to the model and so left the offset in
place for any object not sitting at the origin.
2026-06-21 06:48:44 +02:00
Tommaso Bianchi 695a1f897a belt: render the G-code preview in model (Cartesian) space
On a belt printer the emitted G-code is in the machine frame (45-deg sheared,
axis-remapped, scaled), so the toolpath preview shows the print as a sheared
slab floating off the bed. Map each toolpath vertex back to model/Cartesian
space for the "designed" view.

The back-transform is the inverse of the full G-code forward pipeline
(BeltGCodeWriter::to_machine_coords):
  model = [BeltForward^-1 if !gcode_back_transform] . AxisRemap^-1 . MachineFrame^-1
built from config, so it handles any rotation / shear / scale / axis-remap
combination, not just plain 45-deg belt slicing. Computed in load_as_gcode()
from print.config() and applied per-vertex inside libvgcode::convert (display
position only; layer_id, times and the volumetric/flow math keep the raw
machine values, so the layer slider and stats are unaffected).

- Toggle with the existing "Show designed view" checkbox / hotkey B; off shows
  the raw machine-frame G-code (useful for debugging the transform itself).
  Defaults to on.
- Belt printers skip the same-result-id load cache so the upright view applies
  and the toggle takes effect even when the G-code is unchanged.
- The object extrusions (layer_id >= 1) are anchored to the belt entry to drop
  the constant machine-origin offset (start-G-code belt advance) that the linear
  back-transform alone does not capture; start-G-code prime lines are excluded
  so they don't steal the anchor.
2026-06-21 06:48:44 +02:00
Tommaso Bianchi 2d69f6e17c belt: expose MachineFrameTransform's composed matrix
Add a const accessor for the shear*scale transform so the G-code viewer can
build the machine->model back-transform for the upright belt preview.
2026-06-21 06:48:44 +02:00
Joseph Robertson 340ce575e2 Merge branch 'main' into belt/baseChanges 2026-06-20 15:56:59 -05:00
Joseph Robertson d795900fcf Merge pull request #64 from tommasobbianchi/feat/esun-pla-maxvolspeed-tuning
IdeaFormer IR3 V2: tune eSUN PLA white speed from HW max-vol-speed calibration
2026-06-18 09:42:19 -05:00
Joseph Robertson 9b1fb2217a Merge branch 'main' into belt/baseChanges 2026-06-18 09:41:14 -05:00
Tommaso BianchiandClaude Opus 4.8 ef6f65eacc IdeaFormer IR3 V2: tune eSUN PLA white speed from HW max-vol-speed calibration
Physical max-volumetric-speed test (belt #62 v4 asset) on the IR3 V2 with eSUN
PLA white: the wall stayed clean up to ~100 mm/s = ~20 mm3/s before
under-extrusion. The shipped cap of 10 mm3/s was ~half the real ceiling and
was silently throttling infill.

- eSUN PLA @IdeaFormer IR3 V2: filament_max_volumetric_speed 10 -> 20
- 0.20mm Standard @IdeaFormer IR3 V2: sparse_infill_speed 200 (~18 mm3/s at the
  new cap, no longer throttled). Outer wall (45), PA (0.12), accel (1000)
  unchanged — accuracy preserved.
- IdeaFormer.json version bump for profile-cache refresh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 07:13:59 +02:00
Joseph Robertson 0add523e1b Merge branch 'main' into belt/baseChanges 2026-06-13 08:23:47 -05:00
Joseph Robertson 375036f330 Merge pull request #44 from tommasobbianchi/feat/belt-skip-height-check
belt: don't reject long objects (skip build-height check on belt printers)
2026-06-13 08:23:26 -05:00
Joseph Robertson fbbeb1fab0 Merge pull request #58 from HarrierPigeon/belt/tempTower-TommyB
Belt/temp tower tommy b
2026-06-12 05:53:32 -05:00
harrierpigeon 0bca3fd2e5 make belt printer specific temp tower only accessible to belt printers 2026-06-12 05:13:08 -05:00
Tommaso Bianchi 85fd613cf7 feat(belt/calib): add Overhang temperature-tower model (selectable) (#48)
Belt printers can't slice a tall vertical temperature tower. This adds a
belt-specific temperature-tower model — a row of discrete, individually
engraved provini laid along the belt, each printed at one temperature via
custom per-layer M104. Each provino is an inverted-L overhang that stresses
print quality, so the operator reads the best temperature off overhang
quality rather than a continuous ramp.

It is offered as a "Test model" choice in the temperature calibration dialog
(mirroring the Cornering test's selector), so users keep Joe's counter-rotated
sectioned tower as "Standard" and can pick this one as "Overhang":
- Calib_Params::test_model (existing field) carries the choice.
- Temp_Calibration_Dlg gets a Standard/Overhang radio.
- Plater::calib_temp belt branch: test_model 0 -> _calib_temp_belt_sectioned
  (unchanged Standard path), 1 -> the discrete-provini Overhang path.

Assets: belt_temp_provino_unit.stl + belt_temp_tower_<start>_<end>.stl (6
ranges) + gen_belt_temp_tower.py (manifold engraving). Based on
belt/generic-calibrations. The Overhang path is HW-validated on the IdeaFormer
IR3 V2 (discrete M104 + engraved numbers); not re-validated since the rebase.
2026-06-12 05:13:07 -05:00
Joseph Robertson 0da24cd38b Belt/Standard calibrations (#54)
Enables supported printing of standard Orcaslicer calibration profiles.

* Build 2 Checkpoint

* fix support generation wedge, ghost layers

* flip cornering tests 180 deg to waste less supports

* fix row spacing on the flow ratio calibrations

* more testing, this didn't fix anything

* switched rotation tools, same issue

* fixed Z-offset issues

* add rest of PA features, may look a bit weird on a belt

* make temp towers work

* re-enable spiral on calibrations that want it

* Final cleanup pre-PR and community testing
2026-06-12 03:14:12 -05:00
Rodrigo Faselli d7b75540d0 Merge branch 'main' into belt/baseChanges 2026-06-11 11:59:53 -03:00
Tommaso Bianchi b7bda9912b belt: fix IR3 V2 end G-code reversing the belt into the part (#56)
The IdeaFormer IR3 V2 End G-code ran `G28 ; home all`, which homes the
Z (belt) and Y (gantry) axes. On a belt printer Z is the conveyor, so
homing it runs the belt all the way back to origin, dragging the finished
part back under the gantry that G28 has just lowered — the head knocks the
print (reported by an IR3 V2 user; the `G1 Y50` lift came after the G28,
too late).

Replace the end sequence with a belt-safe one: switch to relative mode
(G91), lift the gantry for clearance, advance the belt forward one full
machine-depth (Z676, the 676 mm product depth) to eject the part and cycle
the belt surface clean, then home X only — never the Z/belt axis.
2026-06-11 09:30:35 -05:00
Tommaso Bianchi 4f3a608009 belt: don't flag the lead-in as an empty-layer error on belt printers (#47)
collect_layers_to_print() warns (CRITICAL) when an extrusion layer sits above
the previous one with an empty gap below — the fixed-bed assumption that
material with nothing under it is floating and unprintable. On a belt printer a
*leading* empty range (the gap starts at Z=0, no prior extrusion layer) is not
floating: it is the conveyor lead-in, and the part rests on the advancing belt
as the first material is laid down well above Z=0. A part not designed for a
belt (e.g. a flat test model tilted into the belt frame) then trips this as a
false "Object can't be printed for empty layer between 0 and N" error.

Suppress only the leading case (belt_printer && last_extrusion_layer == null);
genuine internal gaps are still flagged, since on a belt those can be an
over-angle overhang printing into air. Non-belt output is unchanged.
2026-06-10 23:54:02 -05:00
Tommaso BianchiandClaude Opus 4.8 f682ab5cd3 belt: replace height-check skip with a belt-correct vertical-clearance check
The original PR skipped the max-print-height check entirely on belt printers
because the sliced (virtual) Z is belt travel, not build height. As the reviewer
noted, that removed the only working height guard. Restore a correct guard:

- Print::validate: on belt printers, compare the upright object height
  (max over instances of the scene-space bbox) against printable_height directly.
  printable_height is the usable VERTICAL clearance above the belt: the gantry
  travels up the tilted plane (reach = height/cos(tilt)) and its axis range is
  sized for that (IR3 V2: ~354 mm gantry travel = 250 mm vertical at 45deg, and
  printable_height = 250). Hardware-confirmed 250 mm vertical clearance, so no
  cos(tilt) factor is applied.
- BuildVolume::set_belt_printer: drop the diagonal Z scaling; the build-volume Z
  already equals printable_height, keeping the live 'outside build volume'
  highlight in agreement with validate().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 21:41:18 +02:00
harrierpigeon 2bcb775b90 update IdeaFormer profiles to new generic belt printer config 2026-06-10 05:10:20 -05:00
Joseph Robertson e29a82c672 add attribution and design notes 2026-06-10 05:10:20 -05:00
Joseph Robertson 5b243eec92 Relocate Pre-Slice remap logic 2026-06-10 05:10:20 -05:00
Joseph Robertson fee6be98b2 unify frame tilt work 2026-06-10 05:10:20 -05:00
Joseph Robertson 9405ac5976 remove mesh origin snapping 2026-06-10 05:10:20 -05:00
Tommaso Bianchi 6ed2437848 Add IdeaFormer IR3 V2 belt printer profile - credit: tommasobbianchi (#43)
* Add IdeaFormer IR3 V2 belt printer profile

Self-contained vendor profile for the IdeaFormer IR3 V2 (45 deg belt printer):
machine (0.4 nozzle) + 0.20mm process + Generic PLA/PETG filaments, with the
belt machine-frame transforms set explicitly on the machine preset
(belt_printer, belt_slice_rotation x/45/global, build_plate_tilt_x=45,
gcode_remap_x/y/z, gcode_shear_z=pos_tan, gcode_scale_y=inv_cos).

The vendor bundles its own machine/process commons (fdm_belt_common,
fdm_klipper_common, fdm_machine_common, fdm_process_common) on purpose:
OrcaSlicer resolves system-preset inheritance per-vendor, so a profile that
inherits the Custom vendor's commons cross-vendor fails to resolve its parent
and the whole IdeaFormer vendor silently fails to load. Bundling the commons
(and listing them in IdeaFormer.json in dependency order) keeps the vendor
self-contained, matching how every other vendor folder is structured.

Machine limits, bed temperature (75 C for belt PLA) and start/end G-code are
taken from a working IdeaFormer IR3 V2.



* feat(belt/profile): eSUN PLA @IdeaFormer IR3 V2 — HW-calibrated belt filament

Add an eSUN PLA belt profile for the IR3 V2, inheriting Generic PLA @IdeaFormer
IR3 V2 (self-contained: parent is in the same IdeaFormer vendor, registered
after it in filament_list). HW-calibrated on the IR3 V2:
- nozzle_temperature 200/200 (temp-tower calibration)
- pressure_advance 0.12 (PA calibration)
- filament_max_volumetric_speed 10 mm³/s (max-vol-speed calibration: wall
  failed at 126 mm/s → 126 × 0.0798 mm³/mm ≈ 10 mm³/s)
2026-06-10 04:13:56 -05:00
Joseph Robertson da3fee2dfa Merge branch 'main' into belt/baseChanges 2026-06-05 11:55:44 -05:00
Joseph Robertson c0d6ae8540 Merge branch 'main' into belt/baseChanges 2026-06-05 03:12:27 -05:00
Joseph Robertson 573e1c6544 Belt/fix profiles and minor oopsies (#42)
* fix duplicate printer, bump version

* clean up extra tab in space

* fix generic defaults
2026-06-05 03:11:38 -05:00
Rodrigo Faselli 20be78a96e Merge branch 'main' into belt/baseChanges 2026-06-04 17:32:35 -03:00
Joseph Robertson 02d45c3258 Finish Fixes from Copilot Review (#39)
* fix: restore BuildVolume bounds when toggling belt mode

set_belt_printer() mutated m_bboxf when enabling but never restored
the original extents on disable or when switching infinite_y true->false,
leaving stale max.y/max.z values that broke collision and object_state
checks. Recompute m_bboxf from m_bed_shape + m_max_print_height at the
top of each call, then apply belt-specific adjustments on top.

Addresses Copilot review comment on PR #12998 (BuildVolume.cpp:196).

* chore: drop [BELT-DEBUG] to_machine_coords log to trace

Was emitting at warning level once per 0.2mm Z bucket during every belt
print export, polluting default user logs. Trace level matches the rest
of the belt diagnostics and is silent in production.

Addresses Copilot review comment on PR #12998 (BeltGCodeWriter.cpp:86).

* chore: drop [BELTRACE] make_perimeters/support logs to trace

Eight warning-level traces around make_perimeters and
generate_support_material were emitting on every call/exit during normal
slicing, cluttering default logs. They're concurrency-debug breadcrumbs
not user-facing diagnostics, so drop them to trace.

Addresses Copilot review comment on PR #12998 (PrintObject.cpp:438).

* perf: gate BeltSliceStrategy diagnostic bbox tracking behind compile flag

apply_to_trafo() walked every model vertex twice (once for min_z, once
for per-volume mesh/slicer bboxes) and emitted seven trace logs per
call. The bboxes and logs are diagnostic only; min_z is the load-bearing
output. Wrap the bbox accumulation, logging, and supporting headers in
SLIC3R_BELT_DIAGNOSTIC_LOG so production builds do the bare min_z scan.

Addresses Copilot review comment on PR #12998 (BeltSliceStrategy.cpp:95).

* fix: apply part_cooling_fan_min_pwm to first-layer plane fan crossings

apply_first_layer_plane_fan_eval emitted band-crossing M106 commands
through GCodeWriter::set_fan() without the per-printer PWM floor that
every other set_fan call in CoolingBuffer applies. On printers with a
non-zero part_cooling_fan_min_pwm, fans could fail to spin up at low
requested speeds near the belt surface.

Addresses Copilot review comment on PR #12998 (CoolingBuffer.cpp:1227).
2026-06-04 14:40:45 -05:00
harrierpigeon f9888c7d7a Merge remote-tracking branch 'upstream/main' into belt/baseChanges 2026-05-31 05:17:32 -05:00
Joseph Robertson 0bda684dd7 delete mesh transforms (#37)
* delete mesh shear, scale and refactor logger

* clean up config options

* reorder UI elements
2026-05-31 05:08:42 -05:00
Joseph Robertson 8a578cdf00 Merge branch 'main' into belt/baseChanges 2026-05-30 21:39:03 -05:00
Rodrigo Faselli 6b256db012 Merge branch 'main' into belt/baseChanges 2026-05-28 07:44:43 -03:00
Joseph Robertson 2dc4900292 Copilot review fixes & upstream code interaction fix (#34)
* first pass at review issue 8
* delete detritus
* fix build compile error due to upstream changes
2026-05-27 21:53:04 -05:00
Joseph RobertsonandCopilot Autofix powered by AI 0f75d6bc4e Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-27 19:25:02 -05:00
Joseph Robertson e913621369 Merge branch 'main' into belt/baseChanges 2026-05-27 11:50:16 -05:00
Joseph Robertson 48b6db93b8 Belt/slice rotate (#33)
* initial commit
* fix upper bounds for assemblies
* significantly less Z shift issues, still not quite tamped down yet though
* add instrumentation to logs
* finally found the issue
* update printer defaults
2026-05-27 11:45:38 -05:00
Joseph Robertson 72cafcbe06 Merge branch 'main' into belt/baseChanges 2026-05-22 15:23:07 -05:00
Joseph Robertson a9bae54f20 Rotate instead of shear for slicing stage (#30)
* initial commit

* fix upper bounds for assemblies

* significantly less Z shift issues, still not quite tamped down yet though

* add instrumentation to logs

* finally found the issue

* update printer defaults
2026-05-22 15:21:33 -05:00
Joseph Robertson 218881c6f6 fix assembly bounding box truncation problems noticed by hotcubcar (#28) 2026-05-20 02:46:41 -05:00
Joseph Robertson cd5fb68d38 Merge branch 'main' into belt/baseChanges 2026-05-19 23:00:14 -05:00
Joseph Robertson f87a46ec6e fix X mirroring (#26)
Thanks to @hotcubcar for catching this!
2026-05-19 22:54:50 -05:00
Rodrigo Faselli 8dc91d8b1d Merge branch 'main' into belt/baseChanges 2026-05-19 08:06:57 -03:00
Joseph Robertson da8b11b8ab HOTFIX: update generic belt printer profile (#23)
oops
2026-05-19 01:06:39 -05:00
Joseph Robertson c79970bedb Clean Up Settings Interface, Update Generic Profile (#22)
* clean up UI elements

* further cleaning

* final cleanup for first round of settings UI streamlining

* update generic belt printer settings

* fix generic again
2026-05-19 00:56:08 -05:00
harrierpigeonandClaude Opus 4.7 7252f6acb7 Merge upstream/main into belt/rebase/may-18
Reconciles the belt-printer branch with upstream PRs through #13723. Six
files had conflicts; three additional files needed manual follow-up fixes
where the auto-merge produced code that referenced upstream-renamed fields
or changed function signatures.

Notable reconciliations:
- TreeSupport.cpp: kept belt-floor early-exit branches around HEAD's
  drop-down logic, folded upstream's `(distance_to_top > 0 ? 1 : 0)`
  formula into the non-belt-floor path (upstream PR #11812). Dropped dead
  `roof_enabled`/`force_tip_to_roof` locals.
- TreeSupport3D.cpp: combined upstream's safety-offset + remove_small
  changes with HEAD's belt-floor clip in the per-slice trim loop. Dropped
  HEAD's `else` block (superseded by upstream's rewritten bottom-contact
  propagation) and re-added the belt-floor clip into the new propagation
  loop. Gated the propagation on belt printers to prevent OOM when
  belt-floor clipping produces empty initial slices.
- TriangleSelector.{cpp,hpp}: merged both new `select_patch` parameters
  (HEAD's `up_direction` and upstream's `select_partially`); body uses
  `dot(up_direction)` for the overhang angle check and forwards
  `select_partially` to `select_triangle`.
- SupportMaterial.cpp: `slicing_params.soluble_interface` →
  `zero_gap_interface_bottom` in HEAD's `detect_belt_floor_bottom_contacts`,
  matching upstream's same-purpose rename at line 2495.
- Custom.json, GCodeWriter.cpp: simple additive merges (kept entries /
  includes from both sides).

Verified by building OrcaSlicer (RelWithDebInfo) after a full deps
rebuild (Eigen v5.0.1, libigl v2.6.0 are now managed deps) and slicing
a scaled Benchy on the NORMALIZER belt-printer profile without OOM.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 21:53:24 -05:00
Joseph Robertson 6a2d690f45 Decouple Slicing From Machine Frame Logic (#21)
* minor logic swap

* first attempt, has a race condition

* fixed the offset issue

* found a solution, I think things work now (at least once I quash this race condition)

* still chasing down race conditions

* add manual shear / scale order strategy swap

* tweak manual shear, fix ui uninitialization crash

* fix z height / g-code desync issue

* fix shear then scale cutoff planes

* getting closer

* fix support termination planes

* fix incorrect offsets in shear-then-scale mode

* test - fix overextrusion due to model/layer scale
2026-05-18 19:01:43 -05:00
RF47 8fa6a4602b fix profile indentation 2026-05-09 19:51:18 -03:00
harrierpigeonandClaude Opus 4.7 0f29437135 Merge remote-tracking branch 'upstream/main' into belt/baseChanges
Conflicts resolved in src/libslic3r/GCode.cpp and src/slic3r/GUI/GUI_Factories.cpp.

GCode.cpp: combined upstream's air-filtration per-extruder gating
(activate_air_filtration_during_print / _on_completion), the new
extrusion-role-change gcode lambda, ZAA's path.z_contoured arc-fit
disable, raft-aware slow_down_layers branch, and Vec3d/Line3 ZAA
plumbing with the local belt-printer changes (path_on_first_layer,
effective_layer_index_for_point, should_disable_arc_fitting). All
auto-merged m_writer.X() calls converted to m_writer->X() to match
the local unique_ptr<GCodeWriter> refactor.

GUI_Factories.cpp: inserted brim_flow_ratio in the Support category
list and renumbered around the local build_plate_tilt_x/y entries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:23:41 -05:00
SoftFever 75cc0de071 Merge branch 'main' into belt/baseChanges 2026-04-17 15:44:03 +08:00
Joseph Robertson bc6d0ef0fb Add first layer detection and fan control - prototype 2026-04-13 22:29:23 -05:00
Joseph Robertson c17ae25bbc Merge branch 'main' into belt/baseChanges 2026-04-13 21:34:34 -05:00
harrierpigeon e981a517cd Merge branch 'belt/global-mesh-transform' into temp-pr19-merge 2026-04-10 11:49:37 -05:00
harrierpigeon 0703728e56 add global mesh transform option 2026-04-10 11:39:08 -05:00
SoftFever 1e9ee0c120 add a generic belt printer 2026-04-09 23:07:08 -05:00
harrierpigeon e9a579b604 switch default shear axis, swap to tan(a) instead of cot(a) 2026-04-09 23:07:07 -05:00
harrierpigeon 783acd932a revert CLAUDE.md 2026-04-09 23:07:07 -05:00
harrierpigeon c8a1bf3a99 Part 3.2: decouple axis remapping, enable viewing settings in Developer mode or when Belt mode is active 2026-04-09 23:07:07 -05:00
harrierpigeon 2facaac9e8 Part 3.1: refactor BeltTransform pipeline
add BeltGCodeWriter

add BeltGCode

consolidate changes into shared classes for BeltGcode
2026-04-09 23:07:07 -05:00
harrierpigeon 9bbac19de4 Part 2.7: Add G-code back-transform and tree support belt floor clipping
- Add BeltBackTransform class that inverts the shear/scale matrix and
  applies it in GCodeWriter::to_machine_coords() so G-code outputs in
  the machine's physical coordinate space, gated by new
  belt_gcode_back_transform config option
- Extend belt floor clipping to all three tree support pipelines
  (Prusa-style, Orca organic, TreeModelVolumes) with per-layer polygon
  clipping, anti-overhang integration, and belt raft extension layers
- Fix tree drop_nodes() belt termination, organic support global Z
  offset, collision calculation index bug, and first-layer brim/empty
  layer checks for belt printers

two-shot - first build built but didn't plumb to UI.  Woah.

add pre-slice axis remap, because Y needs to be Z

going to change tactic and move based on bbox min

switch to per axis snapping

per axis swap snap now per object

build plate tilt wasn't invalidating slicer settings

support upper bound now correct, need to get lower bound corrected

axis swapped support termination corrected

Z Shear works with and without pre-slice remap now
2026-04-09 23:07:07 -05:00
harrierpigeon ea5c6776b3 Part 2.6: Add belt floor support clipping for all support types
- Fix support clipping z-shift calculation by removing coordinate-space
  mismatch and sync belt_floor_z_shift with global_z_offset; fix
  invalidation so posSupportMaterial no longer resets slicing params
- Add belt floor polygon clipping to non-organic tree support
  (slim/strong/hybrid) with collision surface integration in
  TreeSupportData, belt extension layers, and first-layer brim
  suppression
- Add belt floor clipping to organic tree support pipeline with virtual
  belt raft layers, per-layer polygons in TreeModelVolumes, and
  post-generation layer trimming; fix pre-existing processing_last_mesh
  bug in calculateCollision()

Fix belt floor support clipping: z-shift, invalidation, and global offset

- Fix support clipping z-shift calculation by removing coordinate-space
  mismatch (raw_bounding_box min.z vs trafo_centered m_belt_min_z) and
  sync belt_floor_z_shift with global_z_offset in global shear mode
- Fix invalidation so posSupportMaterial no longer resets slicing params,
  preventing the exact posSlice z-shift from being overwritten by the
  bounding-box approximation on support-only setting changes
- Remove double-counting of global z_offset on support layers — support
  already inherits the offset from object layers during generation

This Work Was Co-Authored-By Claude Opus 4.6 (1M context) <noreply@anthropic.com>

UI: gray out inactive belt sub-options, rename to mesh transforms, move to Advanced

Fix mesh clipping through build plate after belt shear/scale transform

Generalize G-code viewer designed-view toggle for full belt transform

Clip support layers to transformed belt floor plane

Supports below the tilted build plate (Z = shear_factor * from_axis - min_z)
are now clipped via half-plane intersection after generation. Belt floor
parameters stored in SlicingParameters and populated in both update_slicing_parameters()
and the static slicing_parameters() overload.

Make belt G-code viewer toggle more prominent, add B keyboard shortcut

- Add separator + teal "Belt Printer" header in legend panel
- Append [B] hint to checkbox label
- Add B key shortcut in GLCanvas3D to toggle designed/machine view
- Read belt_printer_angle from loaded G-code headers to enable belt view

Add per-axis global transform option for belt printer shear

New belt_shear_{x,y,z}_global bool configs. When enabled, shear incorporates
instance shift so objects at different bed positions get position-aware
transform (Z += factor * instance_shift_on_from_axis).

Fix global shear: use layer Z offset instead of mesh transform, add config invalidation

- Global shear offset applied as post-slicing layer print_z adjustment
  instead of mesh transform (which was absorbed by min_z normalization
  or shifted mesh out of slice range)
- Register all belt transform options in Print::invalidate_state_by_config_options
  to trigger posSlice re-slicing (the fallback only invalidated Print steps,
  not PrintObject steps — belt changes had no effect without manual re-slice)
- Belt gcode remap options added to steps_gcode (gcode-export only)
- Skip empty-first-layer check for belt objects with global Z offset

WIP: split instances for global shear, relative Z offsets, debug logging

- PrintApply: when belt global mode active, prevent instance grouping by
  adding unique Z perturbation to trafo — each copy becomes its own
  PrintObject with independent layers
- PrintObjectSlice: compute global Z offset relative to minimum Y shift
  across all PrintObjects (lowest-Y object stays at Z=0)
- Debug logging (warning level) for belt global shift values and offsets

Known issues:
- Cached posSlice results cause stale offsets when mixing copies with
  individually-added objects — need to compute min baseline outside slice()
- Supports still generate to Z=0 instead of object's global Z offset

Fix global shear for copied objects: disable shared-object layer optimization

When belt global Z shear is active, each object needs unique layer Z
values based on its bed position. The shared-object optimization was
causing copies to reuse the source object's layers (and its Z offset)
instead of computing their own position-based offset.

started work on getting supports to work properly

one step forward, one step back

this version didn't quite work.  Getting somewhere though

about to add UI controllable tests

added configuration options for supports

tweak CLAUDE.md to be more aggressive for my machine.  This commit should probably be pulled out before contributing upstream

still chasing down some bugs

moving objects between slices no longer results in improper Z-height because of caching

added more data to the debug logs

Z offset is getting more global again

still not quite there, I think there's a fundamental logic flaw?

hunting for bugs

finally have a functional fix

Add belt floor clipping to tree supports (organic and non-organic)

- Add belt floor polygon clipping to non-organic tree support
  (slim/strong/hybrid) in draw_circles() and terminate nodes at the
  belt surface instead of the horizontal build plate
- Add belt floor clipping to organic tree support pipeline with virtual
  belt raft layers for sub-floor branch generation, per-layer belt
  floor polygons in TreeModelVolumes, and post-generation layer trimming
- Fix pre-existing processing_last_mesh bug in TreeModelVolumes that
  prevented m_anti_overhang (support blockers) from ever being applied;
  skip empty first layer check for belt printers

Commits:

current approach: make a face surface to build supports to

closer!

supports now terminate on shear plane, now need to get shear plane to correct Z height

nearly there

chasing down logic issues still

committing for checkpoint, this still does not work

still got logic problems...

cull support clipping

stashing changes for now.  Going to focus on getting the global shear OFF support generation dialed first.

beginning per object shear calcs

Local shear transform is on correct Z offset now

local shear finally works now and needs more testing

global shear works now, needs thorough testing

debugging non-45 degree angles

debugging part 2

supports at all angles work now

remove debug logging

Add belt floor collision to non-organic tree support pipeline

- Integrate belt floor as a collision surface in TreeSupportData so
  branches route around the belt naturally, replacing the explicit
  termination checks in drop_nodes()
- Add belt extension layers below the object after draw_circles() to
  allow support geometry to extend to the diagonal belt surface instead
  of terminating at a horizontal first layer
- Fix coordinate overflow in belt floor polygons (scale_(1e4) exceeds
  int32), skip first-layer brim expansion for belt printers, and
  extend empty first layer check bypass to all belt modes

add debug logging, Z translate for tree supports

still not seeing any cutoff surface yet

adding debug options

attempt #2 at trees

if hit Z buildplate stop but don't set to_buildplate true

getting closer

tree support almost there, just need to get rid of the circles at the beginning

getting closer

belt / shear plane clip works, need to figure out the buidlplate plane issues

more logic, added debugging logs

supports now extend somewhat below Z=0 in global shear mode

fix bad alloc, add 10mm below build plate

fully works now

shear transform + prusa tree support generation works now.

pull out debug logging
2026-04-09 23:07:07 -05:00
harrierpigeon 98f4d34dcb Part 2.5: Add global shear transform, support clipping, and belt UI improvements
- Implement per-object global shear transform in PrintObject with
  layer Z-offset calculation, config invalidation, and fix for
  shared-object layer optimization breaking copied objects
- Clip support layers to the transformed belt floor plane and begin
  work on tree support adaptation for sheared coordinate space
- Improve belt UI: gray out inactive sub-options, add B keyboard
  shortcut for G-code viewer design-view toggle, fix mesh clipping
  through build plate after shear/scale transform

y' = y + z·cot(α),
  while x' = x and z' = z

getting closer to customizable variant

getting closer

X/Y/Z shear initial

clean up UI

add 1/sin(a) transform, idea taken from blackbelt cura plugin

Things work now (turns out I've been using the wrong set of  transforms)
2026-04-09 23:07:07 -05:00
harrierpigeon 501aff7e53 Part 2: Replace belt rotation w/ per-axis shear transforms and G-code axis remap
- Replace monolithic belt rotation transform with independent per-axis
    shear controls (mode/angle/source-axis for X, Y, Z) and G-code axis
    remapping, giving full flexibility to match any belt printer's
    coordinate system
  - Remove all rotation mode logic and intermediate type+axes dropdowns,
    simplifying the pipeline to pure shear matrices while preserving the
    default behavior (Y += Z*cot(45deg) with identity remap)
  - Clean up GCodeWriter, GCodeProcessor, and GCodeViewer for the new
    shear-only model; expose 12 new settings in printer UI via
    Tab.cpp/Preset.cpp

Implement belt printer tilted slicing

Implement the core belt slicing pipeline that makes the slicer
tilt-aware:

Step 1: GCodeWriter::to_machine_coords() - R(+alpha, X) rotation
  from slicing frame to machine frame
Step 2: PrintObject - belt-rotated object height calculation
  (y*sin(a) + z*cos(a)) for correct layer count
Step 3: PrintObjectSlice - apply R(-alpha, X) rotation trafo so
  horizontal slice planes correspond to belt-parallel planes,
  with Z-shift computed from model volumes
Step 4: GCodeProcessor - machine-frame preview (no transform needed)
Step 5: 3DBed - rotate bed visualization about X by belt angle

Fix: belt surface IS the build plate, no mesh rotation

Currently still slicing perpendicular to the belt normal.  Need to figure out why.

Fix G-code Z sign: use R(-alpha, X) so Z+ is away from belt

The previous R(+alpha, X) transform produced negative Z values
(-y*sin(a) term dominated). Changed to R(-alpha, X) which gives
machine_z = y*sin(a) + z*cos(a), always positive for points
above the belt surface. Z increases with each layer as expected.

reverting and changing slice methodology

Add pink slicing direction arrow from origin

Shows the effective slicing direction (gantry normal) as a pink
arrow from the origin. Shorter and wider than the gravity arrow.
Direction: R(+alpha, X) * Z = (0, -sin(a), cos(a)), which is
the layer stacking direction in the original mesh frame.

Fix slicing arrow visibility and add raw G-code toggle

- Disable depth test for pink slicing arrow so it renders on top of
  the tilted bed geometry (was being occluded)
- Remove unnecessary 5mm Z-offset from arrow position
- Add m_belt_show_raw toggle to GCodeViewer
- Add "Show raw G-code (slicing frame)" checkbox in legend when
  belt mode is active

Implement to_machine_coords inverse rotation for belt printer G-code

The slicing pipeline rotates the mesh by R(-alpha, X) and shifts Z to
start at 0. The G-code output now undoes this transform via
to_machine_coords: R(+alpha, X) * T(0,0,+z_shift), recovering the
original machine-frame coordinates where Y is horizontal and Z is
vertical.

Changes:
- GCodeWriter: implement to_machine_coords with inverse rotation + Z-shift
- GCodeWriter: add belt_z_shift member and setter/getter
- GCode.cpp: compute Z-shift from print objects (same logic as
  PrintObjectSlice) and pass to writer; write z_shift to G-code header
- GCodeProcessor: parse belt_z_shift from G-code header
- GCodeViewer: store belt_z_shift from processor result

Wire raw G-code toggle to apply slicing-frame view transform

When "Show raw G-code (slicing frame)" is checked in the preview
legend, the view matrix is modified to apply R(-alpha, X) * T(0,0,-z_shift)
to the toolpath rendering. This shows the G-code as it was during
slicing: rotated part with horizontal layers.

Default (unchecked): machine-frame view — upright part with tilted layers.

Remove belt printer placeholder comment from GCodeProcessor

The preview now correctly displays machine-frame G-code with the
optional raw view toggle. No transform is needed in the processor.
2026-04-09 23:07:06 -05:00
harrierpigeon c808653565 Add belt printer transform pipeline: slicing rotation, G-code coords, preview
- Implement core belt slicing pipeline: R(-alpha, X) mesh rotation in PrintObjectSlice with corrected object height calculation for proper layer count
Add to_machine_coords() in GCodeWriter to convert slicing-frame coordinates back to machine-frame, propagated through GCode,
GCodeProcessor, and GCodeViewer
Add belt-mode UI: tilted bed visualization, slicing-direction arrow, and raw G-code toggle to switch between machine-frame and slicing-frame views

This is a combination of 6 commits.

checkpoint 1: initial MVP.  Slicing functions, but rotates instead of skews are happening and a lot of other stuff too

getting somewhere, getting to the point where I need to figure out how to verify this stuff

this appears to be a dead end.

getting somewhere I think maybe

I'm pretty sure we've completely lost the plot at this point and need to restart this process...

remove slice logic in preparation for new, more invasive plan
2026-04-09 23:07:06 -05:00
harrierpigeon a7441c7f48 stage in changes from off-plate-gravity and remove stuff I didn't need 2026-04-09 23:07:06 -05:00
SoftFever 3bc13e5cfd add a generic belt printer 2026-04-07 10:37:34 +08:00
SoftFever 141749a6f2 Merge branch 'main' into belt/baseChanges 2026-04-06 22:52:31 +08:00
harrierpigeon 4634a5dfd7 switch default shear axis, swap to tan(a) instead of cot(a) 2026-03-30 13:25:40 -05:00
harrierpigeon 372139c770 revert CLAUDE.md 2026-03-30 13:25:40 -05:00
harrierpigeon 44eebdb8ad Part 3.2: decouple axis remapping, enable viewing settings in Developer mode or when Belt mode is active 2026-03-30 13:25:40 -05:00
harrierpigeon c7aa4ca3ef Part 3.1: refactor BeltTransform pipeline
add BeltGCodeWriter

add BeltGCode

consolidate changes into shared classes for BeltGcode
2026-03-30 13:25:40 -05:00
harrierpigeon b297f68921 Part 2.7: Add G-code back-transform and tree support belt floor clipping
- Add BeltBackTransform class that inverts the shear/scale matrix and
  applies it in GCodeWriter::to_machine_coords() so G-code outputs in
  the machine's physical coordinate space, gated by new
  belt_gcode_back_transform config option
- Extend belt floor clipping to all three tree support pipelines
  (Prusa-style, Orca organic, TreeModelVolumes) with per-layer polygon
  clipping, anti-overhang integration, and belt raft extension layers
- Fix tree drop_nodes() belt termination, organic support global Z
  offset, collision calculation index bug, and first-layer brim/empty
  layer checks for belt printers

two-shot - first build built but didn't plumb to UI.  Woah.

add pre-slice axis remap, because Y needs to be Z

going to change tactic and move based on bbox min

switch to per axis snapping

per axis swap snap now per object

build plate tilt wasn't invalidating slicer settings

support upper bound now correct, need to get lower bound corrected

axis swapped support termination corrected

Z Shear works with and without pre-slice remap now
2026-03-30 13:25:40 -05:00
harrierpigeon 7ff6bc42b1 Part 2.6: Add belt floor support clipping for all support types
- Fix support clipping z-shift calculation by removing coordinate-space
  mismatch and sync belt_floor_z_shift with global_z_offset; fix
  invalidation so posSupportMaterial no longer resets slicing params
- Add belt floor polygon clipping to non-organic tree support
  (slim/strong/hybrid) with collision surface integration in
  TreeSupportData, belt extension layers, and first-layer brim
  suppression
- Add belt floor clipping to organic tree support pipeline with virtual
  belt raft layers, per-layer polygons in TreeModelVolumes, and
  post-generation layer trimming; fix pre-existing processing_last_mesh
  bug in calculateCollision()

Fix belt floor support clipping: z-shift, invalidation, and global offset

- Fix support clipping z-shift calculation by removing coordinate-space
  mismatch (raw_bounding_box min.z vs trafo_centered m_belt_min_z) and
  sync belt_floor_z_shift with global_z_offset in global shear mode
- Fix invalidation so posSupportMaterial no longer resets slicing params,
  preventing the exact posSlice z-shift from being overwritten by the
  bounding-box approximation on support-only setting changes
- Remove double-counting of global z_offset on support layers — support
  already inherits the offset from object layers during generation

This Work Was Co-Authored-By Claude Opus 4.6 (1M context) <noreply@anthropic.com>

UI: gray out inactive belt sub-options, rename to mesh transforms, move to Advanced

Fix mesh clipping through build plate after belt shear/scale transform

Generalize G-code viewer designed-view toggle for full belt transform

Clip support layers to transformed belt floor plane

Supports below the tilted build plate (Z = shear_factor * from_axis - min_z)
are now clipped via half-plane intersection after generation. Belt floor
parameters stored in SlicingParameters and populated in both update_slicing_parameters()
and the static slicing_parameters() overload.

Make belt G-code viewer toggle more prominent, add B keyboard shortcut

- Add separator + teal "Belt Printer" header in legend panel
- Append [B] hint to checkbox label
- Add B key shortcut in GLCanvas3D to toggle designed/machine view
- Read belt_printer_angle from loaded G-code headers to enable belt view

Add per-axis global transform option for belt printer shear

New belt_shear_{x,y,z}_global bool configs. When enabled, shear incorporates
instance shift so objects at different bed positions get position-aware
transform (Z += factor * instance_shift_on_from_axis).

Fix global shear: use layer Z offset instead of mesh transform, add config invalidation

- Global shear offset applied as post-slicing layer print_z adjustment
  instead of mesh transform (which was absorbed by min_z normalization
  or shifted mesh out of slice range)
- Register all belt transform options in Print::invalidate_state_by_config_options
  to trigger posSlice re-slicing (the fallback only invalidated Print steps,
  not PrintObject steps — belt changes had no effect without manual re-slice)
- Belt gcode remap options added to steps_gcode (gcode-export only)
- Skip empty-first-layer check for belt objects with global Z offset

WIP: split instances for global shear, relative Z offsets, debug logging

- PrintApply: when belt global mode active, prevent instance grouping by
  adding unique Z perturbation to trafo — each copy becomes its own
  PrintObject with independent layers
- PrintObjectSlice: compute global Z offset relative to minimum Y shift
  across all PrintObjects (lowest-Y object stays at Z=0)
- Debug logging (warning level) for belt global shift values and offsets

Known issues:
- Cached posSlice results cause stale offsets when mixing copies with
  individually-added objects — need to compute min baseline outside slice()
- Supports still generate to Z=0 instead of object's global Z offset

Fix global shear for copied objects: disable shared-object layer optimization

When belt global Z shear is active, each object needs unique layer Z
values based on its bed position. The shared-object optimization was
causing copies to reuse the source object's layers (and its Z offset)
instead of computing their own position-based offset.

started work on getting supports to work properly

one step forward, one step back

this version didn't quite work.  Getting somewhere though

about to add UI controllable tests

added configuration options for supports

tweak CLAUDE.md to be more aggressive for my machine.  This commit should probably be pulled out before contributing upstream

still chasing down some bugs

moving objects between slices no longer results in improper Z-height because of caching

added more data to the debug logs

Z offset is getting more global again

still not quite there, I think there's a fundamental logic flaw?

hunting for bugs

finally have a functional fix

Add belt floor clipping to tree supports (organic and non-organic)

- Add belt floor polygon clipping to non-organic tree support
  (slim/strong/hybrid) in draw_circles() and terminate nodes at the
  belt surface instead of the horizontal build plate
- Add belt floor clipping to organic tree support pipeline with virtual
  belt raft layers for sub-floor branch generation, per-layer belt
  floor polygons in TreeModelVolumes, and post-generation layer trimming
- Fix pre-existing processing_last_mesh bug in TreeModelVolumes that
  prevented m_anti_overhang (support blockers) from ever being applied;
  skip empty first layer check for belt printers

Commits:

current approach: make a face surface to build supports to

closer!

supports now terminate on shear plane, now need to get shear plane to correct Z height

nearly there

chasing down logic issues still

committing for checkpoint, this still does not work

still got logic problems...

cull support clipping

stashing changes for now.  Going to focus on getting the global shear OFF support generation dialed first.

beginning per object shear calcs

Local shear transform is on correct Z offset now

local shear finally works now and needs more testing

global shear works now, needs thorough testing

debugging non-45 degree angles

debugging part 2

supports at all angles work now

remove debug logging

Add belt floor collision to non-organic tree support pipeline

- Integrate belt floor as a collision surface in TreeSupportData so
  branches route around the belt naturally, replacing the explicit
  termination checks in drop_nodes()
- Add belt extension layers below the object after draw_circles() to
  allow support geometry to extend to the diagonal belt surface instead
  of terminating at a horizontal first layer
- Fix coordinate overflow in belt floor polygons (scale_(1e4) exceeds
  int32), skip first-layer brim expansion for belt printers, and
  extend empty first layer check bypass to all belt modes

add debug logging, Z translate for tree supports

still not seeing any cutoff surface yet

adding debug options

attempt #2 at trees

if hit Z buildplate stop but don't set to_buildplate true

getting closer

tree support almost there, just need to get rid of the circles at the beginning

getting closer

belt / shear plane clip works, need to figure out the buidlplate plane issues

more logic, added debugging logs

supports now extend somewhat below Z=0 in global shear mode

fix bad alloc, add 10mm below build plate

fully works now

shear transform + prusa tree support generation works now.

pull out debug logging
2026-03-30 13:25:40 -05:00
harrierpigeon 719af2d81d Part 2.5: Add global shear transform, support clipping, and belt UI improvements
- Implement per-object global shear transform in PrintObject with
  layer Z-offset calculation, config invalidation, and fix for
  shared-object layer optimization breaking copied objects
- Clip support layers to the transformed belt floor plane and begin
  work on tree support adaptation for sheared coordinate space
- Improve belt UI: gray out inactive sub-options, add B keyboard
  shortcut for G-code viewer design-view toggle, fix mesh clipping
  through build plate after shear/scale transform

y' = y + z·cot(α),
  while x' = x and z' = z

getting closer to customizable variant

getting closer

X/Y/Z shear initial

clean up UI

add 1/sin(a) transform, idea taken from blackbelt cura plugin

Things work now (turns out I've been using the wrong set of  transforms)
2026-03-30 13:25:40 -05:00
harrierpigeon cb13a22e57 Part 2: Replace belt rotation w/ per-axis shear transforms and G-code axis remap
- Replace monolithic belt rotation transform with independent per-axis
    shear controls (mode/angle/source-axis for X, Y, Z) and G-code axis
    remapping, giving full flexibility to match any belt printer's
    coordinate system
  - Remove all rotation mode logic and intermediate type+axes dropdowns,
    simplifying the pipeline to pure shear matrices while preserving the
    default behavior (Y += Z*cot(45deg) with identity remap)
  - Clean up GCodeWriter, GCodeProcessor, and GCodeViewer for the new
    shear-only model; expose 12 new settings in printer UI via
    Tab.cpp/Preset.cpp

Implement belt printer tilted slicing

Implement the core belt slicing pipeline that makes the slicer
tilt-aware:

Step 1: GCodeWriter::to_machine_coords() - R(+alpha, X) rotation
  from slicing frame to machine frame
Step 2: PrintObject - belt-rotated object height calculation
  (y*sin(a) + z*cos(a)) for correct layer count
Step 3: PrintObjectSlice - apply R(-alpha, X) rotation trafo so
  horizontal slice planes correspond to belt-parallel planes,
  with Z-shift computed from model volumes
Step 4: GCodeProcessor - machine-frame preview (no transform needed)
Step 5: 3DBed - rotate bed visualization about X by belt angle

Fix: belt surface IS the build plate, no mesh rotation

Currently still slicing perpendicular to the belt normal.  Need to figure out why.

Fix G-code Z sign: use R(-alpha, X) so Z+ is away from belt

The previous R(+alpha, X) transform produced negative Z values
(-y*sin(a) term dominated). Changed to R(-alpha, X) which gives
machine_z = y*sin(a) + z*cos(a), always positive for points
above the belt surface. Z increases with each layer as expected.

reverting and changing slice methodology

Add pink slicing direction arrow from origin

Shows the effective slicing direction (gantry normal) as a pink
arrow from the origin. Shorter and wider than the gravity arrow.
Direction: R(+alpha, X) * Z = (0, -sin(a), cos(a)), which is
the layer stacking direction in the original mesh frame.

Fix slicing arrow visibility and add raw G-code toggle

- Disable depth test for pink slicing arrow so it renders on top of
  the tilted bed geometry (was being occluded)
- Remove unnecessary 5mm Z-offset from arrow position
- Add m_belt_show_raw toggle to GCodeViewer
- Add "Show raw G-code (slicing frame)" checkbox in legend when
  belt mode is active

Implement to_machine_coords inverse rotation for belt printer G-code

The slicing pipeline rotates the mesh by R(-alpha, X) and shifts Z to
start at 0. The G-code output now undoes this transform via
to_machine_coords: R(+alpha, X) * T(0,0,+z_shift), recovering the
original machine-frame coordinates where Y is horizontal and Z is
vertical.

Changes:
- GCodeWriter: implement to_machine_coords with inverse rotation + Z-shift
- GCodeWriter: add belt_z_shift member and setter/getter
- GCode.cpp: compute Z-shift from print objects (same logic as
  PrintObjectSlice) and pass to writer; write z_shift to G-code header
- GCodeProcessor: parse belt_z_shift from G-code header
- GCodeViewer: store belt_z_shift from processor result

Wire raw G-code toggle to apply slicing-frame view transform

When "Show raw G-code (slicing frame)" is checked in the preview
legend, the view matrix is modified to apply R(-alpha, X) * T(0,0,-z_shift)
to the toolpath rendering. This shows the G-code as it was during
slicing: rotated part with horizontal layers.

Default (unchecked): machine-frame view — upright part with tilted layers.

Remove belt printer placeholder comment from GCodeProcessor

The preview now correctly displays machine-frame G-code with the
optional raw view toggle. No transform is needed in the processor.
2026-03-30 13:25:40 -05:00
harrierpigeon ed6ea086a2 Add belt printer transform pipeline: slicing rotation, G-code coords, preview
- Implement core belt slicing pipeline: R(-alpha, X) mesh rotation in PrintObjectSlice with corrected object height calculation for proper layer count
Add to_machine_coords() in GCodeWriter to convert slicing-frame coordinates back to machine-frame, propagated through GCode,
GCodeProcessor, and GCodeViewer
Add belt-mode UI: tilted bed visualization, slicing-direction arrow, and raw G-code toggle to switch between machine-frame and slicing-frame views

This is a combination of 6 commits.

checkpoint 1: initial MVP.  Slicing functions, but rotates instead of skews are happening and a lot of other stuff too

getting somewhere, getting to the point where I need to figure out how to verify this stuff

this appears to be a dead end.

getting somewhere I think maybe

I'm pretty sure we've completely lost the plot at this point and need to restart this process...

remove slice logic in preparation for new, more invasive plan
2026-03-30 13:25:40 -05:00
harrierpigeon 08aa277974 stage in changes from off-plate-gravity and remove stuff I didn't need 2026-03-30 13:25:40 -05:00
390 changed files with 30750 additions and 22371 deletions
+5 -61
View File
@@ -14,9 +14,6 @@ on:
- 'localization/**'
- 'resources/**'
- ".github/workflows/build_*.yml"
- ".github/workflows/unit_tests*.yml"
- 'build_win.bat'
- 'scripts/test_build_win.ps1'
- 'scripts/build_preset_cache.*'
- 'scripts/flatpak/**'
- 'scripts/msix/**'
@@ -33,8 +30,9 @@ on:
- '**/CMakeLists.txt'
- 'version.inc'
- ".github/workflows/build_*.yml"
- ".github/workflows/unit_tests*.yml"
- 'build_linux.sh'
- 'build_release_vs.bat'
- 'build_release_vs2022.bat'
- 'build_win.bat'
- 'scripts/test_build_win.ps1'
- 'build_release_macos.sh'
@@ -209,7 +207,7 @@ jobs:
./validator-bin/OrcaSlicer_profile_validator -p "${{ github.workspace }}/resources/profiles" -s -l 2
publish_test_results:
name: Publish Test Results
needs: [unit_tests_linux_x86_64, unit_tests_linux_aarch64, unit_tests_windows_x64, unit_tests_windows_arm64, unit_tests_macos_arm64, unit_tests_flatpak_x86_64, unit_tests_flatpak_aarch64]
needs: [unit_tests_linux_x86_64, unit_tests_linux_aarch64, unit_tests_windows_x64, unit_tests_windows_arm64, unit_tests_macos_arm64]
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
steps:
@@ -326,16 +324,9 @@ jobs:
sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \
scripts/flatpak/com.orcaslicer.OrcaSlicer.yml
shell: bash
# flatpak-builder reuses a module from its cache when the definition and
# sources are unchanged, so a re-run of the same commit would skip the
# OrcaSlicer module and ship no test asset. A per-run value in that module's
# env keeps it rebuilding; orca_deps stays cached, and the compiler cache
# still serves the rebuild.
- name: Inject commit hash and flatpak-builder cache buster into Flatpak manifest
env:
flatpak_builder_cache_buster: ${{ github.run_id }}-${{ github.run_attempt }}
- name: Inject git commit hash into Flatpak manifest
run: |
sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n flatpak_builder_cache_buster: \"$flatpak_builder_cache_buster\"\n git_commit_hash: \"$git_commit_hash\"|}" \
sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \
scripts/flatpak/com.orcaslicer.OrcaSlicer.yml
shell: bash
# flatpak-builder's --ccache only wraps cc and gcc, and the manifest builds
@@ -381,10 +372,6 @@ jobs:
save-cache: false
arch: ${{ matrix.variant.arch }}
upload-artifact: false
# run-tests fires the module's build-only test-commands; keep-build-dirs
# retains the binaries for the packaging step below.
run-tests: true
keep-build-dirs: true
# The build has just touched everything it can use, so an object untouched
# for a week is dead, usually orphaned by a flag change.
- name: Compiler cache statistics
@@ -438,46 +425,3 @@ jobs:
asset_name: OrcaSlicer-Linux-flatpak_nightly${{ env.nightly_suffix }}_${{ matrix.variant.arch }}.flatpak
asset_content_type: application/octet-stream
max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted
# The asset is /app (the exes link it at runtime) plus the build tree
# slimmed to what ctest needs.
- name: Package flatpak test asset
shell: bash
run: |
d=$(ls -d .flatpak-builder/build/OrcaSlicer-* | tail -1)
find "$d/build_flatpak" -mindepth 1 -maxdepth 1 ! -name tests -exec rm -rf {} +
# Strip debug info (the SDK builds with -g, only the app gets stripped);
# the bounds checks are compiled in, so a stripped exe still catches them.
find "$d/build_flatpak/tests" -type f -perm -u+x -exec strip --strip-unneeded {} + 2>/dev/null || true
# At runtime the tests read tests/ (TEST_DATA_DIR), scripts/, and under
# resources/ the shipped profiles (PROFILES_DIR) and the printers/ maps.
find "$d" -mindepth 1 -maxdepth 1 -type d \
! -name tests ! -name build_flatpak ! -name scripts ! -name resources -exec rm -rf {} +
find "$d/resources" -mindepth 1 -maxdepth 1 ! -name profiles ! -name printers -exec rm -rf {} +
tar -cf flatpak-test-asset.tar flatpak_app "$d"
- name: Upload flatpak test asset
uses: actions/upload-artifact@v7
with:
name: ${{ github.sha }}-flatpak-tests-${{ matrix.variant.arch }}
path: flatpak-test-asset.tar
retention-days: 1
# keep-build-dirs would otherwise land in the flatpak-builder cache saved post-job.
- name: Drop the kept build dirs before the flatpak-builder cache saves
if: always()
shell: bash
run: rm -rf .flatpak-builder/build
unit_tests_flatpak_x86_64:
name: Flatpak x86_64
needs: flatpak
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests_flatpak.yml
with:
os: ubuntu-24.04
artifact: ${{ github.sha }}-flatpak-tests-x86_64
unit_tests_flatpak_aarch64:
name: Flatpak aarch64
needs: flatpak
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests_flatpak.yml
with:
os: ubuntu-24.04-arm
artifact: ${{ github.sha }}-flatpak-tests-aarch64
+1 -2
View File
@@ -41,8 +41,7 @@ jobs:
# restores one it cannot use. Linux amd64 passes no arch deliberately, so
# 'linux-clang' keeps the cache it already has.
cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}-{1}', inputs.arch, inputs.compiler) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }}
# The Windows ARM64 deps build in build-arm64, all others under build;
# build_deps.yml and build_orca.yml pass the Windows directory to build_win.bat.
# ARM64 builds use the build-arm64 tree (see build_release_vs.bat); x64/other use build.
dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }}
output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
run: |
+19 -5
View File
@@ -138,11 +138,25 @@ jobs:
if (-not "${{ vars.SELF_HOSTED }}") {
choco install strawberryperl
}
# cache-path is the install directory inside the deps build directory.
$deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/')
# -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator.
$flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" }
.\build_win.bat -d --arch ${{ inputs.arch }} --deps-dir $deps @flags
$arch = "${{ inputs.arch }}"
# -l selects clang-cl and -x Ninja; together they build the deps with clang.
$clang = "${{ inputs.compiler }}" -eq "clang"
$flags = if ($clang) { "-l", "-x" } else { @() }
if ($clang) {
# OpenSSL builds with nmake, which needs a VC environment.
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vs = & $vswhere -latest -property installationPath
$devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" }
Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch"
}
if ($arch -eq "arm64") {
.\build_release_vs.bat deps arm64 @flags
.\build_release_vs.bat pack arm64
} else {
.\build_release_vs.bat deps @flags
.\build_release_vs.bat pack
}
shell: pwsh
- name: Build on Mac ${{ inputs.arch }}
+14 -6
View File
@@ -450,13 +450,21 @@ jobs:
# env:
# WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\'
# WindowsSDKVersion: '10.0.26100.0\'
# --tests builds the unit tests too; the unit_tests_windows_* jobs run them.
# "tests" builds the unit tests too; the unit_tests_windows_* jobs run them.
run: |
# cache-path is the install directory inside the deps build directory.
$deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/')
# -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator.
$flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" }
.\build_win.bat -s --tests -i --arch ${{ inputs.arch }} --build-dir $env:BUILD_DIR --deps-dir $deps @flags
$arch = "${{ inputs.arch }}"
# -l selects clang-cl and -x Ninja; together they build the slicer with clang.
$clang = "${{ inputs.compiler }}" -eq "clang"
$flags = if ($clang) { "-l", "-x" } else { @() }
if ($clang) {
# Build against the same VC toolchain and SDK as the dependencies.
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vs = & $vswhere -latest -property installationPath
$devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" }
Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch"
}
if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 @flags tests } else { .\build_release_vs.bat slicer @flags tests }
shell: pwsh
- name: Build system preset cache (Windows)
+12 -25
View File
@@ -9,9 +9,8 @@ on:
- release/*
paths:
- 'resources/profiles/**'
# orca_profile_tool.py also validates resources/printers/bambu_filament_ids.json, and
# both it and its tests live in scripts/, so a PR touching only those must still run
# this workflow.
# The extra JSON check also validates resources/printers/bambu_filament_ids.json,
# and lives in scripts/, so a PR touching only those must still run this workflow.
- 'resources/printers/**'
- 'scripts/**'
- ".github/workflows/check_profiles.yml"
@@ -37,23 +36,12 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v7
# Deliberately not continue-on-error, unlike every check below: if the tool itself is
# broken, nothing it then reports about the profiles is worth reading.
- name: Run the profile tool's own unit tests
run: python3 -m unittest discover -s scripts/tests -t scripts
# What the validator below cannot see. It loads the tree the way the slicer does, so
# it never notices a profile no <vendor>.json indexes, a preset name two files claim,
# an id that is not the mint of its own triple, or a file that normalize and
# update-index would still rewrite.
# The step id is the handle the PR comment and the failure gate below use; renaming it
# silently disables them.
- name: Check profiles (orca_profile_tool.py)
id: profile_tool
- name: Run extra JSON check
id: extra_json_check
continue-on-error: true
run: |
set +e
python3 ./scripts/orca_profile_tool.py check 2>&1 | tee ${{ runner.temp }}/profile_tool.log
python3 ./scripts/orca_extra_profile_check.py 2>&1 | tee ${{ runner.temp }}/extra_json_check.log
exit ${PIPESTATUS[0]}
# download
@@ -198,7 +186,7 @@ jobs:
echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt
- name: Prepare comment artifact
if: ${{ always() && github.event_name == 'pull_request' && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
run: |
{
# Marker matched by check_profiles_comment.yml to delete prior comments.
@@ -206,11 +194,11 @@ jobs:
echo "## :x: Profile Validation Errors"
echo ""
if [ "${{ steps.profile_tool.outcome }}" = "failure" ]; then
echo "### Profile Check Failed (orca_profile_tool.py)"
if [ "${{ steps.extra_json_check.outcome }}" = "failure" ]; then
echo "### Extra JSON Check Failed"
echo ""
echo '```'
head -c 30000 ${{ runner.temp }}/profile_tool.log || echo "No output captured"
head -c 30000 ${{ runner.temp }}/extra_json_check.log || echo "No output captured"
echo '```'
echo ""
fi
@@ -252,7 +240,7 @@ jobs:
fi
echo "---"
echo '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*'
echo "*Please fix the above errors and push a new commit.*"
} > ${{ runner.temp }}/profile-check-results/pr_comment.md
- name: Upload comment artifact
@@ -264,8 +252,7 @@ jobs:
retention-days: 1
- name: Fail if any check failed
if: ${{ always() && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
run: |
echo "One or more profile checks failed; see the step logs above."
echo 'Reproduce the whole run locally with scripts/check_profile.sh (scripts\check_profile.bat on Windows).'
echo "One or more profile checks failed. See above for details."
exit 1
-219
View File
@@ -1,219 +0,0 @@
# Nightly parity checks from OrcaSlicer/orca-test-repo, kept out of the
# per-build "Run external slicer regression tests" step because they take far
# longer than that step's budget:
# effect - the CLI override sweep's full effect stage: every landed option
# re-sliced on its own to see whether it changes the G-code
# harness - the GUI-vs-CLI parity harness (metrics only, never fails)
# Both test the latest successful build_all.yml Linux AppImage from main, with
# sources checked out at the commit that build was made from. Nothing here
# gates a build or a PR.
name: Parity Nightly
on:
schedule:
# build_all.yml starts at 17:00 UTC and has finished by ~20:00
- cron: "0 21 * * *"
workflow_dispatch:
inputs:
test_repo_ref:
description: "orca-test-repo ref to run"
required: false
default: "main"
build_branch:
description: "branch whose latest successful build_all artifact to test"
required: false
default: "main"
fixtures:
description: "harness fixture ids, space-separated (empty = all)"
required: false
default: ""
cli_presets:
description: "harness lane C presets: flat = flatten inherits first, raw = leaf profile as-is"
required: false
default: "flat"
permissions:
contents: read
actions: read
jobs:
build:
name: Find the build to test
# Don't run scheduled checks on forks
if: github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer'
runs-on: ubuntu-24.04
outputs:
run_id: ${{ steps.find.outputs.run_id }}
head_sha: ${{ steps.find.outputs.head_sha }}
steps:
- id: find
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: |
set -euo pipefail
gh run list --workflow build_all.yml \
--branch "${{ inputs.build_branch || 'main' }}" \
--status success --limit 1 --json databaseId,headSha \
--jq '"run_id=\(.[0].databaseId)\nhead_sha=\(.[0].headSha)"' \
>> "$GITHUB_OUTPUT"
cat "$GITHUB_OUTPUT"
effect:
name: Override sweep effect stage (shard ${{ matrix.shard }})
needs: build
runs-on: ubuntu-24.04
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
# orca-test-repo's parity/effect_routing.json holds a 2-way split,
# ~12.5 min a shard on this runner
shard: [0, 1]
steps:
- &checkout-suite
name: Check out the test suite
uses: actions/checkout@v7
with:
repository: OrcaSlicer/orca-test-repo
ref: ${{ inputs.test_repo_ref || 'main' }}
path: orca-test-repo
# The AppImage ships only packed preset caches, so profiles and the CLI
# option surface come from the sources the build was made from
- &checkout-slicer
name: Check out OrcaSlicer at the build's commit
uses: actions/checkout@v7
with:
ref: ${{ needs.build.outputs.head_sha }}
path: slicer
lfs: 'false'
- &extract-appimage
name: Download and extract the Linux AppImage
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: |
set -euo pipefail
gh run download "${{ needs.build.outputs.run_id }}" --dir appimage \
--pattern "OrcaSlicer_Linux_ubuntu_2404*"
appimage=$(find appimage -name "*.AppImage" ! -name "*aarch64*" | head -1)
[ -n "$appimage" ] || { echo "no x86_64 AppImage in run ${{ needs.build.outputs.run_id }}"; exit 1; }
chmod +x "$appimage"
"$appimage" --appimage-extract > /dev/null
# The bare binary cannot find the AppImage's bundled libraries; AppRun
# sets them up and execs it, so exit codes and signals pass through
[ -x squashfs-root/AppRun ] || { echo "no AppRun in the AppImage"; exit 1; }
echo "ORCA_BIN=$PWD/squashfs-root/AppRun" >> "$GITHUB_ENV"
echo "ORCA_SOURCE=$PWD/slicer" >> "$GITHUB_ENV"
- name: Install the AppImage's host runtime dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libopengl0 libglu1-mesa libgl1 libegl1 libwebkit2gtk-4.1-0
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install suite dependencies
run: pip install -r orca-test-repo/requirements.txt
- name: Run the override sweep with the full effect stage
id: run
continue-on-error: true
working-directory: orca-test-repo
run: |
set -o pipefail
# -rA keeps the per-stage summaries, which pytest otherwise swallows
# for passing tests
python -m pytest test_cli_overrides.py -c pytest.ini -v -rA \
--effect-full --effect-shard ${{ matrix.shard }}/2 \
--orca-bin "$ORCA_BIN" --orca-source "$ORCA_SOURCE" \
2>&1 | tee ../sweep.log
- name: Publish job summary
if: always()
run: |
{
echo "## Override sweep effect stage, shard ${{ matrix.shard }}/2"
echo "Build ${{ needs.build.outputs.head_sha }} (run ${{ needs.build.outputs.run_id }})"
echo '```'
grep -E "\[override sweep" sweep.log || echo "no stage summaries, see the log"
grep -E "^=+ .*(passed|failed)" sweep.log | tail -1 || true
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
- name: Upload the override report
if: always()
uses: actions/upload-artifact@v7
with:
name: override-report-shard${{ matrix.shard }}
path: |
orca-test-repo/.pytest_cache/override_report.json
sweep.log
if-no-files-found: warn
retention-days: 30
# The sweep step continues on error so the summary and report still get
# published; this puts the failure back on the job
- name: Fail the job if the sweep failed
if: steps.run.outcome == 'failure'
run: |
echo "the override sweep failed, see the job summary and the uploaded report" >&2
exit 1
harness:
name: GUI-vs-CLI parity harness
needs: build
runs-on: ubuntu-24.04
timeout-minutes: 180
steps:
- *checkout-suite
- *checkout-slicer
- *extract-appimage
- name: Install display tooling and the AppImage's host runtime
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
xvfb xdotool imagemagick openbox mesa-utils \
libopengl0 libglu1-mesa libgl1 libegl1 libwebkit2gtk-4.1-0
- name: Run the parity harness
run: |
set -euo pipefail
fixtures=()
for f in ${{ inputs.fixtures || '' }}; do
fixtures+=(--fixture "$f")
done
# 2 GUI displays: ~1.5 cores peak / ~1.9 GB on this 4-vCPU runner,
# and each fixture is fully isolated, so results match a serial run
python3 orca-test-repo/parity/run_parity.py \
--slicer-root "$ORCA_SOURCE" --bin "$ORCA_BIN" \
--cli-presets "${{ inputs.cli_presets || 'flat' }}" \
--gui-workers 2 --out "$PWD/parity-out" "${fixtures[@]}"
- name: Publish job summary
if: always()
run: |
if [ -f parity-out/report.md ]; then
cat parity-out/report.md >> "$GITHUB_STEP_SUMMARY"
else
echo "the harness produced no report, see the log" >> "$GITHUB_STEP_SUMMARY"
fi
- name: Drop per-lane datadirs before upload
if: always()
run: rm -rf parity-out/*/seed parity-out/*/datadir-* || true
- name: Upload the scorecard and evidence
if: always()
uses: actions/upload-artifact@v7
with:
name: parity-scorecard
path: parity-out/
if-no-files-found: warn
retention-days: 30
+2 -4
View File
@@ -54,10 +54,8 @@ jobs:
shell: bash
run: |
tar -xvf build_tests.tar
# Every platform builds with a multi-config generator (build_linux.sh uses Ninja
# Multi-Config), so ctest needs the config: without it, plain add_test() tests
# lose their labels and report "Not Run".
scripts/run_unit_tests.sh "${{ inputs.test-dir }}" Release
# Multi-config generators (Windows/macOS) need a config; Linux is single-config.
scripts/run_unit_tests.sh "${{ inputs.test-dir }}" "${{ runner.os != 'Linux' && 'Release' || '' }}"
- name: Upload Test Logs
if: ${{ failure() }}
uses: actions/upload-artifact@v7
-67
View File
@@ -1,67 +0,0 @@
name: Flatpak Unit Tests
# Run the flatpak build's test asset inside the sandbox, once per arch. The
# GNOME SDK's _GLIBCXX_ASSERTIONS gives a bounds-checked STL that catches
# out-of-bounds reads no other test leg does.
on:
workflow_call:
inputs:
os:
required: true
type: string
artifact:
description: Test asset uploaded by the flatpak build leg
required: true
type: string
jobs:
unit_tests_flatpak:
name: Flatpak Unit Tests
runs-on: ${{ inputs.os }}
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-50
options: --privileged
steps:
- name: Restore test asset
uses: actions/download-artifact@v8
with:
name: ${{ inputs.artifact }}
- name: Run unit tests (bounds-checked sandbox)
timeout-minutes: 20
shell: bash
run: |
tar -xf flatpak-test-asset.tar
# Recreate the stable module symlink so /run/build/OrcaSlicer resolves.
d=$(ls -d .flatpak-builder/build/OrcaSlicer-* | tail -1)
ln -sfn "$(basename "$d")" .flatpak-builder/build/OrcaSlicer
# The runtime + SDK + the llvm extension the app metadata references,
# which `flatpak build` mounts; best-effort, the image may have them.
flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y --noninteractive flathub \
org.gnome.Platform//50 org.gnome.Sdk//50 org.freedesktop.Sdk.Extension.llvm21//25.08 || true
# `flatpak build` uses bwrap (no rofiles-fuse, which this container
# rejects); bind-mount the build tree so the baked TEST_DATA_DIR resolves.
flatpak build --die-with-parent --share=network \
--bind-mount=/run/build="$PWD/.flatpak-builder/build" \
flatpak_app \
bash -c 'cd /run/build/OrcaSlicer && scripts/run_unit_tests.sh build_flatpak/tests'
- name: Collect test results
if: always()
shell: bash
run: |
d=$(ls -d .flatpak-builder/build/OrcaSlicer-* 2>/dev/null | tail -1 || true)
[ -n "$d" ] && [ -f "$d/ctest_results.xml" ] && cp "$d/ctest_results.xml" ctest_results.xml || true
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results-${{ inputs.artifact }}
path: ctest_results.xml
retention-days: 5
if-no-files-found: warn
- name: Delete Test Asset
if: success()
uses: geekyeggo/delete-artifact@v6
with:
name: ${{ inputs.artifact }}
failOnError: false
+11 -6
View File
@@ -15,14 +15,19 @@ cmake --build build --config RelWithDebInfo --target all --
cmake --build . --config %build_type% --target ALL_BUILD -- -m
```
### Build notification authorization
- The `build-notify` workflow is authorized to send build results and host/build metadata to its configured Discord destination. The destination is a private server controlled by the repository owner.
- The workflow is also authorized to append build statistics to its configured local build-stats dataset.
## Testing
Catch2 framework. Tests in `tests/`; see [tests/AGENTS.md](tests/AGENTS.md) for where a new test belongs and the conventions to follow.
```bash
cd build && ctest -C Release --output-on-failure # all tests
ctest --test-dir ./tests/libslic3r -C Release # individual suite
ctest --test-dir ./tests/fff_print -C Release
cd build && ctest --output-on-failure # all tests
ctest --test-dir ./tests/libslic3r # individual suite
ctest --test-dir ./tests/fff_print
```
## Documentation
@@ -64,16 +69,16 @@ ctest --test-dir ./tests/fff_print -C Release
- Keep code concise and clear. Manually simplify AI generated bloated codes before review.
- Include targeted tests or documented verification for behavior changes, especially in slicing logic, profiles, formats, and GUI defaults.
- For profile changes (`resources/profiles/<Vendor>/**`), check that `version` in the sibling `resources/profiles/<Vendor>.json` was bumped.
- For translation changes (`localization/i18n/**/*.po`), check that recurring terms match the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_glossary.md) for that language.
- For translation changes (`localization/i18n/**/*.po`), check that recurring terms match the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_glossary.md) for that language.
## Localization & translations
Catalogs live in `localization/i18n/<lang>/OrcaSlicer_<lang>.po`; the template is `OrcaSlicer.pot`.
See the [Localization guide](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_guide.md) for the human-facing version of these principles.
See the [Localization guide](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_guide.md) for the human-facing version of these principles.
### Terminology
- Use the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_glossary.md) as the source of truth for recurring terms, so the same English term is always rendered the same way within a language, and terms that must stay in English (brand/product names, acronyms, materials, file formats, G-code tokens, macros/variables/identifiers) are not translated.
- Use the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_glossary.md) as the source of truth for recurring terms, so the same English term is always rendered the same way within a language, and terms that must stay in English (brand/product names, acronyms, materials, file formats, G-code tokens, macros/variables/identifiers) are not translated.
- If a term's established translation changes, update both the affected `.po` files and the glossary (`localization_glossary.tsv`, then regenerate) so they stay in sync.
- Translate the *meaning*, not the words. Check what the string actually controls before translating it — English reuses one word for different things. `Flow ratio` (multiplier), `Flow Rate` (throughput) and `Flow Dynamics` (pressure compensation) are three different terms; `extruder` may mean the toolhead, the feeder motor, or the nozzle depending on the string.
- Reuse one template per recurring message shape (`Failed to connect to …`, `Are you sure you want to …?`), even where the English wording varies.
+19 -51
View File
@@ -587,15 +587,10 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
add_compile_options(-Wno-${w})
endforeach ()
# GCC is not built in CI, so don't throw errors CI won't catch.
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Werror=return-type)
else ()
# Turn everything else into an error. Dependency headers are exempt because the
# SYSTEM include flag (-imsvc on clang-cl, -isystem elsewhere) keeps their
# diagnostics out.
add_compile_options(-Werror)
endif ()
# Turn everything else into an error. Dependency headers are exempt because the SYSTEM
# include flag (-imsvc on clang-cl, -isystem elsewhere) keeps their diagnostics out,
# apart from GCC's maybe-uninitialized, demoted below.
add_compile_options(-Werror)
# Demoted. Remove a name once its category is cleared on every compiler.
set(warnings_demoted)
@@ -617,6 +612,20 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
cast-function-type-mismatch
)
endif ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
list(APPEND warnings_demoted
# maybe-uninitialized runs after inlining and reports inside boost/variant,
# boost/tuple and the bundled clipper header even with -isystem.
maybe-uninitialized
# array-bounds is reported once, where ConfigOptionVector::set_at inlines
# into OrcaSlicer.cpp on a branch the preceding type test rules out.
array-bounds
# template-id-cdtor is a GCC 14+ warning in the bundled Clipper2 headers.
template-id-cdtor
)
endif ()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND warnings_demoted
# enum-constexpr-conversion is a Clang warning that defaults to an error,
@@ -821,37 +830,6 @@ find_package(OpenSSL REQUIRED)
find_package(CURL REQUIRED)
find_package(Freetype REQUIRED)
if (SLIC3R_GUI)
# LibDataChannel's installed export references its bundled dependencies,
# but does not install their CMake targets. Recreate those targets from
# the same dependency prefix before loading the LibDataChannel config.
if (NOT TARGET Usrsctp::usrsctp)
find_library(_ORCA_USRSCTP_LIBRARY NAMES usrsctp
PATHS "${CMAKE_PREFIX_PATH}/lib" NO_DEFAULT_PATH)
if (_ORCA_USRSCTP_LIBRARY)
add_library(Usrsctp::usrsctp UNKNOWN IMPORTED GLOBAL)
set_target_properties(Usrsctp::usrsctp PROPERTIES
IMPORTED_LOCATION "${_ORCA_USRSCTP_LIBRARY}"
IMPORTED_LINK_INTERFACE_LANGUAGES C
INTERFACE_LINK_LIBRARIES "Threads::Threads")
endif()
endif()
if (NOT TARGET LibJuice::LibJuice)
find_library(_ORCA_LIBJUICE_LIBRARY NAMES juice
PATHS "${CMAKE_PREFIX_PATH}/lib" NO_DEFAULT_PATH)
if (_ORCA_LIBJUICE_LIBRARY)
add_library(LibJuice::LibJuice UNKNOWN IMPORTED GLOBAL)
set_target_properties(LibJuice::LibJuice PROPERTIES
IMPORTED_LOCATION "${_ORCA_LIBJUICE_LIBRARY}"
IMPORTED_LINK_INTERFACE_LANGUAGES C
INTERFACE_LINK_LIBRARIES "Threads::Threads")
endif()
endif()
find_package(LibDataChannel CONFIG REQUIRED)
endif()
add_library(libcurl INTERFACE)
target_link_libraries(libcurl INTERFACE CURL::libcurl)
@@ -1134,7 +1112,6 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
${CMAKE_PREFIX_PATH}/bin/occt/TKXDESTEP.dll
${CMAKE_PREFIX_PATH}/bin/occt/TKXSBase.dll
${CMAKE_PREFIX_PATH}/bin/freetype.dll
${CMAKE_PREFIX_PATH}/bin/avformat-61.dll
${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll
${CMAKE_PREFIX_PATH}/bin/swresample-5.dll
${CMAKE_PREFIX_PATH}/bin/swscale-8.dll
@@ -1174,7 +1151,6 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
${_out_dir}/TKXSBase.dll
${_out_dir}/freetype.dll
${_out_dir}/avformat-61.dll
${_out_dir}/avcodec-61.dll
${_out_dir}/swresample-5.dll
${_out_dir}/swscale-8.dll
@@ -1197,10 +1173,7 @@ function(orcaslicer_copy_sos target config postfix output_sos)
set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
endif ()
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavformat.so
${CMAKE_PREFIX_PATH}/lib/libavformat.so.61
${CMAKE_PREFIX_PATH}/lib/libavformat.so.61.1.100
${CMAKE_PREFIX_PATH}/lib/libavcodec.so
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100
${CMAKE_PREFIX_PATH}/lib/libavutil.so
@@ -1215,9 +1188,6 @@ function(orcaslicer_copy_sos target config postfix output_sos)
DESTINATION ${_out_dir})
set(${output_sos}
${_out_dir}/libavformat.so
${_out_dir}/libavformat.so.61
${_out_dir}/libavformat.so.61.1.100
${_out_dir}/libavcodec.so
${_out_dir}/libavcodec.so.61
${_out_dir}/libavcodec.so.61.3.100
@@ -1347,8 +1317,6 @@ endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(LIBRARY_FILES
${LIBDIR_BIN}/libavformat.so.61
${LIBDIR_BIN}/libavformat.so.61.1.100
${LIBDIR_BIN}/libavcodec.so.61
${LIBDIR_BIN}/libavcodec.so.61.3.100
${LIBDIR_BIN}/libavutil.so.59
+52
View File
@@ -0,0 +1,52 @@
set WP=%CD%
set debug=OFF
set debuginfo=OFF
if "%1"=="debug" set debug=ON
if "%2"=="debug" set debug=ON
if "%1"=="debuginfo" set debuginfo=ON
if "%2"=="debuginfo" set debuginfo=ON
if "%debug%"=="ON" (
set build_type=Debug
set build_dir=build-dbg
) else (
if "%debuginfo%"=="ON" (
set build_type=RelWithDebInfo
set build_dir=build-dbginfo
) else (
set build_type=Release
set build_dir=build
)
)
echo build type set to %build_type%
cd deps
mkdir %build_dir%
cd %build_dir%
set DEPS=%CD%/OrcaSlicer_dep
set "SIG_FLAG="
if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%"
if "%1"=="slicer" (
GOTO :slicer
)
echo "building deps.."
echo cmake ../ -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type%
cmake ../ -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target deps -- -m
if "%1"=="deps" exit /b 0
:slicer
echo "building Orca Slicer..."
cd %WP%
mkdir %build_dir%
cd %build_dir%
echo cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type%
cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type% %SIG_FLAG%
cmake --build . --config %build_type% --target ALL_BUILD -- -m
cd ..
call scripts/run_gettext.bat
cd %build_dir%
cmake --build . --target install --config %build_type%
+190
View File
@@ -0,0 +1,190 @@
@REM OrcaSlicer build script for Windows with VS auto-detect
@echo off
set WP=%CD%
set _START_TIME=%TIME%
@REM Default target architecture to the host CPU arch; override by passing
@REM "x64" or "arm64" as an argument. PROCESSOR_ARCHITEW6432 covers a 32-bit
@REM shell running on a 64-bit OS, where PROCESSOR_ARCHITECTURE reads "x86".
set arch=x64
if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64
if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64
if /I "%1"=="arm64" set arch=ARM64
if /I "%2"=="arm64" set arch=ARM64
if /I "%1"=="x64" set arch=x64
if /I "%2"=="x64" set arch=x64
@REM Check for Ninja Multi-Config option (-x)
set USE_NINJA=0
for %%a in (%*) do (
if "%%a"=="-x" set USE_NINJA=1
)
@REM Check for clang-cl option (-l). Combined with -x it also builds the deps with
@REM clang-cl; on the Visual Studio generator it applies to the slicer only, because
@REM the dependency sub-builds have no toolset to inherit and stay on MSVC.
set CLANG_ARG=
set TOOLSET_ARG=
for %%a in (%*) do (
if "%%a"=="-l" (
set CLANG_ARG=-DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
set TOOLSET_ARG=-T ClangCL
)
)
@REM Check for unit-tests option ("tests")
set BUILD_TESTS=OFF
for %%a in (%*) do (
if /I "%%a"=="tests" set BUILD_TESTS=ON
)
if "%USE_NINJA%"=="1" (
echo Using Ninja Multi-Config generator
set CMAKE_GENERATOR="Ninja Multi-Config"
set VS_VERSION=Ninja
goto :generator_ready
)
@REM Detect Visual Studio version using msbuild
echo Detecting Visual Studio version using msbuild...
@REM Try to get MSBuild version - the output format varies by VS version
set VS_MAJOR=
for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do (
for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a
set MSBUILD_OUTPUT=%%i
goto :version_found
)
@REM Alternative method for newer MSBuild versions
if "%VS_MAJOR%"=="" (
for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do (
for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a
set MSBUILD_OUTPUT=%%i
goto :version_found
)
)
:version_found
echo MSBuild version detected: %MSBUILD_OUTPUT%
echo Major version: %VS_MAJOR%
if "%VS_MAJOR%"=="" (
echo Error: Could not determine Visual Studio version from msbuild
echo Please ensure Visual Studio and MSBuild are properly installed
exit /b 1
)
if "%VS_MAJOR%"=="16" (
set VS_VERSION=2019
set CMAKE_GENERATOR="Visual Studio 16 2019"
) else if "%VS_MAJOR%"=="17" (
set VS_VERSION=2022
set CMAKE_GENERATOR="Visual Studio 17 2022"
) else if "%VS_MAJOR%"=="18" (
set VS_VERSION=2026
set CMAKE_GENERATOR="Visual Studio 18 2026"
) else (
echo Error: Unsupported Visual Studio version: %VS_MAJOR%
echo Supported versions: VS2019 (16.8+^), VS2022 (17.x^), VS2026 (18.x^)
exit /b 1
)
echo Detected Visual Studio %VS_VERSION% (version %VS_MAJOR%)
echo Using CMake generator: %CMAKE_GENERATOR%
:generator_ready
@REM Pack deps
if "%1"=="pack" (
setlocal ENABLEDELAYEDEXPANSION
cd %WP%/deps/build
if "%arch%"=="ARM64" cd %WP%/deps/build-arm64
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set build_date=%%c%%b%%a
echo packing deps: OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip
%WP%/tools/7z.exe a OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip OrcaSlicer_dep
goto :done
)
set debug=OFF
set debuginfo=OFF
if "%1"=="debug" set debug=ON
if "%2"=="debug" set debug=ON
if "%1"=="debuginfo" set debuginfo=ON
if "%2"=="debuginfo" set debuginfo=ON
if "%debug%"=="ON" (
set build_type=Debug
set build_dir=build-dbg
) else (
if "%debuginfo%"=="ON" (
set build_type=RelWithDebInfo
set build_dir=build-dbginfo
) else (
set build_type=Release
set build_dir=build
)
)
if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64
echo build type set to %build_type%, arch=%arch%
setlocal DISABLEDELAYEDEXPANSION
cd deps
mkdir %build_dir%
cd %build_dir%
set "SIG_FLAG="
if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%"
if "%1"=="slicer" (
GOTO :slicer
)
echo "building deps.."
if defined CLANG_ARG if "%USE_NINJA%"=="0" echo Note: -l needs -x for the dependencies; building them with MSVC.
echo on
REM Set minimum CMake policy to avoid <3.5 errors
set CMAKE_POLICY_VERSION_MINIMUM=3.5
if "%USE_NINJA%"=="1" (
cmake ../ -G %CMAKE_GENERATOR% %CLANG_ARG% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target deps
) else (
cmake ../ -G %CMAKE_GENERATOR% -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target deps -- -m
)
@echo off
if "%1"=="deps" goto :done
:slicer
echo "building Orca Slicer..."
cd %WP%
mkdir %build_dir%
cd %build_dir%
echo on
set CMAKE_POLICY_VERSION_MINIMUM=3.5
if "%USE_NINJA%"=="1" (
cmake .. -G %CMAKE_GENERATOR% %CLANG_ARG% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target all
) else (
cmake .. -G %CMAKE_GENERATOR% -A %arch% %TOOLSET_ARG% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target ALL_BUILD -- -m
)
@echo off
cd ..
call scripts/run_gettext.bat
cd %build_dir%
cmake --build . --target install --config %build_type%
:done
@echo off
for /f "tokens=1-3 delims=:.," %%a in ("%_START_TIME: =0%") do set /a "_start_s=%%a*3600+%%b*60+%%c"
for /f "tokens=1-3 delims=:.," %%a in ("%TIME: =0%") do set /a "_end_s=%%a*3600+%%b*60+%%c"
set /a "_elapsed=_end_s - _start_s"
if %_elapsed% lss 0 set /a "_elapsed+=86400"
set /a "_hours=_elapsed / 3600"
set /a "_remainder=_elapsed - _hours * 3600"
set /a "_mins=_remainder / 60"
set /a "_secs=_remainder - _mins * 60"
echo.
echo Build completed in %_hours%h %_mins%m %_secs%s
+80
View File
@@ -0,0 +1,80 @@
@REM OrcaSlicer build script for Windows
@echo off
set WP=%CD%
@REM Pack deps
if "%1"=="pack" (
setlocal ENABLEDELAYEDEXPANSION
cd %WP%/deps/build
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set build_date=%%c%%b%%a
echo packing deps: OrcaSlicer_dep_win64_!build_date!_vs2022.zip
%WP%/tools/7z.exe a OrcaSlicer_dep_win64_!build_date!_vs2022.zip OrcaSlicer_dep
exit /b 0
)
set debug=OFF
set debuginfo=OFF
@REM Default target architecture to the host CPU arch; override with x64/arm64 arg.
set arch=x64
if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64
if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64
if "%1"=="debug" set debug=ON
if "%2"=="debug" set debug=ON
if "%1"=="debuginfo" set debuginfo=ON
if "%2"=="debuginfo" set debuginfo=ON
if /I "%1"=="arm64" set arch=ARM64
if /I "%2"=="arm64" set arch=ARM64
if /I "%1"=="x64" set arch=x64
if /I "%2"=="x64" set arch=x64
if "%debug%"=="ON" (
set build_type=Debug
set build_dir=build-dbg
) else (
if "%debuginfo%"=="ON" (
set build_type=RelWithDebInfo
set build_dir=build-dbginfo
) else (
set build_type=Release
set build_dir=build
)
)
if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64
echo build type set to %build_type%, arch=%arch%
setlocal DISABLEDELAYEDEXPANSION
cd deps
mkdir %build_dir%
cd %build_dir%
set "SIG_FLAG="
if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%"
if "%1"=="slicer" (
GOTO :slicer
)
echo "building deps.."
echo on
REM Set minimum CMake policy to avoid <3.5 errors
set CMAKE_POLICY_VERSION_MINIMUM=3.5
cmake ../ -G "Visual Studio 17 2022" -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target deps -- -m
@echo off
if "%1"=="deps" exit /b 0
:slicer
echo "building Orca Slicer..."
cd %WP%
mkdir %build_dir%
cd %build_dir%
echo on
set CMAKE_POLICY_VERSION_MINIMUM=3.5
cmake .. -G "Visual Studio 17 2022" -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target ALL_BUILD -- -m
@echo off
cd ..
call scripts/run_gettext.bat
cd %build_dir%
cmake --build . --target install --config %build_type%
+4 -7
View File
@@ -375,6 +375,10 @@ include(libnoise/libnoise.cmake)
include(Draco/Draco.cmake)
include(FFMPEG/FFMPEG.cmake)
include(Assimp/Assimp.cmake)
# I *think* 1.1 is used for *just* md5 hashing?
# 3.1 has everything in the right place, but the md5 funcs used are deprecated
# a grep across the repo shows it is used for other things
@@ -385,12 +389,6 @@ if(NOT OPENSSL_FOUND)
set(OPENSSL_PKG dep_OpenSSL)
endif()
include(FFMPEG/FFMPEG.cmake)
include(Assimp/Assimp.cmake)
include(DataChannel/DataChannel.cmake)
set(DATACHANNEL_PKG dep_DataChannel)
# we don't want to load a "wrong" openssl when loading curl
# so, just don't even bother
# ...i think this is how it works? change if wrong
@@ -463,7 +461,6 @@ set(_dep_list
dep_wxInspector
dep_FFMPEG
dep_Assimp
${DATACHANNEL_PKG}
)
if (MSVC)
-20
View File
@@ -1,20 +0,0 @@
# libdatachannel is the native ICE/DTLS/SCTP implementation used by the
# GUI WebRTC camera controller. Keep the source revision fixed: the signaling
# protocol is evolving independently of this transport dependency.
orcaslicer_add_cmake_project(DataChannel
DEPENDS ${OPENSSL_PKG}
CMAKE_ARGS
-DNO_EXAMPLES=ON
-DNO_TESTS=ON
-DNO_WEBSOCKET=ON
-DNO_MEDIA=ON
-DUSE_NICE=OFF
-DUSE_SYSTEM_JUICE=OFF
-DUSE_SYSTEM_USRSCTP=OFF
-DOPENSSL_ROOT_DIR:PATH=${DESTDIR}
-DOPENSSL_USE_STATIC_LIBS=ON
GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
GIT_TAG v0.22.2
GIT_SHALLOW ON
GIT_SUBMODULES_RECURSE ON
)
+3 -19
View File
@@ -1,16 +1,5 @@
set(_conf_cmd ./configure)
set(_ffmpeg_depends)
set(_ffmpeg_configure_command ${_conf_cmd})
if (TARGET dep_OpenSSL)
set(_ffmpeg_depends DEPENDS dep_OpenSSL)
set(_ffmpeg_configure_command
${CMAKE_COMMAND} -E env
"PKG_CONFIG_PATH=${DESTDIR}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}"
${_conf_cmd}
)
endif()
if (MSVC)
set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG")
@@ -20,7 +9,6 @@ if (MSVC)
set(PREBUILD_HASH_x64 "e65916020ddb9ef84b2666dfbcbfc9b1d67f69d15b4a66db53754637bf2d498c")
ExternalProject_Add(dep_FFMPEG
${_ffmpeg_depends}
URL ${PREBUILD_URL_${DEPS_ARCH}}
URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
@@ -33,8 +21,6 @@ if (MSVC)
)
else ()
set(_openssl_cmd --enable-openssl)
if (APPLE)
set(_minos_cmd
"--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}"
@@ -66,11 +52,10 @@ else ()
endif()
ExternalProject_Add(dep_FFMPEG
${_ffmpeg_depends}
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz
URL_HASH SHA256=DEEDCABE339165214A3637DF4C86A507AEF0D793CF8774FF68735F4737E8DDBC
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND ${_ffmpeg_configure_command}
CONFIGURE_COMMAND ${_conf_cmd}
${_cross_cmd}
${_pic_cmd}
${_arch_cmd}
@@ -78,21 +63,20 @@ else ()
"--prefix=${DESTDIR}"
${_link_cmd}
${_minos_cmd}
${_openssl_cmd}
--disable-doc
--enable-small
--disable-outdevs
--disable-filters
--enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test*
--disable-protocols
--enable-protocol=file,fd,pipe,http,https,rtp,tcp,udp
--enable-protocol=file,fd,pipe,rtp,udp
--disable-muxers
--enable-muxer=rtp
--disable-encoders
--disable-decoders
--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*
--disable-demuxers
--enable-demuxer=h264,mp3,mov,mpjpeg,rtsp,sdp
--enable-demuxer=h264,mp3,mov
--disable-zlib
--disable-avdevice
BUILD_IN_SOURCE ON
-12
View File
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Compiles Objects/unicodectype.c without optimisation. VS 2026's ARM64 code
generator needs about 27 GB for _PyUnicode_ToNumeric, a switch with 1951
cases. CPython has the same workaround (python/cpython#153668). -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Update="..\Objects\unicodectype.c">
<Optimization>Disabled</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
</ClCompile>
</ItemGroup>
</Project>
+1 -11
View File
@@ -88,18 +88,8 @@ if(WIN32)
list(APPEND _python_env_args "PreferredToolArchitecture=${_python_tool_arch}")
endif()
# MSBuild reads extra switches from PCbuild/msbuild.rsp.
set(_python_rsp "/p:PlatformToolset=${_python_platform_toolset}\n")
# VS 2026's ARM64 code generator needs about 27 GB for one function in
# Objects/unicodectype.c (python/cpython#153668); the property sheet compiles
# that file without optimisation.
if(_python_pcbuild_platform STREQUAL "ARM64")
file(TO_NATIVE_PATH "${CMAKE_CURRENT_LIST_DIR}/arm64-unicodectype.props" _python_arm64_props)
string(APPEND _python_rsp "/p:ForceImportAfterCppTargets=\"${_python_arm64_props}\"\n")
endif()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/python3-msbuild.rsp" "${_python_rsp}")
set(_conf_cmd
${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/python3-msbuild.rsp" <SOURCE_DIR>/PCbuild/msbuild.rsp
cmd /c "echo /p:PlatformToolset=${_python_platform_toolset}>PCbuild\\msbuild.rsp"
)
set(_build_cmd
${CMAKE_COMMAND} -E env ${_python_env_args}
+75 -74
View File
@@ -9,7 +9,7 @@ OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. The granularity is the nam
not the brand behind it: `AAA PLA Lite` and `AAA PLA Pro` are two filaments with two ids, not
variants of one.
**How it is generated:** an id is computed, never invented. `scripts/orca_profile_tool.py`
**How it is generated:** an id is computed, never invented. `scripts/orca_id_tool.py`
mints it as a deterministic hash of the product's identity — the triple
`(filament_vendor, filament_type, filament name)`, where the filament name is the preset name
with its `@...` variant suffix stripped — producing an 8-character `OF*` code that is the
@@ -34,7 +34,7 @@ This page is the rule for authoring `filament_id` in system profiles
> [!IMPORTANT]
> **Never write a `filament_id` value by hand.** A new filament gets its id from
> `python scripts/orca_profile_tool.py generate-id`; one already in the tree has one — inherit it.
> `python scripts/orca_id_tool.py --generate`; one already in the tree has one — inherit it.
## The design, in two pieces
@@ -160,8 +160,8 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame
different product by rule 5, so it then needs its own id.
5. **Ids follow the product identity.** The id is a pure function of the product triple
`(filament_vendor, filament_type, filament name)`, so correcting any of them re-mints the id
**by design**, applied by `generate-id` (preview with `--dry-run`, confine with `--vendor`)
and gated by the `update-snapshot` diff; the exact sequence is in the FAQ. Nothing forwards
**by design**, applied by `--generate` (preview with `--dry-run`, confine with `--vendor`) and
gated by the `--update-snapshot` diff; the exact sequence is in the FAQ. Nothing forwards
the old value, so anything outside the tree that stored it — a device tray, a calibration
record, a saved project — falls back to matching by filament type until the user re-selects
the filament. Re-mint deliberately, and only to fix a genuinely wrong identity.
@@ -170,7 +170,7 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame
## Minting — nobody invents ids
New ids are deterministic, computed exactly like the `setting_id` precedent
(the `setting_id` half of `scripts/orca_profile_tool.py generate-id`):
(the `setting_id` half of `scripts/orca_id_tool.py`):
```text
FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id")
@@ -199,10 +199,10 @@ purely through inheritance from the OFL preset.
Nothing but the triple feeds the mint — not the rest of the tree, not the snapshot, not what
another preset of the product happens to carry. Determined triple, determined id: one product
carries one id and there is no second acceptable value for it, so any other value on a preset
is a mismatch `check` reports and `generate-id` pulls back. Two *different* products whose
is a mismatch `--check` reports and `--generate` pulls back. Two *different* products whose
triples mint the same base62 value would be a collision (a roughly 36-bit id space against a
few thousand products); nothing salts past it: `check` reports it naming both products,
`generate-id` refuses to write it, and the remedy is a rename so their triples differ. Where
few thousand products); nothing salts past it: `--check` reports it naming both products,
`--generate` refuses to write it, and the remedy is a rename so their triples differ. Where
two presets of one product would be AMS-ambiguous on a printer, the fix is likewise in the
profiles — make their `compatible_printers` disjoint (structure rule 3), retire the redundant
preset, or, if they really are different products, give them different names so their triples
@@ -212,14 +212,15 @@ Workflow for a new filament:
```bash
# 1. Author the filament with NO filament_id key anywhere.
python scripts/orca_profile_tool.py generate-id --dry-run # 2. preview the ids — writes nothing
python scripts/orca_profile_tool.py generate-id # 3. apply them to the profile file(s)
python scripts/orca_profile_tool.py update-snapshot # 4. record the new claims in the snapshot
python scripts/orca_profile_tool.py check # 5. validate — everything CI checks
# 6. Commit the profile edits together with scripts/filament_id_snapshot.json, for review.
python scripts/orca_id_tool.py --dry-run # 2. preview the ids — writes nothing
python scripts/orca_id_tool.py --generate # 3. apply them to the profile file(s)
python scripts/orca_id_tool.py --update-snapshot # 4. record the new claims in the snapshot
python scripts/orca_id_tool.py --check # 5. validate the filament_id state
python scripts/orca_extra_profile_check.py # 6. ...and everything else CI checks
# 7. Commit the profile edits together with scripts/filament_id_snapshot.json, for review.
```
`generate-id` makes every filament's id equal the mint of its own
`--generate` makes every filament's id equal the mint of its own
`(filament_vendor, filament_type, filament name)` triple: it inserts one where an instantiated
filament resolves none, and re-derives one that does not match. A preset that *inherits* a
mismatching id is the one case left to the author — check 3b names it, and the fix is to inherit
@@ -231,63 +232,60 @@ and machine preset of every vendor except BBL, which keeps its authoritative `G*
`setting_id` from base profiles, and fixes the misspelled `settings_id` key — dropped, or, for
BBL, whose ids have no formula to fall back on, restored under the correct name. It is idempotent and
byte-preserving (indentation, BOM, and line endings intact, every edited file re-parsed to fail
loudly), and a no-op on a tree that already passes `check`.
loudly), and a no-op on a tree that already passes `scripts/orca_extra_profile_check.py` — the
check CI runs over both id kinds, of which `--check` is the `filament_id` half.
- `--filament-id` limits the run to `filament_id`.
- `--setting-id` limits the run to `setting_id`. The two exclude each other; pass neither to
write both.
- `--vendor VENDOR` confines the run to that bundle; repeatable. The id is a function of the
triple alone, so a narrowed run writes exactly what a full one would; `check` reports
triple alone, so a narrowed run writes exactly what a full one would; `--check` reports
whatever it left outside.
- `--dry-run` reports what the run would do and writes nothing, so
`generate-id --dry-run --vendor <Vendor>` previews just that bundle.
- `--dry-run` reports what `--generate` would do and writes nothing; with no mode of its own it
implies `--generate`, so `--dry-run --vendor <Vendor>` previews just that bundle.
- `--profiles DIR` points the tooling at a different profile tree (default
`resources/profiles`). `check` and `update-snapshot` read and write the sanctioned state of
`resources/profiles`). `--check` and `--update-snapshot` read and write the sanctioned state of
the tree they are given, so pointing them elsewhere needs `--snapshot PATH` for that tree too —
`scripts/filament_id_snapshot.json` describes `resources/profiles` and no other tree.
The tool's other commands maintain the tree around the ids: `fix` normalises profile files,
`trim` drops files no `<vendor>.json` list references, and `update-index` rebuilds those lists.
They do not touch ids; `--help` documents them.
**Identity fixes need no separate command.** `generate-id` re-derives an id that no longer matches
its triple exactly the way it fills in a missing one, so a rename or a `filament_vendor` /
`filament_type` correction is just: fix the config, run `generate-id` (confine it with
`--vendor`, preview it with `--dry-run`), then `update-snapshot` and review the diff.
**Identity fixes need no separate mode.** `--generate` re-derives an id that no longer matches its
triple exactly the way it fills in a missing one, so a rename or a `filament_vendor` /
`filament_type` correction is just: fix the config, run `--generate` (confine it with `--vendor`,
preview it with `--dry-run`), then `--update-snapshot` and review the diff.
If you skip the tooling, CI fails and prints the remedy: the expected id for your filament and
the instruction to run `python scripts/orca_profile_tool.py generate-id`; once the id is minted,
the snapshot checks likewise point at `update-snapshot` and tell you to commit the resulting
the instruction to run `python scripts/orca_id_tool.py --generate`; once the id is minted, the
snapshot checks likewise point at `--update-snapshot` and tell you to commit the resulting
diff.
## Ids other systems compose
## Reserved namespaces — never mint or hand-write into
Every filament profile carries a minted id, with no exceptions and no spellings held back for
anyone. There is therefore no reserved namespace to respect and no bundle that owns one: an id
some other system composes for its own purposes is simply not the mint of a triple, so it
cannot be a system profile's `filament_id`, and the format check rejects it for that reason
alone — same error, same remedy, whoever wrote it.
A **reserved namespace** is an id space no system profile may declare, because an external
catalog or a device protocol owns the values. None of them has an owning vendor: there is no
bundle — not even the one whose printers use the catalog — that may write one into a profile.
Three such spaces exist around us, and are worth recognising so nobody mistakes one for an id
to copy into a profile:
| Space | Status | Rule |
| --- | --- | --- |
| `GF*` | Bambu AMS/RFID catalog | declarable by **nobody**, BBL included: Bambu's own ids live in the generated catalog map, never in a profile |
| `QD_*` | Qidi device protocol | declarable by **nobody**, Qidi included: the box composes these ids at runtime and they are not preset ids |
| `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles |
- **Bambu's `GF*` catalog.** Bambu's device / RFID / cloud catalog is external and opaque. Every
BBL filament mints an `OF` id from its triple like every other vendor's, and the
correspondence to Bambu's catalog ids lives in one generated file the app applies at the
printer boundary — the next section. Note that `GF` is a *prefix*, not a namespace the tree
avoids: BBL's authoritative `setting_id` values include `GF`-prefixed ones, and
`resources/profiles/blacklist.json` and `BBL/filament/filaments_color_codes.json` both
reference Bambu catalog ids by design. The rule is about `filament_id` and nothing else.
- **Qidi's `QD_*` protocol ids.** The Qidi box composes `QD_<series>_<vendor>_<typeidx>` at
runtime (slot vendor and type indices reported by the device, the series digit inferred
client-side from the printer model/name). Qidi presets carry ordinary minted `OF*` ids
(generics share the OFL ids), so a composed id matches no preset and the slot falls back to
filament type; translating it to the filament's id belongs in `QidiPrinterAgent`. Treating
per-series protocol ids as preset ids would put one product under five ids
(`QIDI PLA Rapido` would be `QD_0_1_1` through `QD_4_1_1`) — exactly the fragmentation the
mint rule removes.
- **`P` + 7 hex chars, and `"null"`.** What `CreatePresetsDialog.cpp` gives a filament a *user*
creates. Those are user presets, not system profiles, and the two never meet in the tree.
The two device namespaces, in detail:
- **Bambu (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, which is a
reason to keep it out of the profiles rather than to let one bundle own it. Every BBL filament
mints an `OF` id from its triple like every other vendor's, and the correspondence to Bambu's
catalog ids lives in one generated file the app applies at the printer boundary — the next
section. Nothing under `resources/profiles/**` carries a `GF*` id today and nothing can be
exempted, so a `GF*` id appearing anywhere in the tree is a mistake, whoever wrote it.
- **Qidi (`QD_*`).** `QD_*` is a device-*protocol* namespace, not a preset id space: the
Qidi box path composes `QD_<series>_<vendor>_<typeidx>` ids at runtime (slot vendor and
type indices reported by the device, the series digit inferred client-side from the printer
model/name). Qidi presets carry ordinary minted `OF*` ids (generics share the OFL ids), so
a composed id matches no preset and the slot falls back to filament type; translating it to
the filament's id belongs in `QidiPrinterAgent`. The alternative — treating per-series
protocol ids as preset ids — would put one product under five ids (`QIDI PLA Rapido` would
be `QD_0_1_1` through `QD_4_1_1`), exactly the fragmentation the mint rule removes.
## The Bambu catalog map
@@ -339,7 +337,7 @@ OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 1
one-off size of the transition and stopped being computable from the tree once the BBL bundle
was re-minted, so do not "fix" the report to print it.
**Check 5** lives in `check_filament_ids`, so profile CI runs it alongside the other four. It
**Check 6** lives in `check_filament_ids`, so profile CI runs it alongside the other five. It
holds the file to its contract: it parses, carries `source` / `bambustudio_commit` /
`generated`, keys only `OF`-format ids, maps each Bambu id at most once, and — for every row
whose key the tree actually claims — agrees with the tree on that id's `(vendor, type, name)`
@@ -428,11 +426,11 @@ map would silently reproduce the bug.
## How CI enforces this
Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via
`scripts/orca_profile_tool.py check`. Its ground truth is
`scripts/orca_extra_profile_check.py`. Its ground truth is
**`scripts/filament_id_snapshot.json` — the sanctioned state**: the id state derived from the
tree must equal the snapshot exactly, in both directions. Any change to the id landscape
therefore surfaces as a diff to that file, and **that snapshot diff is what maintainers review
and gate in a PR**. Never edit the snapshot by hand — `update-snapshot` regenerates it
and gate in a PR**. Never edit the snapshot by hand — `--update-snapshot` regenerates it
deterministically (running it twice changes nothing). The snapshot holds one map, `ids`: each
entry is the product the id is minted from (`filament_vendor`, `filament_type`, `name`) and the
`filaments` claiming it (`Vendor/Filament`), and it sanctions *state*, never exceptions: no check
@@ -452,6 +450,8 @@ The checks, in brief:
system filament must resolve an effective id at all (recall: an id-less one is a hard load
error in C++ that discards the whole vendor bundle); and no two products mint one id (a
base62 collision, resolved by renaming one of them). The errors print the expected id.
- **Reserved namespaces** — `GF*`, `QD_*`, `P<7-hex>` or `"null"` claimed by any vendor,
BBL and Qidi included.
- **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and
`filament_type` (generics use `"Generic"`), and all declarers of one filament within a
bundle must agree on the triple.
@@ -461,15 +461,16 @@ The checks, in brief:
tree claims. See [The Bambu catalog map](#the-bambu-catalog-map); the remedy is always to
regenerate, never to hand-edit.
A profile that declares an id no triple mints — a Bambu catalog id, a composed Qidi one, a
hand-typed value, whatever its vendor — fails the format check. For a Bambu-cataloged product
the catalog map is where the correspondence belongs. New sharing via a *declared* id is caught
by the identity check; sharing through inheritance carries no declaration to check and surfaces
only as a new claim in the snapshot diff — which is exactly why that diff is the gate.
A profile that declares a **reserved-namespace** id — `GF*`, `QD_*` or `P<7-hex>`, whatever
its vendor — cannot pass the format check, so `--update-snapshot` refuses to sanction it
rather than hide the mistake until CI. For a Bambu-cataloged product, the catalog map is where
the correspondence belongs. Any other new sharing via a *declared* id is caught by the identity
check; sharing through inheritance carries no declaration to check and surfaces only as a new
claim in the snapshot diff — which is exactly why that diff is the gate.
The same `check` run holds every declared id to the AMS 8-character limit, tree-wide and for
every vendor alike, scoped to the presets a vendor's index actually references (a file the index
never loads cannot break AMS matching).
`orca_extra_profile_check.py` separately holds every declared id to the AMS 8-character limit,
tree-wide and for every vendor alike, scoped to the presets a vendor's index actually
references (a file the index never loads cannot break AMS matching).
Complementing the Python checks, CI also runs the C++ profile validator with `-f`
(`check_filament_subtypes`): it loads the bundle exactly as the app does and flags any printer
@@ -487,21 +488,21 @@ ambiguity check behind structure rule 3.
`Generic PLA` base name, set `compatible_printers`; no id key needed.
- **A branded filament that borrows a generic's settings?** Fine — inherit `Generic X @System`
(or any real filament) for the settings and declare the id of your own filament; run
`python scripts/orca_profile_tool.py generate-id` to mint it. Inheritance never changes the id.
`python scripts/orca_id_tool.py --generate` to mint it. Inheritance never changes the id.
- **I need to fix a filament's `filament_vendor` or `filament_type`.** Fix the config, run
`generate-id --vendor <Vendor>` (preview with `--dry-run`), then `update-snapshot`, and commit
`--generate --vendor <Vendor>` (preview with `--dry-run`), then `--update-snapshot`, and commit
the profile and snapshot diffs together. The id re-derives from the corrected identity, and
nothing forwards the old value, so a tray or record still holding it falls back to matching by
filament type.
- **I need to rename a filament.** Rename the presets (adding `renamed_from`, which keeps the
preset *name* resolving), then `generate-id --vendor <Vendor>` (preview with `--dry-run`), then
`update-snapshot`. The id follows the new filament name; as with any identity fix, the old id
preset *name* resolving), then `--generate --vendor <Vendor>` (preview with `--dry-run`), then
`--update-snapshot`. The id follows the new filament name; as with any identity fix, the old id
is not forwarded.
- **Can I reuse a `QD_*` id for a Qidi profile?** No — it is not a mint, so it is not a
`filament_id`. Those values are composed by the box at runtime, and no preset carries one.
Author Qidi filaments like any other vendor's.
- **CI says my filament needs an id.** Run `python scripts/orca_profile_tool.py generate-id`, then
`update-snapshot`, and commit both diffs. Do not type an id by hand.
- **Can I reuse a `QD_*` id for a Qidi profile?** No — nobody can. It is the device protocol's
own id space: the box composes those values at runtime and no preset carries one. Author
Qidi filaments like any other vendor's.
- **CI says my filament needs an id.** Run `python scripts/orca_id_tool.py --generate`, then
`--update-snapshot`, and commit both diffs. Do not type an id by hand.
For general profile authoring, see the profile development guide on the
[OrcaSlicer wiki](https://www.orcaslicer.com/wiki).
-170
View File
@@ -1,170 +0,0 @@
# Wipe inward — High Level Design
## Purpose and scope
Wipe inward reduces reheating of fresh plastic and visible seam artifacts by
moving the hot nozzle toward adjacent printed material during the external-wall
wipe. Wipe marks are especially visible at layer heights below 0.1 mm.
The option applies only to wipes after external walls, including walls around
holes. It does not offset wipes after inner walls, infill or supports. For an
outer contour the move is inward; for a hole it is away from the hole, toward
the surrounding material. The path must remain supported by material that is
already present when the wipe executes.
The operation belongs to G-code generation. It uses extrusion paths, their actual
widths and their print order. Changing its settings invalidates G-code export
while preserving the sliced geometry.
## Settings and eligibility
`wipe_inward` defaults to disabled and requires Wipe while retracting to be
enabled for the active filament. `wipe_inward_distance` defaults to 50% of the
actual external-wall extrusion width; it also accepts an absolute distance in
millimeters. Using the path width makes Auto width and Arachne's variable widths
meaningful. The effective offset is limited by that width and the spacing to the
adjacent wall. A zero distance disables the offset.
Only external perimeters with a suitable, previously printed inner perimeter
are eligible. A configured wall count alone cannot establish eligibility:
the local geometry may contain fewer walls, and walls scheduled later do not
provide support. Outer/Inner wall order therefore normally retains the regular
wipe path.
Retraction and pressure advance calibrations disable inward wiping so it cannot
mask the behavior being measured. The calibration settings turn it off, and
G-code generation enforces this even if a profile or object override enables it.
## Path selection and support
The planner identifies an adjacent inner perimeter on the material side of the
outgoing wall. Contour winding and the distinction between outer contours and
holes establish a preferred direction; local printed geometry resolves ambiguous
or self-touching contours.
Candidate paths offset or translate the portion needed for the configured wipe
distance. A wide seam gap can prevent a supported forward path; following the
incoming printed wall backwards is also a candidate. If translating that wall
cannot provide a complete wipe around a curve, the planner tries an offset of
the reversed wall. Direction checks allow coordinate-rounding error at a
perpendicular entry, while rejecting actual backtracking. The planner checks the
complete executable path, including its connector from the nozzle position,
against the current and earlier printed perimeters. Nearby endpoints alone do
not establish support across a gap.
Each region accumulates its printed perimeter prefix once, in extrusion order.
Every entity contributes its geometry only after it is printed, and the prefix
is discarded when the region ends. This collection is skipped when inward wiping
is disabled or its configured distance is zero. A mixed inner-wall loop remains
an eligible target even when its first path is an overhang: ordinary inner-wall
paths elsewhere in the loop identify it. Likewise, an external loop with an
overhanging start remains eligible when other segments identify the external
wall. It is available for support checks but is not an inner-wall target.
Candidate-specific support filtering and AABB trees are built only for eligible
external loops, then reused across their candidate paths.
Material-side validation applies with or without a seam gap. Along each
candidate, local wall normals point toward the adjacent printed inner wall;
samples on the opposite side are rejected even when they remain close enough
to the external wall to pass the support check. This uses the open wall geometry
without treating it as a closed polygon. Full paths at a zero-gap seam also
retain clearance from the external wall after their initial connector. At a
clipped corner, another branch can be closer than the requested offset, so
material-side and support checks apply without that additional clearance rule.
An accepted candidate replaces the stored wipe path as a whole. A short direct
inward move is also eligible when longer candidates fail validation. It may
waive full wall clearance, but must pass the material-side check. Its initial
direction is checked from the actual nozzle position after any loop pre-move;
the original wall endpoint is retained separately for intersection checks. It takes
priority over the alternate offset when the preferred and translated paths
are unusable. A longer reversed path may replace the selected candidate only
when its distance to the target inner wall is no worse within tolerance.
## Fallback to the regular wipe
The original wipe path is retained when:
- No suitable adjacent inner wall has already been printed near the seam. This
includes single-wall areas, locally missing inner walls and normally Outer/Inner
wall order. A distant wall or a wall on the air side does not qualify.
- The requested or available offset, or the configured wipe distance, is zero
or too small at the geometry's coordinate precision.
- Degenerate geometry prevents construction of a usable candidate, or all
candidates fail the checks for printed support, direction, wall clearance or
the connector from the actual nozzle position. This can occur at tight corners,
narrow features or seam gaps.
Corners and seam gaps do not automatically trigger fallback: an offset,
translated, reversed or short direct inward path may still be valid. The regular
wipe is retained only when no candidate is accepted.
Fallback uses the path and retraction rules for `wipe_inward` disabled.
Wipe while retracting must still be enabled for a wipe to occur; `wipe_on_loops`
remains controlled by its own setting.
## Interaction with Wipe on loop
`wipe_on_loops` is an independent option that makes a short move before leaving
an external loop. It can operate with `wipe_inward` disabled. When both options
are enabled, its destination is the starting position for the inward wipe.
The loop move samples the outgoing and incoming paths by distance across path
boundaries. The sampling distance is bounded by the nozzle diameter and one
quarter of the total path length. It samples the outgoing path at up to 20% of
the nozzle diameter and rotates that point around the seam through one third
of the material-side corner angle. For a closed square outer contour, this
produces a move of 20% of the nozzle diameter at 30 degrees into the corner.
Coincident samples or degenerate angles suppress the move.
The nozzle position stored by G-code generation must match the emitted loop
move. Both travel planning and wipe execution depend on this position, including
when Wipe inward is disabled.
With a seam gap, a loop move may advance past the inward offset's original entry.
If that alone makes the connector backtrack, the entry advances to the nozzle's
projection on the offset. The planner extends the source as needed to preserve
the configured wipe length and validates the new connector and complete path.
Joins that already backtrack across the seam gap are not adjusted this way.
## Execution and retraction
The stored wipe path uses a sentinel first point. Execution starts from the
actual nozzle position and proceeds to the second stored point. Path selection,
support validation and wipe-length calculation must all use this same executable
geometry, especially after a Wipe on loop move.
An accepted inward path executes at the end of the external loop, after any
Wipe on loop move, without retracting filament. It consumes the stored path and
updates the nozzle position before travel planning. A short travel to the next
wall cannot discard this wipe or force a retraction or Z-hop. Subsequent travel
uses the normal minimum-travel threshold and retraction/lift settings from the
new position. The regular wipe, including fallback, remains deferred until a
normal retraction uses it.
Retraction is divided into portions before, during and after wiping. The amount
that can be retracted during the wipe depends on its executable length, wipe
speed and the active filament's retraction speed. Fractional retraction speeds
are retained in this calculation. For a 2 mm wipe at 100 mm/s and a retraction
speed of 25.5 mm/s, the wipe can retract 0.51 mm. With a total retraction of 0.8 mm
and both before/after percentages set to zero, the remaining 0.29 mm is retracted
before wiping. This split applies to regular deferred wipes, including fallback;
an accepted inward wipe executes separately without retraction.
## Implementation and verification
- [GCode.cpp](../../src/libslic3r/GCode.cpp) integrates path selection, nozzle
position and retraction; [Print.cpp](../../src/libslic3r/Print.cpp) controls
invalidation, and [PrintConfig.cpp](../../src/libslic3r/PrintConfig.cpp) defines
the settings.
- [WipePathHelpers](../../src/libslic3r/GCode/WipePathHelpers.hpp) implements path
sampling, offset selection and support checks.
- [Geometry tests](../../tests/libslic3r/test_wipe_path.cpp) cover support,
degenerate paths, contour and hole orientations, and exact loop-move geometry
across path subdivisions.
- [FFF tests](../../tests/fff_print/test_wipe.cpp) cover emitted trajectories,
fallback, minimum-travel retraction and Z-hop rules, and export invalidation.
With Wipe inward disabled, they check the loop move's direction and magnitude
for Classic and Arachne, the subsequent wipe's start and length, and fractional
retraction splitting in absolute and relative E modes.
Loop-move checks use reserved role/wipe markers and extrusion state, and run
with human-readable G-code comments both enabled and disabled.
@@ -0,0 +1,79 @@
#!/usr/bin/env python3
"""Belt temperature-tower asset generator (discrete-provini design).
A vertical temperature tower cannot be sliced on a belt printer, so lay a row of
DISCRETE provini (one per temperature) along the belt (designed Y) with a fixed
surface gap. Each provino is the chevron+arc unit (belt_temp_provino_unit.stl,
keel-first); its temperature is ENGRAVED upright into the 50 mm face — a raised
number would be an unsupported overhang on the belt. The C++ calib_temp belt branch
(Plater.cpp) injects one M104 per zone 70 layers INTO provino i:
print_z[i] = i * PITCH * cos(theta) + 70 * layer_height (theta = 45)
inside the body, not in the empty inter-provino gap (which has no sliced layers for
the event to attach to). PITCH below is the shared geometry contract with that code —
keep them in sync.
Generates one STL per filament temp range used by Temp_Calibration_Dlg.
"""
import numpy as np, trimesh, os
from matplotlib.textpath import TextPath
from matplotlib.font_manager import FontProperties
from shapely.geometry import Polygon as ShPoly
from shapely.ops import unary_union
HERE = os.path.dirname(os.path.abspath(__file__))
UNIT = os.path.join(HERE, 'belt_temp_provino_unit.stl') # single provino, keel-first
SURF_GAP = 25.0 # surface-to-surface gap between provini (mm) — user spec
TEXT_H = 9.0
TEXT_DEPTH = 0.8 # engraving depth (numbers are CUT into the face, not raised:
# a raised number is an unsupported Y-overhang on the belt)
TEXT_OVERSHOOT = 0.6 # extra height poking out of the face for a clean boolean cut
# Temperature ranges (start, end) per filament family, 5 C step. File name encodes them.
RANGES = [(230,190),(270,230),(250,230),(280,240),(240,210),(320,280)]
unit = trimesh.load(UNIT)
dY = unit.bounds[1,1] - unit.bounds[0,1]
PITCH = dY + SURF_GAP # designed-Y pitch == C++ contract constant
print(f"unit dY={dY:.2f} PITCH={PITCH:.3f} (C++ contract: print_z[i]=i*{PITCH:.3f}*cos45)")
# 50 mm face normal (0,-1,1)/sqrt2 ; UPRIGHT basis u=+X det(+1) (verified non-mirrored)
n = np.array([0,-1,1.])/np.sqrt(2)
u = np.array([1,0,0.]); v = np.array([0,1,1.])/np.sqrt(2)
R = np.column_stack([u,v,n])
fn = unit.face_normals; fc = unit.triangles_center; fa = unit.area_faces
sel = (fn@n) > 0.9
face_c = (fc[sel]*fa[sel,None]).sum(0)/fa[sel].sum()
def text_mesh(s):
tp = TextPath((0,0), s, size=TEXT_H, prop=FontProperties(family='DejaVu Sans'))
rings = [ShPoly(p) for p in tp.to_polygons() if len(p)>=3]
rings.sort(key=lambda r:r.area, reverse=True)
used=[False]*len(rings); parts=[]
for i,o in enumerate(rings):
if used[i]: continue
holes=[]
for j in range(i+1,len(rings)):
if not used[j] and o.contains(rings[j]): holes.append(rings[j].exterior.coords); used[j]=True
parts.append(ShPoly(o.exterior.coords,holes)); used[i]=True
poly = unary_union(parts)
geoms = list(poly.geoms) if poly.geom_type=='MultiPolygon' else [poly]
m = trimesh.util.concatenate([trimesh.creation.extrude_polygon(g,height=TEXT_DEPTH+TEXT_OVERSHOOT) for g in geoms])
c = m.bounds.mean(axis=0); m.apply_translation([-c[0],-c[1],0]); return m
for t_start, t_end in RANGES:
temps = list(range(t_start, t_end-1, -5))
parts=[]
for i,T in enumerate(temps):
c = unit.copy(); c.apply_translation([0, i*PITCH, 0])
t = text_mesh(str(T)); M=np.eye(4); M[:3,:3]=R; t.apply_transform(M)
# place the text spanning from TEXT_DEPTH inside the face to TEXT_OVERSHOOT outside,
# then CUT it out of the provino (engrave) — no raised material, no Y-overhang.
t.apply_translation(face_c - n*TEXT_DEPTH + np.array([0,i*PITCH,0]))
c = trimesh.boolean.difference([c, t], engine='manifold')
parts.append(c)
asset = trimesh.util.concatenate(parts)
out = os.path.join(HERE, f"belt_temp_tower_{t_start}_{t_end}.stl")
asset.export(out)
dims = np.round(asset.bounds[1]-asset.bounds[0],1)
wt = all(p.is_watertight for p in parts)
print(f" {t_start}->{t_end}: {len(temps)} zones bbox={dims} watertight={wt} -> {os.path.basename(out)}")
+1 -1
View File
@@ -75,7 +75,7 @@ documentation_link = https://www.orcaslicer.com/wiki/material_temperatures#print
[hint:Calibration]
text = Calibration\nDid you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer.
documentation_link = https://www.orcaslicer.com/wiki/calibration_guide
documentation_link = https://www.orcaslicer.com/wiki/calibration
[hint:Auxiliary fan]
text = Auxiliary fan\nDid you know that OrcaSlicer supports Auxiliary part cooling fan?
File diff suppressed because it is too large Load Diff
+1461 -1461
View File
File diff suppressed because it is too large Load Diff
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"105"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"75"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"70"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"75"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"70"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"80"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"75"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"80"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"75"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"60"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"65"
]
],
"version": "2.0.0.77"
}
@@ -315,5 +315,6 @@
],
"textured_plate_temp_initial_layer": [
"55"
]
],
"version": "2.0.0.87"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"100"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"35"
]
],
"version": "2.0.0.77"
}
@@ -334,5 +334,6 @@
],
"textured_plate_temp_initial_layer": [
"35"
]
],
"version": "2.0.0.77"
}
@@ -335,5 +335,6 @@
],
"textured_plate_temp_initial_layer": [
"35"
]
],
"version": "2.0.0.77"
}
+4 -4
View File
@@ -89,14 +89,14 @@
"name": "Generic PETG @Chuanying X1 0.25 Nozzle",
"sub_path": "filament/Generic PETG @Chuanying X1 0.25 Nozzle.json"
},
{
"name": "Generic PLA @Chuanying X1 0.25 Nozzle",
"sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json"
},
{
"name": "Generic PVA @Chuanying",
"sub_path": "filament/Generic PVA @Chuanying.json"
},
{
"name": "Generic PLA @Chuanying X1 0.25 Nozzle",
"sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json"
},
{
"name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle",
"sub_path": "filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json"
+12 -12
View File
@@ -196,10 +196,6 @@
"name": "Generic ABS @CoLiDo X16",
"sub_path": "filament/Generic ABS @CoLiDo X16.json"
},
{
"name": "CoLiDo PETG @CoLiDo SR1",
"sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json"
},
{
"name": "Generic PETG @CoLiDo DIY 4.0",
"sub_path": "filament/Generic PETG @CoLiDo DIY 4.0.json"
@@ -208,6 +204,18 @@
"name": "Generic PETG @CoLiDo X16",
"sub_path": "filament/Generic PETG @CoLiDo X16.json"
},
{
"name": "CoLiDo PETG @CoLiDo SR1",
"sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json"
},
{
"name": "Generic PLA @CoLiDo DIY 4.0",
"sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json"
},
{
"name": "Generic PLA @CoLiDo X16",
"sub_path": "filament/Generic PLA @CoLiDo X16.json"
},
{
"name": "CoLiDo PLA @CoLiDo SR1",
"sub_path": "filament/CoLiDo PLA @CoLiDo SR1.json"
@@ -220,14 +228,6 @@
"name": "CoLiDo PLA+ @CoLiDo DIY 4.0 V2",
"sub_path": "filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json"
},
{
"name": "Generic PLA @CoLiDo DIY 4.0",
"sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json"
},
{
"name": "Generic PLA @CoLiDo X16",
"sub_path": "filament/Generic PLA @CoLiDo X16.json"
},
{
"name": "Generic TPU @CoLiDo DIY 4.0",
"sub_path": "filament/Generic TPU @CoLiDo DIY 4.0.json"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,160 @@
{
"type": "filament",
"name": "CR-ABS @Ender-5 Max-all",
"inherits": "fdm_filament_abs",
"from": "system",
"setting_id": "iCeI2obXsgQdrmmd",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"90"
],
"cool_plate_temp_initial_layer": [
"90"
],
"during_print_exhaust_fan_speed": [
"60"
],
"fan_max_speed": [
"30"
],
"filament_cost": [
"15"
],
"filament_density": [
"1.08"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.93"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature_range_high": [
"280"
],
"overhang_fan_speed": [
"60"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "90",
"customized_plate_temp_initial_layer": "90",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "90",
"epoxy_resin_plate_temp_initial_layer": "90",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]",
"pressure_advance": "0.03",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,185 @@
{
"type": "filament",
"name": "CR-Nylon @Ender-5 Max-all",
"inherits": "fdm_filament_pa",
"from": "system",
"setting_id": "HHnHotIUIBzTdckU",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"100"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"fan_cooling_layer_time": [
"100"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"100"
],
"filament_cost": [
"50"
],
"filament_density": [
"1.24"
],
"filament_deretraction_speed": [
"nil"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.9"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"0"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"1.5"
],
"filament_retraction_minimum_travel": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"nil"
],
"filament_z_hop": [
"0.2"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"45"
],
"hot_plate_temp_initial_layer": [
"45"
],
"nozzle_temperature": [
"250"
],
"nozzle_temperature_initial_layer": [
"250"
],
"nozzle_temperature_range_high": [
"280"
],
"nozzle_temperature_range_low": [
"250"
],
"overhang_fan_speed": [
"50"
],
"overhang_fan_threshold": [
"50%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_for_layer_cooling": [
"1"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"5"
],
"textured_plate_temp": [
"45"
],
"textured_plate_temp_initial_layer": [
"45"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "35",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "45",
"epoxy_resin_plate_temp_initial_layer": "45",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "0",
"filament_retract_lift_below": "0",
"filament_retract_lift_enforce": "All Surfaces",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]",
"pressure_advance": "0.042",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,163 @@
{
"type": "filament",
"name": "CR-PETG @Ender-5 Max-all",
"inherits": "fdm_filament_petg",
"from": "system",
"setting_id": "jMfevCqhjSPahBHJ",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"70"
],
"cool_plate_temp_initial_layer": [
"70"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"0"
],
"eng_plate_temp_initial_layer": [
"0"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"40"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"14"
],
"filament_density": [
"1.23"
],
"filament_deretraction_speed": [
"30"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_retract_before_wipe": [
"80%"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"30"
],
"filament_type": [
"PETG"
],
"filament_vendor": [
"Creality"
],
"filament_wipe_distance": [
"2"
],
"hot_plate_temp": [
"80"
],
"hot_plate_temp_initial_layer": [
"80"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_high": [
"270"
],
"nozzle_temperature_range_low": [
"220"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"required_nozzle_HRC": [
"0"
],
"temperature_vitrification": [
"80"
],
"textured_plate_temp": [
"80"
],
"textured_plate_temp_initial_layer": [
"80"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "80",
"customized_plate_temp_initial_layer": "80",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "80",
"epoxy_resin_plate_temp_initial_layer": "80",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,220],[5.0,240],[10.0,250]]",
"pressure_advance": "0.05",
"filament_id": "06101",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle",
"Creality Ender-5 Max 0.6 nozzle",
"Creality Ender-5 Max 0.8 nozzle"
]
}
@@ -0,0 +1,157 @@
{
"type": "filament",
"name": "CR-PLA @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "sU0HCPjQoOLHPmPc",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"60"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"50"
],
"hot_plate_temp_initial_layer": [
"50"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"45"
],
"textured_plate_temp_initial_layer": [
"50"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "50",
"customized_plate_temp_initial_layer": "50",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "50",
"epoxy_resin_plate_temp_initial_layer": "50",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "1",
"material_flow_temp_graph": "[[0.5,190],[1.0,220]]",
"pressure_advance": "0.04",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,157 @@
{
"type": "filament",
"name": "CR-Silk @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "vFgKdtdiuqqrL9rk",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"60"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_cost": [
"22"
],
"filament_density": [
"1.25"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"90%"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"1"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"55"
],
"hot_plate_temp_initial_layer": [
"55"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"55"
],
"textured_plate_temp_initial_layer": [
"55"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "35",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "55",
"customized_plate_temp_initial_layer": "55",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "55",
"epoxy_resin_plate_temp_initial_layer": "55",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[1.0,190],[1.2,220]]",
"pressure_advance": "0.048",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,163 @@
{
"type": "filament",
"name": "Generic ABS @Ender-5 Max-all",
"inherits": "fdm_filament_abs",
"from": "system",
"setting_id": "3BjyaE4hGrz7tqnk",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"90"
],
"cool_plate_temp_initial_layer": [
"90"
],
"during_print_exhaust_fan_speed": [
"60"
],
"fan_max_speed": [
"30"
],
"filament_cost": [
"15"
],
"filament_density": [
"1.24"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature_range_high": [
"280"
],
"overhang_fan_speed": [
"60"
],
"reduce_fan_stop_start_freq": [
"0"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "90",
"customized_plate_temp_initial_layer": "90",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "90",
"epoxy_resin_plate_temp_initial_layer": "90",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]",
"pressure_advance": "0.034",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,175 @@
{
"type": "filament",
"name": "Generic ASA @Ender-5 Max-all",
"inherits": "fdm_filament_asa",
"from": "system",
"setting_id": "1cOFjktr0dBTbYS4",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"90"
],
"cool_plate_temp_initial_layer": [
"90"
],
"during_print_exhaust_fan_speed": [
"60"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"70"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"30"
],
"filament_density": [
"1.24"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.93"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"100%"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature_range_high": [
"280"
],
"reduce_fan_stop_start_freq": [
"0"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "55",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "90",
"customized_plate_temp_initial_layer": "90",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "90",
"epoxy_resin_plate_temp_initial_layer": "90",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]",
"pressure_advance": "0.03",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,163 @@
{
"type": "filament",
"name": "Generic PETG @Ender-5 Max-all",
"inherits": "fdm_filament_petg",
"from": "system",
"setting_id": "yNgF407ERXuU7LHE",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"70"
],
"cool_plate_temp_initial_layer": [
"70"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"0"
],
"eng_plate_temp_initial_layer": [
"0"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"60"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"14"
],
"filament_density": [
"1.24"
],
"filament_deretraction_speed": [
"40"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"14"
],
"filament_retract_before_wipe": [
"90%"
],
"filament_retraction_length": [
"0.4"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"40"
],
"filament_type": [
"PETG"
],
"filament_wipe_distance": [
"2"
],
"hot_plate_temp": [
"80"
],
"hot_plate_temp_initial_layer": [
"80"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_high": [
"270"
],
"nozzle_temperature_range_low": [
"220"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"temperature_vitrification": [
"80"
],
"textured_plate_temp": [
"80"
],
"textured_plate_temp_initial_layer": [
"80"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "80",
"customized_plate_temp_initial_layer": "80",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "80",
"epoxy_resin_plate_temp_initial_layer": "80",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[0.8,230],[1.0,240]]",
"pressure_advance": "0.064",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,161 @@
{
"type": "filament",
"name": "Generic PLA @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "ubfcxetXGj6agAoi",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"14"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"80%"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"0.8"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"55"
],
"hot_plate_temp_initial_layer": [
"55"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"210"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"55"
],
"textured_plate_temp_initial_layer": [
"55"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "55",
"customized_plate_temp_initial_layer": "55",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "55",
"epoxy_resin_plate_temp_initial_layer": "55",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_shrinkage_compensation_z": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[0.8,190],[1.0,210]]",
"pressure_advance": "0.04",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,161 @@
{
"type": "filament",
"name": "Generic PLA-CF @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "AHrCSGRui6sRCmQx",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_cost": [
"30"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_type": [
"PLA-CF"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"50"
],
"hot_plate_temp_initial_layer": [
"50"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"50"
],
"textured_plate_temp_initial_layer": [
"50"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "50",
"customized_plate_temp_initial_layer": "50",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "50",
"epoxy_resin_plate_temp_initial_layer": "50",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_shrinkage_compensation_z": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[1.0,190],[1.2,220]]",
"pressure_advance": "0.03",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,155 @@
{
"type": "filament",
"name": "Generic PLA-Silk @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "zIrKl9P6Aer6sbiS",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_deretraction_speed": [
"30"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"10"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"80%"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"0.8"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"30"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"55"
],
"hot_plate_temp_initial_layer": [
"55"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"14"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"55"
],
"textured_plate_temp_initial_layer": [
"55"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "55",
"customized_plate_temp_initial_layer": "55",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "55",
"epoxy_resin_plate_temp_initial_layer": "55",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_shrinkage_compensation_z": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[0.8,190],[1.0,220]]",
"pressure_advance": "0.044",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,166 @@
{
"type": "filament",
"name": "Generic TPU @Ender-5 Max-all",
"inherits": "fdm_filament_tpu",
"from": "system",
"setting_id": "KPUcdZyegXYeyHOL",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"35"
],
"eng_plate_temp_initial_layer": [
"35"
],
"filament_cost": [
"25"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"1"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"2"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"1"
],
"filament_retraction_minimum_travel": [
"2"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"50"
],
"hot_plate_temp_initial_layer": [
"50"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"210"
],
"nozzle_temperature_range_high": [
"220"
],
"overhang_fan_threshold": [
"50%"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"10"
],
"textured_plate_temp": [
"50"
],
"textured_plate_temp_initial_layer": [
"50"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "50",
"customized_plate_temp_initial_layer": "50",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "50",
"epoxy_resin_plate_temp_initial_layer": "50",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]",
"pressure_advance": "0.4",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,175 @@
{
"type": "filament",
"name": "HP-ASA @Ender-5 Max-all",
"inherits": "fdm_filament_asa",
"from": "system",
"setting_id": "JzsojF2Um23vm2qT",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"90"
],
"cool_plate_temp_initial_layer": [
"90"
],
"during_print_exhaust_fan_speed": [
"60"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"50"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"29"
],
"filament_density": [
"1.15"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.88"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature_range_high": [
"280"
],
"reduce_fan_stop_start_freq": [
"0"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "55",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "90",
"customized_plate_temp_initial_layer": "90",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "90",
"epoxy_resin_plate_temp_initial_layer": "90",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]",
"pressure_advance": "0.032",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,168 @@
{
"type": "filament",
"name": "HP-TPU @Ender-5 Max-all",
"inherits": "fdm_filament_tpu",
"from": "system",
"setting_id": "7Y7KjqVEXrce3jKO",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"35"
],
"eng_plate_temp_initial_layer": [
"35"
],
"filament_density": [
"1.26"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"1"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"2.5"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"1"
],
"filament_retraction_minimum_travel": [
"2"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"50"
],
"hot_plate_temp_initial_layer": [
"50"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"210"
],
"nozzle_temperature_range_high": [
"220"
],
"overhang_fan_threshold": [
"50%"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"10"
],
"textured_plate_temp": [
"50"
],
"textured_plate_temp_initial_layer": [
"50"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "50",
"customized_plate_temp_initial_layer": "50",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "50",
"epoxy_resin_plate_temp_initial_layer": "50",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]",
"pressure_advance": "0.4",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle",
"Creality Ender-5 Max 0.6 nozzle",
"Creality Ender-5 Max 0.8 nozzle"
]
}
@@ -0,0 +1,166 @@
{
"type": "filament",
"name": "Hyper ABS @Ender-5 Max-all",
"inherits": "fdm_filament_abs",
"from": "system",
"setting_id": "jPfMyNBquP31h2Eb",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"90"
],
"cool_plate_temp_initial_layer": [
"90"
],
"during_print_exhaust_fan_speed": [
"60"
],
"fan_max_speed": [
"20"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"15"
],
"filament_density": [
"1.08"
],
"filament_deretraction_speed": [
"nil"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.92"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"60"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"0"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"nil"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature_range_high": [
"260"
],
"nozzle_temperature_range_low": [
"230"
],
"overhang_fan_speed": [
"20"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"5"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "35",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "90",
"epoxy_resin_plate_temp_initial_layer": "90",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "0",
"filament_retract_lift_below": "0",
"filament_retract_lift_enforce": "All Surfaces",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]",
"pressure_advance": "0.025",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle",
"Creality Ender-5 Max 0.6 nozzle",
"Creality Ender-5 Max 0.8 nozzle"
]
}
@@ -0,0 +1,163 @@
{
"type": "filament",
"name": "Hyper PETG @Ender-5 Max-all",
"inherits": "fdm_filament_petg",
"from": "system",
"setting_id": "nr57CpZ5PwPmcOCR",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"70"
],
"cool_plate_temp_initial_layer": [
"70"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"0"
],
"eng_plate_temp_initial_layer": [
"0"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"50"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"25"
],
"filament_density": [
"1.23"
],
"filament_deretraction_speed": [
"30"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"23"
],
"filament_retract_before_wipe": [
"80%"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"30"
],
"filament_type": [
"PETG"
],
"filament_vendor": [
"Creality"
],
"filament_wipe_distance": [
"2"
],
"hot_plate_temp": [
"80"
],
"hot_plate_temp_initial_layer": [
"80"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_high": [
"270"
],
"nozzle_temperature_range_low": [
"220"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"12"
],
"temperature_vitrification": [
"80"
],
"textured_plate_temp": [
"80"
],
"textured_plate_temp_initial_layer": [
"80"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "80",
"customized_plate_temp_initial_layer": "80",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "80",
"epoxy_resin_plate_temp_initial_layer": "80",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[0.8,220],[1.0,240]]",
"pressure_advance": "0.05",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
@@ -0,0 +1,160 @@
{
"type": "filament",
"name": "Hyper PLA @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "Nb1H9jKg8CPQXLVI",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"0"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"0"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_cost": [
"30"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"23"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"1"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"55"
],
"hot_plate_temp_initial_layer": [
"45"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"55"
],
"textured_plate_temp_initial_layer": [
"45"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "0",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "55",
"customized_plate_temp_initial_layer": "45",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "55",
"epoxy_resin_plate_temp_initial_layer": "45",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_shrinkage_compensation_z": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[1.0,190],[1.5,220]]",
"pressure_advance": "0.048",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle",
"Creality Ender-5 Max 0.6 nozzle",
"Creality Ender-5 Max 0.8 nozzle"
]
}
@@ -0,0 +1,163 @@
{
"type": "filament",
"name": "Hyper PLA-CF @Ender-5 Max-all",
"inherits": "fdm_filament_pla",
"from": "system",
"setting_id": "pW3AHx1VemLWSa7q",
"instantiation": "true",
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"complete_print_exhaust_fan_speed": [
"80"
],
"cool_plate_temp": [
"45"
],
"cool_plate_temp_initial_layer": [
"45"
],
"during_print_exhaust_fan_speed": [
"60"
],
"eng_plate_temp": [
"50"
],
"eng_plate_temp_initial_layer": [
"50"
],
"filament_cost": [
"32"
],
"filament_density": [
"1.27"
],
"filament_deretraction_speed": [
"35"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"0.95"
],
"filament_is_support": [
"0"
],
"filament_max_volumetric_speed": [
"23"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"35"
],
"filament_soluble": [
"0"
],
"filament_type": [
"PLA-CF"
],
"filament_vendor": [
"Creality"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"50"
],
"hot_plate_temp_initial_layer": [
"50"
],
"nozzle_temperature_range_high": [
"240"
],
"required_nozzle_HRC": [
"0"
],
"slow_down_layer_time": [
"10"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"50"
],
"textured_plate_temp_initial_layer": [
"50"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"activate_chamber_temp_control": "0",
"chamber_temperature": "35",
"cool_cds_fan_start_at_height": "0.5",
"cool_special_cds_fan_speed": "0",
"customized_plate_temp": "50",
"customized_plate_temp_initial_layer": "50",
"default_filament_colour": "\"\"",
"enable_overhang_bridge_fan": "1",
"enable_pressure_advance": "1",
"enable_special_area_additional_cooling_fan": "0",
"epoxy_resin_plate_temp": "50",
"epoxy_resin_plate_temp_initial_layer": "50",
"filament_cooling_final_speed": "3.4",
"filament_cooling_initial_speed": "2.2",
"filament_cooling_moves": "4",
"filament_load_time": "0",
"filament_loading_speed": "28",
"filament_loading_speed_start": "3",
"filament_multitool_ramming": "0",
"filament_multitool_ramming_flow": "10",
"filament_multitool_ramming_volume": "10",
"filament_notes": "\"\"",
"filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"",
"filament_retract_lift_above": "nil",
"filament_retract_lift_below": "nil",
"filament_retract_lift_enforce": "nil",
"filament_shrink": "100%",
"filament_toolchange_delay": "0",
"filament_unload_time": "0",
"filament_unloading_speed": "90",
"filament_unloading_speed_start": "100",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[1.0,190],[1.2,220]]",
"pressure_advance": "0.04",
"support_material_interface_fan_speed": "-1",
"compatible_printers": [
"Creality Ender-5 Max 0.4 nozzle"
]
}
+37 -5
View File
@@ -1,9 +1,13 @@
{
"name": "Custom Printer",
"version": "02.04.00.04",
"version": "02.04.00.05",
"force_update": "0",
"description": "My configurations",
"machine_model_list": [
{
"name": "Generic Belt Printer",
"sub_path": "machine/MyBeltPrinter.json"
},
{
"name": "Generic Klipper Printer",
"sub_path": "machine/MyKlipper.json"
@@ -62,6 +66,14 @@
"name": "0.16mm Optimal @MyKlipper",
"sub_path": "process/0.16mm Optimal @MyKlipper.json"
},
{
"name": "0.12mm Fine @MyBeltPrinter",
"sub_path": "process/0.12mm Fine @MyBeltPrinter.json"
},
{
"name": "0.20mm Standard @MyBeltPrinter",
"sub_path": "process/0.20mm Standard @MyBeltPrinter.json"
},
{
"name": "0.20mm Standard @MyKlipper",
"sub_path": "process/0.20mm Standard @MyKlipper.json"
@@ -262,18 +274,38 @@
"name": "MyKlipper 0.8 nozzle",
"sub_path": "machine/MyKlipper 0.8 nozzle.json"
},
{
"name": "fdm_belt_common",
"sub_path": "machine/fdm_belt_common.json"
},
{
"name": "fdm_toolchanger_common",
"sub_path": "machine/fdm_toolchanger_common.json"
},
{
"name": "MyRepetier 0.4 nozzle",
"sub_path": "machine/MyRepetier 0.4 nozzle.json"
},
{
"name": "MyRRF 0.4 nozzle",
"sub_path": "machine/MyRRF 0.4 nozzle.json"
},
{
"name": "MyBeltPrinter 0.2 nozzle",
"sub_path": "machine/MyBeltPrinter 0.2 nozzle.json"
},
{
"name": "MyBeltPrinter 0.4 nozzle",
"sub_path": "machine/MyBeltPrinter 0.4 nozzle.json"
},
{
"name": "MyBeltPrinter 0.6 nozzle",
"sub_path": "machine/MyBeltPrinter 0.6 nozzle.json"
},
{
"name": "MyBeltPrinter 0.8 nozzle",
"sub_path": "machine/MyBeltPrinter 0.8 nozzle.json"
},
{
"name": "MyRepetier 0.4 nozzle",
"sub_path": "machine/MyRepetier 0.4 nozzle.json"
},
{
"name": "MyToolChanger 0.2 nozzle",
"sub_path": "machine/MyToolChanger 0.2 nozzle.json"
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,27 @@
{
"type": "machine",
"name": "MyBeltPrinter 0.2 nozzle",
"inherits": "fdm_belt_common",
"from": "system",
"setting_id": "3w1uyJdmm14QhDnH",
"instantiation": "true",
"printer_model": "Generic Belt Printer",
"default_print_profile": "0.12mm Fine @MyBeltPrinter",
"nozzle_diameter": [
"0.2"
],
"max_layer_height": [
"0.16"
],
"min_layer_height": [
"0.04"
],
"printer_variant": "0.2",
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "300"
}
@@ -0,0 +1,20 @@
{
"type": "machine",
"name": "MyBeltPrinter 0.4 nozzle",
"inherits": "fdm_belt_common",
"from": "system",
"setting_id": "6nRHUtvJOUffocbu",
"instantiation": "true",
"printer_model": "Generic Belt Printer",
"nozzle_diameter": [
"0.4"
],
"printer_variant": "0.4",
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "300"
}
@@ -0,0 +1,26 @@
{
"type": "machine",
"name": "MyBeltPrinter 0.6 nozzle",
"inherits": "fdm_belt_common",
"from": "system",
"setting_id": "K0m9HbUNwKT4UCJV",
"instantiation": "true",
"printer_model": "Generic Belt Printer",
"nozzle_diameter": [
"0.6"
],
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.12"
],
"printer_variant": "0.6",
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "300"
}
@@ -0,0 +1,26 @@
{
"type": "machine",
"name": "MyBeltPrinter 0.8 nozzle",
"inherits": "fdm_belt_common",
"from": "system",
"setting_id": "rHAweDz4eNwttPNA",
"instantiation": "true",
"printer_model": "Generic Belt Printer",
"nozzle_diameter": [
"0.8"
],
"max_layer_height": [
"0.6"
],
"min_layer_height": [
"0.2"
],
"printer_variant": "0.8",
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "300"
}
@@ -0,0 +1,12 @@
{
"type": "machine_model",
"name": "Generic Belt Printer",
"model_id": "my_belt_01",
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"machine_tech": "FFF",
"family": "MyPrinter",
"bed_model": "Custom_350_bed.stl",
"bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "",
"default_materials": "Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
}
@@ -0,0 +1,99 @@
{
"type": "machine",
"name": "fdm_belt_common",
"inherits": "fdm_klipper_common",
"from": "system",
"instantiation": "false",
"gcode_flavor": "klipper",
"single_extruder_multi_material": "0",
"default_filament_profile": [
"Generic PLA @System"
],
"default_print_profile": "0.20mm Standard @MyBeltPrinter",
"max_layer_height": [
"0.32"
],
"min_layer_height": [
"0.08"
],
"deretraction_speed": [
"30"
],
"extruder_colour": [
"#FCE94F"
],
"extruder_offset": [
"0x0"
],
"long_retractions_when_cut": [
"0"
],
"nozzle_diameter": [
"0.4"
],
"retract_before_wipe": [
"70%"
],
"retract_length_toolchange": [
"2"
],
"retract_lift_above": [
"0"
],
"retract_lift_below": [
"0"
],
"retract_lift_enforce": [
"All Surfaces"
],
"retract_restart_extra": [
"0"
],
"retract_restart_extra_toolchange": [
"0"
],
"retract_when_changing_layer": [
"1"
],
"retraction_distances_when_cut": [
"18"
],
"retraction_length": [
"0.8"
],
"retraction_minimum_travel": [
"1"
],
"retraction_speed": [
"30"
],
"travel_slope": [
"3"
],
"wipe": [
"1"
],
"wipe_distance": [
"1"
],
"z_hop": [
"0.4"
],
"z_hop_types": [
"Normal Lift"
],
"gcode_remap_x": "rev_x",
"gcode_remap_y": "pos_z",
"gcode_remap_z": "pos_y",
"printer_extruder_id": [
"1"
],
"belt_printer": "1",
"belt_slice_rotation": "x",
"belt_slice_rotation_angle": "45",
"belt_slice_rotation_global": "1",
"build_plate_tilt_x": "45",
"purge_in_prime_tower": "0",
"scan_first_layer": "0",
"auxiliary_fan": "0"
}
@@ -0,0 +1,20 @@
{
"type": "process",
"name": "0.12mm Fine @MyBeltPrinter",
"inherits": "fdm_process_klipper_common",
"from": "system",
"setting_id": "EugqqdLJ423bgEwN",
"instantiation": "true",
"layer_height": "0.12",
"initial_layer_print_height": "0.12",
"bottom_shell_layers": "5",
"top_shell_layers": "6",
"support_top_z_distance": "0.08",
"support_bottom_z_distance": "0.08",
"skirt_loops": "0",
"skirt_distance": "0",
"compatible_printers": [
"MyBeltPrinter 0.2 nozzle",
"MyBeltPrinter 0.4 nozzle"
]
}
@@ -0,0 +1,17 @@
{
"type": "process",
"name": "0.20mm Standard @MyBeltPrinter",
"inherits": "fdm_process_klipper_common",
"from": "system",
"setting_id": "YzCDAgH3uLOM53pF",
"instantiation": "true",
"layer_height": "0.2",
"initial_layer_print_height": "0.2",
"skirt_loops": "0",
"skirt_distance": "0",
"compatible_printers": [
"MyBeltPrinter 0.4 nozzle",
"MyBeltPrinter 0.6 nozzle",
"MyBeltPrinter 0.8 nozzle"
]
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,91 @@
{
"type": "filament",
"name": "fdm_filament_paht",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"filament_max_volumetric_speed": [
"12"
],
"filament_type": [
"PAHT"
],
"filament_density": [
"1.24"
],
"filament_cost": [
"0"
],
"cool_plate_temp": [
"35"
],
"eng_plate_temp": [
"0"
],
"textured_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"35"
],
"eng_plate_temp_initial_layer": [
"0"
],
"textured_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_initial_layer": [
"220"
],
"reduce_fan_stop_start_freq": [
"1"
],
"overhang_fan_threshold": [
"50%"
],
"close_fan_the_first_x_layers": [
"1"
],
"nozzle_temperature": [
"220"
],
"temperature_vitrification": [
"45"
],
"nozzle_temperature_range_low": [
"190"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_min_speed": [
"20"
],
"additional_cooling_fan_speed": [
"0"
],
"fan_cooling_layer_time": [
"80"
],
"fan_min_speed": [
"50"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"slow_down_layer_time": [
"8"
],
"filament_start_gcode": [
"; Filament start gcode\n"
],
"filament_end_gcode": [
"; filament end gcode \n"
],
"filament_vendor": [
"Generic"
]
}
@@ -1,14 +1,15 @@
{
"type": "process",
"name": "0.30mm Standard @Elegoo Giga 0.6 nozzle",
"renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle",
"inherits": "fdm_process_elegoo_06030",
"from": "system",
"setting_id": "mMP6cZhv9TYjYlEh",
"instantiation": "true",
"renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle",
"default_acceleration": "3000",
"filename_format": "EOGiga1_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode",
"initial_layer_acceleration": "1000",
"is_custom_defined": "0",
"make_overhang_printable_angle": "90",
"outer_wall_acceleration": "2000",
"resolution": "0.05",
@@ -24,6 +24,7 @@
"sparse_infill_speed": "100",
"inner_wall_speed": "100",
"internal_solid_infill_speed": "100",
"is_custom_defined": "0",
"outer_wall_speed": "60",
"top_surface_speed": "80"
}
+16 -16
View File
@@ -244,10 +244,26 @@
"name": "Generic PLA @FLSun S1",
"sub_path": "filament/Generic PLA @FLSun S1.json"
},
{
"name": "Generic PLA High Speed @FLSun S1",
"sub_path": "filament/Generic PLA High Speed @FLSun S1.json"
},
{
"name": "Generic PLA Silk @FLSun S1",
"sub_path": "filament/Generic PLA Silk @FLSun S1.json"
},
{
"name": "Generic PLA @FLSun T1",
"sub_path": "filament/Generic PLA @FLSun T1.json"
},
{
"name": "Generic PLA High Speed @FLSun T1",
"sub_path": "filament/Generic PLA High Speed @FLSun T1.json"
},
{
"name": "Generic PLA Silk @FLSun T1",
"sub_path": "filament/Generic PLA Silk @FLSun T1.json"
},
{
"name": "Generic TPU @FLSun S1",
"sub_path": "filament/Generic TPU @FLSun S1.json"
@@ -255,22 +271,6 @@
{
"name": "Generic TPU @FLSun T1",
"sub_path": "filament/Generic TPU @FLSun T1.json"
},
{
"name": "Generic PLA High Speed @FLSun S1",
"sub_path": "filament/Generic PLA High Speed @FLSun S1.json"
},
{
"name": "Generic PLA High Speed @FLSun T1",
"sub_path": "filament/Generic PLA High Speed @FLSun T1.json"
},
{
"name": "Generic PLA Silk @FLSun S1",
"sub_path": "filament/Generic PLA Silk @FLSun S1.json"
},
{
"name": "Generic PLA Silk @FLSun T1",
"sub_path": "filament/Generic PLA Silk @FLSun T1.json"
}
],
"machine_list": [
+374 -374
View File
@@ -439,6 +439,22 @@
"name": "0.14mm Standard @FF AD5X 0.25 nozzle",
"sub_path": "process/0.14mm Standard @FF AD5X 0.25 nozzle.json"
},
{
"name": "0.08mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.08mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.10mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.10mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.12mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.12mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.14mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.14mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.14mm Standard @Flashforge AD5M 0.25 Nozzle",
"sub_path": "process/0.14mm Standard @Flashforge AD5M 0.25 Nozzle.json"
@@ -511,22 +527,6 @@
"name": "0.42mm Draft @FF AD5X 0.6 nozzle",
"sub_path": "process/0.42mm Draft @FF AD5X 0.6 nozzle.json"
},
{
"name": "0.08mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.08mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.10mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.10mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.12mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.12mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.14mm Standard @FF C5 0.25 nozzle",
"sub_path": "process/0.14mm Standard @FF C5 0.25 nozzle.json"
},
{
"name": "0.24mm Fine @FF AD5X 0.8 nozzle",
"sub_path": "process/0.24mm Fine @FF AD5X 0.8 nozzle.json"
@@ -573,29 +573,25 @@
"name": "Generic ASA @Flashforge",
"sub_path": "filament/Generic ASA @Flashforge.json"
},
{
"name": "Flashforge PETG",
"sub_path": "filament/Flashforge/Flashforge PETG @FF AD3.json"
},
{
"name": "Generic PETG @Flashforge",
"sub_path": "filament/Generic PETG @Flashforge.json"
},
{
"name": "Generic PETG @Flashforge Artemis",
"sub_path": "filament/Flashforge Generic PETG @Flashforge Artemis.json"
},
{
"name": "Generic PETG-CF10 @Flashforge",
"sub_path": "filament/Generic PETG-CF10 @Flashforge.json"
},
{
"name": "SUNLU PETG @base",
"sub_path": "filament/SUNLU/SUNLU PETG @base.json"
"name": "Flashforge PETG",
"sub_path": "filament/Flashforge/Flashforge PETG @FF AD3.json"
},
{
"name": "Flashforge PLA",
"sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json"
"name": "Generic PETG @Flashforge Artemis",
"sub_path": "filament/Flashforge Generic PETG @Flashforge Artemis.json"
},
{
"name": "SUNLU PETG @base",
"sub_path": "filament/SUNLU/SUNLU PETG @base.json"
},
{
"name": "Generic HS PLA @Flashforge",
@@ -613,6 +609,10 @@
"name": "Generic PLA-Silk @Flashforge",
"sub_path": "filament/Generic PLA-Silk @Flashforge.json"
},
{
"name": "Flashforge PLA",
"sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json"
},
{
"name": "SUNLU PLA Marble @base",
"sub_path": "filament/SUNLU/SUNLU PLA Marble @base.json"
@@ -709,10 +709,6 @@
"name": "Generic ABS @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic ABS @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic ABS @Flashforge AD4",
"sub_path": "filament/Generic ABS @Flashforge AD4.json"
},
{
"name": "Generic ABS @Flashforge G3U",
"sub_path": "filament/Generic ABS @Flashforge G3U.json"
@@ -733,6 +729,10 @@
"name": "Generic HIPS @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic ABS @Flashforge AD4",
"sub_path": "filament/Generic ABS @Flashforge AD4.json"
},
{
"name": "Flashforge ASA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json"
@@ -745,13 +745,41 @@
"name": "Generic ASA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic ASA @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic ASA @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic ASA @Flashforge AD4",
"sub_path": "filament/Generic ASA @Flashforge AD4.json"
},
{
"name": "Generic ASA @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json"
"name": "Generic PETG @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic PETG @Flashforge G3U",
"sub_path": "filament/Generic PETG @Flashforge G3U.json"
},
{
"name": "Generic PETG @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PETG @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Flashforge HS PETG",
@@ -877,38 +905,10 @@
"name": "FusRock S-PAHT @G3U 0.6 Nozzle",
"sub_path": "filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json"
},
{
"name": "Generic PETG @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic PETG @Flashforge AD4",
"sub_path": "filament/Generic PETG @Flashforge AD4.json"
},
{
"name": "Generic PETG @Flashforge G3U",
"sub_path": "filament/Generic PETG @Flashforge G3U.json"
},
{
"name": "Generic PETG @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PETG @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Flashforge PETG-CF",
"sub_path": "filament/Flashforge PETG-CF.json"
@@ -945,6 +945,10 @@
"name": "SUNLU PETG @FF AD5M 0.8 Nozzle",
"sub_path": "filament/SUNLU/SUNLU PETG @FF AD5M 0.8 nozzle.json"
},
{
"name": "Generic HS PLA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Flashforge HIPS @FF G4",
"sub_path": "filament/Flashforge HIPS @FF G4.json"
@@ -1045,14 +1049,42 @@
"name": "Flashforge PLA-CF @FF G4P",
"sub_path": "filament/Flashforge PLA-CF @FF G4P.json"
},
{
"name": "Generic HS PLA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic PLA High Speed @Flashforge AD4",
"sub_path": "filament/Generic PLA High Speed @Flashforge AD4.json"
},
{
"name": "Generic PLA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic PLA @Flashforge G3U",
"sub_path": "filament/Generic PLA @Flashforge G3U.json"
},
{
"name": "Generic PLA @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PLA @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PVA @Flashforge",
"sub_path": "filament/Generic PVA @Flashforge.json"
},
{
"name": "Flashforge HS PLA",
"sub_path": "filament/Flashforge HS PLA.json"
@@ -1201,42 +1233,10 @@
"name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json"
},
{
"name": "Generic PLA @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Generic PLA @Flashforge AD4",
"sub_path": "filament/Generic PLA @Flashforge AD4.json"
},
{
"name": "Generic PLA @Flashforge G3U",
"sub_path": "filament/Generic PLA @Flashforge G3U.json"
},
{
"name": "Generic PLA @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PLA @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json"
},
{
"name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle",
"sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json"
},
{
"name": "Generic PVA @Flashforge",
"sub_path": "filament/Generic PVA @Flashforge.json"
},
{
"name": "Polymaker CoPA",
"sub_path": "filament/Polymaker/Polymaker CoPA.json"
@@ -1297,6 +1297,10 @@
"name": "Generic PLA-CF10 @Flashforge AD4",
"sub_path": "filament/Generic PLA-CF10 @Flashforge AD4.json"
},
{
"name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json"
},
{
"name": "Flashforge PLA Silk",
"sub_path": "filament/Flashforge PLA Silk.json"
@@ -1321,10 +1325,6 @@
"name": "Generic PLA Silk @Flashforge AD4",
"sub_path": "filament/Generic PLA Silk @Flashforge AD4.json"
},
{
"name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle",
"sub_path": "filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json"
},
{
"name": "SUNLU PLA Marble @FF AD3",
"sub_path": "filament/SUNLU/SUNLU PLA Marble @FF AD3.json"
@@ -1709,6 +1709,102 @@
"name": "Flashforge ASA Basic @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG-CF @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG-CF @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json"
@@ -1949,254 +2045,6 @@
"name": "Polymaker CoPA @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle",
"sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json"
},
{
"name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json"
},
{
"name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle",
"sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json"
},
{
"name": "Flashforge PETG-CF @FF G4 0.6 nozzle",
"sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json"
},
{
"name": "Flashforge PETG-CF @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF G4 0.6 HF nozzle",
"sub_path": "filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json"
@@ -2493,6 +2341,158 @@
"name": "Flashforge PLA-CF @FF G4P 0.6 nozzle",
"sub_path": "filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge HS PLA @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Basic @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Matte @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Metal @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Pro @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json"
},
{
"name": "Flashforge PLA Silk @FF AD5M 0.25 nozzle",
"sub_path": "filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json"
@@ -2601,6 +2601,30 @@
"name": "Flashforge PETG-CF @FF C5P",
"sub_path": "filament/Flashforge PETG-CF @FF C5P.json"
},
{
"name": "Flashforge PLA Matte @FF C5",
"sub_path": "filament/Flashforge PLA Matte @FF C5.json"
},
{
"name": "Flashforge PLA Matte @FF C5P",
"sub_path": "filament/Flashforge PLA Matte @FF C5P.json"
},
{
"name": "Flashforge PLA Metal @FF C5",
"sub_path": "filament/Flashforge PLA Metal @FF C5.json"
},
{
"name": "Flashforge PLA Metal @FF C5P",
"sub_path": "filament/Flashforge PLA Metal @FF C5P.json"
},
{
"name": "Flashforge PLA Pro @FF C5",
"sub_path": "filament/Flashforge PLA Pro @FF C5.json"
},
{
"name": "Flashforge PLA Pro @FF C5P",
"sub_path": "filament/Flashforge PLA Pro @FF C5P.json"
},
{
"name": "Flashforge PLA Basic @FF C5",
"sub_path": "filament/Flashforge PLA Basic @FF C5.json"
@@ -2633,30 +2657,6 @@
"name": "Flashforge PLA Luminous @FF C5P",
"sub_path": "filament/Flashforge PLA Luminous @FF C5P.json"
},
{
"name": "Flashforge PLA Matte @FF C5",
"sub_path": "filament/Flashforge PLA Matte @FF C5.json"
},
{
"name": "Flashforge PLA Matte @FF C5P",
"sub_path": "filament/Flashforge PLA Matte @FF C5P.json"
},
{
"name": "Flashforge PLA Metal @FF C5",
"sub_path": "filament/Flashforge PLA Metal @FF C5.json"
},
{
"name": "Flashforge PLA Metal @FF C5P",
"sub_path": "filament/Flashforge PLA Metal @FF C5P.json"
},
{
"name": "Flashforge PLA Pro @FF C5",
"sub_path": "filament/Flashforge PLA Pro @FF C5.json"
},
{
"name": "Flashforge PLA Pro @FF C5P",
"sub_path": "filament/Flashforge PLA Pro @FF C5P.json"
},
{
"name": "Flashforge PLA Silk @FF C5",
"sub_path": "filament/Flashforge PLA Silk @FF C5.json"
+54
View File
@@ -0,0 +1,54 @@
{
"name": "IdeaFormer",
"version": "02.00.00.03",
"force_update": "0",
"description": "IdeaFormer belt printer configurations",
"machine_model_list": [
{
"name": "IdeaFormer IR3 V2",
"sub_path": "machine/IdeaFormer IR3 V2.json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "0.20mm Standard @IdeaFormer IR3 V2",
"sub_path": "process/0.20mm Standard @IdeaFormer IR3 V2.json"
}
],
"filament_list": [
{
"name": "Generic PLA @IdeaFormer IR3 V2",
"sub_path": "filament/Generic PLA @IdeaFormer IR3 V2.json"
},
{
"name": "eSUN PLA @IdeaFormer IR3 V2",
"sub_path": "filament/eSUN PLA @IdeaFormer IR3 V2.json"
},
{
"name": "Generic PETG @IdeaFormer IR3 V2",
"sub_path": "filament/Generic PETG @IdeaFormer IR3 V2.json"
}
],
"machine_list": [
{
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "fdm_klipper_common",
"sub_path": "machine/fdm_klipper_common.json"
},
{
"name": "fdm_belt_common",
"sub_path": "machine/fdm_belt_common.json"
},
{
"name": "IdeaFormer IR3 V2 0.4 nozzle",
"sub_path": "machine/IdeaFormer IR3 V2 0.4 nozzle.json"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

@@ -0,0 +1,113 @@
{
"type": "filament",
"name": "Generic PETG @IdeaFormer IR3 V2",
"inherits": "Generic PETG @System",
"from": "system",
"setting_id": "n4zaXcUUzTqAxq5f",
"instantiation": "true",
"compatible_printers": [
"IdeaFormer IR3 V2 0.4 nozzle"
],
"filament_type": [
"PETG"
],
"filament_vendor": [
"Generic"
],
"filament_settings_id": [
"Generic PETG @IdeaFormer IR3 V2"
],
"filament_diameter": [
"1.75"
],
"filament_density": [
"1.27"
],
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"25"
],
"filament_max_volumetric_speed": [
"10"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"245"
],
"nozzle_temperature_range_low": [
"220"
],
"nozzle_temperature_range_high": [
"260"
],
"temperature_vitrification": [
"70"
],
"hot_plate_temp": [
"80"
],
"hot_plate_temp_initial_layer": [
"80"
],
"cool_plate_temp": [
"80"
],
"cool_plate_temp_initial_layer": [
"80"
],
"textured_plate_temp": [
"80"
],
"textured_plate_temp_initial_layer": [
"80"
],
"fan_min_speed": [
"40"
],
"fan_max_speed": [
"60"
],
"overhang_fan_threshold": [
"25%"
],
"overhang_fan_speed": [
"80"
],
"close_fan_the_first_x_layers": [
"3"
],
"full_fan_speed_layer": [
"8"
],
"slow_down_min_speed": [
"20"
],
"slow_down_layer_time": [
"4"
],
"fan_cooling_layer_time": [
"100"
],
"reduce_fan_stop_start_freq": [
"1"
],
"filament_retraction_length": [
"2"
],
"filament_retraction_speed": [
"40"
],
"filament_deretraction_speed": [
"40"
],
"filament_z_hop": [
"0.4"
],
"filament_start_gcode": [
"; Generic PETG @IdeaFormer IR3 V2 — belt PETG, bed 80C"
]
}
@@ -0,0 +1,113 @@
{
"type": "filament",
"name": "Generic PLA @IdeaFormer IR3 V2",
"inherits": "Generic PLA @System",
"from": "system",
"setting_id": "1xjycsEAFh6KQIhp",
"instantiation": "true",
"compatible_printers": [
"IdeaFormer IR3 V2 0.4 nozzle"
],
"filament_type": [
"PLA"
],
"filament_vendor": [
"Generic"
],
"filament_settings_id": [
"Generic PLA @IdeaFormer IR3 V2"
],
"filament_diameter": [
"1.75"
],
"filament_density": [
"1.24"
],
"filament_flow_ratio": [
"0.98"
],
"filament_cost": [
"20"
],
"filament_max_volumetric_speed": [
"12"
],
"nozzle_temperature": [
"215"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_low": [
"190"
],
"nozzle_temperature_range_high": [
"240"
],
"temperature_vitrification": [
"45"
],
"hot_plate_temp": [
"75"
],
"hot_plate_temp_initial_layer": [
"75"
],
"cool_plate_temp": [
"75"
],
"cool_plate_temp_initial_layer": [
"75"
],
"textured_plate_temp": [
"75"
],
"textured_plate_temp_initial_layer": [
"75"
],
"fan_min_speed": [
"100"
],
"fan_max_speed": [
"100"
],
"overhang_fan_threshold": [
"50%"
],
"overhang_fan_speed": [
"100"
],
"close_fan_the_first_x_layers": [
"3"
],
"full_fan_speed_layer": [
"8"
],
"slow_down_min_speed": [
"20"
],
"slow_down_layer_time": [
"4"
],
"fan_cooling_layer_time": [
"100"
],
"reduce_fan_stop_start_freq": [
"1"
],
"filament_retraction_length": [
"1.5"
],
"filament_retraction_speed": [
"35"
],
"filament_deretraction_speed": [
"30"
],
"filament_z_hop": [
"0.4"
],
"filament_start_gcode": [
"; Generic PLA @IdeaFormer IR3 V2 — belt PLA, bed 75C"
]
}
@@ -0,0 +1,36 @@
{
"type": "filament",
"name": "eSUN PLA @IdeaFormer IR3 V2",
"inherits": "Generic PLA @IdeaFormer IR3 V2",
"filament_id": "OFkrxQC4",
"from": "system",
"setting_id": "XqkviBmFHEglXueX",
"instantiation": "true",
"compatible_printers": [
"IdeaFormer IR3 V2 0.4 nozzle"
],
"filament_type": [
"PLA"
],
"filament_vendor": [
"eSUN"
],
"filament_settings_id": [
"eSUN PLA @IdeaFormer IR3 V2"
],
"nozzle_temperature_initial_layer": [
"200"
],
"nozzle_temperature": [
"200"
],
"enable_pressure_advance": [
"1"
],
"pressure_advance": [
"0.12"
],
"filament_max_volumetric_speed": [
"20"
]
}

Some files were not shown because too many files have changed in this diff Show More