Ejemplo n.º 1
0
        private void TransformEventHandler(Transformable sender, TransformEventArgs args)
        {
            ObjectModel.ComponentKey transformableKey;
            _transformableKeys.TryGetValue(sender, out transformableKey);
            if (transformableKey == null)
            {
                throw new InvalidTransformEventHandlerException();
            }

            List <ObjectModel.ComponentKey> initialPath = SealedObject.HierarchyPack.ComponentMap[_transformableKeys[sender]];
            TransformableObject             initialComp = SealedObject.Object;
            Matrix4 globalTransform = new Matrix4()
            {
                M11 = 1, M22 = 1, M33 = 1, M44 = 1
            };

            for (int i = 0; i < initialPath.Count - 1; i++)
            {
                globalTransform = initialComp.GetTransform() * globalTransform;
                initialComp     = initialComp.GetSubComp(initialPath[i]);
            }
            if (initialPath.Count > 0)
            {
                globalTransform = initialComp.GetTransform() * globalTransform;
                initialComp     = initialComp.GetSubComp(initialPath.Last());
                _identities[initialPath[initialPath.Count - 1]].SetJointTransform(initialPath.Last(), initialComp.GetTransform());
            }

            Dictionary <TransformableObject, Matrix4> components = new Dictionary <TransformableObject, Matrix4>();

            components.Add(initialComp, initialComp.GetTransform() * globalTransform);

            KeyValuePair <TransformableObject, Matrix4> currComp;
            Dictionary <ObjectModel.ComponentKey, TransformableObject> subComps;

            while (components.Count > 0)
            {
                currComp = components.First();
                components.Remove(currComp.Key);
                if (currComp.Key.GetStructType() == ObjectModel.StructType.Hierarchical)
                {
                    subComps = currComp.Key.GetSubComps();
                    foreach (KeyValuePair <ObjectModel.ComponentKey, TransformableObject> comp in subComps)
                    {
                        components.Add(comp.Value, comp.Value.GetTransform() * currComp.Value);
                    }
                }
                _identities[_transformableKeys[currComp.Key]].SetTransform(currComp.Value);
            }
        }
Ejemplo n.º 2
0
        public void OnKeyPress(string key)
        {
            if (key.Equals("m"))
            {
                if (activeTransform == TransformEventArgs.TransformEvent.Translation)
                {
                    activeTransform = TransformEventArgs.TransformEvent.Rotation;
                }
                else
                {
                    activeTransform = TransformEventArgs.TransformEvent.Translation;
                }
            }
            else if (key.Equals("b"))
            {
                ub = !ub;
            }

            if (key.Equals("1"))
            {
                focusComp = SpiderHiearchyPackage.body;
            }
            else if (ub)
            {
                if (key.Equals("2"))
                {
                    focusComp = SpiderHiearchyPackage.uleg1;
                }
                else if (key.Equals("3"))
                {
                    focusComp = SpiderHiearchyPackage.uleg2;
                }
                else if (key.Equals("4"))
                {
                    focusComp = SpiderHiearchyPackage.uleg3;
                }
                else if (key.Equals("5"))
                {
                    focusComp = SpiderHiearchyPackage.uleg4;
                }
                else if (key.Equals("6"))
                {
                    focusComp = SpiderHiearchyPackage.uleg5;
                }
                else if (key.Equals("7"))
                {
                    focusComp = SpiderHiearchyPackage.uleg6;
                }
                else if (key.Equals("8"))
                {
                    focusComp = SpiderHiearchyPackage.uleg7;
                }
                else if (key.Equals("9"))
                {
                    focusComp = SpiderHiearchyPackage.uleg8;
                }
            }
            else
            {
                if (key.Equals("2"))
                {
                    focusComp = SpiderHiearchyPackage.bleg1;
                }
                else if (key.Equals("3"))
                {
                    focusComp = SpiderHiearchyPackage.bleg2;
                }
                else if (key.Equals("4"))
                {
                    focusComp = SpiderHiearchyPackage.bleg3;
                }
                else if (key.Equals("5"))
                {
                    focusComp = SpiderHiearchyPackage.bleg4;
                }
                else if (key.Equals("6"))
                {
                    focusComp = SpiderHiearchyPackage.bleg5;
                }
                else if (key.Equals("7"))
                {
                    focusComp = SpiderHiearchyPackage.bleg6;
                }
                else if (key.Equals("8"))
                {
                    focusComp = SpiderHiearchyPackage.bleg7;
                }
                else if (key.Equals("9"))
                {
                    focusComp = SpiderHiearchyPackage.bleg8;
                }
            }

            TransformableObject transform = transformableSpiderObj.GetComp(focusComp);

            if (key.Equals("q"))
            {
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(0, 0, 1), 5.0f);
                }
                else
                {
                    transform.Translate(new Vector(0, 0, 0.1f));
                }
                transform.Transform();
            }
            else if (key.Equals("e"))
            {
                if (focusComp != SpiderHiearchyPackage.body)
                {
                    transform = transform.GetSubComp(focusComp);
                }
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(0, 0, 1), -5.0f);
                }
                else
                {
                    transform.Translate(new Vector(0, 0, -0.1f));
                }
                transform.Transform();
            }
            else if (key.Equals("w"))
            {
                if (focusComp != SpiderHiearchyPackage.body)
                {
                    transform = transform.GetSubComp(focusComp);
                }
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(0, 1, 0), 5.0f);
                }
                else
                {
                    transform.Translate(new Vector(0, 0.1f, 0));
                }
                transform.Transform();
            }
            else if (key.Equals("s"))
            {
                if (focusComp != SpiderHiearchyPackage.body)
                {
                    transform = transform.GetSubComp(focusComp);
                }
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(0, 1, 0), -5.0f);
                }
                else
                {
                    transform.Translate(new Vector(0, -0.1f, 0));
                }
                transform.Transform();
            }
            else if (key.Equals("a"))
            {
                if (focusComp != SpiderHiearchyPackage.body)
                {
                    transform = transform.GetSubComp(focusComp);
                }
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(1, 0, 0), 5.0f);
                }
                else
                {
                    transform.Translate(new Vector(0.1f, 0, 0));
                }
                transform.Transform();
            }
            else if (key.Equals("d"))
            {
                if (focusComp != SpiderHiearchyPackage.body)
                {
                    transform = transform.GetSubComp(focusComp);
                }
                if (activeTransform == TransformEventArgs.TransformEvent.Rotation)
                {
                    transform.Rotate(new Vector(1, 0, 0), -5.0f);
                }
                else
                {
                    transform.Translate(new Vector(-0.1f, 0, 0));
                }
                transform.Transform();
            }
        }