public bool CopyChild(NodeParam newRoot, NodeParam target) { NodeParam rootParent = newRoot.Parent; NodeClassifyType rootType = newRoot.NodeClassType; if (rootType == NodeClassifyType.Action || rootType == NodeClassifyType.Condition || rootType == NodeClassifyType.DataTransform) { return(false); } while (rootParent != null) { if (rootParent == target) { return(false); } rootParent = rootParent.Parent; } NodeParam newNode = NodeParamClone(target); newNode.SetParent(newRoot); InitNodeOutputAvailable(); return(true); }
private NodeParam NodeParamClone(NodeParam src) { NodeParam p = new NodeParam() { NodeType = src.NodeType, NodeDesc = src.NodeDesc, NodeClassType = src.NodeClassType, Parent = src.Parent, NodeID = ++_maxID, SrcTreeID = _treeID }; foreach (ParamInfo pi in src.Fields) { p.Fields.Add(pi.Clone()); } foreach (ParamInfoOutput pi in src.Outputs) { p.Outputs.Add(pi.Clone(p)); } foreach (ParamInfoInput input in src.Inputs) { p.Inputs.Add(input.Clone()); } _id2Node.Add(p.NodeID, p); foreach (NodeParam child in src.ChildrenList) { NodeParam cloneChild = NodeParamClone(child); cloneChild.SetParent(p); } return(p); }
public void AddChild(int nodeID, Type childType) { NodeParam param = CreateNodeParam(childType); NodeParam parent = _id2Node[nodeID]; param.SetParent(parent); InitNodeOutputAvailable(); }
private void RemoveNode(int id) { NodeParam node = _id2Node[id]; Queue <NodeParam> queue = new Queue <NodeParam>(); queue.Enqueue(node); while (queue.Count > 0) { NodeParam n = queue.Dequeue(); n.SetParent(null); _id2Node.Remove(n.NodeID); foreach (NodeParam child in n.ChildrenList) { queue.Enqueue(child); } } node.SetParent(null); }