DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CADのような画面スクロールの実現方法

環境/言語:[visualbasic 2005]
分類:[.NET]

まさにCADと同じような動きになるのですが、線画を表現したものの拡縮、移動のロジックを考えています。その中の移動についての質問です。
画像として扱うことは
http://dobon.net/vb/dotnet/graphics/scrollimage.html
の中でも扱っているようですが、CADのように画面上の線分の編集も考えているため、行き詰っています。
線分の本数も3万本近くになるため、mouseイベントで移動距離を測って、クリップするというのが一番単純な気もしますが、再描画となると時間がかかりすぎるかと思います。できれば、本数に関係なくイベントに即応できるようにできないか、教えていただけないでしょうか。
■No20717に返信(penさんの記事)
> まさにCADと同じような動きになるのですが、線画を表現したものの拡縮、移動のロジックを考えています。その中の移動についての質問です。

こんちは
3Dですが30万本の線を拡縮、移動したことがあります

OpenGLがVBの中で使えます
http://www.geocities.co.jp/SiliconValley/7406/tips/opengl/index.html
VBだけで再描画するより10倍以上速い感じでした
移動ではマウスのドラッグに追従させて、遅れもなく動きました
OpenGLも再描画はしてるんですがネ。参考になれば幸いです
■No20718に返信(y4yamaさんの記事)
> 3Dですが30万本の線を拡縮、移動したことがあります
>
> OpenGLがVBの中で使えます
> http://www.geocities.co.jp/SiliconValley/7406/tips/opengl/index.html
> VBだけで再描画するより10倍以上速い感じでした
> 移動ではマウスのドラッグに追従させて、遅れもなく動きました

考えてもみなかった方法なので目から鱗ですが、
やはりVB単独では無理があるのでしょうか。VB+openGLの初心者向けの資料も少なく、相互間のやり取りがわかりにくそうで。表示画面でのマウスの位置座標の取得なども考えていますので。
■No20717に返信(penさんの記事)
>できれば、本数に関係なくイベントに即応できるようにできないか、教えていただけないでしょうか。

そこを如何に工夫するかが一番楽しいところです。

基本的に、3万本分の描画を行わずに
描画後の情報が得られるわけはありません。
工夫したり制約を課したりリソースを食ったりして対応するわけです。

ぱっと思いつくままに描くと
1 描画したものを内部で別に持っておく
2 描画しなくていかどうか、高速に調べる処理を考える
3 ダブルバッファしたりして、一見軽いように見せかける
こんな感じですかね。

描画したものを内部でもっておくと、
本数に関係ない時間で処理できます。
メモリがたくさん要りますし、
線分を一つ動かすたびに内部バッファの再構築が必要になりますが。

GDIのクリッピングはあまり早くないので
より高速で粗いクリッピング処理をいれるだけで
だいぶはやくなります。

一見早く見えるというのも重要ですね。
ちらつかないだけでだいぶ快適です。

こんなのを組み合わせてがんばってください。

DOBON.NET | プログラミング道 | プログラミング掲示板