Skip to content

feat(mm): toolchange cyclic order + custom sequence (Orca #14868) - #50

Merged
aceRage merged 2 commits into
mainfrom
cursor/toolchange-cyclic-order-c7b9
Sep 19, 2026
Merged

aceRage merged 2 commits into
mainfrom
cursor/toolchange-cyclic-order-c7b9

Conversation

@aceRage

@aceRage aceRage commented Sep 17, 2026

Copy link
Copy Markdown
Owner

Description

Port of OrcaSlicer #14868 (Toolchange Cyclic Order) onto Edge. Edge was missing the parent toolchange_ordering / ToolChangeOrderingType feature, so this is a two-commit PR rather than a cherry-pick of the 9-file upstream diff.

  1. Base toolchange_ordering (Orca Add toolchange ordering option (Standard/Cyclic). OrcaSlicer/OrcaSlicer#13582) — enum Default / Cyclic (Orca PrintConfig has no third “Minimum flush” value; that behaviour is Default’s existing flush-volume reorder), Tab control, Print invalidation (psWipeTowerpsGCodeExport), skip last-used-first rotation in Cyclic, and ascending Cyclic order via get_custom_seq.
  2. Toolchange Cyclic Order OrcaSlicer/OrcaSlicer#14868toolchange_cyclic_order (comma-separated 1-based sequence, e.g. "3,2,1,4"), toolchange_cyclic_first_layer, parse_cyclic_order / apply_cyclic_order, Catch2 [ToolOrdering][Cyclic], UI fields shown only when ordering is Cyclic.

Unlisted filaments print last in ascending order. Empty order cycles ascending. First layer keeps adhesion / custom first-layer sequence unless the flag is on.

Edge adaptations

Screenshots/Recordings/Graphs

UI is Process → Multimaterial → Advanced → Toolchange ordering, plus expert Cyclic order / Apply cyclic order to first layer (shown only when Cyclic is selected). See upstream screenshot on Orca OrcaSlicer#14868.

Tests

Accept criteria:

  • Cyclic with empty order: layers use ascending filament order (apply_cyclic_order + empty parse_cyclic_order).
  • Order "3,2,1,4": per-layer sequence follows; garbage/dupes/out-of-range dropped (parse_cyclic_order sections).
  • First layer: default keeps adhesion/custom first-layer seq; flag forces cyclic (cyclic_first_layer in get_custom_seq).
  • Ultra grouping still runs when applicable; filament_map header still written (grouping block is above Cyclic and unmodified).
  • Changing toolchange_ordering / toolchange_cyclic_* invalidates wipe tower (and therefore G-code) in Print.cpp.

Catch2 [ToolOrdering][Cyclic]: new tests/libslic3r/test_toolordering_cyclic.cpp. Parser/apply_cyclic_order cases were also exercised with a standalone C++17 harness (all passed). Full libslic3r_tests was not run in this environment (no configured build/ tree / deps). Please run:

cmake --build build --target libslic3r_tests
./build/tests/libslic3r/libslic3r_tests "[ToolOrdering][Cyclic]" --order rand
Open in Web Open in Cursor 

cursoragent and others added 2 commits September 17, 2026 18:24
)

Edge lacked the parent ToolChangeOrderingType feature that Orca OrcaSlicer#14868 assumes.
Add the Default/Cyclic enum, Tab control, print invalidation, skip last-used-first
rotation in Cyclic, and ascending Cyclic order via get_custom_seq. Ultra dual-nozzle
grouping still runs first and still writes filament_map.

Co-authored-by: aceRage <aceRage@users.noreply.github.com>
…14868)

Add toolchange_cyclic_order (comma-separated 1-based sequence) and
toolchange_cyclic_first_layer. parse_cyclic_order drops garbage/dupes/
out-of-range tokens. Cyclic indices use physical + enabled mixed filament
count, not flush-matrix size. UI fields show only when ordering is Cyclic.

Co-authored-by: aceRage <aceRage@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

Documentation validation failed

🔗 Link Validation Errors

📄 doc/developer-reference\Built-in-placeholders-variables.md:

  • Line 93: home#process-settings - Fragment does not exist
  • Line 93: home#material-settings - Fragment does not exist

📄 doc/developer-reference\How-to-wiki.md:

  • Line 44: home#material-settings - Fragment does not exist
  • Line 45: home#process-settings - Fragment does not exist
  • Line 46: home#prepare - Fragment does not exist
  • Line 47: home#calibrations - Fragment does not exist
  • Line 50: home#process-settings - Fragment does not exist
  • Line 50: home#support-settings - Fragment does not exist
  • Line 50: home#others-settings - Fragment does not exist

📄 doc/Home.md:

  • Line 14: Precise-wall.md - File does not exist
  • Line 17: extrusion-rate-smoothing.md - File does not exist
  • Line 33: adaptive-pressure-advance.md - File does not exist

📄 doc/Tab.cpp:

  • Line 2345: quality_settings_z_contouring - File does not exist
  • Line 2346: quality_settings_z_contouring - File does not exist
  • Line 2347: quality_settings_z_contouring - File does not exist
  • Line 2348: quality_settings_z_contouring - File does not exist
  • Line 2349: quality_settings_z_contouring - File does not exist
  • Line 2412: fill-patterns - File does not exist
  • Line 2413: fill-patterns - File does not exist
  • Line 2416: fill-patterns - File does not exist
  • Line 2646: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2647: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2659: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2676: multimaterial_settings_ooze_prevention#delta-temperature - Fragment does not exist
  • Line 2684: multimaterial_settings_advanced#toolchange-ordering - Fragment does not exist
  • Line 2685: multimaterial_settings_advanced#toolchange-order - Fragment does not exist
  • Line 2686: multimaterial_settings_advanced#toolchange-order - Fragment does not exist
  • Line 2691: multimaterial_settings_advanced#paint-depth-mode - Fragment does not exist
  • Line 2692: multimaterial_settings_advanced#paint-depth-walls - Fragment does not exist
  • Line 2693: multimaterial_settings_advanced#paint-depth-distance - Fragment does not exist
  • Line 2697: multimaterial_settings_advanced#paint-sparse-infill - Fragment does not exist
  • Line 2701: multimaterial_settings_advanced#paint-depth-solid-interfaces - Fragment does not exist
  • Line 2756: others_settings_fuzzy_skin#skip-fuzzy-skin-on-overhangs - Fragment does not exist

🖼️ Image Validation Errors

📄 doc/developer-reference\How-to-create-profiles.md:

  • Line 142: [Markdown] Alt text "Help menu" ≠ filename "go-to-configuration-folder"
  • Line 144: [Markdown] Alt text "Delete system folder" ≠ filename "profile-delete-system-folder"

@aceRage
aceRage merged commit 165a7a7 into main Sep 19, 2026
1 check failed
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.

2 participants