Fixed crash on reslicing after infill invalidation.
The crash was introduced with sorting the extrusions into islands.
This commit is contained in:
parent
af6b022878
commit
e6d10fc747
@ -408,12 +408,18 @@ static void insert_fills_into_islands(Layer &layer, uint32_t fill_region_id, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// friend to Layer
|
void Layer::clear_fills()
|
||||||
|
{
|
||||||
|
for (LayerRegion *layerm : m_regions)
|
||||||
|
layerm->m_fills.clear();
|
||||||
|
for (LayerSlice &lslice : lslices_ex)
|
||||||
|
for (LayerIsland &island : lslice.islands)
|
||||||
|
island.fills.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator)
|
void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator)
|
||||||
{
|
{
|
||||||
for (LayerRegion *layerm : m_regions)
|
this->clear_fills();
|
||||||
layerm->m_fills.clear();
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
|
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
|
||||||
// this->export_region_fill_surfaces_to_svg_debug("10_fill-initial");
|
// this->export_region_fill_surfaces_to_svg_debug("10_fill-initial");
|
||||||
|
@ -443,6 +443,7 @@ void Layer::make_perimeters()
|
|||||||
layerm.m_fill_expolygons_composite_bboxes.clear();
|
layerm.m_fill_expolygons_composite_bboxes.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Remove layer islands, remove references to perimeters and fills from these layer islands to LayerRegion ExtrusionEntities.
|
||||||
for (LayerSlice &lslice : this->lslices_ex)
|
for (LayerSlice &lslice : this->lslices_ex)
|
||||||
lslice.islands.clear();
|
lslice.islands.clear();
|
||||||
|
|
||||||
|
@ -390,6 +390,8 @@ protected:
|
|||||||
slice_z(slice_z), print_z(print_z), height(height),
|
slice_z(slice_z), print_z(print_z), height(height),
|
||||||
m_id(id), m_object(object) {}
|
m_id(id), m_object(object) {}
|
||||||
virtual ~Layer();
|
virtual ~Layer();
|
||||||
|
// Clear fill extrusions, remove them from layer islands.
|
||||||
|
void clear_fills();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void sort_perimeters_into_islands(
|
void sort_perimeters_into_islands(
|
||||||
|
@ -131,6 +131,7 @@ void PrintObject::make_perimeters()
|
|||||||
// Revert the typed slices into untyped slices.
|
// Revert the typed slices into untyped slices.
|
||||||
if (m_typed_slices) {
|
if (m_typed_slices) {
|
||||||
for (Layer *layer : m_layers) {
|
for (Layer *layer : m_layers) {
|
||||||
|
layer->clear_fills();
|
||||||
layer->restore_untyped_slices();
|
layer->restore_untyped_slices();
|
||||||
m_print->throw_if_canceled();
|
m_print->throw_if_canceled();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user