Trying to fix the issue with segfault, so far unsucessfully. It seems that one ExtrusionCollection is moved and then accessed...

This commit is contained in:
Pavel 2023-07-19 17:27:02 +02:00 committed by Vojtech Bubnik
parent 6ec918c2a2
commit d0b8323bc8
4 changed files with 12 additions and 9 deletions

View File

@ -86,16 +86,17 @@ ExtrusionPaths calculate_and_split_overhanging_extrusions(const ExtrusionPath
return result;
};
ExtrusionEntityCollection calculate_and_split_overhanging_extrusions(const ExtrusionEntityCollection &ecc,
ExtrusionEntityCollection calculate_and_split_overhanging_extrusions(const ExtrusionEntityCollection *ecc,
const AABBTreeLines::LinesDistancer<Linef> &unscaled_prev_layer,
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines)
{
ExtrusionEntityCollection result;
result.no_sort = ecc.no_sort;
for (const auto *e : ecc.entities) {
if (auto *col = static_cast<const ExtrusionEntityCollection *>(e)) {
auto new_col = calculate_and_split_overhanging_extrusions(*col, unscaled_prev_layer, prev_layer_curled_lines);
result.append(new_col);
ExtrusionEntityCollection result{};
result.no_sort = ecc->no_sort;
for (const auto *e : ecc->entities) {
if (e == nullptr) {
BOOST_LOG_TRIVIAL(debug) << "perimeters collections contain nullptr entities for some reason";
} else if (auto *col = static_cast<const ExtrusionEntityCollection *>(e)) {
result.append(calculate_and_split_overhanging_extrusions(col, unscaled_prev_layer, prev_layer_curled_lines));
} else if (auto *loop = static_cast<const ExtrusionLoop *>(e)) {
ExtrusionLoop new_loop = *loop;
new_loop.paths.clear();

View File

@ -218,7 +218,7 @@ ExtrusionPaths calculate_and_split_overhanging_extrusions(const ExtrusionPath
const AABBTreeLines::LinesDistancer<Linef> &unscaled_prev_layer,
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines);
ExtrusionEntityCollection calculate_and_split_overhanging_extrusions(const ExtrusionEntityCollection &ecc,
ExtrusionEntityCollection calculate_and_split_overhanging_extrusions(const ExtrusionEntityCollection *ecc,
const AABBTreeLines::LinesDistancer<Linef> &unscaled_prev_layer,
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines);

View File

@ -914,6 +914,8 @@ void Print::process()
obj->generate_support_material();
for (PrintObject *obj : m_objects)
obj->estimate_curled_extrusions();
for (PrintObject *obj : m_objects)
obj->calculate_overhanging_perimeters();
if (this->set_started(psWipeTower)) {
m_wipe_tower_data.clear();
m_tool_ordering.clear();

View File

@ -561,7 +561,7 @@ void PrintObject::calculate_overhanging_perimeters()
continue;
}
ExPolygons prev_layer_polygon = l->lower_layer == nullptr ? ExPolygons() : l->lower_layer->lslices;
layer_region->m_perimeters = calculate_and_split_overhanging_extrusions(layer_region->m_perimeters,
layer_region->m_perimeters = calculate_and_split_overhanging_extrusions(&layer_region->m_perimeters,
unscaled_polygons_lines[l->id()],
curled_lines[l->id()]);
}