TriangleNet.Tools.QuadNode.CreateSubRegion C# (CSharp) Method

CreateSubRegion() public method

public CreateSubRegion ( int currentDepth ) : void
currentDepth int
return void
        public void CreateSubRegion(int currentDepth)
        {
            // The four sub regions of the quad tree
            //   +--------------+
            //   |  nw  |  ne   |
            //   |------+pivot--|
            //   |  sw  |  se   |
            //   +--------------+
            BoundingBox box;

            // 1. region south west
            box = new BoundingBox(bounds.Xmin, bounds.Ymin, pivot.X, pivot.Y);
            regions[0] = new QuadNode(box, tree);

            // 2. region south east
            box = new BoundingBox(pivot.X, bounds.Ymin, bounds.Xmax, pivot.Y);
            regions[1] = new QuadNode(box, tree);

            // 3. region north west
            box = new BoundingBox(bounds.Xmin, pivot.Y, pivot.X, bounds.Ymax);
            regions[2] = new QuadNode(box, tree);

            // 4. region north east
            box = new BoundingBox(pivot.X, pivot.Y, bounds.Xmax, bounds.Ymax);
            regions[3] = new QuadNode(box, tree);

            Point[] triangle = new Point[3];

            // Find region for every triangle vertex
            foreach (var index in triangles)
            {
                ITriangle tri = tree.triangles[index];

                triangle[0] = tri.GetVertex(0);
                triangle[1] = tri.GetVertex(1);
                triangle[2] = tri.GetVertex(2);

                AddTriangleToRegion(triangle, tri.ID);
            }

            for (int i = 0; i < 4; i++)
            {
                if (regions[i].triangles.Count > tree.sizeBound && currentDepth < tree.maxDepth)
                {
                    regions[i].CreateSubRegion(currentDepth + 1);
                }
            }
        }

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TriangleQuadTree" /> class.
        /// </summary>
        /// <param name="mesh">Mesh containing triangles.</param>
        /// <param name="maxDepth">The maximum depth of the tree.</param>
        /// <param name="sizeBound">The maximum number of triangles contained in a leaf.</param>
        /// <remarks>
        /// The quadtree does not track changes of the mesh. If a mesh is refined or
        /// changed in any other way, a new quadtree has to be built to make the point
        /// location work.
        /// 
        /// A node of the tree will be split, if its level if less than the max depth parameter
        /// AND the number of triangles in the node is greater than the size bound.
        /// </remarks>
        public TriangleQuadTree(Mesh mesh, int maxDepth = 10, int sizeBound = 10)
        {
            this.maxDepth = maxDepth;
            this.sizeBound = sizeBound;

            triangles = mesh.Triangles.ToArray();

            int currentDepth = 0;

            root = new QuadNode(mesh.Bounds, this, true);
            root.CreateSubRegion(++currentDepth);
        }
All Usage Examples Of TriangleNet.Tools.QuadNode::CreateSubRegion