Пример #1
0
        public void FusionNodes(CGNode Root, List <CGNode> Target)
        {
            List <CGNode>     deletes           = new List <CGNode>();
            List <CGRelation> relations_deletes = new List <CGRelation>();
            List <CGRelation> relations_news    = new List <CGRelation>();

            foreach (var node in Target)
            {
                if (node.id == Root.id)
                {
                    continue;
                }

                this.NumberOfFusions += 1;
                Root.AddFusionNode(node);

                deletes.Add(node);
                var inrelations = (from c in this.Relations where c.Tail == node.id select c).ToList();
                foreach (var item in inrelations)
                {
                    var n = item.Clone();
                    n.Tail = Root.id;
                    relations_deletes.Add(item);
                    if (deletes.Where(c => c.id == n.Head).Count() == 0)
                    {
                        relations_news.Add(n);
                    }
                }
                var outrelations = (from c in this.Relations where c.Head == node.id select c).ToList();
                foreach (var item in outrelations)
                {
                    var n = item.Clone();
                    n.Head = Root.id;
                    relations_deletes.Add(item);
                    if (deletes.Where(c => c.id == n.Tail).Count() == 0)
                    {
                        relations_news.Add(n);
                    }
                }
                foreach (var item in relations_deletes)
                {
                    this.RemoveRelation(item);
                }
                foreach (var item in relations_news)
                {
                    this.AddRelation(item);
                }
                foreach (var item in deletes)
                {
                    this.RemoveNode(item);
                }
            }
        }