2017-09-28 4 views
0

Ich habe eine Leinwand (nicht InkCanvas!) Und ich kann darauf zeichnen. Die Zeichnung wird durch das PointerMoved-Ereignis erstellt. Daher wird bei jedem Verschieben des Zeigers die aktuelle Position des Zeigers übernommen und zu einer Polylinienpunktsammlung hinzugefügt. So weit, ist es gut. Aber immer, wenn ich den Zeiger sehr kleine Entfernungen bewege, ist die gezeichnete Linie wirklich seltsam, wie unten gezeigt.C# UWP Canvas Polyline Zeichnung seltsame Ergebnisse

enter image description here

(die letzte ist horizontale Linie des Fehlers nicht Teil, es ist, weil ich die Polylinie zu einem Polygon automatisch schließen)

Dies ist mein Code snipped:

private void AddPointToPolyline(Polyline pl, object sender, PointerRoutedEventArgs e) 
    { 
     if (e.Pointer.PointerDeviceType != PointerDeviceType.Touch) 
     { 
      PointerPoint pt = GetCurrentPointerPosition(sender, e); 
      if (pl != null && pt != null && pl.Points.Count > 0 && pl.Points.Any()) 
      { 
       pl.Points.Add(pt.RawPosition); 
      } 
     } 
    } 

Wie Ich sagte oben, diese Methode wird jedes Mal aufgerufen, wenn der Zeiger bewegt wird.

Ich habe versucht, eine Methode zu implementieren, die überprüft, ob zwei Punkte zu nahe sind, und wenn dies der Fall ist, verwirft sie den neuen Punkt, anstatt ihn in die Polylinie zu legen. Aber danach war der Fehler immer noch aufgetreten und das Zeichnen fühlte sich nicht mehr richtig an, weil es nicht mehr so ​​glatt war.

Gibt es eine Möglichkeit, diesen Fehler zu beheben, ohne zu einer neuen Technologie zu wechseln (Ich möchte InkCanvas nicht verwenden)?

+1

Set 'StrokeLineJoin' auf einen anderen Wert als (der Standardwert)' Mitre '. – Clemens

+0

Ich änderte die StrokeLineJoin in Bevel und es behoben alle meine Probleme auf einmal. Vielen Dank, mein Herr. – eXodiquas

+2

Round könnte sogar glatter aussehen :-) – Clemens

Antwort

1

Wie Clemens in einem Kommentar erwähnt:

StrokeLineJoin auf einen anderen Wert als (der Standardwert) Mitre

+0

'line.StrokeLineJoin = PenLineJoin.Round;' – mikesl