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