public override void OnMouseUp(MouseEventArgs mouseEvent)
        {
            trackballTumbleWidget.DrawRotationHelperCircle = false;
            Invalidate();

            int              volumeHitIndex;
            Ray              ray = trackballTumbleWidget.GetRayFromScreen(mouseEvent.Position);
            IntersectInfo    info;
            bool             anyInteractionVolumeHit = FindInteractionVolumeHit(ray, out volumeHitIndex, out info);
            MouseEvent3DArgs mouseEvent3D            = new MouseEvent3DArgs(mouseEvent, ray, info);

            if (MouseDownOnInteractionVolume && volumeIndexWithMouseDown != -1)
            {
                interactionVolumes[volumeIndexWithMouseDown].OnMouseUp(mouseEvent3D);
                SelectedInteractionVolume = null;

                volumeIndexWithMouseDown = -1;
            }
            else
            {
                volumeIndexWithMouseDown = -1;

                if (anyInteractionVolumeHit)
                {
                    interactionVolumes[volumeHitIndex].OnMouseUp(mouseEvent3D);
                }
                SelectedInteractionVolume = null;
            }

            base.OnMouseUp(mouseEvent);
        }
        public override void OnMouseDown(MouseEventArgs mouseEvent)
        {
            base.OnMouseDown(mouseEvent);

            if (trackballTumbleWidget.MouseCaptured)
            {
                if (trackballTumbleWidget.TransformState == TrackBallController.MouseDownType.Rotation || mouseEvent.Button == MouseButtons.Right)
                {
                    trackballTumbleWidget.DrawRotationHelperCircle = true;
                }
            }

            int           volumeHitIndex;
            Ray           ray = trackballTumbleWidget.GetRayFromScreen(mouseEvent.Position);
            IntersectInfo info;

            if (FindInteractionVolumeHit(ray, out volumeHitIndex, out info))
            {
                MouseEvent3DArgs mouseEvent3D = new MouseEvent3DArgs(mouseEvent, ray, info);
                volumeIndexWithMouseDown = volumeHitIndex;
                interactionVolumes[volumeHitIndex].OnMouseDown(mouseEvent3D);
                SelectedInteractionVolume = interactionVolumes[volumeHitIndex];
            }
            else
            {
                SelectedInteractionVolume = null;
            }
        }