Beispiel #1
0
        private static void CloneHierarchy(BoneManager manager, RigResource.RigResource.Bone bone, RigResource.RigResource.Bone dest)
        {
            List <RigResource.RigResource.Bone> descendants = manager.GetDescendants(bone).ToList();
            var clones = new List <RigResource.RigResource.Bone>();
            var map    = new Dictionary <RigResource.RigResource.Bone, RigResource.RigResource.Bone>();
            var root   = new RigResource.RigResource.Bone(0, null, bone);

            map[bone] = root;
            manager.AddBone(root, dest);

            foreach (RigResource.RigResource.Bone descendant in descendants)
            {
                var clone = new RigResource.RigResource.Bone(0, null, descendant);
                map[descendant] = clone;
                clones.Add(clone);
                manager.AddBone(clone, manager.GetParent(descendant));
            }
            foreach (RigResource.RigResource.Bone c in clones)
            {
                RigResource.RigResource.Bone parent = manager.GetParent(c);
                if (map.ContainsKey(parent))
                {
                    manager.SetParent(c, map[parent]);
                }
            }
        }