fixed issues, it now replicates the previous results

This commit is contained in:
Pavel Mikus 2023-07-20 19:42:31 +02:00 committed by Vojtech Bubnik
parent fa0986c0c5
commit a98e2f893a
2 changed files with 12 additions and 5 deletions

View File

@ -76,8 +76,9 @@ ExtrusionPaths calculate_and_split_overhanging_extrusions(const ExtrusionPath
for (size_t i = 1; i < extended_points.size(); i++) { for (size_t i = 1; i < extended_points.size(); i++) {
result.back().polyline.append(Point::new_scale(extended_points[i].position)); result.back().polyline.append(Point::new_scale(extended_points[i].position));
result.back().overhang_attributes_mutable()->end_distance_from_prev_layer = extended_points[i].distance; result.back().overhang_attributes_mutable()->end_distance_from_prev_layer = extended_points[i].distance;
if (std::abs(calculated_distances[sequence_start_index].first - calculated_distances[i - 1].first) < path.width() * 0.05 &&
std::abs(calculated_distances[sequence_start_index].second - calculated_distances[i - 1].second) < 0.05) { if (std::abs(calculated_distances[sequence_start_index].first - calculated_distances[i].first) < path.width() * 0.0001 &&
std::abs(calculated_distances[sequence_start_index].second - calculated_distances[i].second) < 0.0001) {
// do not start new path, the attributes are similar enough // do not start new path, the attributes are similar enough
} else if (i +1 < extended_points.size()) { // do not start new path if this is last point! } else if (i +1 < extended_points.size()) { // do not start new path if this is last point!
// start new path, parameters differ // start new path, parameters differ
@ -86,6 +87,7 @@ ExtrusionPaths calculate_and_split_overhanging_extrusions(const ExtrusionPath
new_attrs.overhang_attributes->proximity_to_curled_lines = calculated_distances[i].second; new_attrs.overhang_attributes->proximity_to_curled_lines = calculated_distances[i].second;
sequence_start_index = i; sequence_start_index = i;
result.emplace_back(new_attrs); result.emplace_back(new_attrs);
result.back().polyline.append(Point::new_scale(extended_points[i].position));
} }
} }

View File

@ -554,17 +554,22 @@ void PrintObject::calculate_overhanging_perimeters()
curled_lines[l->id()] = AABBTreeLines::LinesDistancer<CurledLine>{l->curled_lines}; curled_lines[l->id()] = AABBTreeLines::LinesDistancer<CurledLine>{l->curled_lines};
unscaled_polygons_lines[l->id()] = AABBTreeLines::LinesDistancer<Linef>{to_unscaled_linesf(l->lslices)}; unscaled_polygons_lines[l->id()] = AABBTreeLines::LinesDistancer<Linef>{to_unscaled_linesf(l->lslices)};
} }
curled_lines[size_t(-1)] = {};
unscaled_polygons_lines[size_t(-1)] = {};
for (Layer *l : this->layers()) { for (Layer *l : this->layers()) {
if (l->id() == 0) { // first layer, do not split
continue;
}
for (LayerRegion *layer_region : l->regions()) { for (LayerRegion *layer_region : l->regions()) {
if (regions_with_dynamic_overhangs.find(layer_region->m_region) == regions_with_dynamic_overhangs.end()) { if (regions_with_dynamic_overhangs.find(layer_region->m_region) == regions_with_dynamic_overhangs.end()) {
continue; continue;
} }
ExPolygons prev_layer_polygon = l->lower_layer == nullptr ? ExPolygons() : l->lower_layer->lslices; size_t prev_layer_id = l->lower_layer ? l->lower_layer->id() : size_t(-1);
layer_region->m_perimeters = layer_region->m_perimeters =
ExtrusionProcessor::calculate_and_split_overhanging_extrusions(&layer_region->m_perimeters, ExtrusionProcessor::calculate_and_split_overhanging_extrusions(&layer_region->m_perimeters,
unscaled_polygons_lines[l->id()], unscaled_polygons_lines[prev_layer_id],
curled_lines[l->id()]); curled_lines[prev_layer_id]);
} }
} }