/// <summary> /// Fired when the containers mouse is moving /// </summary> private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { if (internaldragging) { // recompute nowQuat Vector3 vCur = ScreenToVector(e.X, e.Y); Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); internalnowQuat = internaldownQuat; internalnowQuat = Quaternion.Multiply(internalnowQuat, qAxisToAxis); internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); } else { internalrotationDelta = Matrix.Identity; } internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); internaldragging = true; } if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { // Normalize based on size of window and bounding sphere radius float fDeltaX = (saveMouseX - e.X) * internalradiusTranslation / internalWidth; float fDeltaY = (saveMouseY - e.Y) * internalradiusTranslation / internalHeight; if (e.Button == System.Windows.Forms.MouseButtons.Right) { internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); } if (e.Button == System.Windows.Forms.MouseButtons.Middle) { internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); } // Store mouse coordinate saveMouseX = e.X; saveMouseY = e.Y; } }