SPE-1865: Don't insert an empty ExtrusionEntityCollection because it causes a crash.

The approach to fixing the crash in 649c1083576b6bf3e0038016e16fa9ecd691cfb9 wasn't correct and prevented sorting extrusions, as reported in SPE-2007.
This commit is contained in:
Lukáš Hejl 2023-11-03 16:41:27 +01:00
parent 32c779090f
commit f4d3886c63

View File

@ -543,12 +543,11 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
flow_mm3_per_mm = new_flow.mm3_per_mm(); flow_mm3_per_mm = new_flow.mm3_per_mm();
flow_width = new_flow.width(); flow_width = new_flow.width();
} }
// Save into layer. // Save into layer.
ExtrusionEntityCollection* eec = nullptr; ExtrusionEntityCollection *eec = new ExtrusionEntityCollection();
auto fill_begin = uint32_t(layerm.fills().size()); auto fill_begin = uint32_t(layerm.fills().size());
layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection()); // Only concentric fills are not sorted.
// Only concentric fills are not sorted. eec->no_sort = f->no_sort();
eec->no_sort = f->no_sort();
if (params.use_arachne) { if (params.use_arachne) {
for (const ThickPolyline &thick_polyline : thick_polylines) { for (const ThickPolyline &thick_polyline : thick_polylines) {
Flow new_flow = surface_fill.params.flow.with_spacing(float(f->spacing)); Flow new_flow = surface_fill.params.flow.with_spacing(float(f->spacing));
@ -563,6 +562,11 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
} }
} }
if (!eec->empty())
layerm.m_fills.entities.push_back(eec);
else
delete eec;
thick_polylines.clear(); thick_polylines.clear();
} else { } else {
extrusion_entities_append_paths( extrusion_entities_append_paths(
@ -570,6 +574,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
ExtrusionAttributes{ surface_fill.params.extrusion_role, ExtrusionAttributes{ surface_fill.params.extrusion_role,
ExtrusionFlow{ flow_mm3_per_mm, float(flow_width), surface_fill.params.flow.height() } ExtrusionFlow{ flow_mm3_per_mm, float(flow_width), surface_fill.params.flow.height() }
}); });
layerm.m_fills.entities.push_back(eec);
} }
insert_fills_into_islands(*this, uint32_t(surface_fill.region_id), fill_begin, uint32_t(layerm.fills().size())); insert_fills_into_islands(*this, uint32_t(surface_fill.region_id), fill_begin, uint32_t(layerm.fills().size()));
} }