6

ユーザーに表示するかなり大きな PathGeometry (100,000 ポイントを超え、ストロークされているが塗りつぶされていない) がありますが、一度に表示されるのはパスのごく一部だけです。明確にするために、パス自体は事前に決定されていませんが、データから作成されます。

問題: ユーザーがより大きなパスの領域を探索できるように、非常にスムーズなパンを提供したいと考えています。

考えられる解決策はありますが、それをどのようにやってのけるかわかりません。タイリング手法を使用したいと思います-ジオメトリをタイルに分割し、表示されているタイルのみをロードします。

では、ストロークのみのパス ジオメトリをタイルに分割するにはどうすればよいでしょうか。より具体的には、特定の長方形のタイルに存在するパスの部分を特定するにはどうすればよいですか?

CombinedGeometry を使用してパス ジオメトリと四角形の間の交差を決定できることはわかっていますが、これには四角形の「壁」(ストロークされる) が含まれます。ストロークのみの PathGeometry をタイル化するより良い方法はありますか?

ありがとう!

4

3 に答える 3

3

おそらく、タイル張りの代わりに、1つのパスジオメトリを持ち、データバインディングなどを使用してプログラムでパスデータを変更して、ズームインしているパスのセグメントを表します。DeepZoom に少し似ていますが、パスがあります。これは、パスのマージをいじる必要がないことを意味します。

私はあなたと似たようなことをしていますが、パスで使用している数はわずかに少ないため、仮想化方法の使用を検討していません。ただし、大きなパフォーマンスの問題に気付いていません。スクロールビューアーに約 1000 ~ 10000 ポイントを表すパスがあり、ポイントが非常に離れている場合にのみズームインするとラグが発生します。パス内のポイントが隣接するポイントに比較的近い場合 (たとえば、きれいなスイープ サイン波)、WPF はそれらに対して何らかの最適化を実行して、認識可能な遅延を防ぎます。

例:このパス...

複数のサイン

...このパスよりも描画に時間がかかります:

単純な正弦

それらはそれを説明する同じ量のポイントを含んでいますが。実際には、パフォーマンスの違いに気付く前に、パスが下の画像のように見えるようになる必要があります。

トラブルメーカー

パスは音声波を表しているため、ポイントが巨大な濃い青色のブロックを作成しているかどうかを確認するために何らかのチェックを実行し、それを消費電力の少ないものに置き換えることで、このような将来の問題を取り除くつもりですが、これはそうではないかもしれませんあなたにとって十分な解決策。

(画像のサイズの違いについて申し訳ありません。正弦波を計算するビットは現在動作していないため、古い jpeg を使用する必要がありました)

于 2010-08-24T18:48:33.890 に答える
2

私も最近そう思っていたので、私の経験が参考になるかもしれません。まず、PathGeometry ではなく StreamGeometry を使用できれば、パフォーマンスが向上します。Path の Data プロパティとして単一の StreamGeometry を作成し、それをキャンバスに配置してから、Scale および Translate 変換を適用して形状をナビゲートすることをお勧めします。それぞれ1000ポイントの5つまたは6つのSeriesGeometriesでまともなパフォーマンスを得ていました(明らかに、あなたが言及した数よりもはるかに少ないです)が、画面上にすべてのポイントがない限り、WPFグラフィックエンジンは非常にうまくスケーリングすると思います同時に。「完全にズームアウト」をサポートする必要がある場合、つまりすべてのポイントが表示される場合は、ジオメトリの低解像度バージョンを作成することをお勧めします (つまり

それは理にかなっていますか?

幸運を!

于 2010-09-16T04:42:49.167 に答える
1

1 つの方法は、ジオメトリ全体をキャンバスにロードすることです。次に、キャンバスにズームを適用します。ab2d などのサードパーティ コントロールを使用できます。

そこにあるジオメトリの形で(ユーザーが作成した)多くの図面を含むフォトショップのようなキャンバスを作成しました。ab2d を使用して menucontrol でズームアウトしましたが、正常に動作します。その一部に定義済みのズームを設定することもできます。

ありがとう / subho100

于 2010-09-11T05:27:06.310 に答える