Как визуализировать InkStroke на холсте, используя BezierSegment в UWP C#

Я портирую приложение из javascript на UWP C# и борюсь с новым InkCanvas. Если вы знакомы с новым InkCanvas в UWP, я буду очень признателен за вашу помощь. Это код, который я написал для рендеринга InkStroke на Canvas.

    public static void Bezier(Canvas canvas, InkStroke stroke)
    {
        var segments = stroke.GetRenderingSegments();

        PathFigure pthFigure = new PathFigure() { StartPoint = new Point(segments[0].Position.X, segments[0].Position.Y)};

        for (int i = 1; i < segments.Count; i++)
        {
            var segment = segments[i];
            var bezier = new BezierSegment();
            bezier.Point1 = new Point(segment.BezierControlPoint1.X, segment.BezierControlPoint1.Y);
            bezier.Point2 = new Point(segment.BezierControlPoint2.X, segment.BezierControlPoint2.Y);
            bezier.Point3 = new Point(segment.Position.X, segment.Position.Y);
            pthFigure.Segments.Add(bezier);
        }

        PathGeometry pthGeometry = new PathGeometry();

        pthGeometry.Figures.Add(pthFigure);

        Path path = new Path();
        //path.Stroke = new SolidColorBrush(stroke.DrawingAttributes.Color);
        //path.StrokeThickness = stroke.DrawingAttributes.Size.Height;
        path.Stroke = new SolidColorBrush(Colors.Red);
        path.StrokeThickness = 1;
        path.Data = pthGeometry;

        canvas.Children.Add(path);
    }

К сожалению, контрольные точки, похоже, испорчены, и я не понимаю, почему.

Вы можете увидеть ниже изображение того, что я запускаю этот код. Черный штрих - это тот, который изначально отображался в InkCanvas, а красный - на холсте из приведенного выше кода.

Черный штрих - это тот, который изначально отображался в InkCanvas, а красный - на холсте из приведенного выше кода.

Кто-нибудь имеет представление о том, что я делаю неправильно?

1 ответ

Решение

Я нашел проблему! Я устанавливал DrawingAttributes.FitToCurve = false, и это привело к тому, что контрольные точки были равны нулю. Я предполагал, что этот параметр влияет только на рендеринг, но теперь он имеет смысл, потому что я вызывал GetRenderingSegments. Я смог нарисовать форму с помощью GetInkPoints, а затем нарисовать ломаную линию.

Другие вопросы по тегам