mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-16 14:45:57 +08:00
Fix extra perimeter from gap fill where it's impossible
This commit is contained in:
parent
c082d1972f
commit
e2a7c7368c
@ -752,15 +752,9 @@ void PerimeterGenerator::process()
|
|||||||
if (!expoly.holes.empty()) {
|
if (!expoly.holes.empty()) {
|
||||||
//this is a a sort of a loop
|
//this is a a sort of a loop
|
||||||
//try to see if it's possible to add a "perimeter"
|
//try to see if it's possible to add a "perimeter"
|
||||||
Polygons small_peri = offset(expoly.contour, -(float)(perimeter_spacing), ClipperLib::jtMiter, 3);
|
ExPolygons contour_expolygon = offset_ex(expoly, -(float)(perimeter_spacing / 2), ClipperLib::jtMiter, 3);
|
||||||
Polygons small_holes = expoly.holes;
|
if (contour_expolygon.size() == 1 && !contour_expolygon.front().holes.empty()) {
|
||||||
polygons_reverse(small_holes);
|
|
||||||
ExPolygons small_ex = diff_ex(small_peri, small_holes);
|
|
||||||
if (small_ex.size() == 1 && !small_ex.front().holes.empty()) {
|
|
||||||
//OK
|
//OK
|
||||||
Polygons perimeter_line = offset(expoly.contour, -(float)(perimeter_spacing/2), ClipperLib::jtMiter, 3);
|
|
||||||
if (perimeter_line.size() != 1)
|
|
||||||
continue;
|
|
||||||
// update list & variable to let the new perimeter be taken into account
|
// update list & variable to let the new perimeter be taken into account
|
||||||
loop_number = contours_size;
|
loop_number = contours_size;
|
||||||
if (contours_size >= contours.size()) {
|
if (contours_size >= contours.size()) {
|
||||||
@ -768,16 +762,10 @@ void PerimeterGenerator::process()
|
|||||||
holes.emplace_back();
|
holes.emplace_back();
|
||||||
}
|
}
|
||||||
//Add the new periemter
|
//Add the new periemter
|
||||||
contours[contours_size].emplace_back(perimeter_line.front(), contours_size, true, has_steep_overhang);
|
contours[contours_size].emplace_back(contour_expolygon.front().contour, contours_size, true, has_steep_overhang);
|
||||||
//create the new gapfills
|
//create the new gapfills
|
||||||
ExPolygon perimeter_area;
|
ExPolygons gapfill_area = offset_ex(expoly.contour, -(float)(perimeter_spacing));
|
||||||
perimeter_area.holes.emplace_back(small_ex.front().contour);
|
ExPolygons to_add = intersection_ex({ expoly }, gapfill_area);
|
||||||
perimeter_area.holes.front().reverse();
|
|
||||||
perimeter_line = offset(perimeter_line.front(), (float)(perimeter_spacing / 2), ClipperLib::jtMiter, 3);
|
|
||||||
if (perimeter_line.size() != 1) // should never happen
|
|
||||||
perimeter_line = { expoly.contour };
|
|
||||||
perimeter_area.contour = perimeter_line.front();
|
|
||||||
ExPolygons to_add = diff_ex(expoly, perimeter_area);
|
|
||||||
//add the new gapfill
|
//add the new gapfill
|
||||||
if (to_add.size() == 0)
|
if (to_add.size() == 0)
|
||||||
expoly.clear();
|
expoly.clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user