Commit Graph

58 Commits

Author SHA1 Message Date
SoftFever
1d023216f2 clean up 2026-08-05 18:09:36 +08:00
SoftFever
194ef34080 Wait in the wipe tower with a millisecond dwell on Klipper
The wipe tower's "Delay after unloading" never happened on Klipper. It was
emitted as G4 S<seconds>, and Klipper's G4 reads only the P parameter, in
milliseconds, so the pause was silently skipped. The option now produces a
dwell Klipper actually performs.

Also corrects the planner flush rationale, which cited an extruder position
reset that Klipper resolves at parse time and does not need synchronized, and
adds end-to-end coverage that slices a two-filament print and checks the
emitted wipe tower G-code on both a Klipper and a non-Klipper flavor.

No change to any other firmware flavor's output, and no shipped profile sets a
non-zero delay, so no shipped profile's output moves either.
2026-08-05 17:15:35 +08:00
SoftFever
4e1caa39eb Flush the wipe tower planner queue with M400 on Klipper
The wipe tower emitted G4 S0 to make the firmware finish its queued moves
before commands that must not take effect early. Klipper's G4 reads only the
P parameter, so that flush never happened there and a temperature change could
land seconds ahead of the moves it was meant to follow. Klipper now gets M400
instead, through one helper shared by both wipe tower implementations.

No change to any other firmware flavor's output, so no shipped profile or saved
project is affected.
2026-08-05 17:15:35 +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
7a378d2fc4 Sync WipeTower from BambuStudio(through ca1881761) 2026-07-27 00:48:44 +08:00
SoftFever
9b5eb76478 Misc updates and clean up
- WipeTower: use filament_ramming_volumetric_speed(_nc) for ramming, falling back to
  max_vol_speed only when nil; gate precool temps on enable_pre_heating
- ToolOrderUtils: disable the inter-layer forecast in the per-nozzle base reorder so
  H2D/H2C ordering is unchanged
- PrintConfig: stop stripping filament_prime_volume in handle_legacy; document that
  prime_volume drives the Type2 wipe tower and filament_prime_volume the Type1 one
- GCodeProcessor: exclude post-print end-gcode M400 dwells from the M73 estimate and
  drop the dead air-filtration state
- Trim verbose BambuStudio source-location comments across the port
2026-07-20 17:34:13 +08:00
denis svinarchuk
b0dddb4648 wipe_tower: carousel barrier parity with BBS (precool, ramming speed, reverse travel)
Match BBS ramming() L3421-3535 and toolchange_wipe_new L4039-4044:

nozzle_change_new (carousel = !extruder_change):
  - M632 barrier filled: M400 + M104 precool + M106 fan (BBS L3425-3428)
  - Carousel-specific ramming speed via max_e_ramming_speed.second (BBS L3435)
  - Reverse travel after ramming via ramming_travel_time (BBS L3499-3526)
  - Heater index via m_physical_extruder_map (matches BBS get_extruder_id)

toolchange_wipe_new (add_M104_by_requirement):
  - format_line_M104: M400+M104 instead of M632+M104+M633 (BBS L1328-1341)
  - No carousel suppression: fires for both extruder and carousel changes (BBS L4040-4044)
  - m_is_multiple_nozzle gate retained (Orca calls this for all printers; BBS has it H2C-only)

FilamentParameters (WipeTower.hpp):
  - Added: max_e_ramming_speed, ramming_travel_time, precool_target_temp, precool_t
  - Added: is_need_reverse_travel() method

Init (WipeTower.cpp):
  - Carousel params from config: ramming speed, precool temp/timing, travel time
  - Matches BBS init L1878-1932

Non-H2C safety: all carousel paths gated by m_is_multiple_nozzle (false for non-H2C).
Ramming speed fallback chain ensures identical values for non-H2C printers.
2026-07-16 18:36:39 +01:00
denis svinarchuk
b90ac13d86 fix(H2C): carousel nozzle change zone — ramming depth, M632 barriers, preheat suppression
- Add nozzle_change_depth override for carousel rotations (same extruder,
  different nozzle) in plan_toolchange() and plan_tower_new() — previously
  depth was 0 because condition checked m_filament_map (extruder-level)
  instead of m_filament_nozzle_map (nozzle-level)
- Emit M632/M633 carousel barriers inside NOZZLE_CHANGE_START/END markers
  in nozzle_change_new(), matching BBS ramming() L3421-3429 pattern
- Add is_extruder_change flag to NozzleChangeResult (matches BBS field)
  to propagate carousel/extruder-change distinction downstream
- Suppress duplicate M632 in add_M104_by_requirement for carousel —
  M632 already emitted inside nozzle_change_new(); extruder change
  preheat M104 preserved (BBS has no add_M104_by_requirement at all)

Reference to BBS: BambuStudio/src/libslic3r/GCode/WipeTower.cpp
  ramming() extruder_change flag, is_need_ramming(), plan_toolchange()
2026-07-16 18:00:22 +01:00
SoftFever
237ef41b06 feat(libslic3r): multi-nozzle slicing engine for H2C/A2L
Port BambuStudio's dual-nozzle slicing core: H2C-era config keys, filament-to-nozzle grouping with per-layer dynamic regrouping, filament/nozzle/hotend gcode placeholder vocabulary, multi-nozzle wipe tower pre-heat/pre-cool, the two-pass pre-cooling injector, and corexy farthest-point timelapse.
2026-07-09 01:16:25 +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
zhimin.zeng
1ccdf7b43b ENH: add wrapping detection
jira: STUDIO-13192
Change-Id: I0fb5692b18cdb3b7af624a831dcfb0f635b165f0
(cherry picked from commit 89a8b6ea5e34340cba3750416ce3100dcc39f5c2)
(cherry picked from commit 50bc8c10a7b4ddc0b2dfe9cbab438b9d307b7fc0)
2025-09-30 15:32:44 +08:00
jiangkai.zhao
8e616ce892 ENH:add flat_irong as print preset
jira: none
Change-Id: Ic29634780e1ece2d0cffddd0c2cf7cafb1318fa2
(cherry picked from commit 2acd313f72d5e9531cf1394c218dc3bc6b8d9521)
2025-09-21 13:48:03 +08:00
Bastien Nocera
6e425e9601 FIX: Fix missing polygon primitives declaration
/run/build/BambuStudio/src/libslic3r/GCode/WipeTower.hpp:31:12: error: ‘TriangleMesh’ does not name a type
   31 |     static TriangleMesh                 its_make_rib_tower(float width, float depth, float height, float rib_length, float rib_width, bool fillet_wall);
      |            ^~~~~~~~~~~~
<snip>
/run/build/BambuStudio/src/libslic3r/GCode/WipeTower.hpp:33:12: error: ‘Polygon’ does not name a type
   33 |     static Polygon                      rib_section(float width, float depth, float rib_length, float rib_width, bool fillet_wall);
      |            ^~~~~~~
<snip>
/run/build/BambuStudio/src/libslic3r/GCode/WipeTower.hpp:200:21: error: ‘Polylines’ was not declared in this scope
  200 |     std::map<float, Polylines> get_outer_wall() const
      |                     ^~~~~~~~~
<snip>

(cherry picked from commit ea2c021427dddcddb8a4e9e41c0f649dd727fdf9)
2025-09-18 09:33:17 +08:00
jiangkai.zhao
5573293582 ENH: Use the real prime tower model after slicing.
1. set wipe tower real height
2. fix wipe tower small arc error
3. add rib_width constraint to ensure that the rib wall of the wipetower are attached to the infill.
jira: STUDIO-10540

Change-Id: Idfdc809f0236121d98587ac2a09a2ebbf5caf945
(cherry picked from commit 3a7dcfd23249571224a4d538c55907a0a5c6154d)
2025-09-18 09:33:02 +08:00
zhimin.zeng
b791a31aff FIX: crash when the wipe tower block is invalid
jira: STUDIO-10696
Change-Id: I6e9ff87cfb8cfd2383480248d56b8515d383b11c
(cherry picked from commit 609a4c0e52b4ad2c7b145d21b9c648c96d2ba13d)
2025-09-17 22:58:45 +08:00
jiangkai.zhao
4a12032cd3 Fix: crashes when slicing small objects with wipe_tower.
jira: STUDIO-10572
Change-Id: I37312673a87e542120ee7282c22f80e16c894cd9
(cherry picked from commit 8d32d29016a96ae3e9fcaec3fc9d261bff39dd22)
2025-09-17 16:11:00 +08:00
jiangkai.zhao
b8384f0b7e ENH: Remove the solid layer below the fast extrusion
jira: none
Change-Id: Ied59c6f18bc2832be80c105d95f77d5cff119cc3
(cherry picked from commit b9d07f402ea929b90c26bf6f55919677cf77a75b)
2025-09-17 15:06:38 +08:00
jiangkai.zhao
820f12a16b ENH: reopen confilctchecker with adpative height.
and fix conflict checking when the wipe tower's brim fully encloses the model

jira: STUDIO-10237, STUDIO-10296
Change-Id: I6e2a6640c06ddb6b3af700c9048fa26434411631
(cherry picked from commit b36c41e5146168325d8b7ec966eb97f1062442a7)
2025-09-17 14:03:59 +08:00
jiangkai.zhao
d1d04d395e Fix: the generation of the skirt does not take the wipe_tower into account.
jira: STUDIO-10381
Change-Id: I523d366d6d569696de48f872be827d73710cb526
(cherry picked from commit 939b405c35809dbceb65e5efdc65622407065b65)
2025-09-17 14:02:10 +08:00
zhimin.zeng
37013aa25b FIX: modify quick extrude to 1 perimeter width
jira: none
Change-Id: Ibda111742af2d664088a51e9dd3740f81b4649c7
(cherry picked from commit 9fccb9bcde5332bafcb50f5fbb77212caac19131)
2025-09-17 10:07:49 +08:00
zhimin.zeng
a0b5cdfbb2 ENH: generate framework for all layers
jira: none
Change-Id: I95f35ba45fe9f544c53bdf0c5a52a70bd45ee7a9
(cherry picked from commit 3e0b6eb2289eab383c6e616d37559b0c6619eca1)
2025-09-17 10:07:27 +08:00
zhimin.zeng
5b589b47f1 FIX: fix error length for nozzle change
jira: none
Change-Id: I1c9052cadef717888c5f8ff50e0d6e1efce6d73e
(cherry picked from commit d0d5ed2f5ef69b9f5155ec64c7c0a73cfa90483e)
2025-09-17 10:04:30 +08:00
jiangkai.zhao
283dbe48b2 ENH: Set the skeleton of contact surface to solid
and fix the nozzlechange's error cleanbox.
and fix some error in interface's nozzlechangle and toolchange.

jira: none
Change-Id: I2fd5c68d90506fcb8f01f09a8246dfb5838baef4
(cherry picked from commit 6c5b63db246a1f42e34225c5561fb8b0975da53b)
2025-09-17 09:48:52 +08:00
jiangkai.zhao
9ad372f3f5 ENH: add solid infill before nozzlechange
and set the contact surfaces of different material types as solid,
and reduce the nozzlechange speed if it occurs at the contact surface,
and recuce the toolchange speed if it occurs at the contact surface.
jira: none

Change-Id: I884d60f4114544dfa959bd654ecc985f5fb9aac4
(cherry picked from commit ed7bfd3ff6732efe6c7e9eb96901be1db00bb3d0)
2025-09-17 09:30:48 +08:00
jiangkai.zhao
ffdce0671c Fix: error wipe when no finish_block_tcr
jira: none

Change-Id: I0890089661a719f728c5fbc5254cf53f047d7248
(cherry picked from commit 7d48561817647e7ee111ce5c40063159c4baee03)
2025-09-17 09:30:43 +08:00
zhimin.zeng
9bb3532743 FIX: fix some wipe tower issue
1. the nozzle change gcode use double perimeter width
2. fix the error layer height for adaptive layer height
3. limit the nozzle change speed to 50 when a bridge is detected
4. fix the error extrusion flow for filament change gcode when a bridge is detected
jira: STUDIO-10269

Change-Id: I580c618555fe19d000a56e2510a42004722c1b8b
(cherry picked from commit 5c56b43166ab32b09da31b7046efbbcbe3cbc9c8)
2025-09-16 23:40:53 +08:00
jiangkai.zhao
d463858fda ENH: Change the collision calculation
of the wipe tower's outer wall to use the actual outer wall path.

jira: none
Change-Id: Ib45ecbc328c88c1abe6d9e8567f715331a3ddd37
(cherry picked from commit 0a20f1fe6d6d63cdcb13bc19fd9ae553f45b6f59)
2025-09-16 22:20:14 +08:00
qing.zhang
01c2a31ac9 ENH: change param name
Jira: none

change filament category to filament adhesiveness category

Signed-off-by: qing.zhang <qing.zhang@bambulab.com>
Change-Id: I267d71b2f968becf4e8f434daafdf1a70c36a823
(cherry picked from commit faec4160d560d965978447eaa8675a5fbee4090c)
2025-09-16 21:56:37 +08:00
qing.zhang
e7e6405ad3 ENH:instead of prime_volume by filament_prime_volume
Jira: none

Signed-off-by: qing.zhang <qing.zhang@bambulab.com>
Change-Id: I96e7d0604da8f90678feed81833e3a634752ffff
(cherry picked from commit be02e769bb49680d6be678fc5fa73a141ca8da1c)
2025-09-16 10:39:19 +08:00
jiangkai.zhao
8723b6987d ENH: enhance some functions of the wipe_tower
1.Add automatic calculation of the wipe_tower's brim width by height;
2.modify the min_depth_per_height and the default ridwidth

jira: none
Change-Id: Idd96bc90e8e631aa8481b559e1e9fec24c6b822f
(cherry picked from commit 4dd4e9e12c02d945a0ac3fd2020f75313c5b2cc9)
2025-09-13 18:49:41 +08:00
qing.zhang
a6c4e22e15 ENH: move extra params
Jira: none

Signed-off-by: qing.zhang <qing.zhang@bambulab.com>
Change-Id: Ib5c4d203c6585b9946d8703d9f33477780afb275
(cherry picked from commit 78079dacd1c4f14c171668d6c7895e72dd96c52a)
2025-09-12 17:43:07 +08:00
zhimin.zeng
a5ae552512 EMH: enhance for rib wall wiper tower
1. fix the slice error status
2. add rendering for wiper tower
3. modify the wipe tower start pos for rib wall wipe tower
jira: none

Change-Id: If554ca0fb30f6c7ce9641014c0ed4a7f23afd6f4
(cherry picked from commit 3ae08b458dea1d04cad33b2787d98407111b038c)
(cherry picked from commit 55772c59126bc4dd5c2ad022e7a959785c29cb4e)
2025-09-12 15:37:46 +08:00
jiangkai.zhao
16731a90b0 ENH:add rib wall wipe tower
jira: none

Change-Id: I9699cc74e206851284949f89230e986435b9e1b7
(cherry picked from commit eabfa6b272590698886ecec33b89207605b91993)
(cherry picked from commit 1d33d1c37d4dada1cd1129ff16fe46d07933ad26)
2025-09-12 15:31:11 +08:00
qing.zhang
34f4300f4e ENH: add filament change length for color change
Jira: none

Signed-off-by: qing.zhang <qing.zhang@bambulab.com>
Change-Id: I84ab638d6af056ede9b9524d1395eb42fa731150
(cherry picked from commit 9b46d437bad707d38a978bc768e0359979e5fb19)
2025-09-10 16:00:00 +08:00
jiangkai.zhao
ea2d23c718 FIX: fix some bugs in wipe_tower's skip points
jira:none

Change-Id: I387a168ccfe65032b3b926d02d8da4ab7aed317e
(cherry picked from commit cbcee1b79876b14a04e069fc6072f174c854f0cf)
2025-09-07 22:46:14 +08:00
zhimin.zeng
307d51d903 FIX: initialize variables is_tool_change of wipe tower
and and modify the start position for tpu
jira: none

Change-Id: I75b09e7839ddd3b9fffe77392e573e1d8caa00d5
(cherry picked from commit fce47aa8cb59fb718ff30a7c7eebda30fc83119d)
2025-09-07 22:46:04 +08:00
zhimin.zeng
57a067213c FIX: fix error start pos of wipe tower after tool_change
jira: none
Change-Id: I770030fb624e9c9de3bb0f8fcb4f3c29cab4f347
(cherry picked from commit 085995b3aa5dbadd7fd274babb99856f0791882d)
2025-09-07 22:44:47 +08:00
zhimin.zeng
b2c59ea0e4 FIX add prime_tower_skip_points parameter
jira: none
Change-Id: I696d6ca5d9bccf16b48110157cd6ec44839a05e8
(cherry picked from commit 9b5bbebf311c2d8d68ec89aeda3ddae2b267692e)
2025-09-07 21:55:17 +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
b3edd30bf7 ENH: wipe tower add solid infill for support filament
jira: none

Change-Id: I438e06b5e50259d5a9caefbc0d8580187c2b7051
(cherry picked from commit 8a6b9851dbca4162799960074ffe304b02a8b077)
2025-09-07 21:01:06 +08:00
zhimin.zeng
b6e8c7b14e FIX: fix the error travel and wipe path of wipe tower
jira: none
Change-Id: Ib195cfc87a08f367e5d722b4af85cd33b1d1efdc
(cherry picked from commit bb2b81dc992227fe90f33f11f54162925d12d5c9)
2025-09-07 00:13:52 +08:00
zhimin.zeng
18279f7c37 FIX: some gcode path errors of wipe tower
jira: none
Change-Id: Ic669e95ecc32a232676c86e89fa1a6fe092efa36
(cherry picked from commit 1fe49fb2d1f7bd4572c3b5e588af06c94c08dd43)
2025-09-07 00:00:42 +08:00
zhimin.zeng
bdf5cc9063 FIX: the wipe tower is not show when enable smooth timelapse
jira:none

Change-Id: Iab7994e1ba15d09effe9ad57aebbe9520459f7cd
(cherry picked from commit c6e117fef0efbc0f921db961c1cbf68b895bf75a)
2025-09-06 23:00:41 +08:00
zhimin.zeng
257fc86ca9 ENH: wipe tower support filaments that do not adhere to each other
jira:none

Change-Id: Ia52340f4e8bdb34791cb2019e9763bddfbc8dc5f
(cherry picked from commit e1e0de6efb667a2a198be47d75c90b0f2f0a4324)
2025-09-06 22:19:32 +08:00
zhimin.zeng
34ebd54680 ENH: add print_outer_first for wipe tower
and modify the min_depth_per_height
jira: none

Change-Id: I4860df661b4dd1f66677112d14e60560bc4a73be
(cherry picked from commit 00810d685d01a91b5373f3315413aaef1fe49cbc)
2025-08-24 23:18:29 +08:00
zhimin.zeng
0ff33f8f7e ENH: support tpu for multi_extruder
jira: none
Change-Id: I556804aadac00406e7214b86f7925170a90c55ce
(cherry picked from commit ede9f90a792f3f39e82916543efaf187ce80d66c)
2025-08-24 23:18:13 +08:00
zhimin.zeng
955bb4dea8 ENH: wipe tower support nozzle change
jira: none
Change-Id: I398a508cbc8d02644b60e504405392254329ef10
(cherry picked from commit 8b2a94ed5f8b757ccc4919b9182f3d8edaf767fd)
2025-08-24 23:18:10 +08:00
zhimin.zeng
328ea469cb ENH: modify the start pos of wall for wipe tower
and modify the overlap of wall and infill for wipe tower
jira:none

Change-Id: I0d1355c718e2bd1efea6d898f793f5869476ab12
(cherry picked from commit 4db196b11f052d6a7a7c7a8aafe0d2b34a7d2d80)
2025-02-17 21:44:57 +08:00
SoftFever
e624632969 semm 2023-09-09 13:19:59 +08:00