Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        public void AddChild(int nodeID, Type childType)
        {
            NodeParam param  = CreateNodeParam(childType);
            NodeParam parent = _id2Node[nodeID];

            param.SetParent(parent);
            InitNodeOutputAvailable();
        }
Example #4
0
        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);
        }