作図に直接利用できるデータを保存したものを一般にグラフィックスファイルと言いますが、データの性質によって二種類に分けます。ビットマップファイルとメタファイル(metafile)です。メタファイルは作図の手順を記録したファイルです。この形式はコンピュータグラフィックスの世界では小数派ですが、科学技術分野ではメタファイル形式が重要です。Windowsが利用できるメタファイルは、拡張子に WMF, EMF のついた二種類があり、windows metafile, enhanced metafileの意味です。WMFのファイルの内部仕様は公開されていません。16ビットのWindows 3.1の時代と、32ビット仕様になったファイル相互に互換性がありません。最近の仕様は拡張メタファイル.EMFがサポートされています。このような現状ですので、メタファイルについての参考書はあまり多くありません。
メタファイルのアイディアは格別に新しいものではありません。考え方の源は、グラフィックス装置が変わってもプログラムの変更が最小限に済むようにするデバイスドライバを決めることと、グラフィックス言語を標準化することと関係します。幾何モデリングのプログラムGEOMAPや、幾何処理用のプログラム言語Geometry_BASICに使っているサブルーチンは、英字のDPを付けたプロシージャ名にしてあって、プログラミング言語の相違やグラフィックス装置の違いを吸収させるように決めた私的な仕様です。メタファイルのテキスト仕様は、このプロシージャ名と対応つけてあり、下の表1のようなデータ形式です。
表1 簡単なメタファイルのデータ仕様
名前(Tag) |
引き数1 |
引き数2 |
引き数3 |
参照サブルーチン名 |
DWND |
wx |
wy |
wh |
Dpwind |
DPMV |
xx |
yy |
|
Dpmove |
DPDR |
xx |
yy |
|
Dpdraw |
DPSZ |
ipsz |
|
|
Dpensz |
DPTX |
iptx |
|
|
Dpentx |
DCLS |
|
|
|
Dpentx |
DSTP |
isec |
|
|
Dpause |
DPNT |
xx |
yy |
|
Dpoint |
DPMK |
imark |
|
|
DPmark |
DCRC |
xx |
yy |
rr |
Dpcirc |
DQMV |
xx |
yy |
zz |
Dqmove |
DQDR |
xx |
yy |
zz |
Dqdraw |
DCAM |
xx |
yy |
zz |
Dpcam-1 |
DPRJ |
th |
iprj |
|
Dpcam-2 |
DTXT |
xx |
yy |
"text" |
Dptext |
DCOL |
icolor |
|
|
Dpcolr |
VB_Graphicsの例題の中で、単純な線図だけで作画させるもの、例えば(1.Polygon)を使ってメタファイルの実際を試すことができます。例えば、例題を第3.1.2項に表示したように作図させます。FILEメニューからDataSaveサブメニューを選ぶと、テキストファイル書き込みのダイアログボックスが表示されますので、例えばファイル名をPolygon3の様に決めてファイルに書き込みます。
書き込みのとき表示した画像を消すのは、同じくFILEメニューからClearサブメニューを選びます。EDITメニューのClearScreen/CLSを使っても画面は消去されますが、これは一時的な消去であって、再描画の候補になっています。SamplesのサブメニューのPolygonサブサブメニューにチェックマークが付いていますので、Clearサブメニューを使って消去すると、画面の消去と同時にこのチェックマークも外れます。
画像の再現は、FILEメニューからDataReadサブメニューを選び、ファイル名を選べば図を再現させることができます。この作画は、背景画の方に書き込みます。テキスト形式のメタファイルのリストを次ページに載せました。この形式を参考にしてメタファイルを書けば、任意の作図ができます。
メタファイルのテキストのダンプ(Polygon3.txt)
"DWND",0,0,640 "DCLS",0,0,0 "DPSZ",4,0,0 "DPMV",0,200,0 "DPDR",0,200,0 "DPDR",173.205257662603,-99.9996935896872,0 "DPDR",-173.204726943831,-100.000612819687,0 "DPDR",-1.06143591733735E-03,199.999999997183,0 "DPSZ",3,0,0 "DSTP",10,0,0 "DPMV",0,180,0 "DPDR",0,180,0 "DPDR",155.884731896343,-89.9997242307185,0 "DPDR",-155.884254249448,-90.0005515377181,0 "DPDR",-9.55292325603618E-04,179.999999997465,0 "DPSZ",3,0,0 "DPMV",0,160,0 "DPDR",0,160,0 "DPDR",138.564206130082,-79.9997548717498,0 "DPDR",-138.563781555065,-80.0004902557494,0 "DPDR",-8.49148733869883E-04,159.999999997747,0 "DPSZ",3,0,0 "DPMV",0,140,0 "DPDR",0,140,0 "DPDR",121.243680363822,-69.999785512781,0 "DPDR",-121.243308860682,-70.0004289737807,0 "DPDR",-7.43005142136147E-04,139.999999998028,0 "DPSZ",2,0,0 "DPMV",0,120,0 "DPDR",0,120,0 "DPDR",103.923154597562,-59.9998161538123,0 "DPDR",-103.922836166299,-60.0003676918121,0 "DPDR",-6.36861550402412E-04,119.99999999831,0 "DPSZ",2,0,0 "DPMV",0,100,0 "DPDR",0,100,0 "DPDR",86.6026288313015,-49.9998467948436,0 "DPDR",-86.6023634719156,-50.0003064098434,0 "DPDR",-5.30717958668677E-04,99.9999999985917,0 "DPSZ",2,0,0 "DPMV",0,80,0 "DPDR",0,80,0 "DPDR",69.2821030650412,-39.9998774358749,0 "DPDR",-69.2818907775325,-40.0002451278747,0 "DPDR",-4.24574366934942E-04,79.9999999988734,0 "DPSZ",1,0,0 "DPMV",0,60,0 "DPDR",0,60,0 "DPDR",51.9615772987809,-29.9999080769062,0 "DPDR",-51.9614180831494,-30.000183845906,0 "DPDR",-3.18430775201206E-04,59.999999999155,0 "DPSZ",1,0,0 "DPMV",0,40,0 "DPDR",0,40,0 "DPDR",34.6410515325206,-19.9999387179375,0 "DPDR",-34.6409453887662,-20.0001225639374,0 "DPDR",-2.12287183467471E-04,39.9999999994367,0 "DTXT",-10,10,"n=3"
備考:
上記のメタファイルのテキストには、10行目のテキストを追加してあります。
"DSTP",10,0,0
これは、10秒間の待ち(Pause)を指示するコマンドです。グラフィックスをデモンストレーションに利用してある表示をしているとき、説明のための時間を取りたいときにPauseをかけます。すぐに続けたいときは【OK】をクリックして続行させることができます。