mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-12 20:59:01 +08:00
Fix crash in multi-material segmentation when the number of extruders changed.
This commit is contained in:
parent
541a0fdffe
commit
4f5bd3ff5b
@ -1610,7 +1610,8 @@ static void update_color_changes_using_color_projection_ranges(std::vector<Color
|
||||
static std::vector<ColorPolygons> slice_model_volume_with_color(const ModelVolume &model_volume,
|
||||
const std::function<ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info,
|
||||
const std::vector<float> &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<ColorPolygons> 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<uint8_t>(TriangleStateType::NONE));
|
||||
}
|
||||
}
|
||||
|
||||
return color_polygons_per_layer;
|
||||
}
|
||||
|
||||
@ -1694,7 +1704,7 @@ std::vector<std::vector<ExPolygons>> segmentation_by_painting(const PrintObject
|
||||
BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Slicing painted triangles - Begin";
|
||||
const std::vector<float> layer_zs = get_print_object_layers_zs(layers);
|
||||
for (const ModelVolume *mv : print_object.model_object()->volumes) {
|
||||
std::vector<ColorPolygons> color_polygons_per_layer = slice_model_volume_with_color(*mv, extract_facets_info, layer_zs, print_object);
|
||||
std::vector<ColorPolygons> 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<size_t>(0, num_layers), [&color_polygons_per_layer, &color_polygons_lines_layers, &throw_on_cancel_callback](const tbb::blocked_range<size_t> &range) {
|
||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user