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); }