//-------------------------------------------------------------------------------------------------------------------- // - Depth-first Topological Traversal (Recursive) //-------------------------------------------------------------------------------------------------------------------- private void TopologicalTraverse(IsometricBufferNode current) { // Mark the current node as visited current.Visited = true; // Traverse each non-visited child foreach (IsometricBufferNode child in current.Children) { if (!child.Visited) { TopologicalTraverse(child); } } // Push current node's target object onto the back of the sorted drawing queue SortedObjects.AddLast(current.Target); }
//-------------------------------------------------------------------------------------------------------------------- // - Topological Sort //-------------------------------------------------------------------------------------------------------------------- // Executes a depth-first search to topologically sort nodes according a Painter's ordering //-------------------------------------------------------------------------------------------------------------------- private void TopologicalSort() { // Clear any previous sorting SortedObjects.Clear(); // Clear all 'Visited' flags from any previous sorting foreach (IsometricBufferNode node in Nodes) { node.Visited = false; } // Initiate a traversal at every non-visited node foreach (IsometricBufferNode node in Nodes) { if (!node.Visited) { TopologicalTraverse(node); } } // Clear signal to sort Dirty = false; }