From 68d7d907d4baad0821f9b9d5117ad05d8ec7d757 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Tue, 14 Nov 2023 13:15:01 -0800 Subject: [PATCH] Clean up --- polygon.cpp | 122 +++------------------------------------------------- 1 file changed, 5 insertions(+), 117 deletions(-) diff --git a/polygon.cpp b/polygon.cpp index 2e68f46b..345b9685 100644 --- a/polygon.cpp +++ b/polygon.cpp @@ -341,14 +341,6 @@ void snap_round(std::vector &segs, long long extent) { std::set previously_affected = affected; affected.clear(); -#if 0 - if (previously_affected.size() == 0) { - fprintf(stderr, "inspect %zu\n", segs.size()); - } else { - fprintf(stderr, "reinspect %zu\n", previously_affected.size()); - } -#endif - // find identical opposite-winding segments and adjust for them // // this is in the same loop because we may introduce new self-intersections @@ -525,15 +517,6 @@ std::vector reassemble(std::vector const &segs) { diff += 2 * M_PI; } -#if 0 - printf("%f,%f to %f,%f to %f,%f, %f,%f: %f\n", - here.first.x, here.first.y, - here.second.x, here.second.y, - options.first->second.first.x, options.first->second.first.y, - options.first->second.second.x, options.first->second.second.y, - diff * 180 / M_PI); -#endif - // closest to -180 is the best if (diff < bestang) { bestang = diff; @@ -603,15 +586,6 @@ std::vector reassemble(std::vector const &segs) { diff += 2 * M_PI; } -#if 0 - printf("%f,%f to %f,%f to %f,%f, %f,%f: %f\n", - here.first.x, here.first.y, - here.second.x, here.second.y, - options.first->second.first.x, options.first->second.first.y, - options.first->second.second.x, options.first->second.second.y, - diff * 180 / M_PI); -#endif - // closest to -180 is the best if (diff < bestang) { bestang = diff; @@ -625,7 +599,7 @@ std::vector reassemble(std::vector const &segs) { ring.push_back(here.first); } - // these coordinates are doubled, so that `encloses` can always find + // these coordinates are scaled, so that `encloses` can always find // an interior point in each ring drawvec out; for (size_t i = 0; i < ring.size(); i++) { @@ -657,34 +631,7 @@ bool encloses(ring_area const &parent, ring_area const &child) { exit(EXIT_IMPOSSIBLE); } - bool a = pnpoly(parent.geom, 0, parent.geom.size(), child.ear_x, child.ear_y); - -#if 0 - if (a != b) { - fprintf(stderr, "inconsistent pnpoly at %lld,%lld (%d) vs %lld,%lld (%d)\n", x, y, a, x2, y2, b); - - printf("0 setlinewidth "); - for (auto const &g : parent.geom) { - printf("%lld %lld %s ", g.x, g.y, g.op == VT_MOVETO ? "moveto" : "lineto"); - } - printf("stroke\n"); - for (auto const &g : parent.geom) { - printf("%lld %lld .05 0 360 arc fill ", g.x, g.y); - } - - for (auto const &g : child.geom) { - printf("%f %f %s ", g.x + 0.25, g.y + 0.25, g.op == VT_MOVETO ? "moveto" : "lineto"); - } - printf("stroke\n"); - - printf("%lld %lld .5 0 360 arc fill\n", x, y); - printf("%lld %lld .5 0 360 arc fill\n", x2, y2); - - exit(EXIT_FAILURE); - } -#endif - - return a; + return pnpoly(parent.geom, 0, parent.geom.size(), child.ear_x, child.ear_y); } bool same_slope(draw d1, draw d2, draw d3) { @@ -764,19 +711,6 @@ drawvec scale_poly(drawvec const &geom, int z, int detail) { // to avoid excessive fiddling with the geometry if ((scaled_area_orig > 1 && area_scaled < -1) || (scaled_area_orig < -1 && area_scaled > 1)) { -#if 0 - fprintf(stderr, "z%d winding reversed: %f,%f, %f,%f, %f,%f (%f) vs %lld,%lld %lld,%lld %lld,%lld (%f)\n", - z, - geom[i + (k + 0) % ring.size()].x / scale, geom[i + (k + 0) % ring.size()].y / scale, - geom[i + (k + 1) % ring.size()].x / scale, geom[i + (k + 1) % ring.size()].y / scale, - geom[i + (k + 2) % ring.size()].x / scale, geom[i + (k + 2) % ring.size()].y / scale, - scaled_area_orig, - ring[0 + (k + 0) % ring.size()].x, ring[0 + (k + 0) % ring.size()].y, - ring[0 + (k + 1) % ring.size()].x, ring[0 + (k + 1) % ring.size()].y, - ring[0 + (k + 2) % ring.size()].x, ring[0 + (k + 2) % ring.size()].y, - area_scaled); -#endif - // jitter one of the coordinates to try to fix it, // on the theory that a slightly-wrong ring is // better than an entirely missing ring. @@ -792,13 +726,6 @@ drawvec scale_poly(drawvec const &geom, int z, int detail) { if ((scaled_area_orig > 1 && area_altered >= 0) || (scaled_area_orig < -1 && area_altered <= 0)) { -#if 0 - fprintf(stderr, "fixed it: %lld,%lld %lld,%lld %lld,%lld (%f)\n", - altered[0 + (k + 0) % altered.size()].x, altered[0 + (k + 0) % altered.size()].y, - altered[0 + (k + 1) % altered.size()].x, altered[0 + (k + 1) % altered.size()].y, - altered[0 + (k + 2) % altered.size()].x, altered[0 + (k + 2) % altered.size()].y, - area_altered); -#endif ring = altered; dx = dy = INT_MAX; // break from both loops @@ -806,15 +733,6 @@ drawvec scale_poly(drawvec const &geom, int z, int detail) { } } } - -#if 0 - drawvec check; - check.push_back(draw(VT_MOVETO, ring[0 + (k + 0) % ring.size()].x, ring[0 + (k + 0) % ring.size()].y)); - check.push_back(draw(VT_LINETO, ring[0 + (k + 1) % ring.size()].x, ring[0 + (k + 1) % ring.size()].y)); - check.push_back(draw(VT_LINETO, ring[0 + (k + 2) % ring.size()].x, ring[0 + (k + 2) % ring.size()].y)); - check.push_back(draw(VT_LINETO, ring[0 + (k + 0) % ring.size()].x, ring[0 + (k + 0) % ring.size()].y)); - printf("%f vs %f\n", area_scaled, get_area(check, 0, check.size())); -#endif } } @@ -882,21 +800,11 @@ drawvec clean_polygon(drawvec geom, int z, int detail) { // inner ring inside an outer ring; // attribute it to the outer ring rings[j].children.push_back(i); -#if 0 - fprintf(stderr, "inner within outer: ring %zd (%f) encloses ring %zu (%f) %s\n", j, rings[j].area, i, rings[i].area, - signbit(rings[j].area) == signbit(rings[i].area) ? "!!!!" : ""); -#endif } else if (rings[i].area < 0 && rings[j].area < 0) { -#if 0 - fprintf(stderr, "inner within inner: ring %zd (%f) encloses ring %zu (%f) %s\n", j, rings[j].area, i, rings[i].area, - signbit(rings[j].area) == signbit(rings[i].area) ? "!!!!" : ""); -#endif + // inner ring within inner ring rings[i].geom.clear(); } else if (rings[i].area > 0 && rings[j].area > 0) { -#if 0 - fprintf(stderr, "outer within outer: ring %zd (%f) encloses ring %zu (%f) %s\n", j, rings[j].area, i, rings[i].area, - signbit(rings[j].area) == signbit(rings[i].area) ? "!!!!" : ""); -#endif + // outer ring within outer ring rings[i].geom.clear(); } else { // outer ring within an inner ring; @@ -927,27 +835,7 @@ drawvec clean_polygon(drawvec geom, int z, int detail) { } } -#if 0 - for (size_t i = 0; i < rings.size(); i++) { - if (get_area(rings[i].geom, 0, rings[i].geom.size()) > 0) { - for (auto const &g : rings[i].geom) { - ret.emplace_back(g.op, g.x / SCALE, g.y / SCALE); - } - } - } -#endif - // remove collinear points - ret = remove_collinear(ret); - -#if 0 - drawvec ret; - for (auto const &segment : segments) { - ret.emplace_back(VT_MOVETO, segment.first.x, segment.first.y); - ret.emplace_back(VT_LINETO, segment.second.x, segment.second.y); - } -#endif - - return ret; + return remove_collinear(ret); }