private void RotateMe(MyVector localPos, MyVector rotateHandle, MyQuaternion rotation2D, MyVector rotateAround3D) { // Get Current Angle double curRadians = MyVector.GetAngleBetweenVectors(rotateHandle, rotation2D.GetRotatedVector(rotateHandle, true)); // Rotate the 2D Handle MyQuaternion newRotationX; rotateHandle.GetAngleAroundAxis(out newRotationX, localPos); rotation2D.StoreNewValues(newRotationX); // Get New Angle double newRadians = MyVector.GetAngleBetweenVectors(rotateHandle, rotation2D.GetRotatedVector(rotateHandle, true)); double rotateRadians = newRadians - curRadians; if (rotation2D.GetRotatedVector(rotateHandle, true).Y < 0) rotateRadians *= -1; // This statement is cheating. I'm using the fact that the rotate handles all lie on the XY plane // Apply the difference to the 3D object (me) this.RotateAroundAxis(this.Rotation.GetRotatedVector(rotateAround3D, true), rotateRadians); }