public void AdaptiveGridTwoAlignedSections() { var adaptiveGrid = new AdaptiveGrid(new Transform()); var polygon1 = Polygon.Rectangle(new Vector3(0, 0), new Vector3(10, 10)); var polygon2 = Polygon.Rectangle(new Vector3(10, 2), new Vector3(20, 12)); var points = new List <Vector3>(); points.AddRange(polygon1.Vertices); points.AddRange(polygon2.Vertices); adaptiveGrid.AddFromExtrude(polygon1, Vector3.ZAxis, 2, points); adaptiveGrid.AddFromExtrude(polygon2, Vector3.ZAxis, 2, points); ulong id; Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(10, 2), out id)); var vertex = adaptiveGrid.GetVertex(id); //Up, North, South, East, West Assert.Equal(5, vertex.Edges.Count); Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(10, 10), out id)); vertex = adaptiveGrid.GetVertex(id); Assert.Equal(5, vertex.Edges.Count); }
public void AdaptiveGridAddVertex() { var adaptiveGrid = new AdaptiveGrid(new Transform()); var points = new List <Vector3>() { new Vector3(-6, -4), new Vector3(-2, -4), new Vector3(3, -4), new Vector3(1, 4.5, 3), new Vector3(6, 3, -2), }; adaptiveGrid.AddFromPolygon(Polygon.Rectangle(15, 10), points); ulong id; Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(-2, -4), out id)); var oldV = adaptiveGrid.GetVertex(id); var edgesBefore = oldV.Edges.Count; var newV = adaptiveGrid.AddVertex(new Vector3(-2, -4, 2), new List <Vertex> { oldV }); Assert.NotNull(newV); Assert.False(newV.Id == 0); Assert.Single(newV.Edges); Assert.True(newV.Edges.First().StartId == id || newV.Edges.First().EndId == id); Assert.Equal(edgesBefore + 1, oldV.Edges.Count()); Assert.Contains(oldV.Edges, e => e.StartId == newV.Id || e.EndId == newV.Id); }
public void AdaptiveGridSubtractBoxKeepEdges() { var adaptiveGrid = new AdaptiveGrid(new Transform()); var polygon = Polygon.Rectangle(new Vector3(0, 0), new Vector3(10, 10)); var points = new List <Vector3>(); for (int i = 1; i < 10; i++) { points.Add(new Vector3(i, i, 1)); } adaptiveGrid.AddFromExtrude(polygon, Vector3.ZAxis, 2, points); Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 5, 1), out _)); Assert.False(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4.9, 1), out _)); var numVertices = adaptiveGrid.GetVertices().Count; var box = new BBox3(new Vector3(4.9, 4.9, 0), new Vector3(5.1, 5.1, 2)); adaptiveGrid.SubtractBox(box, false); Assert.False(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 5, 1), out _)); Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4.9, 1), out var cutEdgeId)); var v = adaptiveGrid.GetVertex(cutEdgeId); Assert.Single(v.Edges); adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4, 1), out var borderId); Assert.True(v.Edges.First().StartId == borderId || v.Edges.First().EndId == borderId); //On each elevation one vertex is removed but 4 added Assert.Equal(numVertices + (3 * (4 - 1)), adaptiveGrid.GetVertices().Count); }
public void AdaptiveGridSubtractBoxCutEdges() { var adaptiveGrid = new AdaptiveGrid(new Transform()); var polygon = Polygon.Rectangle(new Vector3(0, 0), new Vector3(10, 10)); var points = new List <Vector3>(); for (int i = 1; i < 10; i++) { points.Add(new Vector3(i, i, 1)); } adaptiveGrid.AddFromExtrude(polygon, Vector3.ZAxis, 2, points); Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 5, 1), out _)); Assert.False(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4.9, 1), out _)); adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4, 1), out var borderId); var borderV = adaptiveGrid.GetVertex(borderId); var numEdges = borderV.Edges.Count; var numVertices = adaptiveGrid.GetVertices().Count; var box = new BBox3(new Vector3(4.9, 4.9, 0), new Vector3(5.1, 5.1, 2)); adaptiveGrid.SubtractBox(box, true); Assert.False(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 5, 1), out _)); Assert.False(adaptiveGrid.TryGetVertexIndex(new Vector3(5, 4.9, 1), out _)); Assert.Equal(numEdges - 1, borderV.Edges.Count); //On each elevation one vertex is removed and no added Assert.Equal(numVertices - (3 * 1), adaptiveGrid.GetVertices().Count); }
public void AdaptiveGridDoesntAddTheSameVertex() { var adaptiveGrid = new AdaptiveGrid(new Transform()); var polygon = Polygon.Rectangle(new Vector3(0, 0), new Vector3(10, 10)); adaptiveGrid.AddFromPolygon(polygon, new List <Vector3>()); Assert.True(adaptiveGrid.TryGetVertexIndex(new Vector3(0, 10), out var id)); var vertex = adaptiveGrid.GetVertex(id); var halfTol = adaptiveGrid.Tolerance / 2; var modified = vertex.Point + new Vector3(0, 0, halfTol); adaptiveGrid.TryGetVertexIndex(new Vector3(10, 0), out var otherId); var newVertex = adaptiveGrid.AddVertex(modified, new List <Vertex> { adaptiveGrid.GetVertex(otherId) }); Assert.Equal(id, newVertex.Id); modified = vertex.Point + new Vector3(-halfTol, -halfTol, -halfTol); adaptiveGrid.TryGetVertexIndex(modified, out otherId, adaptiveGrid.Tolerance); Assert.Equal(id, otherId); }