Example #1
0
        private void GizmoRotate(GizmoMode mode, float newAngle)
        {
            if (_control != null)
            {
                var model     = _control.Model;
                var animation = _editor.CurrentAnim;
                if (animation == null || _control.SelectedMesh == null)
                {
                    return;
                }

                var meshIndex      = model.Meshes.IndexOf(_control.SelectedMesh);
                var rotationVector = _editor.CurrentKeyFrame.Rotations[meshIndex];
                var delta          = 0f;
                var axis           = Vector3.Zero;

                switch (mode)
                {
                case GizmoMode.RotateX: delta = newAngle - rotationVector.X; axis = Vector3.UnitX; break;

                case GizmoMode.RotateY: delta = newAngle - rotationVector.Y; axis = Vector3.UnitY; break;

                case GizmoMode.RotateZ: delta = newAngle - rotationVector.Z; axis = Vector3.UnitZ; break;
                }

                var quat = _editor.CurrentKeyFrame.Quaternions[meshIndex] * Quaternion.CreateFromAxisAngle(axis, delta);
                _editor.UpdateTransform(meshIndex, MathC.QuaternionToEuler(quat), _editor.CurrentKeyFrame.Translations[0]);

                _control.Model.BuildAnimationPose(_editor.CurrentKeyFrame);
                _control.Invalidate();
            }
        }