コード例 #1
0
        public static void AddPointToDrawing(ref PCad.Model model, Action saveToHistory)
        {
            CoordinateCreation.BakePosition(model.InteractionState.focusPosition);
            model.Sketch.coordinateSystem.SetAnchorPosition(MouseInput.RaycastPosition);

            switch (model.Tool.CurrentGeometryType)
            {
            case GeometryType.Point:
                model.Sketch.geometries.Add(PointCreation.NewPoint(model.InteractionState.focusPosition));
                saveToHistory();
                break;

            case GeometryType.Line:
                if (!(model.InteractionState.incompleteGeometry is LineModel))
                {
                    model.InteractionState.incompleteGeometry =
                        LineCreation.StartNewLine(model.InteractionState.focusPosition);
                    model.Sketch.geometries.Add(model.InteractionState.incompleteGeometry);
                }
                else
                {
                    LineCreation.CompleteLine(model.InteractionState.incompleteGeometry as LineModel,
                                              model.InteractionState.focusPosition);
                    model.InteractionState.incompleteGeometry = null;
                    saveToHistory();
                }

                break;

            case GeometryType.Rectangle:
                if (!(model.InteractionState.incompleteGeometry is RectangleModel))
                {
                    model.InteractionState.incompleteGeometry =
                        RectangleCreation.StartNewRectangle(model.InteractionState.focusPosition,
                                                            model.Tool.CurrentGeometryColor);
                    model.Sketch.geometries.Add(model.InteractionState.incompleteGeometry);
                }
                else
                {
                    RectangleCreation.CompleteRectangle(model.InteractionState.incompleteGeometry as RectangleModel,
                                                        model.InteractionState.focusPosition);
                    model.InteractionState.incompleteGeometry = null;
                    saveToHistory();
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            // reset input
            model.InteractionState.keyboardInputModel = new NumpadInput.Model();
        }
コード例 #2
0
        public static void Update(ref PCad.Model model, CoordinateSystemUI coordinateSystemUI,
                                  bool isMouseOnDrawArea, Action saveToHistory)
        {
            model.InteractionState.hoveredCoordinate =
                CoordinateManipulation.TryGetCoordinateAtPosition(coordinateSystemUI);

            NumpadInput.UpdateNumpadInput(ref model.InteractionState.keyboardInputModel,
                                          model.Sketch.coordinateSystem.GetAllParameters()
                                          );

            model.InteractionState.focusPosition = CoordinateCreation.UpdateCursorPosition(
                model.InteractionState.focusPosition,
                model.Sketch.coordinateSystem,
                model.InteractionState.keyboardInputModel
                );

            if (model.InteractionState.focusPosition == null)
            {
                Debug.LogError($"Focus Position should always be != null if state == DrawRectangles");
                return;
            }

            switch (model.InteractionState.CurrentMouseState)
            {
            case MouseInput.MouseState.None:
            case MouseInput.MouseState.PrimaryHold:
            case MouseInput.MouseState.PrimaryUp:
                break;

            case MouseInput.MouseState.PrimaryDown:
                if (isMouseOnDrawArea || Input.GetKeyDown(KeyCode.Return))
                {
                    AddPointToDrawing(ref model, saveToHistory);
                }

                break;

            case MouseInput.MouseState.SetAnchorDown:
                var mousePosition = MouseInput.RaycastPosition;
                model.Sketch.coordinateSystem.SetAnchorPosition(mousePosition);
                break;

            case MouseInput.MouseState.DeleteDown:
                CoordinateCreation.DeletePositionAtMousePosition(model.Sketch.coordinateSystem);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            UpdateGeometry(ref model.InteractionState.incompleteGeometry, model.InteractionState.focusPosition);
        }