Beispiel #1
0
 /// <summary>
 /// Выбираем текущий инструмент - ластик
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void tsbRibber_Click(object sender, EventArgs e)
 {
     UncheckedTools();
     tsbRibber.Checked = true;
     workArea.Cursor   = CursorFactory.GetCursor(UserCursor.Ribber);
     tool = RibberTool; // указываем на рабочий ластик
     doc.SetTool(tool);
 }
Beispiel #2
0
 /// <summary>
 /// Выбираем текущий инструмент - карандаш
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void tsbPencil_Click(object sender, EventArgs e)
 {
     UncheckedTools();
     tsbPencil.Checked = true;
     workArea.Cursor   = CursorFactory.GetCursor(UserCursor.Pencil);
     tool = PenTool; // указываем на рабочий караннаш
     doc.SetTool(tool);
 }
Beispiel #3
0
        private VertexMarker CreateMarker(MarkerType markerType, PointF point, int index, Figure fig)
        {
            var marker = new VertexMarker
            {
                MarkerType = markerType,
                Cursor     = CursorFactory.GetCursor(UserCursor.SizeAll),
                Position   = point,
                Index      = index,
                Owner      = fig
            };

            return(marker);
        }
Beispiel #4
0
        /// <summary>
        /// Создание маркера
        /// </summary>
        /// <param name="type">Тип маркера</param>
        /// <param name="posX">Нормированная координата маркера по горизонтали</param>
        /// <param name="posY">Нормированная координата маркера по вертикали</param>
        /// <param name="cursor">Курсор на маркере</param>
        /// <param name="anchorX">Нормированная координата якоря по горизонтали</param>
        /// <param name="anchorY">Нормированная координата якоря по вертикали</param>
        /// <param name="offsetX">Смещение координаты якоря по горизонтали </param>
        /// <param name="offsetY">Смещение координаты якоря по вертикали</param>
        /// <returns></returns>
        private Marker CreateMarker(MarkerType type, float posX, float posY, UserCursor cursor,
                                    float anchorX, float anchorY, float offsetX = 0, float offsetY = 0)
        {
            var normPoint = new PointF(posX, posY);
            var anchPoint = new PointF(anchorX, anchorY);

            return(new Marker
            {
                MarkerType = type,
                Cursor = CursorFactory.GetCursor(cursor),
                Position = _selection.ToWorldCoordinates(normPoint).Add(new PointF(offsetX, offsetY)),
                AnchorPosition = _selection.ToWorldCoordinates(anchPoint)
            });
        }
Beispiel #5
0
        /// <summary>
        /// Выбор фигур для последующего создания
        /// </summary>
        private void btnCreateFigure_Click(object sender, EventArgs e)
        {
            _selectionController.Clear();
            Func <Figure> figureCreator       = null;
            Cursor        figureCreatorCursor = CursorFactory.GetCursor(UserCursor.SelectByRibbonRect);

            if (sender == tsbPointer)
            {
                figureCreatorCursor = Cursors.Default;
                Cursor             = Cursors.Default;
                tsbPointer.Enabled = false;

                _selectionController.CreateFigureCursor  = figureCreatorCursor;
                _selectionController.CreateFigureRequest = figureCreator;
                return;
            }
            tsbPointer.Enabled = true;
            //
            if (sender == btnRectangle || sender == tsbRect)
            {
                figureCreatorCursor = Cursor = CursorFactory.GetCursor(UserCursor.CreateRect);
                figureCreator       = () =>
                {
                    var fig = new Figure();
                    FigureBuilder.BuildRectangleGeometry(fig);
                    return(fig);
                };
            }
            else if (sender == btnRoundedRectangle)
            {
                figureCreatorCursor = Cursor = CursorFactory.GetCursor(UserCursor.CreateRect);
                figureCreator       = () =>
                {
                    var fig = new Figure();
                    FigureBuilder.BuildRoundedRectangleGeometry(fig, 0.25f);
                    return(fig);
                };
            }
            //
            _selectionController.CreateFigureCursor  = figureCreatorCursor;
            _selectionController.CreateFigureRequest = figureCreator;
        }
Beispiel #6
0
 /// <summary>
 /// Создаём пустой документ
 /// </summary>
 private void CreateNewDocument(int width = 1000, int height = 1000)
 {
     doc = new Document
     {
         Layer = new Bitmap(width, height)
     };
     // экземпляр контроллера для механизма отменить/вернуть
     undoRedoController = new UndoRedoController(doc);
     // задаём размер холста
     workArea.Size   = new Size(doc.Layer.Width, doc.Layer.Height);
     workArea.Cursor = CursorFactory.GetCursor(UserCursor.Pencil);
     // начальные настройки инструментов
     UncheckedTools();
     tsbPencil.Checked = true;
     foreach (var item in tsbPencilThickness.DropDownItems.Cast <ToolStripMenuItem>())
     {
         item.Checked = false;
     }
     tsmiPencilThicknessOne.Checked = true;
     penTool = null;
     tool    = PenTool;
     doc.SetTool(tool);
     penToolColorImage    = null;
     tsbPencilColor.Image = PenToolColorImage;
     tsbPencilColor.Invalidate();
     foreach (var item in tsbRibberThickness.DropDownItems.Cast <ToolStripMenuItem>())
     {
         item.Checked = false;
     }
     tsmiRibberThicknessFour.Checked = true;
     ribberTool           = null;
     ribberToolColorImage = null;
     tsbRibberColor.Image = RibberToolColorImage;
     tsbRibberColor.Invalidate();
     // очистка истории отмен
     UndoRedoManager.Instance.ClearHistory();
 }
Beispiel #7
0
        /// <summary>
        /// Форма курсора в зависимости от контекста
        /// </summary>
        /// <param name="location">Позиция курсора</param>
        /// <param name="modifierKeys">Какие клавиши были ещё нажаты в этот момент</param>
        /// <param name="button">Нажатая кнопка мышки</param>
        /// <returns>Настроенный курсор</returns>
        public Cursor GetCursor(Point location, Keys modifierKeys, MouseButtons button)
        {
            var point = Point.Ceiling(new PointF(location.X / ScaleFactor, location.Y / ScaleFactor));

            if (CreateFigureRequest != null)
            {
                return(CreateFigureCursor);
            }

            switch (EditorMode)
            {
            // для базовых режимов настраиваем вид курсора на маркерах
            case EditorMode.Select:
            case EditorMode.Skew:
            case EditorMode.Warp:
            case EditorMode.Verticies:
                Marker marker;
                if (FindMarkerAt(point, out marker))
                {
                    return(modifierKeys.HasFlag(Keys.Control) && marker.MarkerType == MarkerType.Vertex
                            ? CursorFactory.GetCursor(UserCursor.RemoveVertex)
                            : marker.Cursor);
                }
                Figure fig;
                if (_selection.FindFigureAt(_layer, point, out fig))
                {
                    if (EditorMode == EditorMode.Verticies &&
                        _selection.Contains(fig) && _selection.IsHit(_layer, point) &&
                        modifierKeys.HasFlag(Keys.Control))
                    {
                        return(CursorFactory.GetCursor(UserCursor.AddVertex));
                    }
                    return(CursorFactory.GetCursor(UserCursor.MoveAll));
                }
                return(Cursors.Default);

            case EditorMode.FrameSelect:
                return(_lastMode == EditorMode.Verticies
                                          ? Cursors.Default
                                          : CursorFactory.GetCursor(UserCursor.SelectByRibbonRect));

            case EditorMode.AddLine:
                return(CursorFactory.GetCursor(UserCursor.CreatePolyline));

            case EditorMode.CreateFigure:
                return(CreateFigureCursor);

            // когда тащим фигуры
            case EditorMode.Drag:
                return(_selection.Count > 0
                               ? modifierKeys.HasFlag(Keys.Control)
                                    ? CursorFactory.GetCursor(UserCursor.DragCopy)
                                    : CursorFactory.GetCursor(UserCursor.SizeAll)
                               : _lastMode == EditorMode.Verticies
                                    ? Cursors.Default
                                    : CursorFactory.GetCursor(UserCursor.SelectByRibbonRect));

            // когда изменяем масштабируем, меняем ширину/высоту, вращаем или искажаем
            case EditorMode.ChangeGeometry:
                if (button == MouseButtons.Left && _lastMode == EditorMode.Verticies)
                {
                    return(CursorFactory.GetCursor(UserCursor.MoveVertex));
                }
                return(_movedMarker.Cursor);
            }

            return(Cursors.Default);
        }