2017-08-12 8 views
1

私の質問には3つの部分があります: WPFキャンバスに線、円、長方形などの図形を描くことができます。ストロークの消去や移動などのInkCanvas機能を使用したいと考えています。WPFの矩形または円のような図形をスタイラスポイントのコレクションに変換するにはどうすればよいですか?

  1. このシェイプをスタイラスのコレクション ポイントに変換してこのコレクションをInkCanvasに追加することはできますか?
  2. どうすれば可能ですか?
  3. この状況にはより良いアプローチがありますか?

ガイドしてください。

答えて

2

まず、答えははいです。ストロークコレクションにパスを変換し、それらをInkCanvasに追加することができます。スタイラスポイントとスタイラスポイント収集のために

Point mypoint; 
Point tg; 
var pointCollection = new List<Point>(); 
    for (var i = 0; i < 500; i++) 
     { 
      SomePath.Data.GetFlattenedGeometryPath() 
         .GetPointAtFractionLength(i/500f, out mypoint, out tg); 
      pointCollection.Add(p); 
     } 


あなたの質問の後半部分については、その答えは、このようなものでなければなりません

StylusPointCollection StPoints = new StylusPointCollection(); 

のコレクションへのパスを変換する時にスタイラスポイントを追加ポイント:

StPoints.Add(new StylusPoint(p.X, P.Y)); 

このステップの後、ストロークメソッドを呼び出してsのコレクションを作成します。あなたのスタイラスコレクションからtrokes:

Stroke st = null; 
st = new Stroke(StPoints); 

更新
はい! inkCanvasにシェイプを追加するためのより良い方法があります。

  1. あなたが直接このスタイラスポイントの形状を定義し、四角形を描画するための例えば...のMouseDown、MouseMoveのを使用してそれらを追加することもできます。

    pts.Add(new StylusPoint(mouseLeftDownPoint.X, mouseLeftDownPoint.Y)); 
    pts.Add(new StylusPoint(mouseLeftDownPoint.X, currentPoint.Y)); 
    pts.Add(new StylusPoint(currentPoint.X, currentPoint.Y)); 
    pts.Add(new StylusPoint(currentPoint.X, mouseLeftDownPoint.Y)); 
    pts.Add(new StylusPoint(mouseLeftDownPoint.X, mouseLeftDownPoint.Y)); 
    
  2. や脳卒中クラスのDrawCoreメソッドをオーバーライドします新しいストロークタイプを定義します。 Custom Rendering Ink(MSDN)

+1

ありがとう:)私は新しい方法を試してみます。パスを変換するのではなく、Inkcanvasで直接描画することをお勧めします。 –

+1

はい、そうです。何らかのメモリと処理を節約すると同時に、スタイラスポイントはより柔らかいポイントをサポートしません。 – hemarn

関連する問題