Commit Graph

52 Commits

Author SHA1 Message Date
SoftFever
4d81f0c181 Clamp gap-entry scrub excursions to the wipe tower margin
The dry drag-out and the flat-ironing spiral could leave the margin band no
tower envelope accounts for (the ironing area is unbounded user input);
truncate them to WIPE_TOWER_MARGIN around the tower outline instead of
skipping the scrub.
2026-08-03 15:23:54 +08:00
SoftFever
4d421918ef Harden wait_for_temp_on_wipe_tower parking and temperature deferral
Share one wait_for_temp_enabled gate between the tower and append_tcr2 so a
SEMM profile carrying the flag keeps its blocking ooze-prevention wait.
Park beside the tower on custom polygonal beds via point-in-polygon, clamp
the near-side park toward the bed edge before crossing to the far side, and
start non-blocking heating at the toolchange when ooze prevention emits
nothing so heat-up overlaps the travel.
2026-08-03 15:18:38 +08:00
SoftFever
0f48ad4157 WIP: add wait_for_temp_on_wipe_tower feature 2026-08-03 14:35:48 +08:00
SoftFever
c8aacea176 fix typo 2026-07-31 18:07:46 +08:00
SoftFever
3ab9cf53d0 code cleanup 2026-07-30 00:55:09 +08:00
SoftFever
252df70ec4 Move the WipeTower2 wall gap to the wipe start row for ram toolchanges 2026-07-29 20:58:21 +08:00
SoftFever
086bbf986b 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.
2026-07-29 19:59:33 +08:00
SoftFever
67e1ce03a6 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.
2026-07-29 18:48:10 +08:00
SoftFever
36bd453ac8 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.
2026-07-29 16:37:06 +08:00
SoftFever
9292db2f9f 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.
2026-07-29 13:23:29 +08:00
SoftFever
bef47b2c70 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.
2026-07-28 21:21:50 +08:00
SoftFever
56810c8c7f 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.
2026-07-27 21:18:53 +08:00
SoftFever
c3c37e474a 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.
2026-07-27 12:30:57 +08:00
SoftFever
466c36eaa3 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.
2026-07-27 03:07:07 +08:00
SoftFever
582017235c feat(engine): resolve per-variant config columns for raw filament reads on the export path
When a per-layer nozzle grouping migrates a filament across nozzle
variants, the write-back turns two groups of config arrays from
filament-indexed into column-indexed: the per-variant filament options
(one column per variant a filament uses) and the merged extruder
retract overrides (resized to the column count by apply_override).
Export-path readers that still indexed them with the raw filament id
read a neighbor's column for every filament ordered after a migrating
one: toolchange/standby temperatures (M104/M109), retraction lengths
and feedrates, wipe distance, z-hop types, air-filtration keys, and -
through the Extruder's cached flow term - the extrusion E of every
move.

Now every such read resolves its column through the existing
layer-aware resolver (get_filament_config_index ->
Print::get_filament_config_indx), which returns the raw filament id
whenever no per-layer grouping result is published, so static prints
are byte-inert by construction. The Extruder itself has no layer
knowledge, so it gains an injected config column (set_config_index,
default = filament id) that the generator refreshes at the only two
resolution-changing events - layer change and writer toolchange - and
that re-syncs the cached e_per_mm3 flow term. Old-filament reads
resolve at the current layer, which is safe because the per-layer maps
are gap-filled carry-forward. Whole-array placeholder copies
(toolchange temperature overrides) are rebuilt in filament order,
mirroring the existing per-variant placeholder remap. The resolvers
move to the public section so non-friend helpers (ooze prevention) can
resolve too.

Documented, deliberately unchanged: the wipe tower's per-filament
parameter rows (no layer dimension; tower x per-layer grouping is a
follow-up), travel_slope's physical-extruder read, estimator pre-heat
bookkeeping temps, and index-0 header diagnostics.

Verification: new Extruder column-injection scenario (defaults, column
follow + flow-cache rescale, filament-indexed reads unaffected, reset
semantics) and a migrating write-back case proving the column shift for
filaments ordered after a migrator and the resolver tracking it (11 +
14 assertions); suites green (libslic3r 48998/169, fff_print 655/61);
20/20 pinned-slice byte gate bit-identical (incl. sequential repro x2
deterministic).
2026-07-12 14:30:39 +08:00
Noisyfox
1c8c7820c8 Initial attempt to make speed configs multi-variant
Co-authored-by: chunmao.guo <chunmao.guo@bambulab.com>
Co-authored-by: zhimin.zeng <zhimin.zeng@bambulab.com>
Co-authored-by: qing.zhang <qing.zhang@bambulab.com>
2026-05-21 09:04:27 +08:00
Noisyfox
e87b0d57b4 Make inner_wall_speed multi-variant 2026-05-21 09:04:27 +08:00
Ioannis Giannakas
25d07eac8f Fix wipe tower first layer leaving gaps when spacing other than 100pc is specified (#12491)
Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-27 23:57:08 +08:00
SoftFever
db1fe73e85 Fix wipe tower skirt alignment by computing bbx from actual first-layer polygon (#12457) 2026-02-25 12:37:05 +08:00
Argo
769fc137c7 Ported Bambu Studio wipe tower interface features (with improved preheat and cooldown behaviour) - NEW (#12266)
Wipe tower interface features and preheat fixes

Fresh PR branch rebuilt on upstream/main (squash of origin/BBL-studio-wipe-tower-merge) to avoid merge-history issues.
2026-02-13 22:53:25 +08:00
Argo
ed3f0e2898 Fix issue #10971 (#12108)
Sorry had to re-create the PR as I did some chaos in my repo with CLI. xD

Fixes issue https://github.com/OrcaSlicer/OrcaSlicer/issues/10971

Description:
Fix wipe tower filament selection and clean up tool ordering. Added wipe_tower_filament handling to WipeTower2 (store config, mark non-selected tools as “soluble,” and use it in toolchange selection) and ensured the configured wipe‑tower extruder is included in the extruder list for ordering. Removed duplicated/merged tool‑ordering code (extra insert_wipe_tower_extruder definition, duplicate declaration, and redundant reorder block) so the tool order logic runs only once.

<img width="1819" height="799" alt="image" src="https://github.com/user-attachments/assets/cef39026-cf6a-46da-a87a-ef895774699f" />
2026-02-10 10:56:38 +08:00
Rodrigo Faselli
ef876fe577 Wipe Tower Auto Brim bug-fix (Non BBL printers) (#11831)
# Description

Fix application freeze when Prime Tower brim is set to Auto

This PR fixes an issue where enabling Auto brim width for the Prime Tower caused the application to freeze and consume unbounded amounts of memory.

Root cause
0c5f6c9865/src/libslic3r/GCode/WipeTower2.cpp (L2036-L2039)
When Auto brim is selected, the brim width was not being computed and the raw configuration value (-1) was used directly.
This resulted in an effectively infinite loop during Prime Tower brim generation, leading to runaway memory allocation instead of a controlled failure or a crash.

Solution

The Auto brim width is now properly computed based on the Prime Tower height, matching the intended behavior and existing logic used in other slicer implementations.
2026-01-05 20:15:23 +08:00
Ioannis Giannakas
0f397492e7 Fix non bambu wipe tower issues (skirt overlapping with tower, extreme travel moves outside plate boundary) (#11748)
* Fix prime/purge tower extreme travel for non BBL printers
* Fix wipe tower skirt not generating correctly for non bambu printers
2025-12-30 09:28:09 +00:00
Noisyfox
580414265d Merge remote-tracking branch 'upstream/main' into dev/h2d-2
# Conflicts:
#	src/slic3r/GUI/Tab.cpp
2025-09-24 09:15:33 +08:00
SoftFever
b483dff617 Enhance GCode handling for Z-axis movements (#10803)
* Enhance GCode handling for Z-axis movements

- Updated `travel_to_z` method to include a `force` parameter, allowing forced Z movements.
- Modified GCode generation logic to ensure Z position is restored after unknown last positions.
- Enforce z restoreation after tool changer

* Improve filament_multitool_ramming logic

* fix indent
2025-09-21 22:03:54 +08:00
jiangkai.zhao
69d85d0045 ENH: add flat ironing before toolchange
jira: none
Change-Id: Iabe121f9523b662fc90c18365aa642583635a126
(cherry picked from commit 1b467b13c4bbac7d6afd361fee75ccc52eddef9a)
2025-09-16 17:39:10 +08:00
Noisyfox
b55a0226b5 Fix compile error 2025-09-12 16:56:45 +08:00
jiangkai.zhao
70151fed7c ENH: Add gaps in the outer wall of the wipe_tower
and modify the path of travel to the wipe_tower after flushing

jira:none

Change-Id: Id4b0571fd12372c59cf522c13e256c7cc4ac3565
(cherry picked from commit 17771d0fbf753dd22411ce490586958bd643264e)
2025-09-07 21:47:16 +08:00
zhimin.zeng
84dc2d8835 ENH: flush_volume support multi_extruder and fix bug
Change-Id: Id6b041f71ee6e55e68a6937f24ce791caac8e708
(cherry picked from commit 6fbad9ed33b2868a2fffbebdc3a98926431a1093)
2025-08-24 23:18:01 +08:00
anjis
ecfe53e488 The multi-color printing wipe tower now includes the Bambu RIB wall feature (#9881)
* Add new Bambu RIB wall feature, including only the rib wall generation algorithm.

* Fix Linux compilation errors.

* Attempt to fix flatpak build

---------

Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
2025-06-15 14:53:35 +08:00
Noisyfox
cd2077ebaf Fix prime tower wipe volume calculation (#9235)
* Revert "Fixed an bug that filament_minimal_purge_on_wipe_tower option doesn't work for soluable filament (#8397)"

This reverts commit fcc5489911.

* Fixed an bug that filament_minimal_purge_on_wipe_tower option doesn't work for soluable filament (#8397)

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2025-04-20 13:36:11 +08:00
SoftFever
fcc5489911 Fixed an bug that filament_minimal_purge_on_wipe_tower option doesn't work for soluable filament (#8397) 2025-02-14 23:38:18 +08:00
SoftFever
0bf2b9dcff respect "Enable Filament ramming" option 2024-10-07 14:34:08 +08:00
Ioannis Giannakas
5bb42bc0d5 Fix wipe tower issues with SEMM and ramming turned off (#6934)
* Fix wipe tower issues with SEMM and ramming turned off

* Purge tower last layer collision potential fix (for SEMM)

* Revert "Purge tower last layer collision potential fix (for SEMM)"

This reverts commit 9fc465c2d9.
2024-10-01 22:54:14 +08:00
SoftFever
65fc14209d Fix a bug that wipe tower has missing extrusions when ramming is disabled (#6894)
* Fix a bug that wipe tower has missing extrusions when ramming is disabled.

* hide "Prime all printing extruders" for SEMM printers
2024-09-25 19:34:18 +08:00
enricoturri1966
7d0fb4f42a preheat work - part 1 2024-07-21 10:29:42 +08:00
SoftFever
a9668728bc Merge branch 'main' into feature/multitool 2024-07-16 23:30:26 +08:00
SoftFever
4b3f91b2e2 Simple preheat, temperary solution 2024-07-16 00:02:38 +08:00
SoftFever
f84c3a00e0 Fix a regression for SEMM when ramming and cooling is disabled 2024-07-14 17:35:12 +08:00
Dylan
230a4aaad8 Limit the max speed on the wipe tower (#6044)
* limit the max speed on the wipe tower
2024-07-11 23:53:32 +08:00
SoftFever
860a41baed update wipe tower according to latest PrusaSlicer 2024-07-10 21:40:10 +08:00
SoftFever
b3fff4ffd5 Removed the copyright and credits in the header of each file. This information is outdated and hard to update. Orca Slicer maintains the autoher info in git history so this is not necessary. 2024-06-15 14:56:44 +08:00
Ioannis Giannakas
43d7ac6a14 SEMM: wipe tower sparse infill speed adjustment (#5415)
* Wipe tower sparse layers speed adjustment

* Updated tooltip and option label

* Tooltip update
2024-05-22 15:27:31 +08:00
Ioannis Giannakas
6920a88e58 SEMM: Introduced parameter to control the maximum speed used for purging in the purge tower (#5304)
* Max wipe tower purge print speed for SEMM

* Max wipe tower purge print speed for SEMM

* Merge branch 'dev-branch' of https://github.com/igiannakas/OrcaSlicer into dev-branch

* Updated float calculation

* Updated float calculation

* Updated tooltip

* Updated label
2024-05-09 23:21:06 +08:00
Ioannis Giannakas
d2e76212b1 Fix wipe tower not showing purged filament volume for non BBL SEMM (#5223)
* Fix wipe tower not showing purged filament values for non BBL SEMM
2024-05-02 21:33:53 +08:00
SVNMLR
4dcfd97181 [Multi Material] Fix first layers of prime tower when using "no sparse layers" (#2764)
* MM - Add check for first layer

* Change: If no sparse layer is on -> Respect the toolchange in the first-layer checkup, to use a brim and slow down printspeed if using a primetower

* Fix comment
2023-11-17 08:01:52 +08:00
SoftFever
bbdd580bb1 fix wipe tower bug: filament end inserted twice 2023-11-16 01:00:59 +08:00
SoftFever
930e1b3bdf limit max wipe tower speed to 90 mm/s 2023-11-16 00:59:45 +08:00
SoftFever
edb5676dd1 Fixed a bug that filament start gcode was inserted twice when wipe tower is enabled
fixed #2673
2023-11-10 18:00:56 +08:00
SoftFever
40c2eccfd6 handle edge cases when Cooling tube position is 0 2023-09-12 20:12:54 +08:00