mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-04 06:01:17 +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;
|
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<Linef> &unscaled_prev_layer,
|
||||||
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines)
|
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines)
|
||||||
{
|
{
|
||||||
ExtrusionEntityCollection result;
|
ExtrusionEntityCollection result{};
|
||||||
result.no_sort = ecc.no_sort;
|
result.no_sort = ecc->no_sort;
|
||||||
for (const auto *e : ecc.entities) {
|
for (const auto *e : ecc->entities) {
|
||||||
if (auto *col = static_cast<const ExtrusionEntityCollection *>(e)) {
|
if (e == nullptr) {
|
||||||
auto new_col = calculate_and_split_overhanging_extrusions(*col, unscaled_prev_layer, prev_layer_curled_lines);
|
BOOST_LOG_TRIVIAL(debug) << "perimeters collections contain nullptr entities for some reason";
|
||||||
result.append(new_col);
|
} 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)) {
|
} else if (auto *loop = static_cast<const ExtrusionLoop *>(e)) {
|
||||||
ExtrusionLoop new_loop = *loop;
|
ExtrusionLoop new_loop = *loop;
|
||||||
new_loop.paths.clear();
|
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<Linef> &unscaled_prev_layer,
|
||||||
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines);
|
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<Linef> &unscaled_prev_layer,
|
||||||
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines);
|
const AABBTreeLines::LinesDistancer<CurledLine> &prev_layer_curled_lines);
|
||||||
|
|
||||||
|
@ -914,6 +914,8 @@ void Print::process()
|
|||||||
obj->generate_support_material();
|
obj->generate_support_material();
|
||||||
for (PrintObject *obj : m_objects)
|
for (PrintObject *obj : m_objects)
|
||||||
obj->estimate_curled_extrusions();
|
obj->estimate_curled_extrusions();
|
||||||
|
for (PrintObject *obj : m_objects)
|
||||||
|
obj->calculate_overhanging_perimeters();
|
||||||
if (this->set_started(psWipeTower)) {
|
if (this->set_started(psWipeTower)) {
|
||||||
m_wipe_tower_data.clear();
|
m_wipe_tower_data.clear();
|
||||||
m_tool_ordering.clear();
|
m_tool_ordering.clear();
|
||||||
|
@ -561,7 +561,7 @@ void PrintObject::calculate_overhanging_perimeters()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ExPolygons prev_layer_polygon = l->lower_layer == nullptr ? ExPolygons() : l->lower_layer->lslices;
|
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()],
|
unscaled_polygons_lines[l->id()],
|
||||||
curled_lines[l->id()]);
|
curled_lines[l->id()]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user