0

次の図は、Direct2D のパス ジオメトリを示しています。これには 5 つのセグメントが含まれており、各セグメントは直線です。私の要求は、このような丘がある場合、5 本の線すべてを取得したいということです。

ここに画像の説明を入力

しかし、Direct2D でパス ジオメトリのセグメントを取得できる関連 API はないようです。セグメントを取得できない場合、ID2D1PathGeometry インターフェイスがメソッド GetSegmentCount を提供していることがわかります。Microsoft がこのメソッドを提供するのはなぜですか?

4

3 に答える 3

1

でこれを行うことができますID2D1PathGeometry::Stream()。を実装するクラスを作成する必要がありますID2D1GeometrySink。現在必要な正確なデータを探す代わりに、オブジェクト ツリーを送り出すことができるように、これを一般化された意味で実装すると便利な場合があります。使用するオブジェクト モデルのタイプの例が必要な場合は、WPF System.Windows.Media.Geometry( http://msdn.microsoft.com/en-us/library/system.windows.media.geometry.aspx ) を参照してください。

また、これらのクラスから に簡単に変換してID2D1PathGeometry、状況に応じて最も快適または適切なものを使用することもできます。私は両方の変換を書きましたが、同じ「言語」を使用していることに気が付くと、非常に簡単であることがわかりました。特に「図」と「セグメント」の違いが整理できてよかったです。

于 2012-10-08T18:24:22.277 に答える
1

PathGeometry がある場合は、PathGeometry::Stream() を使用することをお勧めします。

ただし、基本的なジオメトリがあり、同じことを達成したい場合は、次のことができます。

  1. 独自の GeometrySink を実装して、ジオメトリ コンポーネントを「キャッチ」します。
  2. 空の PathGeometry を作成します
  3. Geometry::Combine を使用して、ジオメトリを空のジオメトリと結合 (結合) します。

結果は GeometrySink に保存されます。

于 2012-12-14T20:56:05.930 に答える
0

ID2D1SimplifiedGeometrySinkインターフェイスから継承するSpecializedSinkという名前のクラスを実装します。これは、ID2D1Geometry:: Simplifyによって呼び出される拡張AddLinesメソッドでジオメトリデータを取得します。

ID2D1SimplifiedGeometrySinkを拡張して、[ジオメトリからデータを取得する例] http://msdn.microsoft.com/en-us/library/windows/desktop/ee453682%28v=vs.85%29.aspxを読むことをお勧めします。

于 2012-12-15T20:35:17.613 に答える