Exemplo n.º 1
0
        private void BonesTreeViews_ModelDropped(object sender, BrightIdeasSoftware.ModelDropEventArgs e)
        {
            void UnlinkBone(BoneLinkNode node)
            {
                node.ParentID = string.Empty;
                var parentBone = BoneNodes.FirstOrDefault(x => x.ChildBones.Contains(node));

                if (parentBone != null)
                {
                    parentBone.ChildBones.Remove(node);
                    HierarchyTreeView.RefreshObject(parentBone);
                }
            }

            var draggedBones = e.SourceModels.OfType <BoneLinkNode>().ToList();

            if (sender == UnassignedTreeView)
            {
                var allBones = draggedBones.SelectMany(x => x.GetHierarchy(true)).Distinct().ToList();

                foreach (BoneLinkNode node in allBones)
                {
                    //node.ParentID = string.Empty;
                    node.UnlinkChildrens();
                }

                foreach (BoneLinkNode node in draggedBones)
                {
                    UnlinkBone(node);
                }

                UnassignedTreeView.AddObjects(allBones);
            }
            else if (sender == HierarchyTreeView)
            {
                if (RootBone == null)
                {
                    RootBone = e.SourceModels[0] as BoneLinkNode;
                    HierarchyTreeView.AddObject(RootBone);
                }
                else if (e.TargetModel is BoneLinkNode targetBone)
                {
                    foreach (BoneLinkNode node in draggedBones)
                    {
                        if (string.IsNullOrEmpty(node.ParentID))
                        {
                            UnassignedTreeView.RemoveObject(node);
                        }

                        UnlinkBone(node);
                        targetBone.ChildBones.Add(node);
                        node.ParentID = targetBone.ID;
                    }
                    HierarchyTreeView.RefreshObject(targetBone);
                }
            }
        }
Exemplo n.º 2
0
        private void LoadBoneNodes()
        {
            BoneNodes = new List <BoneLinkNode>();

            foreach (var bone in Bones)
            {
                var parentBone = Bones.FirstOrDefault(x => x.BoneID == bone.TargetBoneID);

                BoneNodes.Add(new BoneLinkNode()
                {
                    ID       = bone.ID,
                    Name     = bone.Name,
                    ParentID = parentBone?.ID,
                    BoneID   = bone.BoneID
                });
            }


            var remainingBones = BoneNodes.ToList();

            void LinkChildBones(BoneLinkNode parent)
            {
                var childs = remainingBones.Where(x => x.ParentID == parent.ID).ToList();

                if (!childs.Any())
                {
                    return;
                }
                parent.ChildBones.AddRange(childs);
                remainingBones.RemoveAll(x => x.ParentID == parent.ID);
                foreach (var child in childs)
                {
                    LinkChildBones(child);
                }
            }

            RootBone = BoneNodes.FirstOrDefault(b => b.BoneID == 0);

            if (RootBone != null)
            {
                remainingBones.Remove(RootBone);

                LinkChildBones(RootBone);
                HierarchyTreeView.AddObject(RootBone);
            }

            if (remainingBones.Any())
            {
                UnassignedTreeView.SetObjects(remainingBones);
            }

            HierarchyTreeView.ExpandAll();
        }