mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-03 03:40:39 +08:00
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:
parent
6ec918c2a2
commit
d0b8323bc8
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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()]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user