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()); } } }
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; }