private void CheckTTMAttributes(VSS.TRex.Designs.TTM.TrimbleTINModel ttm1, VSS.TRex.Designs.TTM.Optimised.TrimbleTINModel ttm2) { ttm1.Triangles.Count.Should().Be(ttm2.Triangles.Items.Length); ttm1.Vertices.Count.Should().Be(ttm2.Vertices.Items.Length); ttm1.Edges.Count.Should().Be(ttm2.Edges.Items.Length); ttm1.StartPoints.Count.Should().Be(ttm2.StartPoints.Items.Length); }
public static TrimbleTINModel CreateOptimisedTTM_With32x32FlatTrianglesAtOrigin(double withElevation) { // Create a mesh of triangles (32 x 32) with it's bottom-left corner on the origin var TTM = new TrimbleTINModel { Vertices = { Items = Enumerable.Range(0, 1024).Select(x => new XYZ(x % 32, (int)(x / 32), withElevation)).ToArray() }, Triangles = { Items = Enumerable.Range(0, 2 * 31 * 31).Select(x => new Triangle(0, 0, 0)).ToArray() } }; int TriIndex = 0; for (int i = 0; i < 31; i++) { int baseIndex = i * 32; for (int j = 0; j < 31; j++) { TTM.Triangles.Items[TriIndex++] = new Triangle(baseIndex + j, baseIndex + j + 1, baseIndex + j + 32); TTM.Triangles.Items[TriIndex++] = new Triangle(baseIndex + j + 32, baseIndex + j + 33, baseIndex + j + 1); } } // ConvertOptimisedTTMToMutableTTM(TTM, $@"c:\temp\ThousandTriMutableTestTIN-{DateTime.Now.Ticks}.ttm"); return(TTM); }
public override void Dispose() { Data = null; triangleItems = null; vertexItems = null; SpatialIndexOptimisedTriangles = null; boundary = null; }
public static TrimbleTINModel CreateOptimisedTTM_WithFlatUnitTriangleAtOrigin(double withElevation) { var TTM = new TrimbleTINModel { Vertices = { Items = new [] { new XYZ(0, 0, withElevation), new XYZ(1, 0, withElevation), new XYZ(0, 1, withElevation) } }, Triangles = { Items = new [] { new Triangle(0, 1, 2) } } }; return(TTM); }
public void Test_TINLoad2() { VSS.TRex.Designs.TTM.Optimised.TrimbleTINModel readonly_tin = new VSS.TRex.Designs.TTM.Optimised.TrimbleTINModel(); // 165Mb TIN readonly_tin.LoadFromFile(@"C:\Users\rwilson\Downloads\5644616_oba9c0bd14_FRL.ttm"); VSS.TRex.Designs.TTM.TrimbleTINModel readwrite_tin = new VSS.TRex.Designs.TTM.TrimbleTINModel(); // 165Mb TIN readwrite_tin.LoadFromFile(@"C:\Users\rwilson\Downloads\5644616_oba9c0bd14_FRL.ttm"); // Check the numbers of vertices, triangles, edges and start points are the same Assert.True(readwrite_tin.Triangles.Count == readonly_tin.Triangles.Items.Length, $"Triangle counts do not match: {readwrite_tin.Triangles.Count} vs {readonly_tin.Triangles.Items.Length}"); Assert.True(readwrite_tin.Vertices.Count == readonly_tin.Vertices.Items.Length, $"Vertex counts do not match: {readwrite_tin.Vertices.Count} vs {readonly_tin.Vertices.Items.Length}"); Assert.True(readwrite_tin.Edges.Count == readonly_tin.Edges.Items.Length, $"Edge counts do not match: {readwrite_tin.Edges.Count} vs {readonly_tin.Edges.Items.Length}"); Assert.True(readwrite_tin.StartPoints.Count == readonly_tin.StartPoints.Items.Length, $"StartPoint counts do not match: {readwrite_tin.StartPoints.Count} vs {readonly_tin.StartPoints.Items.Length}"); // Check the contents of triangles is the same for (int i = 0; i < readwrite_tin.Triangles.Count; i++) { // Assert.True(readwrite_tin.Triangles[i].Tag == readonly_tin.Triangles.Items[i].Tag, $"Triangle TAGs vary at index {i}, {readwrite_tin.Triangles[i].Tag} vs {readonly_tin.Triangles.Items[i].Tag}"); Assert.True(readwrite_tin.Triangles[i].Vertices[0].Tag == readonly_tin.Triangles.Items[i].Vertex0 + 1, $"Triangle vertex 0 Tags vary at index {i}, {readwrite_tin.Triangles[i].Vertices[0].Tag} vs {readonly_tin.Triangles.Items[i].Vertex0 + 1}"); Assert.True(readwrite_tin.Triangles[i].Vertices[1].Tag == readonly_tin.Triangles.Items[i].Vertex1 + 1, $"Triangle vertex 1 Tags vary at index {i}, {readwrite_tin.Triangles[i].Vertices[1].Tag} vs {readonly_tin.Triangles.Items[i].Vertex1 + 1}"); Assert.True(readwrite_tin.Triangles[i].Vertices[2].Tag == readonly_tin.Triangles.Items[i].Vertex2 + 1, $"Triangle vertex 2 Tags vary at index {i}, {readwrite_tin.Triangles[i].Vertices[2].Tag} vs {readonly_tin.Triangles.Items[i].Vertex2 + 1}"); } // Check the contents of vertices are the same for (int i = 0; i < readwrite_tin.Vertices.Count; i++) { // Assert.True(readwrite_tin.Vertices[i].Tag == readonly_tin.Vertices.Items[i].Tag, $"Vertex TAGs vary at index {i}, {readwrite_tin.Vertices[i].Tag} vs {readonly_tin.Vertices.Items[i].Tag}"); Assert.True(readwrite_tin.Vertices[i].XYZ.Equals(readonly_tin.Vertices.Items[i]), $"Vertex location varies at index {i}, {readwrite_tin.Vertices[i].XYZ} vs {readonly_tin.Vertices.Items[i]}"); } // Check the contents of edges are the same for (int i = 0; i < readwrite_tin.Edges.Count; i++) { Assert.True(readwrite_tin.Edges[i].Tag == readonly_tin.Edges.Items[i] + 1, $"Edges TAGs vary at index {i}, {readwrite_tin.Edges[i].Tag} vs {readonly_tin.Edges.Items[i] + 1}"); } // Check the contents of start points are the same for (int i = 0; i < readwrite_tin.StartPoints.Count; i++) { Assert.True(readwrite_tin.StartPoints[i].Triangle.Tag == readonly_tin.StartPoints.Items[i].Triangle + 1, $"Startpoint TAGs vary at index {i}, {readwrite_tin.StartPoints[i].Triangle.Tag} vs {readonly_tin.StartPoints.Items[i].Triangle + 1}"); } }
/// <summary> /// Constructor for a TTMDesign that takes the underlying cell size for the site model that will be used when interpolating heights from the design surface /// </summary> public TTMDesign(double ACellSize) { Data = new TrimbleTINModel(); triangleItems = Data.Triangles.Items; vertexItems = Data.Vertices.Items; cellSize = ACellSize; // Create a sub grid tree bit mask index that holds one bit per on-the-ground // sub grid that intersects at least one triangle in the TTM. subGridIndex = new SubGridTreeSubGridExistenceBitMask { CellSize = SubGridTreeConsts.SubGridTreeDimension * ACellSize }; // Create the optimized sub grid tree spatial index that minimizes the number of allocations in the final result. SpatialIndexOptimised = new OptimisedSpatialIndexSubGridTree(SubGridTreeConsts.SubGridTreeLevels - 1, SubGridTreeConsts.SubGridTreeDimension * ACellSize); }