private void CollectAllLeaves(BspTreeElement bspTreeElement) { if (bspTreeElement == null) return; if (bspTreeElement is BspTreeNode) { CollectAllLeaves(((BspTreeNode)bspTreeElement).Front); CollectAllLeaves(((BspTreeNode)bspTreeElement).Back); return; } var leaf = (BspTreeLeaf)bspTreeElement; int i; if (leafIndices.TryGetValue(leaf, out i)) return; i = allLeaves.Count; allLeaves.Add(leaf); leafIndices[leaf] = i; foreach (var v in leaf.VisibleLeaves) CollectAllLeaves(v); }
private int AddTreeNode(Cb4aLevel l, BspTreeElement bspTreeElement) { if (bspTreeElement is BspTreeNode) return AddTreeNode(l, (BspTreeNode)bspTreeElement); return AddTreeLeaf(l, (BspTreeLeaf)bspTreeElement); }