Frage

Ich versuche, 1-Komplex zusammengesetzte Form auf einem InkCanvas zu schaffen, aber ich muss etwas falsch machen, wie das, was ich erwartet hatte, passieren nicht. Ich habe versucht, verschiedene Inkarnationen, dies zu erreichen.

Also ich habe diese Methode.

    private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
    {
        Stroke stroke = e.Stroke;

        // Close the "shape".
        StylusPoint firstPoint = stroke.StylusPoints[0];
        stroke.StylusPoints.Add(new StylusPoint() { X = firstPoint.X, Y = firstPoint.Y });

        // Hide the drawn shape on the InkCanvas.
        stroke.DrawingAttributes.Height = DrawingAttributes.MinHeight;
        stroke.DrawingAttributes.Width = DrawingAttributes.MinWidth;

        // Add to GeometryGroup. According to http://msdn.microsoft.com/en-us/library/system.windows.media.combinedgeometry.aspx
        // a GeometryGroup should work better at Unions.
        _revealShapes.Children.Add(stroke.GetGeometry());

        Path p = new Path();
        p.Stroke = Brushes.Green;
        p.StrokeThickness = 1;
        p.Fill = Brushes.Yellow;
        p.Data = _revealShapes.GetOutlinedPathGeometry();

        selectionInkCanvas.Children.Clear();        
        selectionInkCanvas.Children.Add(p);
    }

Aber das ist, was ich bekommen: http://img72.imageshack.us/img72/1286/actual.png

Also, wo soll ich denn falsch?

TIA, Ed

War es hilfreich?

Lösung

Das Problem ist, dass die Geometrie von stroke.GetGeometry () zurück ist ein Weg, um den Hub, so dass der Bereich, den Sie ist Füllung mit gelb nur in der Mitte des Schlaganfalls ist. Sie können dies klarer sehen, wenn Sie die Linien dicker machen:

_revealShapes.Children.Add(stroke.GetGeometry(new DrawingAttributes() { Width = 10, Height = 10 }));

Sie können tun, was Sie wollen, wenn Sie die Liste der Stift zeigt auf eine StreamGeometry selbst konvertieren:

var geometry = new StreamGeometry();
using (var geometryContext = geometry.Open())
{
    var lastPoint = stroke.StylusPoints.Last();
    geometryContext.BeginFigure(new Point(lastPoint.X, lastPoint.Y), true, true);
    foreach (var point in stroke.StylusPoints)
    {
        geometryContext.LineTo(new Point(point.X, point.Y), true, true);
    }
}
geometry.Freeze();
_revealShapes.Children.Add(geometry);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top