TEST_CASE_F(Triangulate_GivenSelfCrossingTriangle_ReturnsFalse, Fixture) { Polygon3 polygon; polygon.push_back(Vector3Type(0.0, 0.0, 1.0)); polygon.push_back(Vector3Type(3.0, 2.0, 2.0)); polygon.push_back(Vector3Type(3.0, 3.0, 3.0)); polygon.push_back(Vector3Type(1.0, 0.0, 0.0)); TriangulatorType triangulator; TriangulatorType::IndexArray triangles; const bool success = triangulator.triangulate(polygon, triangles); EXPECT_FALSE(success); }
TEST_CASE_F(Triangulate_GivenQuadWithCoincidentVertices_KeepDegenerateTrianglesIsTrue_ReturnsTwoTriangles, Fixture) { Polygon3 polygon; polygon.push_back(Vector3Type(0.0, 0.0, 0.0)); polygon.push_back(Vector3Type(0.0, 1.0, 0.0)); polygon.push_back(Vector3Type(1.0, 1.0, 0.0)); polygon.push_back(Vector3Type(0.0, 0.0, 0.0)); TriangulatorType triangulator(TriangulatorType::KeepDegenerateTriangles); TriangulatorType::IndexArray triangles; const bool success = triangulator.triangulate(polygon, triangles); ASSERT_TRUE(success); EXPECT_EQ(2 * 3, triangles.size()); }
TEST_CASE_F(Triangulate_GivenComplexConcavePolygon_ReturnsTrue, Fixture) { Polygon3 polygon; polygon.push_back(Vector3Type(0.137498, -1.09128, 0.0)); polygon.push_back(Vector3Type(0.124257, -1.10419, 0.0)); polygon.push_back(Vector3Type(0.124257, -1.31878, 0.0)); polygon.push_back(Vector3Type(0.240957, -1.30956, 0.0)); polygon.push_back(Vector3Type(0.240957, 1.3116, 0.0)); polygon.push_back(Vector3Type(0.124256, 1.30447, 0.0)); polygon.push_back(Vector3Type(0.124256, 1.08131, 0.0)); polygon.push_back(Vector3Type(0.137498, 1.0684, 0.0)); polygon.push_back(Vector3Type(0.160558, 1.02428, 0.0)); polygon.push_back(Vector3Type(0.168503, 0.975371, 0.0)); polygon.push_back(Vector3Type(0.168503, -0.998254, 0.0)); polygon.push_back(Vector3Type(0.160558, -1.04716, 0.0)); TriangulatorType triangulator; TriangulatorType::IndexArray triangles; const bool success = triangulator.triangulate(polygon, triangles); EXPECT_TRUE(success); }