/// <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); }