public override void OnMouseMove(MouseEventArgs mouseEvent) { base.OnMouseMove(mouseEvent); if (trackBallController.CurrentTrackingType != TrackBallController.MouseDownType.None) { Vector2 lastMouseMovePoint; lastMouseMovePoint.x = mouseEvent.X; lastMouseMovePoint.y = mouseEvent.Y; trackBallController.OnMouseMove(lastMouseMovePoint); needRedraw = true; Invalidate(); } if (Focused && MouseCaptured) { lastMouseMovePoint.x = mouseEvent.X; lastMouseMovePoint.y = mouseEvent.Y; cameraData = cameraDataAtStartOfMouseTracking; //cameraData.Rotate(trackBallRotation); //OrientCamera(); } lastMouseMovePoint.x = mouseEvent.X; lastMouseMovePoint.y = mouseEvent.Y; Ray rayAtPoint = scene.camera.GetRay(lastMouseMovePoint.x, lastMouseMovePoint.y); IntersectInfo info = raytracer.TestIntersection(rayAtPoint, scene); if (info != null) { rayAtPoint.maxDistanceToConsider = double.PositiveInfinity; mouseOverColor = raytracer.CalculateColor(rayAtPoint, scene); } }
public override void OnMouseDown(MouseEventArgs mouseEvent) { base.OnMouseDown(mouseEvent); Vector2 lastMouseMovePoint; lastMouseMovePoint.x = mouseEvent.X; lastMouseMovePoint.y = mouseEvent.Y; if (Focused && MouseCaptured) { if (trackBallController.CurrentTrackingType == TrackBallController.MouseDownType.None) { if (Focused && MouseCaptured && mouseEvent.Button == MouseButtons.Left) { trackBallController.OnMouseDown(lastMouseMovePoint, Matrix4X4.Identity); } else if (mouseEvent.Button == MouseButtons.Middle) { trackBallController.OnMouseDown(lastMouseMovePoint, Matrix4X4.Identity, TrackBallController.MouseDownType.Translation); } } if (MouseCaptured) { lastMouseMovePoint.x = mouseEvent.X; lastMouseMovePoint.y = mouseEvent.Y; cameraDataAtStartOfMouseTracking = cameraData; cameraDataAtStartOfMouseTracking.cameraMatrix = scene.camera.axisToWorld; Ray rayAtPoint = scene.camera.GetRay(lastMouseMovePoint.x, lastMouseMovePoint.y); IntersectInfo info = raytracer.TestIntersection(rayAtPoint, scene); if (info != null) { focusedObject = (BaseShape)info.closestHitObject; if (focusedObject != null && mouseEvent.Clicks == 2) { cameraData.lookAtPoint = focusedObject.GetAxisAlignedBoundingBox().Center; OrientCamera(); } } } needRedraw = true; Invalidate(); } }