Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public override void Dispose()
 {
     Data          = null;
     triangleItems = null;
     vertexItems   = null;
     SpatialIndexOptimisedTriangles = null;
     boundary = null;
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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}");
            }
        }
Esempio n. 6
0
        /// <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);
        }