// bClearRelatedNodes indicates whether remove the related nodes // or just remove the input one. public void RemoveNode(Node node, bool bClearRelatedNodes) { if (!IsExist(node)) return; if(!bClearRelatedNodes) { m_NodeList.Remove(node); } else { FRList<Node> deletedNodeList = new FRList<Node>(); FRList<Node> dieNominateList = new FRList<Node>(); deletedNodeList.Add(node); dieNominateList.Add(node); while (dieNominateList.Count > 0) { Node tmpNode = dieNominateList[0]; dieNominateList.Remove(tmpNode); if (deletedNodeList.Contains(tmpNode) || tmpNode.IsDeletable(deletedNodeList)) { if (!deletedNodeList.Contains(tmpNode)) deletedNodeList.Add(tmpNode); FRList<Node> nodeNominates = new FRList<Node>(); tmpNode.GetDeleteNominates(nodeNominates); foreach (Node item in nodeNominates) { if (!dieNominateList.Contains(item)) dieNominateList.Add(item); } } } // Delete the nodes in the data model foreach (Node delNode in deletedNodeList) m_NodeList.Remove(delNode); } m_bIsGraphDirty = true; }