Exemplo n.º 1
0
        public void DeleteBone(RigResource.RigResource.Bone b, bool recursive)
        {
            if (b != null && mBones.Contains(b))
            {
                int deletedIndex = IndexOfBone(mBones, b);
                RigResource.RigResource.Bone parent = b.ParentBoneIndex > -1 ? mBones[b.ParentBoneIndex] : null;

                mBones.Remove(b);
                OnBoneRemoved(this, new BoneActionEventArgs(b));
                var trash = new List <RigResource.RigResource.Bone>();
                for (int i = 0; i < mBones.Count; i++)
                {
                    if (mBones[i].ParentBoneIndex > deletedIndex)
                    {
                        mBones[i].ParentBoneIndex--;
                    }
                    else if (mBones[i].ParentBoneIndex == deletedIndex)
                    {
                        if (recursive)
                        {
                            trash.Add(mBones[i]);
                        }
                    }
                }
                foreach (RigResource.RigResource.Bone item in trash)
                {
                    DeleteBone(item, recursive);
                }
            }
        }
Exemplo n.º 2
0
 public BoneViewModel(RigEditorViewModel rig, IHaveBones parent, RigResource.RigResource.Bone bone, BoneManager manager)
 {
     if (rig == null)
     {
         throw new ArgumentNullException("rig");
     }
     if (bone == null)
     {
         throw new ArgumentNullException("bone");
     }
     if (manager == null)
     {
         throw new ArgumentNullException("manager");
     }
     mRig      = rig;
     mChildren = new ObservableCollection <BoneViewModel>();
     mParent   = parent;
     mBone     = bone;
     mManager  = manager;
     foreach (RigResource.RigResource.Bone b in manager.GetChildren(mBone))
     {
         mChildren.Add(new BoneViewModel(mRig, this, b, mManager));
     }
     mRotation                  = new EulerAngle(new Quaternion(bone.Orientation.A, bone.Orientation.B, bone.Orientation.C, bone.Orientation.D));
     manager.BoneAdded         += OnBoneAdded;
     manager.BoneRemoved       += OnBoneRemoved;
     manager.BoneParentChanged += OnBoneParentChanged;
     mSetOppositeCommand        = new UserCommand <BoneViewModel>(x => true, ExecuteSetOpposite);
 }
Exemplo n.º 3
0
        private static Matrix GetAbsoluteTransform(BoneManager manager, RigResource.RigResource.Bone b)
        {
            var transforms = new List <Matrix>();

            while (b != null)
            {
                var    q = new Quaternion(b.Orientation.A, b.Orientation.B, b.Orientation.C, b.Orientation.D);
                var    p = new Vector3(b.Position.X, b.Position.Y, b.Position.Z);
                var    s = new Vector3(b.Scaling.X, b.Scaling.Y, b.Scaling.Z);
                Matrix t = Matrix.CreateTransformMatrix(q, s, p);
                transforms.Add(t);
                b = manager.GetParent(b);
            }
            transforms.Reverse();
            Matrix absolute = transforms[0];

            transforms.RemoveAt(0);
            while (transforms.Count > 0)
            {
                Matrix m = transforms[0];
                transforms.RemoveAt(0);
                absolute = absolute * m;
            }
            return(absolute);
        }
Exemplo n.º 4
0
        public IEnumerable <RigResource.RigResource.Bone> GetDescendants(RigResource.RigResource.Bone b)
        {
            var list = new List <RigResource.RigResource.Bone>();

            GetDescendantsRecursive(b, list);
            return(list);
        }
Exemplo n.º 5
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]);
                }
            }
        }
Exemplo n.º 6
0
 public void SetName(RigResource.RigResource.Bone b, string name)
 {
     if (b.Name != name)
     {
         b.Name = name;
         OnBoneUpdated(this, new BoneActionEventArgs(b));
     }
 }
Exemplo n.º 7
0
 public void SetParent(RigResource.RigResource.Bone child, RigResource.RigResource.Bone parent)
 {
     if (child.ParentBoneIndex != IndexOfBone(mBones, parent))
     {
         child.ParentBoneIndex = parent == null ? -1 : IndexOfBone(mBones, parent);
         OnBoneParentChanged(this, new BoneActionEventArgs(child));
     }
 }
Exemplo n.º 8
0
 private void OnBoneAdded(BoneManager sender, BoneActionEventArgs e)
 {
     RigResource.RigResource.Bone parent = sender.GetParent(e.Bone);
     if (parent != null && parent.Equals(mBone))
     {
         mChildren.Add(new BoneViewModel(mRig, this, e.Bone, sender));
     }
 }
Exemplo n.º 9
0
 public int IndexOfBone(IList <RigResource.RigResource.Bone> bones, RigResource.RigResource.Bone bone)
 {
     for (int i = 0; i < bones.Count; i++)
     {
         if (bone == bones[i])
         {
             return(i);
         }
     }
     return(-1);
 }
Exemplo n.º 10
0
 public RigResource.RigResource.Bone GetParent(RigResource.RigResource.Bone b)
 {
     if (b.ParentBoneIndex == -1)
     {
         return(null);
     }
     else
     {
         return(mBones[b.ParentBoneIndex]);
     }
 }
Exemplo n.º 11
0
        public IEnumerable <RigResource.RigResource.Bone> GetChildren(RigResource.RigResource.Bone b)
        {
            int ix = IndexOfBone(mBones, b);

            for (int i = 0; i < mBones.Count; i++)
            {
                if (mBones[i].ParentBoneIndex == ix)
                {
                    yield return(mBones[i]);
                }
            }
        }
Exemplo n.º 12
0
 private void OnBoneRemoved(BoneManager sender, BoneActionEventArgs e)
 {
     RigResource.RigResource.Bone parent = sender.GetParent(e.Bone);
     if (parent != null && parent.Equals(mBone))
     {
         BoneViewModel child = mChildren.FirstOrDefault(x => x.Bone == e.Bone);
         if (child != null)
         {
             mChildren.Remove(child);
         }
     }
 }
Exemplo n.º 13
0
 private void OnBoneRemoved(BoneManager sender, BoneActionEventArgs e)
 {
     RigResource.RigResource.Bone parent = sender.GetParent(e.Bone);
     if (parent == null)
     {
         BoneViewModel view = mChildren.FirstOrDefault(x => x.Bone == e.Bone);
         if (view != null)
         {
             mChildren.Remove(view);
         }
     }
 }
Exemplo n.º 14
0
        private void GetDescendantsRecursive(RigResource.RigResource.Bone b, IList <RigResource.RigResource.Bone> list)
        {
            int ix = IndexOfBone(mBones, b);

            for (int i = 0; i < mBones.Count; i++)
            {
                if (mBones[i].ParentBoneIndex == ix)
                {
                    list.Add(mBones[i]);
                    GetDescendantsRecursive(mBones[i], list);
                }
            }
        }
Exemplo n.º 15
0
        private static void GetInfo(BoneManager manager, RigResource.RigResource.Bone bone, StringBuilder sb)
        {
            Matrix t  = GetAbsoluteTransform(manager, bone);
            Matrix ti = t.GetInverse();

            sb.AppendLine("============================");
            sb.AppendFormat("Name:\t{0}\r\n", bone.Name);
            sb.AppendFormat("Hashed:\t0x{0:X8}\r\n", FNV32.GetHash(bone.Name));
            sb.AppendLine("Absolute Transform (RSLT):");
            sb.AppendLine(t.TransposedString());
            sb.AppendLine("Absolute Transform Inverse (SKIN):");
            sb.AppendLine(ti.ToString());
        }
Exemplo n.º 16
0
 private void OnBoneAdded(BoneManager sender, BoneActionEventArgs e)
 {
     RigResource.RigResource.Bone parent = sender.GetParent(e.Bone);
     if (parent == null)
     {
         BoneViewModel view = mChildren.FirstOrDefault(x => x.Bone == e.Bone);
         if (view == null)
         {
             var vm = new BoneViewModel(this, this, e.Bone, sender);
             vm.Opposite = mManager.Bones.IndexOf(e.Bone);
             mChildren.Add(vm);
         }
     }
 }
Exemplo n.º 17
0
        public BonePicker(Stream s)
            : this()
        {
            s.Position = 0L;
            mRig       = new RigResource.RigResource(0, s);
            RigResource.RigResource.BoneList bones = mRig.Bones;

            clbBones.ItemCheck += clbBones_ItemCheck;
            for (int i = 0; i < bones.Count; i++)
            {
                RigResource.RigResource.Bone b = bones[i];
                clbBones.Items.Add(new BoneListItem(b));
                if (!b.Name.Contains("_slot") && !b.Name.Contains("_compress"))
                {
                    clbBones.SetItemChecked(i, true);
                }
            }
        }
Exemplo n.º 18
0
        public BoneExportViewModel(RigResource.RigResource.Bone bone, BoneManager manager)
        {
            mIsChecked = bone.Name.Contains("slot");
            Bone       = bone;
            mChildren  = manager.GetChildren(bone).Select(x => new BoneExportViewModel(x, manager));
//            if (bone.Name.Contains("ROOT"))
//            {
//                Thread t = null;
//                t = new Thread(
//                    delegate
//                        {
//                            while (t.IsAlive)
//                            {
//                                Thread.Sleep(new Random().Next(10000));
//                                IsChecked = !IsChecked;
//                            }
//                        });
//                t.Start();
//            }
        }
Exemplo n.º 19
0
        private void OnBoneParentChanged(BoneManager sender, BoneActionEventArgs e)
        {
            RigResource.RigResource.Bone parent = sender.GetParent(e.Bone);
            BoneViewModel child = mChildren.FirstOrDefault(x => x.Bone == e.Bone);

            if (parent == null)
            {
                if (child == null)
                {
                    mChildren.Add(new BoneViewModel(this, this, e.Bone, sender));
                }
            }
            else
            {
                if (child != null)
                {
                    mChildren.Remove(child);
                }
            }
        }
Exemplo n.º 20
0
 public BoneViewModel(RigEditorViewModel rig, IHaveBones parent, RigResource.RigResource.Bone bone, BoneManager manager)
 {
     if (rig == null) throw new ArgumentNullException("rig");
     if (bone == null) throw new ArgumentNullException("bone");
     if (manager == null) throw new ArgumentNullException("manager");
     mRig = rig;
     mChildren = new ObservableCollection<BoneViewModel>();
     mParent = parent;
     mBone = bone;
     mManager = manager;
     foreach (RigResource.RigResource.Bone b in manager.GetChildren(mBone))
     {
         mChildren.Add(new BoneViewModel(mRig, this, b, mManager));
     }
     mRotation = new EulerAngle(new Quaternion(bone.Orientation.A, bone.Orientation.B, bone.Orientation.C, bone.Orientation.D));
     manager.BoneAdded += OnBoneAdded;
     manager.BoneRemoved += OnBoneRemoved;
     manager.BoneParentChanged += OnBoneParentChanged;
     mSetOppositeCommand = new UserCommand<BoneViewModel>(x => true, ExecuteSetOpposite);
 }
Exemplo n.º 21
0
        private void btnOk_Click(object sender, EventArgs e)
        {
            try
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
                RigResource.RigResource grd = mRig;

                saveFileDialog1.FileName = "rigfile.txt";
                saveFileDialog1.Filter   = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
                DialogResult result = saveFileDialog1.ShowDialog();
                if (result == DialogResult.OK)
                {
                    var sb = new StringBuilder();
                    for (int i = 0; i < clbBones.Items.Count; i++)
                    {
                        if (clbBones.GetItemChecked(i))
                        {
                            RigResource.RigResource.Bone bone = ((BoneListItem)clbBones.Items[i]).Bone;
                            bool flip = bone.ParentBoneIndex == -1;
                            sb.AppendFormat("\"{0}\" \"{1}\" {2} {3:F10} {4:F10} {5:F10}\r\n", cbHashBones.Checked ? String.Format("0x{0:X8}", FNV32.GetHash(bone.Name)) : bone.Name,
                                            bone.ParentBoneIndex == -1
                                                ? "unparented"
                                                : cbHashBones.Checked ? String.Format("0x{0:X8}", FNV32.GetHash(grd.Bones[bone.ParentBoneIndex].Name)) : grd.Bones[bone.ParentBoneIndex].Name,
                                            bone.Position.X,
                                            bone.Position.Y,
                                            bone.Position.Z,
                                            ToEuler(bone.Orientation, flip));
                        }
                    }
                    using (var s = new StreamWriter(File.Create(saveFileDialog1.FileName))) s.Write(sb.ToString());
                }
            }
            finally
            {
                Close();
            }
        }
Exemplo n.º 22
0
 public BoneListItem(RigResource.RigResource.Bone bone)
 {
     Bone = bone;
 }
Exemplo n.º 23
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]);
                }
            }
        }
Exemplo n.º 24
0
 public void AddBone(RigResource.RigResource.Bone child, RigResource.RigResource.Bone parent)
 {
     Bones.Add(child);
     OnBoneAdded(this, new BoneActionEventArgs(child));
     SetParent(child, parent);
 }
Exemplo n.º 25
0
 public BoneActionEventArgs(RigResource.RigResource.Bone bone)
 {
     mBone = bone;
 }
Exemplo n.º 26
0
 public BoneActionEventArgs(RigResource.RigResource.Bone bone)
 {
     mBone = bone;
 }
Exemplo n.º 27
0
 public void UpdateBone(RigResource.RigResource.Bone b)
 {
     OnBoneUpdated(this, new BoneActionEventArgs(b));
 }