mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-03 16:22:08 +00:00
* Sync WipeTower from BambuStudio(through ca1881761) * Fix post-slice self-invalidation on custom multi-extruder printers * Complete the rib wipe tower port in WipeTower2 The rib tower is now always square (prime_tower_width is ignored, as the GUI already implies), carries the rib origin offset like the BBL tower so the rib tips sit inside the configured position, clamps the rib length to the tower diagonal, and extends the ribs for short towers. * Use the squared rib tower size in arrange estimates estimate_wipe_tower_polygon reserved the arrange footprint and clamped the tower X position with the raw prime_tower_width, under-reserving space whenever the rib wall squares the tower to a different width. * Print the WipeTower2 shell with a non-support, non-soluble filament Like the BBL tower: the layer's sparse infill, wall, and brim go to the first toolchange to a non-support/non-soluble filament, or are printed with the incoming filament before any toolchange. The minimal-purge clamp now also covers toolchanges that get no finish-layer saving. Output is unchanged when no support/soluble filament is used. * Port the skip-points gap wall to WipeTower2 prime_tower_skip_points was stubbed for Type2 towers: the wall call hard-coded skip_points=false, the gap cutter received an empty vector, and append_tcr2 never routed the entry travel. Now the toolchange entry positions are precomputed from the finalized plan, the wall is cut open at each entry, and the entry travel approaches around the tower bounding box through the opening when it starts outside the tower. The geometry helpers are re-synced with the BBL versions (add_extra_point guards, per-point side selection). The cone wall keeps its separate path, where the option stays inert. Behavior change: non-BBL towers now honor the (default-on) checkbox with gap walls and routed entries; with the option off the output is unchanged, and the BBL tower path is untouched. * Route the in-place toolchange tower entry through the skip-point gap On multi-tool printers without ramming the tool changes away from the tower and the entry travel is the tcr's own positioning move, which went straight across the printed wall. Append the avoid-perimeter path to the change-filament gcode instead, so the head approaches around the tower and enters through the wall opening (append_tcr parity). * Iron the purge start out through the skip-point gap in WipeTower2 Port the BBL tower's entry line ironing: extrude the first 3 mm of the purge, retract, drag the nozzle 1.5x back out through the wall gap at F600, creep back at F240 and unretract, so the toolchange start blob ends up in the gap instead of on the wall. Fires only when the purge starts at the left-edge entry heading right (in-place toolchangers); SEMM ram/cooling wipes start mid-box and the priming line has no wall, so both keep their previous output. * Reserve WipeTower2 toolchange depth to match the printed purge The planner reserved ramming rows gated only on enable_filament_ramming and sized them with the SEMM 0.25s time step, while toolchange_Unload rams on (semm && enable_filament_ramming) || filament_multitool_ramming with the multitool time step. Disabling multitool ramming therefore left ~3 unprinted rows per toolchange as blank bands in the tower. Without ramming the first wipe line also needs reserved depth of its own (it no longer rides the last ramming row), plus the y_step/2 offset the wipe start inherits from the ramming start position - otherwise the tightened boxes truncate the ordered purge at the box edge. * Tile WipeTower2 purge rows contiguously across toolchange blocks Without ramming, each purge block reserved one wipe pitch more than its rows occupy (ceil+1 rounding plus the ram-geometry start offset), and the wipe began a full pitch inside the block, leaving a blank band of exactly two pitches between adjacent blocks. Plan the block as whole wipe rows, start the first row so the row lattice continues across the block boundary, and fill the reserved box instead of stopping at the ordered volume, mirroring how the BBL WipeTower keeps planned depth identical to printed rows. Ram-printing toolchanges (SEMM with ramming enabled, multitool ramming) are unchanged. * Scrub the WipeTower2 toolchange entry with the BBL flat-ironing spiral The entry scrub now matches the BBL tower's toolchange_wipe_new sequence: after the ironing drag the retracted nozzle runs a dry expanding-square spiral centred on the wall-gap entry point before resuming the purge row. The spiral runs whenever the gap wall is on (disable per filament via filament_tower_ironing_area = 0); WipeTower2 no longer reads prime_tower_flat_ironing. * Restart the WipeTower2 wipe at the box boundary after multitool ramming With the gap wall on a multi-tool printer, quantize the ram band up to its whole reserved rows (as the BBL tower does for the old-tool purge) and start CP TOOLCHANGE WIPE at the left-edge boundary on a fresh row below it instead of continuing from wherever the ram serpentine ended. The entry scrub then runs at the wall gap on ram toolchanges too, and the wipe box is whole rows, so it is filled completely like the no-ram case. SEMM and skip-points-off behavior is unchanged. * Move the WipeTower2 wall gap to the wipe start row for ram toolchanges * code cleanup * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix typo --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
OrcaSlicer tests
Building, running and writing tests is documented on the wiki, under How to Test.
Two files here rather than there, because coding agents only read what is in the repository: