Heal shape with points close to line
(after conversion to floating point it is on the other side of line) ExPolygons indexing (fixed)
This commit is contained in:
parent
bdf8c5ce88
commit
8511b280bf
10 changed files with 571 additions and 99 deletions
|
@ -210,3 +210,34 @@ SCENARIO("Simplify polygon", "[Polygon]")
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "libslic3r/ExPolygon.hpp"
|
||||
#include "libslic3r/ExPolygonsIndex.hpp"
|
||||
TEST_CASE("Indexing expolygons", "[ExPolygon]")
|
||||
{
|
||||
ExPolygons expolys{
|
||||
ExPolygon{Polygon{{0, 0}, {10, 0}, {0, 5}}, Polygon{{4, 3}, {6, 3}, {5, 2}}},
|
||||
ExPolygon{Polygon{{100, 0}, {110, 0}, {100, 5}}, Polygon{{104, 3}, {106, 3}, {105, 2}}}
|
||||
};
|
||||
Points points = to_points(expolys);
|
||||
Lines lines = to_lines(expolys);
|
||||
Linesf linesf = to_linesf(expolys);
|
||||
ExPolygonsIndices ids(expolys);
|
||||
REQUIRE(points.size() == lines.size());
|
||||
REQUIRE(points.size() == linesf.size());
|
||||
REQUIRE(points.size() == ids.get_count());
|
||||
for (size_t i = 0; i < ids.get_count(); i++) {
|
||||
ExPolygonsIndex id = ids.cvt(i);
|
||||
const ExPolygon &expoly = expolys[id.expolygons_index];
|
||||
const Polygon &poly = id.is_contour() ? expoly.contour : expoly.holes[id.hole_index()];
|
||||
const Points &pts = poly.points;
|
||||
const Point &p = pts[id.point_index];
|
||||
CHECK(points[i] == p);
|
||||
CHECK(lines[i].a == p);
|
||||
CHECK(linesf[i].a.cast<int>() == p);
|
||||
CHECK(ids.cvt(id) == i);
|
||||
const Point &p_b = ids.is_last_point(id) ? pts.front() : pts[id.point_index + 1];
|
||||
CHECK(lines[i].b == p_b);
|
||||
CHECK(linesf[i].b.cast<int>() == p_b);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue