mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 06:55:53 +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,
|
static std::vector<ColorPolygons> slice_model_volume_with_color(const ModelVolume &model_volume,
|
||||||
const std::function<ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info,
|
const std::function<ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info,
|
||||||
const std::vector<float> &layer_zs,
|
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);
|
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;
|
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";
|
BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Slicing painted triangles - Begin";
|
||||||
const std::vector<float> layer_zs = get_print_object_layers_zs(layers);
|
const std::vector<float> layer_zs = get_print_object_layers_zs(layers);
|
||||||
for (const ModelVolume *mv : print_object.model_object()->volumes) {
|
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) {
|
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) {
|
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user