static void InitializeHierarchy(ChildNodeData childData, Transform childTransform) { Transform parentTransform; CSGNode parentNode; FindParentNode(childTransform, out parentNode, out parentTransform); if (!parentNode) { parentTransform = childTransform.root; childData.Model = GetDefaultCSGModelForObject(childTransform); childData.Parent = null; } else { // maybe our parent is a model? var model = parentNode as CSGModel; if (model) { childData.Model = model; } else { // is our parent an operation? var operation = parentNode as CSGOperation; if (operation && !operation.PassThrough) { childData.Parent = operation; } // see if our parent has already found a model if (childData.Parent) { if (childData.Parent.ChildData != null) { childData.Model = childData.Parent.ChildData.Model; } } } // haven't found a model? if (!childData.Model) { // if not, try higher up in the hierarchy .. FindParentModel(parentTransform, out childData.Model); } } }
public static ParentNodeData GetParentData(ChildNodeData childNode) { var parent = childNode.Parent; if (System.Object.Equals(parent, null) || !parent || !parent.transform) { var model = childNode.Model; if (System.Object.Equals(model, null) || !model || model.modelNodeID == CSGNode.InvalidNodeID || !model.transform) { return(null); } return(model.parentData); } if (parent.operationNodeID == CSGNode.InvalidNodeID) { return(null); } return(parent.ParentData); }
static void SetNodeParent(ChildNodeData childData, HierarchyItem hierarchyItem, CSGOperation parentOp, CSGModel parentModel) { var oldParentData = childData.OwnerParentData; childData.Parent = parentOp; childData.Model = parentModel; var newParentData = GetParentData(childData); if (oldParentData != newParentData) { if (oldParentData != null) { oldParentData.RemoveNode(hierarchyItem); } if (newParentData != null) { newParentData.AddNode(hierarchyItem); } childData.OwnerParentData = newParentData; childData.ModelTransform = (!childData.Model) ? null : childData.Model.transform; } }