mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-10 17:21:10 +00:00
A mixed filament is unsupported in a parallel mode outright, but the rule saying so ran third. A plate carrying a blend plus any second filament tripped the multi-color rule's used > 1 gate first and was told its active tools all sit on one gantry -- a diagnosis of a multi-color print the user never configured, whose remedy is to go rework the mode's tool roster. The blend was never mentioned. Move the check ahead of both rules below it; being unsupported regardless of routing or topology, it dominates them. Nothing is masked that leads anywhere else: every branch of imex_multicolor_block_reason is itself confined to non-primary modes, so the mixed message's remedy -- switch this plate to Primary -- silences those too. Say "Mixed filaments", not "Blended". Every other string in the app calls these mixed, including the button that creates one and the sibling refusal for the wipe tower filament, so the user had no way to connect the message to the feature it names. Three comments in the block were wrong, and two of them were newly wrong. The routing rule's bounds-check note still said "Blended slots are out of range by construction, but they never reach here -- the rule above returns first": the rule above is now the multi-color one, which does not return first for a single mixed filament, and out-of-range is not guaranteed at all. Mixed slots are kept at the tail of the filament arrays by convention, not by enforcement -- PresetBundle::set_num_filaments grows filament_is_mixed with resize(), so raising a printer's extruder count with a blend present lands physical slots after the mixed one. The scan is position-agnostic and stays correct; only the stated reason was wrong. The same discovery makes the empty-routed_list guard live rather than the dead code it was described as. Print::apply() normalises physical_extruder_map before validate() runs, so an unauthored map is never the cause -- but a printer with more filaments than logical extruders leaves the tail slots outside the map, and raising the extruder count does exactly that. The new test validates the plate twice. The first pass, with no blend, asserts the multi-color rule is armed at all; without it the second proves nothing, because the rule only fires here thanks to a degenerate fixture mode whose two tools share a gantry. Give that mode a Span tool and the whole test would pass under either ordering while appearing to guard it. It also pins err.object, which the mixed path sets and the multi-color path leaves null -- a discriminator that survives the next wording change. Verified by reverting the order: the test fails on both the message and the object. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>