diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 31dc5bd110..c42374ef61 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -1610,7 +1610,8 @@ static void update_color_changes_using_color_projection_ranges(std::vector slice_model_volume_with_color(const ModelVolume &model_volume, const std::function &extract_facets_info, const std::vector &layer_zs, - const PrintObject &print_object) + const PrintObject &print_object, + const size_t num_facets_states) { const ModelVolumeFacetsInfo facets_info = extract_facets_info(model_volume); @@ -1638,6 +1639,15 @@ static std::vector slice_model_volume_with_color(const ModelVolum } } + // Replace any non-existing painted color with the default (TriangleStateType::NONE). + for (ColorPolygons &color_polygons : color_polygons_per_layer) { + for (ColorPolygon &color_polygon : color_polygons) { + std::replace_if(color_polygon.colors.begin(), color_polygon.colors.end(), + [&num_facets_states](const uint8_t color) { return color >= num_facets_states; }, + static_cast(TriangleStateType::NONE)); + } + } + return color_polygons_per_layer; } @@ -1694,7 +1704,7 @@ std::vector> segmentation_by_painting(const PrintObject BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Slicing painted triangles - Begin"; const std::vector layer_zs = get_print_object_layers_zs(layers); for (const ModelVolume *mv : print_object.model_object()->volumes) { - std::vector color_polygons_per_layer = slice_model_volume_with_color(*mv, extract_facets_info, layer_zs, print_object); + std::vector color_polygons_per_layer = slice_model_volume_with_color(*mv, extract_facets_info, layer_zs, print_object, num_facets_states); tbb::parallel_for(tbb::blocked_range(0, num_layers), [&color_polygons_per_layer, &color_polygons_lines_layers, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {