update icrsslicer - #4
Open
Raphsinai wants to merge 5097 commits into
Open
Conversation
… 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()
… 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.
…tion The M620→M621 firmware toolchange block weight (500x) was only applied to sparse track sample lines. Hundreds of G1 moves between samples inside the M620 block got weight=1, causing firmware toolchange to appear compressed on the timeline plot. Build continuous M620→M621 line ranges from track samples and apply weight=500 to ALL lines within those ranges. This makes toolchange and wipe tower zones proportionally accurate on the timeline.
Cloud catalog records never carry [tool.orcaslicer.plugin.settings], so the metadata merge wiped the locally-parsed settings and plugins silently ran on their built-in defaults (ctx.params arrived empty).
…mation End gcode contains firmware-conditional M400 waits for air purification, timelapse capture, and sound notification that are post-print operations. These were incorrectly included in M73 total time, inflating the estimate. The fix detects MACHINE_END_GCODE_START tag during the streaming parse (process_tags) and sets m_skip_end_gcode_delays=true. process_M400 then skips timed delays (S/P params) in the end gcode scope. BBS achieves the same effect by dropping leftover in calculate_time (is_final=true). We skip at the source instead, which is more surgical and leaves calculate_time behavior unchanged for all printers. Affects all BBL printers with MACHINE_END_GCODE_START tag. Non-BBL printers are unaffected (no tag = no skip).
… of M73 Replace M73-based timeline interpolation with physical time calculation from G1 feedrates and M400 delays. M73 has 1-minute resolution and non-uniform granularity which distorts the time axis (e.g. P83→P100 jump makes last filament appear much longer than it actually is). Physical timeline computes cumulative time per gcode line from actual move distances and feedrates, giving accurate filament duration on plot. Falls back to M73 interpolation when raw gcode lines are not available.
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
Physical dist/speed ignores acceleration/deceleration, giving underestimated total time (29 min vs real 48 min). M73 from the trapezoid planner accounts for accel/decel and is closer to reality. Now we keep physical DISTRIBUTION (proportions per-filament) but scale the X-axis so total time matches M73 trapezoid estimate.
Clamp ramming speed during extruder changes so the departing nozzle has enough time to reach precool_target_temp before carousel rotation. Only applies to extruder changes (not carousel nozzle changes). Reference to BBS: BambuStudio/src/libslic3r/GCode/WipeTower.cpp ramming() L3449-3462
- Add precool (cooldown) zone rendering on departing nozzle panels - Lime green color for precool, crimson for preheat - Unified badge-style tooltips (Pheat/Pcool/TC/Wipe) - Filter invalid precool events (S0, <2s duration)
* Fix external outline * Format and values * frag_color -> gl_FragColor * Remove Transform3d& view_matrix * Clarify rendering comments in 3DScene.cpp Updated comments to clarify rendering process using stencil buffer. --------- Co-authored-by: Ian Bassi <ian.bassi@outlook.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
Enable use_forcast in reorder_filaments_for_minimum_flush_volume_base to match the multi-extruder path behavior (line 1227). The forecast solver (solve_extruder_order_with_forcast) considers the next layer's filament set when choosing ordering for the current layer, minimizing inter-layer transition flush cost. Previously disabled (hardcoded false) in the single-nozzle/base path, causing suboptimal inter-layer transitions. The multi-extruder path already had this enabled. Measured on 5cubes (5 filaments, 35 layers, H2C): - Print time: -12 min (-10%) - Waste filament: -5g (-28%) - WT extrusion: -44% Limited to ≤5 filaments per nozzle per layer (O(N!×M!) complexity).
The linear approximation used a heuristic segment count clamped to 4..16, so the lift ran as a coarse polygon. Every vertex is a direction change large enough to hit the firmware's jerk limit, forcing a decelerate/accelerate at each corner — the lift micro-stutters instead of running at speed. The segment count now comes from the chord deviation against the slicing resolution, reusing Geometry::ArcWelder::arc_discretization_steps, which keeps the turn at each vertex shallow enough for the firmware to carry speed through the whole move. Points are emitted through GCodeG1Formatter so they carry the same quantization as the rest of the G-code, and the move comment now trails the feedrate line to match _travel_to_z and the G2/G3 branch. No change when arc fitting is enabled.
…_toolchange config and update tool changer printer's profiles (#15039) * update snapmaker profiles. largely ported for Snapmaker Orca fork * update prime volume * set precise_outer_wall to 1 * Update per-material multi-tool ramming to the filament library * Add per-filament overrides for toolchange retraction * Set toolchange retraction per filament for Snapmaker U1 * set default support type to tree * format snapmaker profiles
…/OrcaSlicer into feat/printer-agent-ui
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.
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.
# Description Changes the device tab to render native wxWidgets UI and route the UI via printer agents. When the flag introduced in #15110 is enabled, the tab bar will show both the native wxWidgets device tab and webview tab under the name device (legacy) This is a prerequisite for implementing the printer agent workflow. <img width="3377" height="1378" alt="image" src="https://github.com/user-attachments/assets/d72b646b-e6c6-4e10-b5d4-fc989debfca8" /> <img width="3377" height="1378" alt="image" src="https://github.com/user-attachments/assets/2356c0f8-bffe-4cd5-bf4d-31f4b5c7706e" /> <!-- > 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)
# Description On Klipper the wipe tower's motion-queue synchronization silently did nothing. Klipper acts on commands the moment it parses them, and its `G4` reads only `P` in milliseconds — it ignores `S` — so the `G4 S0` the tower used to flush the queue before a temperature change never synchronized anything, and the cooling delay after a filament's cooling moves passed instantly instead of waiting. The tower now emits `M400` for the flush and `G4 P<ms>` for the dwell when the flavor is Klipper. Only `gcode_flavor = klipper` is affected; G-code for every other flavor is byte-identical, so no shipped profile or existing project file changes. # 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)
* fixes: %g directive writing between 1 and 13 bytes into a region of size between 6 and 18 [-Wformat-overflow=] * fixes: %5s directive writing between 5 and 63 bytes into a region of size 58 [-Wformat-overflow=] * fixes: catching polymorphic type by value [-Wcatch-value=] * fixes: [-Wcomment]; removes whitespaces * increases buffer size from 71B to 90B to avoid potential ovfl.
* fixes: may be used uninitialized [-Wmaybe-uninitialized]
* fixes: may be used uninitialized [-Wmaybe-uninitialized]
* fixes: may be used uninitialized [-Wmaybe-uninitialized]
* fixes: may be used uninitialized [-Wmaybe-uninitialized]
* reverts {} initializer to = to keep code style consistent
…10707) * fixes: memcpy(...) writing to an object of type OrientParams with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] * review result: replaces anonymous namespace with static
Adds a printer option that picks up the new tool without a blocking temperature wait, travels to the wipe tower, and waits there right before purging, parked beside the tower so the ooze from the heat-up lands next to it rather than on the model. The incoming filament's target is raised ahead of the tool change, so the heat-up overlaps both the change itself and the travel to the tower. Off by default, and only offered for multi-extruder printers using a Type 2 wipe tower; the generic toolchanger profile enables it.
# 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? --> Adds **Wait for temperature on wipe tower**, a printer option for multi-extruder machines using a Type 2 wipe tower. With it on, the new tool is picked up without a blocking temperature wait; the printer travels to the wipe tower and waits there right before purging, parked beside the tower so the ooze from the heat-up lands next to it rather than on the model. The incoming filament's target is raised ahead of the tool change, so the heat-up overlaps both the change itself and the travel to the tower. The benefit is less oozing and less dead time. The tool no longer sits at full print temperature while it waits to be picked up or right after it undocks — it heats on the move and only reaches temperature once it is over the tower, so there is far less hot-and-idle time, and what does ooze ends up beside the tower. This matters most on tool changer printers with long docking and attaching cycles, such as Tapchanger and StealthChanger machines, where that wait is otherwise pure stall time spent dripping. The firmware or tool change macro must not wait for the temperature itself. The option is off by default and only shown for multi-extruder printers on a Type 2 wipe tower, and it is enabled by default for the generic toolchanger profile. # 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. --> New Catch2 cases in `tests/fff_print/test_multifilament.cpp`: the wait moves to the tower when enabled, priming pre-heats to the first layer temperature, the park side is regenerated when the tower is moved or rotated, and a regression test pinning the unchanged (option-off) toolchange temperature commands against a recorded trace (`tests/data/wipe_tower_temperature_trace_main.txt`). <!-- > 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)
The placement clamps and the tower-approach router both stood in the bed's bounding box for the bed itself, so on a delta or hexagonal bed the prime tower could be parked in a corner that does not exist and the nozzle could be routed across it. Both now test the real printable outline, slicing reports a tower that does not fit instead of printing it off the bed, and a tower parked near an edge is routed along the clamped side rather than falling back to a straight line across the tower. Also fixes the placement validation rotating the tower hull by degrees read as radians about the plate origin, and never rotating the generated tower footprint at all.
…15146) # 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? --> On delta, circular and custom bed shapes — and on multi-nozzle printers where each carriage only reaches part of the plate — the prime tower was positioned and clamped against the bed's bounding box, so it could be parked in a corner the bed does not actually have. Neither the default placement nor dragging the tower would pull it back onto the bed, and slicing went ahead without complaint. The tower's default position, its drag clamp and the slice-time validation now all follow the real printable outline, and a tower that genuinely does not fit is reported as "Prime Tower is partially outside the printable area" instead of being sliced into a print that cannot be produced. The travel that approaches the tower is planned against that same outline. Previously the router gave up whenever its clearance box fell outside the bed and drove the nozzle straight across the tower; a tower parked near the bed edge now keeps its detour and enters through the wall opening as intended. This also corrects the footprint the prime tower validation uses for a rotated tower, which was being rotated by the wrong amount and about the wrong point, so proximity warnings and exclusion-area errors for rotated towers were being computed against the wrong shape. Prime tower placement on rectangular beds is unchanged. The new printable-area validation and the tower-approach routing fix apply to every bed shape. # 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. --> Added unit coverage for the placement clamp against a non-rectangular outline (a regular hexagon standing in for the shipped delta beds), covering the rectangular-bed path, single-axis clamping while dragging, a footprint already inside the outline, one sitting in the bounding-box corner but off the bed, an unresolved auto brim width arriving as a negative margin, and a footprint too large for the bed. The `fff_print` suite passes. <!-- > 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)
Prime towers reserved depth from the prime volume alone, ignoring the flush matrix: rib-wall towers in both the engine and the preview, and rectangle and cone towers in the preview, which never carried the flush-aware estimate the engine already used. The preview also read the print preset, which does not carry the printer- and filament-scope keys the estimate needs and so silently fell back to defaults. On multi-nozzle printers the flush matrix, which holds one block per nozzle, was additionally read as a single block. The tower could come out too small for the purge it has to hold. The flush-based estimate also skipped the height-based minimum depth that the prime-volume one applies, so low-flush prints could estimate a tower shallower than the one that actually gets built.
# 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? --> The prime tower reserved its footprint from the prime volume alone, ignoring the flush volumes it actually has to hold, so on a multi-colour print the tower shown in Prepare and the space kept clear for it during arrange could be far smaller than the tower that gets sliced — leaving it overlapping objects or running off the plate. This sizes the estimate from the configured flush volumes instead, for rib walls as well as rectangle and cone, applies the same height-based minimum depth the prime-volume estimate already used, and reads the flush matrix correctly on multi-nozzle printers, where it holds one block per nozzle. Only the pre-slice estimate changes: the generated tower is untouched, and prints that do not purge into the prime tower keep their existing size. # 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)
Fix overridden ironing speed Use filament_ironing_speed for the active filament when configured, falling back to the process setting when unset.
…match checkbox style on Save Preset dialog (#15076) init
* Fix redundant QIDI startup tool changes Guard Q2, X-Max 4, and X-Plus 4 filament-change G-code so same-tool startup selections do not run the full cut, unload, and purge sequence. * Guard Q2C against redundant startup tool changes Skip the complete filament-change sequence when the requested tool is already selected during startup. * Bump Qidi profile version
To apply #14654
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.