private void GizmoRotateEvent(Actor transformable, TransformationEventArgs e) { gizmo.RotationHelper(transformable, e); }
private void GizmoScaleEvent(Actor transformable, TransformationEventArgs e) { Vector3 delta = (Vector3)e.Value; if (gizmo.ActiveMode == GizmoMode.UniformScale) transformable.Scale *= 1 + ((delta.X + delta.Y + delta.Z) / 3); else transformable.Scale += delta; transformable.Scale = Vector3.Clamp(transformable.Scale, Vector3.Zero, transformable.Scale); }
/// <summary> /// Helper function to apply rotation to objects using the built-in method. /// </summary> public void RotationHelper(Actor entity, TransformationEventArgs e) { Vector3 pos = _position; if (ActivePivot == PivotType.ObjectCenter) pos = entity.Position; Matrix localRot = Matrix.Identity; localRot.Forward = entity.Forward; localRot.Up = entity.Up; localRot.Right = Vector3.Cross(entity.Forward, entity.Up); localRot.Right.Normalize(); localRot.Translation = entity.Position - pos; Matrix newRot = localRot * (Matrix)e.Value; entity.Forward = newRot.Forward; entity.Up = newRot.Up; entity.Position = newRot.Translation + pos; }