diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index ba26f7f0da..2f8f0f90fd 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -6004,9 +6004,16 @@ LayerResult GCode::process_layer( const WipingExtrusions::ExtruderPerCopy *entity_overrides = nullptr; if (! layer_tools.has_extruder(correct_extruder_id)) { - // this entity is not overridden, but its extruder is not in layer_tools - we'll print it - // by last extruder on this layer (could happen e.g. when a wiping object is taller than others - dontcare extruders are eradicated from layer_tools) - correct_extruder_id = layer_tools.extruders.back(); + // A mixed-color slot is absent from layer_tools.extruders by design: + // resolve_mixed_filaments() replaced it with its physical components, + // and the sublayer block emits its geometry separately. Reassigning it + // to the last extruder here would print it in the wrong colour, so only + // fall back for genuinely stale (dontcare) extruders. + if (!layer_tools.is_mixed_slot(correct_extruder_id)) { + // this entity is not overridden, but its extruder is not in layer_tools - we'll print it + // by last extruder on this layer (could happen e.g. when a wiping object is taller than others - dontcare extruders are eradicated from layer_tools) + correct_extruder_id = layer_tools.extruders.back(); + } } printing_extruders.clear(); if (is_anything_overridden && use_overrides) {