public void Face_Polygon_has_the_same_vertices_as_the_Face([ValueSource("GetFaceOrientationTestCases")] FaceOrientationTestCase testCase) { var surface = CreateSurface(isClosedBase: true, isClosedSurface: true, isCounterclockwise: testCase.IsOrientedOutside); IPolysurfaceFace face; if (testCase.IsVertical) { face = surface.GetVerticalFace(2); } else { face = surface.GetHorizontalFace(testCase.Side); } var actual = new ClosedPolyline3(face.Polygon.Vertices()); var expected = new ClosedPolyline3(face.Vertices().Select(v => v.Point)); GeometryTestUtils.ExpectClosedPolylinesAreEqual(actual, expected, _tolerance); }
public void Face_Normal_is_consistent_with_edge_order_for_convex_base([ValueSource("GetFaceOrientationTestCases")] FaceOrientationTestCase testCase) { var baseVertices = new List <Vector2> { new Vector2(-1, +2), new Vector2(+1, +2), new Vector2(+2, +1), new Vector2(+2, -1), new Vector2(+1, -2), new Vector2(-1, -2), new Vector2(-2, -1), new Vector2(-2, +1) }; var line = new ClosedPolyline(baseVertices); var @base = testCase.IsOrientedOutside ? line.AsReverse() : line; var zRange = new Interval(-3.14, 2.88); var surface = new VerticalPrismalSurface(@base, zRange, isClosed: true); IPolysurfaceFace face; if (testCase.IsVertical) { face = surface.GetVerticalFace(2); } else { face = surface.GetHorizontalFace(testCase.Side); } var edge1 = face.Edges.ElementAt(0); var edge2 = face.Edges.ElementAt(1); var expected = edge1.Vector().Cross(edge2.Vector()); Expect(face.Normal * expected, Is.Positive); }