mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-09-26 07:13:15 +08:00
fix issue in seam placer with arachne perimeter lines - the lines overlap
with perimeter loops and the line was sometimes mistakenly chosen instead of the loop and its aligned seam during seam placing
This commit is contained in:
parent
6848ed29f1
commit
c3e0ff6eda
@ -1551,12 +1551,27 @@ void SeamPlacer::place_seam(const Layer *layer, ExtrusionLoop &loop, bool extern
|
|||||||
m_seam_per_object.find(layer->object())->second.layers[layer_index];
|
m_seam_per_object.find(layer->object())->second.layers[layer_index];
|
||||||
|
|
||||||
// Find the closest perimeter in the SeamPlacer to the first point of this loop.
|
// Find the closest perimeter in the SeamPlacer to the first point of this loop.
|
||||||
size_t closest_perimeter_point_index;
|
size_t closest_perimeter_point_index = 0;
|
||||||
{
|
{ // local space for the closest_perimeter_point_index
|
||||||
const Point &fp = loop.first_point();
|
Perimeter *closest_perimeter = nullptr;
|
||||||
Vec2f unscaled_p = unscaled<float>(fp);
|
size_t point_index = 0;
|
||||||
closest_perimeter_point_index = find_closest_point(*layer_perimeters.points_tree.get(),
|
size_t path_index = 0;
|
||||||
to_3d(unscaled_p, float(unscaled_z)));
|
while (point_index < loop.paths.back().size() || path_index < loop.paths.size()) {
|
||||||
|
Vec2f unscaled_p = unscaled<float>(loop.paths[path_index].polyline.points[point_index]);
|
||||||
|
closest_perimeter_point_index = find_closest_point(*layer_perimeters.points_tree.get(),
|
||||||
|
to_3d(unscaled_p, float(unscaled_z)));
|
||||||
|
if (closest_perimeter != &layer_perimeters.points[closest_perimeter_point_index].perimeter) {
|
||||||
|
closest_perimeter = &layer_perimeters.points[closest_perimeter_point_index].perimeter;
|
||||||
|
if (point_index + 1 < loop.paths[path_index].polyline.points.size()) {
|
||||||
|
point_index++;
|
||||||
|
} else {
|
||||||
|
path_index++;
|
||||||
|
point_index = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3f seam_position;
|
Vec3f seam_position;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user