public void InitializeTree(DirectoryInfo directory)
    {
        this.directory = directory;
        meshManager    = new MeshManager(numberOfMeshes, numberOfMeshLoadingJobs);
        FileInfo     index  = directory.GetFiles("voxelIndex.json")[0];
        StreamReader reader = new StreamReader(index.FullName);
        string       s      = reader.ReadToEnd();
        JSONNode     json   = JSON.Parse(s);

        if (json.IsArray)
        {
            topNodes = new PointCloudNode[json.AsArray.Count];
            for (int i = 0; i < json.AsArray.Count; i++)
            {
                topNodes[i] = PointCloudNode.AddNode(json.AsArray[i], this.directory, gameObject, this);
            }
        }
        else
        {
            topNodes    = new PointCloudNode[1];
            topNodes[0] = PointCloudNode.AddNode(json, this.directory, gameObject, this);
        }

        if (moveCameraToCenter)
        {
            Camera.main.transform.position = topNodes[0].boundsInModelSpace.center;
        }

        System.GC.Collect(); //Garbage Collection
    }
    public override bool Initialize(JSONNode node, DirectoryInfo directory, IPointCloudManager manager)
    {
        InitializeFromJSON(node);
        gameObject.name = "PC Parent Node";

        JSONArray childrenJSON = node["children"].AsArray;
        ArrayList childrenList = new ArrayList();

        //Debug.Log("N Children: " + childrenJSON.Count);
        for (int i = 0; i < childrenJSON.Count; i++)
        {
            PointCloudNode pcNode = PointCloudNode.AddNode(childrenJSON[i], directory, gameObject, manager);
            if (pcNode != null)
            {
                childrenList.Add(pcNode);
            }
        }
        children = (PointCloudNode[])childrenList.ToArray(typeof(PointCloudNode));

        return(childrenJSON.Count > 0);
    }