public CSGTree ToCSGTree(out HashSet<CSGNode> animatedNodes) { animatedNodes = new HashSet<CSGNode>(); var tree = new CSGTree(); tree.RootNode = RootNode.ToCSGNode(null, animatedNodes, false); return tree; }
public static IEnumerable<CSGNode> FindChildBrushes(CSGTree tree) { return FindChildBrushes(tree.RootNode); }
void UpdateMeshes(CSGTree tree, IEnumerable<CSGNode> updateNodes) { var modifiedMeshes = CSGCategorization.ProcessCSGNodes(tree.RootNode, updateNodes); foreach (var item in modifiedMeshes) validMeshes[item.Key] = item.Value; UpdateVertexBuffers(validMeshes); }
void InitCSGTree() { csgTree = CSGUtility.LoadTree("import.xml", out instanceNodes); if (csgTree == null) { MessageBox.Show("Failed to load file"); return; } instanceNodeTranslations = new List<Vector3>(); if (instanceNodes != null && instanceNodes.Count > 0) { foreach (var node in instanceNodes) instanceNodeTranslations.Add(node.LocalTranslation); subInstanceBrushes = new HashSet<CSGNode>(); foreach (var node in instanceNodes) { foreach (var brush in CSGUtility.FindChildBrushes(node)) subInstanceBrushes.Add(brush); } allBrushes = (from node in CSGUtility.FindChildBrushes(csgTree) where !subInstanceBrushes.Contains(node) select node).ToList(); } else allBrushes = CSGUtility.FindChildBrushes(csgTree).ToList(); var updateNodes = new List<CSGNode>(); updateNodes.AddRange(allBrushes); updateNodes.AddRange(instanceNodes); UpdateMeshes(csgTree, updateNodes); }