2011-06-22 9 views
1

私はジオメトリオブジェクトのリストを持っています。私はそれらをWPFアプリケーションで描画したいと思います。このジオメトリのリストは、特定のビュー内でうまくスケーリングされるように構成されていないので、個々のオブジェクトを何らかのスケールで調整する必要があります。キャンバスに複数のパスを描く

おそらく私のジオメトリオブジェクトをキャンバスに追加したいと思っていますが、わかりません。私はキャンバスを内容をうまく表示するように変換する正しい方法を決定する方法を知らない。

ジオメトリをコンテナ(おそらくキャンバス)に追加する方法と、ジオメトリの元のサイズに関係なくコンテナを自動的に変形して内容をうまく表示する方法に関するガイダンスを探しています。私はすでにパスにジオメトリを追加する方法を知っているが、私はそれをきれいにズームや中心のファッションの子供たちを表示するために、正しくキャンバスを拡大する方法がわからない:

path.Data = geometry[i]; 
canvas.Children.Add(path); 

例として、私がしたいと基本的な長方形の地図を使用して、国ごとに世界の地図を描きます。各国が米国を中心としており、座標が数マイルであるため、形状が非現実的に大きいとします。コンテナに各国を追加し、国際的なデータ線を中心とした世界地図全体をどのように表示しますか?地図が拡大縮小されていないと変換されていれば、地図はカンザスでははるかにズームされているため、単色で表示されます。

答えて

0

Viewboxあなたのためのスケーリングを行い、そのパスのコンテナとしてのキャンバスもうまく見えますが、キャンバスはマップの実際のサイズに設定する必要があります子供。

+0

私の問題の一部です。キャンバスは拡大縮小されず、ジオメトリのサイズが数千ピクセル四方になる可能性があります。私はその内容を拡大しながらキャンバスをどのように拡大縮小するかを理解する必要があります。各パスを50%だけスケールすることはできません。あなたがチェッカーボードを持っていて、各四角形を50%拡大すると、ギャップが生じます。あなたは、可変量で拡大縮小して翻訳する必要があります。これはすべて複雑なようですが、よりよい方法が必要です。 – Cameron

+0

実際には、各広場を拡大縮小することができます。共通の中心を選択するだけです。また、グリッドに複数のパスを追加することもできます。グリッドは子に合わせる必要がありますが、シェイプが独立している場合はレイアウトが非常に奇妙に終わることがあります。 –

+0

そのような状況でスタックのことが起こります。私はスケールする前に各パスのtransformOrigin =(0,0)を設定することができますが、子供のパスをうまく表示するためにキャンバスをどのように変換するかを知る必要があります。 WPFが危険であると私は十分に知っています。私はこれについて完全に間違っていると思うかもしれません。 – Cameron

関連する問題