Skip to content

Add dual-material interface layers, multi-STL stacks, free-form layer heights - #1

Open
SchoepsLabs wants to merge 2 commits into
mrj0ne5CTHS:mainfrom
SchoepsLabs:interface-layers
Open

Add dual-material interface layers, multi-STL stacks, free-form layer heights#1
SchoepsLabs wants to merge 2 commits into
mrj0ne5CTHS:mainfrom
SchoepsLabs:interface-layers

Conversation

@SchoepsLabs

@SchoepsLabs SchoepsLabs commented Jul 14, 2026

Copy link
Copy Markdown

I've been using MultiStack on a Bambu H2D but couldn't get reliable separation with the air gap + ironing approach at 0.24/0.3 mm layer heights. This PR adds a dual-material interface mode plus several robustness fixes, all print-tested. Everything keeps the single-file, no-dependency design (earcut is inlined, MIT).

Interface layer mode (filament 2)

New "Separation mode" toggle: Air gap or Interface layer. Interface mode inserts thin slabs between tiles, assigned to extruder 2. With a non-bonding pairing (PLA interface between PETG tiles, or PETG between PLA) stacks pop apart cleanly with no fusing and no ironing tricks.

  • The interface footprint is a true cross-section of the tile at 45% of its height (plane/mesh intersection -> closed contours with holes -> extruded watertight prism). A naive Z-squash of the tile mesh produces interfaces with missing interiors, because the slice plane can land where the tile cross-section is only rims/peaks.
    • Defaults follow Bambu's proven support-interface recipe: 2 solid interface layers, direct contact, with an optional release gap (air layers above each interface, like support top Z distance) for stickier pairings.
    • Interface parts are pre-configured via per-part settings: extruder 2, ironing off, 80 mm/s (Bambu's stock support-interface speed).

Everything is snapped to the slicing grid

The user enters their layer height; gaps and interfaces are specified in whole layers and placed exactly on layer boundaries (a sub-layer pad absorbs tile heights that aren't layer-height multiples). Without this, at 0.24/0.3 mm layer heights the old fixed 0.20 mm gap lands mid-layer and tiles fuse, and interfaces partially vanish from the sliced output.

Native multi-part assemblies

Each stack is emitted as a single 3MF object with tiles/interfaces as components at fixed relative positions, with per-part settings in model_settings.config. This removes the "multi-part object detected" dialog on import and fixes a nasty failure where Bambu Studio dropped the interface object to the build plate (shifting every interface down one boundary and causing gcode-conflict warnings).

Multi-STL stacks

Upload several STLs (tiles, corners, edges) in one job; each gets its own stack height. Stacks are shelf-arranged with 12 mm spacing and centered, with a log warning if the layout exceeds 256 mm.

Smaller changes

  • Layer height is a free-form input (0.20 / 0.24 / 0.30...), max stack height 20 -> 45
    • Per-object/part extruder assignments written to model_settings.config

Tested

  • Headless generation tests for both modes: placement math, per-part extruder assignment, interface mesh watertightness/winding/volume validated with trimesh against geometry with through-holes, cylindrical bores, and top bosses; assembled 3MF round-tripped through an independent parser
    • Real prints on a Bambu H2D (dual nozzle) at 0.24 and 0.3 mm: PLA tiles/PETG interfaces and PETG tiles/PLA interfaces - clean separation, no fusing
      Happy to split features into separate PRs if you'd rather take them piecemeal.

Add separation layer and different shape stacking + more control of inter tile gab and unlimited height
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant