DWFプログラミング(その3)















 DWFの座標系を調べてみる。この画像の座標データは上のinfoで表示する。

 ピクセル単位のWindow座標は、objectタグで指定したwidth=400、 height=300に対応する。これがWHIPオブジェクトの窓スペース。

 DWF図面の最大範囲を指すDrawingExtentsで縦41603、横41603の範囲を読み取れる。 DWGでは、左下(-50、-50)、右上(50、50)、縦100、横100の四角を 範囲指定してDWF変換した。41603/100=416.03が変換率。 座標原点はDWFの場合左下が(0、0)のようだ。

 DWFファイル内のオブジェクトは、すべてこのDrawing座標で定義されている。 これを、ファイル空間座標と呼ぶ。

 CurrentViewはこのDWF図面最大範囲のどこをクリッピングしているかで決まる。 拡大すれば図面範囲の領域内座標どなり、縮小して図面領域がWindow窓スペースの一部となれば 、Top、Botomm、Left、Rightの座標値は最大範囲値を超える値となる。
整理すると、
CurrentViewはDWFファイル空間座標(原点は初期画面の定義域左下)による、 Window窓のTop、Botomm、Left、Rightの値。
となる。

 上の画像を拡大、縮小、移動して、下のinfoをクリックでCurrentViewの変化を確認できる。それ以外は拡大、縮小、移動で変化しないことが分かる。

 次に、元の図面、DWGの座標とDWFの座標の関係がどうなのかを見てみよう。 この場合、変換率は上で調べた。座標原点の関係が分かればいい。多分、UNITタグの最後の数値がそれだろう。javaScriptにComputeCoordinateメソッドが定義されている。ソース (DWG、0番)、 DWF(1番)、Window(2番)の間で座標変換ができる。 できるはずなのだが、WHIP3.1、WIN98、IE6の環境でうまく機能しない。残念だ。

 DWFのファイル空間座標がつかめたので、ADDメソットでDWFに書き込みをしてみよう。これまで座標系を確認してきたのはこのためだった。確認実験をしよう。上のADDLIEボタンには以下のソースコードがリンクしてある。

function addline() { mydwf.Add("(DWF V00.36)"); mydwf.Add("L 12480,12480 29122,29122"); mydwf.Add("(EndOfDWF)") ; }

 DWFはAutoCAD図面の閲覧、印刷のためのファイルフォーマット。図面を書くことはできない。という常識は嘘のようだ。「動く」ページを書けるWebクリエータはjavaScriptで、もらった図面に書き込みができる。DWFの構造を理解できるWebクリエータはDWFからDXFコンバータをスクリプトで作れる。これが正解のようだ。ただしDWFはASCIIセーブされているのが前提であるが。



2004.1.1
by Kon