/// <summary> /// Производим смещение координат вершин линии /// </summary> private void MoveFigure() { if (_moveToPoint == default(Point) || _moveFromPoint == default(Point) || _currentPolyline == null) { return; } var deltaX = _moveToPoint.X - _moveFromPoint.X; var deltaY = _moveToPoint.Y - _moveFromPoint.Y; List <Point> tmpListPoint = new List <Point>(); foreach (Point pt in _currentPolyline.Points) { tmpListPoint.Add(new Point(pt.X + deltaX, pt.Y + deltaY)); } _currentPolyline.Points.Clear(); foreach (Point pt in tmpListPoint) { _currentPolyline.Points.Add(new Point(pt.X, pt.Y)); } tmpListPoint = null; _moveToPoint = default(Point); _moveFromPoint = default(Point); ClearPolylineBindings(_currentPolyline); _currentPolyline = null; ClearMarkers(); _viewModel.DrawMode = DrawMode.EditFigure; DrawTable.InvalidateVisual(); }
/// <summary> /// Сброс всех переменных, используемых для выделения линии /// </summary> private void ResetAllSelected() { ClearMarkers(); ClearPolylineBindings(_currentPolyline); _currentPolyline = null; _currentPoint = default(Point); _pointIndex = null; _viewModel.DrawMode = DrawMode.None; _marker = null; _viewModel.AddNewLineIsChecked = false; _viewModel.EditLineIsChecked = false; DrawTable.InvalidateVisual(); }
/// <summary> /// Удаление ломаной линии /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelLine_Click(object sender, RoutedEventArgs e) { if (_viewModel.DrawMode != DrawMode.EditFigure) { return; } if (_currentPolyline == null) { return; } ClearMarkers(); DrawTable.Children.Remove(_currentPolyline); _currentPolyline = null; _pointIndex = null; _marker = null; DrawTable.InvalidateVisual(); }
/// <summary> /// Обработчик кнопки удаления вершины ломаной линии /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelVertex_Click(object sender, RoutedEventArgs e) { //Удаление вершин ломаной линии if (_viewModel.DrawMode != DrawMode.EditFigure) { return; } if (_pointIndex == null || _marker == null || _currentPolyline == null) { return; } _currentPolyline.Points.RemoveAt(_pointIndex.Value); _marker.Height = 0; _marker.Width = 0; _pointIndex = null; _marker = null; DrawTable.InvalidateVisual(); }
private void DrawTable_MouseMove(object sender, MouseEventArgs e) { //Отрисовка перемещения вершины ломаной линии при добавлении и при редактировании вершин if ((_viewModel.DrawMode == DrawMode.AddNewFigure || _viewModel.DrawMode == DrawMode.MoveVertex) && _currentPoint != null && _currentPolyline != null && _currentPolyline.Points.Count > 1) { _currentPolyline.Points.RemoveAt(_pointIndex.Value); _currentPoint.X = e.GetPosition(DrawTable).X; _currentPoint.Y = e.GetPosition(DrawTable).Y; _currentPolyline.Points.Insert(_pointIndex.Value, _currentPoint); if (_marker != null) { Canvas.SetLeft(_marker, _currentPoint.X - 5); Canvas.SetTop(_marker, _currentPoint.Y - 5); } DrawTable.InvalidateVisual(); } }
private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog myDialog = new OpenFileDialog(); myDialog.Filter = "Векторные рисунки(*.XAML)|*.XAML" + "|Все файлы (*.*)|*.* "; myDialog.CheckFileExists = true; myDialog.Multiselect = true; if (myDialog.ShowDialog() == true) { DrawTable.Children.Clear(); _viewModel.CurrentFileName = myDialog.FileName; using (FileStream fs = File.Open(_viewModel.CurrentFileName, FileMode.Open, FileAccess.Read)) { Canvas FromFile = XamlReader.Load(fs) as Canvas; foreach (Polyline pl in FromFile.Children) { if (pl.Points.Count != 0) { if (pl.Stroke != null) { _viewModel.CurrentPickColor = ((SolidColorBrush)(pl.Stroke)).Color; } _viewModel.CurrentThikness = DoubleToThikness(pl.StrokeThickness); AddNewLine(); foreach (Point pt in pl.Points) { _currentPolyline.Points.Add(pt); } } } } DrawTable.InvalidateVisual(); ResetAllSelected(); } }