4 #ifdef LIBMESH_HAVE_POLY2TRI 5 # include "libmesh/ignore_warnings.h" 6 # include "poly2tri/poly2tri.h" 7 # include "libmesh/restore_warnings.h" 16 #ifdef LIBMESH_HAVE_POLY2TRI 33 #ifdef LIBMESH_HAVE_POLY2TRI 38 std::vector<p2t::Point> pentagon {{0,0},{1,0},{1,1},{.5,1.5},{0,1}};
40 std::vector<p2t::Point *> api_shim(pentagon.size());
41 std::iota(api_shim.begin(), api_shim.end(), pentagon.data());
43 p2t::CDT cdt(api_shim);
47 auto tris = cdt.GetTriangles();
52 CPPUNIT_ASSERT_EQUAL(tris.size(), std::size_t(3));
59 const double eps = 1e-15;
61 std::vector<p2t::Point> outer_boundary
62 {{0,0},{0.5,eps},{1,0},{1-eps,0.836541},
63 {1,2},{.46,1.46+eps},{0,1},{eps,0.5}};
65 std::vector<p2t::Point *> api_shim(outer_boundary.size());
66 std::iota(api_shim.begin(), api_shim.end(), outer_boundary.data());
68 const double r2o4 = std::sqrt(2.)/4;
69 std::vector<p2t::Point> hole_boundary
70 {{0.5+r2o4,0.5},{0.5,0.5+r2o4},{0.5-r2o4,0.5},{0.5-eps,0.5-r2o4}};
72 std::vector<p2t::Point *> hole_shim(hole_boundary.size());
73 std::iota(hole_shim.begin(), hole_shim.end(), hole_boundary.data());
75 p2t::CDT cdt(api_shim);
76 cdt.AddHole(hole_shim);
78 std::vector<p2t::Point> interior_points
79 {{0.21,0.79},{0.21,0.21},{0.79,0.21}};
80 for (
auto & p : interior_points)
85 auto tris = cdt.GetTriangles();
87 std::cout <<
"With perturbation " << eps <<
" we got " << tris.size() <<
" triangles!" << std::endl;
92 CPPUNIT_ASSERT_EQUAL(tris.size(), std::size_t(18));
98 std::vector<p2t::Point> outer_boundary
99 {{0, 0}, {1, 0}, {1, 2}, {0, 1}};
101 std::vector<p2t::Point *> api_shim(outer_boundary.size());
102 std::iota(api_shim.begin(), api_shim.end(), outer_boundary.data());
104 const double r2o4 = std::sqrt(2.)/4;
105 std::vector<p2t::Point> hole_boundary
106 {{0.5,0.5+r2o4},{0.5-r2o4,0.5},{0.5,0.5}};
108 std::vector<p2t::Point *> hole_shim(hole_boundary.size());
109 std::iota(hole_shim.begin(), hole_shim.end(), hole_boundary.data());
111 p2t::CDT cdt(api_shim);
112 cdt.AddHole(hole_shim);
115 const double eps = 1e-11;
117 std::vector<p2t::Point> interior_points
118 {{0.5-(r2o4/2)-eps, 0.5+(r2o4/2)+eps}};
120 for (
auto & p : interior_points)
CPPUNIT_TEST(testLibMeshPoly2Tri)
void testLibMeshPoly2TriSlivers()
void testLibMeshPoly2TriHole()
void iota(ForwardIter first, ForwardIter last, T value)
Utility::iota was created back when std::iota was just an SGI STL extension.
LIBMESH_CPPUNIT_TEST_SUITE(LibMeshPoly2TriTest)
CPPUNIT_TEST_SUITE_REGISTRATION(LibMeshPoly2TriTest)
void testLibMeshPoly2Tri()