| 17 | |
| 18 | namespace BoundaryRemsherHelper { |
| 19 | void triangulate(MatrixFr vertices, MatrixIr edges, |
| 20 | MatrixFr& output_vertices, MatrixIr& output_faces, Float max_area) { |
| 21 | assert(edges.rows() >= 3); |
| 22 | MeshCleaner cleaner; |
| 23 | cleaner.remove_isolated_vertices(vertices, edges); |
| 24 | cleaner.remove_duplicated_vertices(vertices, edges, 1e-12); |
| 25 | assert(vertices.rows() >= 3); |
| 26 | |
| 27 | TriangleWrapper triangle; |
| 28 | triangle.set_points(vertices); |
| 29 | triangle.set_segments(edges); |
| 30 | triangle.set_max_area(max_area); |
| 31 | triangle.set_split_boundary(false); |
| 32 | triangle.set_auto_hole_detection(true); |
| 33 | triangle.set_verbosity(0); |
| 34 | triangle.run(); |
| 35 | |
| 36 | output_vertices = triangle.get_vertices(); |
| 37 | output_faces = triangle.get_faces(); |
| 38 | } |
| 39 | |
| 40 | void reorientate_triangles(const MatrixFr& vertices, MatrixIr& faces, |
| 41 | const VectorF& n) { |
no test coverage detected