2017-09-28 24 views
0

私はキャンバス(InkCanvasではありません!)を持っています。描画はPointerMovedイベントによって行われるため、ポインタが移動するたびにポインタの現在の位置を取得し、ポリラインポイントコレクションに追加します。ここまでは順調ですね。しかし、私がポインタを非常に小さな距離だけ動かすと、描かれた線は実際には以下のように奇妙です。C#UWP Canvas Polyline奇妙な結果を描画する

enter image description here

(最後の水平ラインは、私は自動的にポリゴンにポリラインを閉じてからだと、バグの一部ではありません)

これは私のコード切り取らです:

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); 
      } 
     } 
    } 

のように上で述べたように、このメソッドはポインターが移動するたびに呼び出されます。

2点が近すぎるかどうかをチェックし、そうであれば、新しい点をポリラインに入れるのではなく破棄する方法を実装しようとしました。しかしそれ以降、バグはまだ発生しており、描画はもはやスムーズではなかったのでもう気分が良くなりませんでした。

新しいテクノロジに変更することなくこのバグを修正する方法はありますか(InkCanvasを使用したくありません)?

+1

セット 'StrokeLineJoin'(デフォルト値)以外の値に'マイター'。 – Clemens

+0

StrokeLineJoinをベベルに変更し、すべての問題を一度に解決しました。ありがとうございます。 – eXodiquas

+2

ラウンドがスムーズに見えるかもしれません:-) – Clemens

答えて

1

ようクレメンスコメントで述べた:

StrokeLineJoin(デフォルト値)以外の値にマイター

+0

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