#247 fix because a polygon can disappear if grown.

This commit is contained in:
supermerill 2020-05-18 16:24:56 +02:00
parent e8616d5de4
commit ebc4e9a000

View File

@ -707,19 +707,31 @@ void PerimeterGenerator::process()
//if the shrink split the area in multipe bits //if the shrink split the area in multipe bits
if (expoly_after_shrink_test.size() > 1) { if (expoly_after_shrink_test.size() > 1) {
//remove too small bits //remove too small bits
for (int i = 0; i < expoly_after_shrink_test.size(); i++) for (int i = 0; i < expoly_after_shrink_test.size(); i++) {
if (expoly_after_shrink_test[i].area() < (SCALED_EPSILON*SCALED_EPSILON * 4) if (expoly_after_shrink_test[i].area() < (SCALED_EPSILON * SCALED_EPSILON * 4)) {
|| offset_ex(ExPolygons{ expoly_after_shrink_test[i] }, min*0.5)[0].area() < minarea) {
expoly_after_shrink_test.erase(expoly_after_shrink_test.begin() + i); expoly_after_shrink_test.erase(expoly_after_shrink_test.begin() + i);
i--; i--;
} else {
ExPolygons wider = offset_ex(ExPolygons{ expoly_after_shrink_test[i] }, min * 0.5);
if (wider.empty() || wider[0].area() < minarea) {
expoly_after_shrink_test.erase(expoly_after_shrink_test.begin() + i);
i--;
}
} }
}
//maybe some areas are a just bit too thin, try with just a little more offset to remove them. //maybe some areas are a just bit too thin, try with just a little more offset to remove them.
ExPolygons expoly_after_shrink_test2 = offset_ex(ExPolygons{ expoly }, double(-min *0.8)); ExPolygons expoly_after_shrink_test2 = offset_ex(ExPolygons{ expoly }, double(-min *0.8));
for (int i = 0; i < expoly_after_shrink_test2.size(); i++) { for (int i = 0; i < expoly_after_shrink_test2.size(); i++) {
if (expoly_after_shrink_test2[i].area() < (SCALED_EPSILON*SCALED_EPSILON * 4) if (expoly_after_shrink_test2[i].area() < (SCALED_EPSILON * SCALED_EPSILON * 4)) {
|| offset_ex(ExPolygons{ expoly_after_shrink_test2[i] }, min*0.5)[0].area() < minarea) {
expoly_after_shrink_test2.erase(expoly_after_shrink_test2.begin() + i); expoly_after_shrink_test2.erase(expoly_after_shrink_test2.begin() + i);
i--; i--;
}else{
ExPolygons wider = offset_ex(ExPolygons{ expoly_after_shrink_test2[i] }, min * 0.5);
if (wider.empty() || wider[0].area() < minarea) {
expoly_after_shrink_test2.erase(expoly_after_shrink_test2.begin() + i);
i--;
}
} }
} }
//it's better if there are significantly less extrusions //it's better if there are significantly less extrusions