Пример #1
0
 public void OnLeftMousePressed(Vector2 mousePos)
 {
     if (Keyboard.IsKeyDown(Key.A))
     {
         dragMode = MouseDragMode.CameraRadiusChange;
     }
     else if (Keyboard.IsKeyDown(Key.LeftCtrl))
     {
         dragMode = MouseDragMode.CameraRotate;
     }
     else if (Keyboard.IsKeyDown(Key.LeftAlt))
     {
         dragMode = MouseDragMode.CameraMove;
     }
     else if (Keyboard.IsKeyDown(Key.C))
     {
         dragMode = MouseDragMode.CursorMove;
     }
     else if (Keyboard.IsKeyDown(Key.S))
     {
         dragMode          = MouseDragMode.SelectPoints;
         dragStartPosition = dragActualPosition = MousePosition;
     }
     else // dragging point
     {
         CatPoint clicked;
         if (SelectClickedPoint(mousePos, out clicked))
         {
             dragMode     = MouseDragMode.PointMove;
             draggedPoint = clicked;
             pointPlane   = new Plane(draggedPoint.Position, (draggedPoint.Position - ActiveCamera.CameraPosition).Normalized());
         }
     }
 }
Пример #2
0
        public void OnLeftMouseReleased()
        {
            if (dragMode == MouseDragMode.SelectPoints)
            {
                var dragEnd = MousePosition;
                var minX    = System.Math.Min(dragEnd.X, dragStartPosition.X) / ScreenSize.X;
                var maxX    = System.Math.Max(dragEnd.X, dragStartPosition.X) / ScreenSize.X;
                var minY    = System.Math.Min(dragEnd.Y, dragStartPosition.Y) / ScreenSize.Y;
                var maxY    = System.Math.Max(dragEnd.Y, dragStartPosition.Y) / ScreenSize.Y;

                var ptsList      = new List <CatPoint>();
                var cameraMatrix = ActiveCamera.ViewProjectionMatrix;

                foreach (var catPoint in GetPoints().Where(x => x.Visible))
                {
                    var pt = (cameraMatrix * new Vector4(catPoint.Position)).ToNormalizedVector3() / 2 + 0.5f;
                    if (pt.X < maxX && pt.X > minX && pt.Y < maxY && pt.Y > minY)
                    {
                        ptsList.Add(catPoint);
                    }
                }
                if (!Keyboard.IsKeyDown(Key.LeftCtrl))
                {
                    foreach (var catPoint in Points)
                    {
                        catPoint.IsSelected = false;
                    }
                }
                foreach (var catPoint in ptsList)
                {
                    catPoint.IsSelected = true;
                }
            }
            dragMode     = MouseDragMode.None;
            draggedPoint = null;
        }