public void HalfedgeGraphMergeGraphTest() { // graph A: merging two adjacent and one intersecting polygons _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(8, 0), _factory.CreatePoint(8, 8), _factory.CreatePoint(0, 8))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(8, 0), _factory.CreatePoint(14, 0), _factory.CreatePoint(8, 8))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(-4, -6), _factory.CreatePoint(4, -6), _factory.CreatePoint(4, 2), _factory.CreatePoint(-4, 2))); _graph.VerifyTopology(); Assert.AreEqual(4, _graph.Faces.Count()); Assert.AreEqual(14, _graph.Edges.Count()); Assert.AreEqual(28, _graph.Halfedges.Count()); Assert.AreEqual(11, _graph.Vertices.Count()); // graph B: two intersecting polygons HalfedgeGraph graphB = new HalfedgeGraph(); graphB.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(-2, 6), _factory.CreatePoint(14, 6), _factory.CreatePoint(4, 14))); graphB.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(2, 1), _factory.CreatePoint(6, 1), _factory.CreatePoint(6, 13), _factory.CreatePoint(2, 13))); graphB.VerifyTopology(); Assert.AreEqual(7, graphB.Faces.Count()); Assert.AreEqual(19, graphB.Edges.Count()); Assert.AreEqual(38, graphB.Halfedges.Count()); Assert.AreEqual(13, graphB.Vertices.Count()); // graph merge: numerous intersections _graph.MergeGraph(graphB); _graph.VerifyTopology(); Assert.AreEqual(17, _graph.Faces.Count()); Assert.AreEqual(47, _graph.Edges.Count()); Assert.AreEqual(94, _graph.Halfedges.Count()); Assert.AreEqual(31, _graph.Vertices.Count()); }
public void HalfedgeGraphMergeTest() { // merging two adjacent polygons _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(10, 0), _factory.CreatePoint(10, 10), _factory.CreatePoint(0, 10))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(10, 0), _factory.CreatePoint(15, -5), _factory.CreatePoint(25, 10), _factory.CreatePoint(20, 20), _factory.CreatePoint(10, 10))); _graph.VerifyTopology(); Assert.AreEqual(2, _graph.Faces.Count()); Assert.AreEqual(8, _graph.Edges.Count()); Assert.AreEqual(16, _graph.Halfedges.Count()); Assert.AreEqual(7, _graph.Vertices.Count()); // adding two adjacent polygons and merging an intersecting one _graph.Clear(); _graph.AddPolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(10, 0), _factory.CreatePoint(10, 10), _factory.CreatePoint(0, 10))); _graph.AddPolygon(_factory.CreatePolygon( _factory.CreatePoint(10, 0), _factory.CreatePoint(15, -5), _factory.CreatePoint(25, 10), _factory.CreatePoint(20, 20), _factory.CreatePoint(10, 10))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(-3, 3), _factory.CreatePoint(3, 3), _factory.CreatePoint(3, 6), _factory.CreatePoint(-3, 6))); _graph.VerifyTopology(); Assert.AreEqual(4, _graph.Faces.Count()); Assert.AreEqual(16, _graph.Edges.Count()); Assert.AreEqual(32, _graph.Halfedges.Count()); Assert.AreEqual(13, _graph.Vertices.Count()); var vertices = _graph.Vertices.Select(vertex => vertex.Position).ToArray(); Assert.Contains(new Coordinate(0, 3), vertices); Assert.Contains(new Coordinate(0, 6), vertices); // merging two adjacent polygons and one intersecting both _graph.Clear(); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(10, 0), _factory.CreatePoint(10, 10), _factory.CreatePoint(0, 10))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(10, 0), _factory.CreatePoint(15, -5), _factory.CreatePoint(25, 10), _factory.CreatePoint(20, 20), _factory.CreatePoint(10, 10))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(-3, 3), _factory.CreatePoint(30, 3), _factory.CreatePoint(30, 6), _factory.CreatePoint(-3, 6))); _graph.VerifyTopology(); Assert.AreEqual(8, _graph.Faces.Count()); Assert.AreEqual(24, _graph.Edges.Count()); Assert.AreEqual(48, _graph.Halfedges.Count()); Assert.AreEqual(17, _graph.Vertices.Count()); Assert.AreEqual(5, _graph.Vertices.Count(vertex => vertex.Position.Y == 3)); Assert.AreEqual(5, _graph.Vertices.Count(vertex => vertex.Position.Y == 6)); // merging four adjacent polygons _graph.Clear(); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(1, 0), _factory.CreatePoint(1, 2), _factory.CreatePoint(0, 2))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(1, 0), _factory.CreatePoint(2, 0), _factory.CreatePoint(2, 1), _factory.CreatePoint(1, 1))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(2, 0), _factory.CreatePoint(3, 0), _factory.CreatePoint(3, 2), _factory.CreatePoint(2, 2))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(1, 1), _factory.CreatePoint(2, 1), _factory.CreatePoint(1, 2))); _graph.VerifyTopology(); Assert.AreEqual(4, _graph.Faces.Count()); Assert.AreEqual(13, _graph.Edges.Count()); Assert.AreEqual(26, _graph.Halfedges.Count()); Assert.AreEqual(10, _graph.Vertices.Count()); Assert.AreEqual(2, _graph.Faces.Count(face => face.Vertices.Count() == 5 && face.Edges.Count() == 5)); Assert.AreEqual(1, _graph.Faces.Count(face => face.Vertices.Count() == 4 && face.Edges.Count() == 4)); Assert.AreEqual(1, _graph.Faces.Count(face => face.Vertices.Count() == 3 && face.Edges.Count() == 3)); // merging two adjacent and two intersecting polygons _graph.Clear(); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(8, 0), _factory.CreatePoint(8, 8), _factory.CreatePoint(0, 8))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(8, 0), _factory.CreatePoint(14, 0), _factory.CreatePoint(8, 8))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(-4, -6), _factory.CreatePoint(4, -6), _factory.CreatePoint(4, 2), _factory.CreatePoint(-4, 2))); _graph.VerifyTopology(); Assert.AreEqual(4, _graph.Faces.Count()); Assert.AreEqual(14, _graph.Edges.Count()); Assert.AreEqual(28, _graph.Halfedges.Count()); Assert.AreEqual(11, _graph.Vertices.Count()); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(2, 1), _factory.CreatePoint(6, 1), _factory.CreatePoint(6, 13), _factory.CreatePoint(2, 13))); _graph.VerifyTopology(); Assert.AreEqual(8, _graph.Faces.Count()); Assert.AreEqual(26, _graph.Edges.Count()); Assert.AreEqual(52, _graph.Halfedges.Count()); Assert.AreEqual(19, _graph.Vertices.Count()); // merging two adjacent polygons with one intersecting / touching them _graph.Clear(); _graph.AddPolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 0), _factory.CreatePoint(10, 0), _factory.CreatePoint(10, 10), _factory.CreatePoint(0, 10))); _graph.AddPolygon(_factory.CreatePolygon( _factory.CreatePoint(0, 10), _factory.CreatePoint(10, 10), _factory.CreatePoint(10, 20), _factory.CreatePoint(0, 20))); _graph.MergePolygon(_factory.CreatePolygon( _factory.CreatePoint(5, 5), _factory.CreatePoint(15, 5), _factory.CreatePoint(15, 10), _factory.CreatePoint(5, 10))); _graph.VerifyTopology(); Assert.AreEqual(4, _graph.Faces.Count()); Assert.AreEqual(14, _graph.Edges.Count()); Assert.AreEqual(28, _graph.Halfedges.Count()); Assert.AreEqual(11, _graph.Vertices.Count()); Assert.AreEqual(1, _graph.Faces.Count(face => face.Vertices.Count() == 6 && face.Edges.Count() == 6)); Assert.AreEqual(1, _graph.Faces.Count(face => face.Vertices.Count() == 5 && face.Edges.Count() == 5)); Assert.AreEqual(2, _graph.Faces.Count(face => face.Vertices.Count() == 4 && face.Edges.Count() == 4)); }