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); } }
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(); } }