2017-09-28 3 views
0

J'ai une toile (pas InkCanvas!) Et je peux dessiner dessus. Le dessin est effectué par l'événement PointerMoved, donc à chaque fois que le pointeur est déplacé, je prends la position actuelle du pointeur et l'ajoute à une collection de points polyligne. Jusqu'ici tout va bien. Mais chaque fois que je déplace mon pointeur sur de très petites distances, la ligne tracée est vraiment étrange comme montré ci-dessous.C# UWP Toile Polyline dessin des résultats étranges

enter image description here

(la dernière ligne horizontale ne fait pas partie du bug, il est parce que je ferme automatiquement la polyligne à un polygone)

Ceci est mon 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); 
      } 
     } 
    } 

Comme J'ai dit plus haut, cette méthode est appelée à chaque fois que le pointeur est déplacé.

J'ai essayé d'implémenter une méthode qui vérifie si deux points sont trop proches et si c'est le cas, rejette le nouveau point au lieu de le placer dans la polyligne. Mais après cela, le bug persiste et le dessin ne se sent plus bien car il n'est plus aussi lisse.

Y at-il un moyen de corriger ce bug sans passer à une nouvelle technologie (je ne veux pas utiliser InkCanvas)?

+1

Set 'StrokeLineJoin' à une valeur autre que (la valeur par défaut)' Mitre '. – Clemens

+0

J'ai changé le StrokeLineJoin en Biseau et il a résolu tous mes problèmes à la fois. Merci beaucoup monsieur. – eXodiquas

+2

Round peut même sembler plus lisse :-) – Clemens

Répondre

1

Comme Clemens mentionné dans un commentaire:

StrokeLineJoin à une valeur autre que (la valeur par défaut) Mitre

+0

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