// Functions that Unity uses in its execution engine. void Awake() { Stopwatch sw = new Stopwatch(); sw.Start(); // ... if (!Initialized) { LoggingUpgrade.RegisterLogFile(); BuildMeshTree(GetComponent <MeshFilter>().mesh, 1); _fragmentConnectivityGraph = new BCRBGraph(MeshTreeRoot); } sw.Stop(); Debug.Log(sw.Elapsed.TotalSeconds); }
List <MeshTreeNode> GetMinimalMeshTrees(BCRBGraph graph) { List <MeshTreeNode> minimalMeshTrees = new List <MeshTreeNode>(); LinkedList <MeshTreeNode> visitNodes = new LinkedList <MeshTreeNode>(); InitMeshTreeNodes(MeshTreeRoot); foreach (MeshTreeNode fragment in graph.Fragments) { fragment.IsMinmal = true; } VisitAndGenerateMinimalMeshTrees(MeshTreeRoot); visitNodes.AddLast(MeshTreeRoot); while (visitNodes.Count != 0) { MeshTreeNode visitNode = visitNodes.First.Value; visitNodes.RemoveFirst(); if (visitNode.IsMinmal) { minimalMeshTrees.Add(visitNode); } else { if (visitNode.Left != null) { visitNodes.AddLast(visitNode.Left); } if (visitNode.Right != null) { visitNodes.AddLast(visitNode.Right); } } } return(minimalMeshTrees); }