Ломаная линия нарисована на холсте неверно - PullRequest
0 голосов
/ 05 мая 2020

Я имитирую рисование так же, как приложение Paint в Windows, но могу выбрать обводку после рисования.

Я рисую ломаную линию, перетаскивая мышь для рисования на холсте, но иногда внезапно получается очень прямая линия. нарисовано.

Я проверил набор точек ломаной линии, это правильно.

private Polyline _drawingLine;
    private Ellipse _ellipse;

    private void CanvasDrawStudentScreen_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
        try
        {
            // Get point before mouse changes position
            Point position = new Point(e.GetPosition(CanvasDrawStudentScreen).X, e.GetPosition(CanvasDrawStudentScreen).Y);

            if (_ellipse == null)
            {
                _ellipse = new Ellipse()
                {
                    Width = 10,
                    Height = 10,
                    Fill = new SolidColorBrush(Colors.Blue),
                    Stroke = new SolidColorBrush(Colors.Blue),
                };
                _ellipse.MouseDown += _ellipse_MouseDown;
                CanvasDrawStudentScreen.Children.Add(_ellipse);
            }

            Canvas.SetLeft(_ellipse, position.X - 5);
            Canvas.SetTop(_ellipse, position.Y - 5);

            // Get list point when mouse move
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                _drawingLine.Points.Add(new Point(Canvas.GetLeft(_ellipse) + 5, Canvas.GetTop(_ellipse) + 5));
            }
        }
        catch (Exception ex)
        {
        }
    }

    private void _ellipse_MouseDown(object sender, MouseButtonEventArgs e)
    {
        // Get point
        System.Windows.Point startPosition = e.GetPosition(CanvasDrawStudentScreen);

        var points = new PointCollection
            {
                startPosition
            };

        // Draw at start position
        _drawingLine = new Polyline
        {
            Stroke = Brushes.Black,
            StrokeThickness = 10,
            Points = points,
        };

        CanvasDrawStudentScreen.Children.Add(_drawingLine);

        Mouse.Capture(_ellipse);
        e.Handled = true;
    }

    private void CanvasDrawStudentScreen_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        try
        {
            // Get point before mouse changes position
            var position = e.GetPosition(CanvasDrawStudentScreen);

            // Reset temporary drawn objects
            _drawingLine = null;
            _ellipse.ReleaseMouseCapture();
        }
        catch (Exception ex)
        {
        }
    }

Не могли бы кто-нибудь объяснить мне, почему возникла эта проблема, и посоветовать мне, как ее исправить? Полилиния с неправильным положением на холсте

1 Ответ

0 голосов
/ 05 мая 2020

Чтобы избежать "остроконечных" вершин, установите StrokeLineJoin полилинии на Round или Bevel:

_drawingLine = new Polyline
{
    Stroke = Brushes.Black,
    StrokeThickness = 10,
    StrokeLineJoin = PenLineJoin.Round,
    Points = points,
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...