VBの作画に利用する基本メソッドは、第2.2節でも説明したように、Cls, Pset, Line, Circle, Print の五つしかありません。また、線の太さとか色などの属性(プロパティ)を設定することも処理単位としてはメソッド扱いになります。VB_Graphics では、これらのメソッドをプログラムコードの中で直接使うのを避けて、幾つかの中間言語から間接的に呼ぶようにしてあります。その理由は、第3.5節の簡易メタファイルの設計とも関連しています。基本的に利用するプロシージャ名は下に、またソースコードのリストを次ページに示します。
上記の他に種々の作画関連のプロシージャがありますが、やや専門的ですので省きます。これらのソースコードは、Gronのパラメータを判定して、或キーワードを付けて、プロシージャの引き数と共にファイルに書き出すようにしてあります。これが私的に定義したメタファイルへの書き出しです。ここに示したメタファイルの仕様は2002年の暫定版です。
メタファイルはテキスト形式で書き出しますので、その中身はテキストエディタで見る事ができます。見本は第3.5節の後半に載せてあります。メタファイルに書き出すのは、現在では既に作成済みの例題だけです。例題を表示しておいて、FILE メニューから DataSave サブメニューで書き出し、DataRead サブメニューで描画させることができます。描画のルーチンPicture1_Paint2 のリストも添付しました。このメタファイルのテキストの書式で、コンソールウインドウのテキストボックスから入力させて作図ができると、インタラクティブな作図ができます。この機能は未だ組み込んでありません(2003年版)。これはVB6の言語仕様がQuick Basicから変わって、キーボードからの入力文 Input が無くなったためです。
もう一組、工業製図に利用するプロシージャを集めたモジュール KJplot.bas があります。こちらは、文字をベクトルフォントで描き出すルーチン(Symbol, Number, Kanji)と、製図用の点線・破線・一点鎖線を描画するルーチン(Dashl, Dashp, Dashpp)などが含まれています。これらは、最終的には、Dpmove/Dpdrawのルーチンに落として作画させています。リストはやや大きいので省きました。
Public Sub Dpmove(XP, YP)
Dim XQ, YQ
XQ = (XP * ZCOR - YP * ZSIR) * ZFAC
YQ = (XP * ZSIR + YP * ZCOR) * ZFAC
FormGraphic.Picture1.CurrentX = XQ
FormGraphic.Picture1.CurrentY = YQ
If Gron = 1 Then Write #2, "DPMV", XP, YP, 0
End Sub
'----------------------------------------------------------------------------
Public Sub Dpdraw(XP, YP)
Dim XQ, YQ, X0, Y0
XQ = (XP * ZCOR - YP * ZSIR) * ZFAC
YQ = (XP * ZSIR + YP * ZCOR) * ZFAC
X0 = FormGraphic.Picture1.CurrentX:
Y0 = FormGraphic.Picture1.CurrentY
FormGraphic.Picture1.Line (X0, Y0)-(XQ, YQ), Icolor
If Gron = 1 Then Write #2, "DPDR", XP, YP, 0
End Sub
'----------------------------------------------------------------------------
Public Sub Dpensz(Ipsz)
FormGraphic.Picture1.DrawWidth = Ipsz
If Gron = 1 Then Write #2, "DPSZ", Ipsz, 0, 0
End Sub
'----------------------------------------------------------------------------
Public Sub Dperas()
FormGraphic.Picture1.Cls
If Gron = 1 Then Write #2, "DCLS", 0, 0, 0
End Sub
'----------------------------------------------------------------------------
Public Sub Dpcirc(xx, yy, rr)
FormGraphic.Picture1.Circle (xx, yy), rr, RGB(0, 0, 0) 'Icolor
If Gron = 1 Then Write #2, "DCRC", xx, yy, rr
End Sub
'----------------------------------------------------------------------------
Public Sub Dpoint(xx, yy, imark)
If (imark = 0) And (FormGraphic.Picture1.DrawWidth = 1) Then
FormGraphic.Picture1.PSet (xx, yy), Icolor
Else
Dpmove xx, yy
Dpdraw xx, yy
End If
If Gron = 1 Then Write #2, "DPNT", xx, yy, imark
End Sub
'----------------------------------------------------------------------------
Public Sub Dptext(xx, yy, ByVal text As String)
FormGraphic.Picture1.CurrentX = xx
FormGraphic.Picture1.CurrentY = yy
FormGraphic.Picture1.Print text
If Gron = 1 Then Write #2, "DTXT", xx, yy, text
End Sub
'----------------------------------------------------------------------------
Public Sub Dpause(Itime)
ICountSecond = Itime
If Itime < = 0 Then ICountSecond = 3600
FormGraphic.Timer1.Enabled = True
Do While FormGraphic.Timer1.Enabled = True
DoEvents
Loop
FormGraphic.Timer1.Enabled = False
If Gron = 1 Then Write #2, "DSTP", Itime, 0, 0
End Sub
Public Sub Picture1_Paint2()
Dim lwidth, Itime, imode, IX As Integer
Dim gx, gy, ww, wx, wy, rr, imark
Dim x1, x2, x3 As Variant
Dim DName As String, text As String
On Error Resume Next
imode = FormGraphic.Picture1.AutoRedraw
If imode = False Then FormGraphic.Picture1.AutoRedraw = True
Open strReadFileName For Input As #1
Do While Not EOF(1)
Input #1, DName, x1, x2, x3
Select Case DName
Case "DCLS"
FormGraphic.Picture1.Cls
Case "DCOL"
Icolor = x1
Case "DWND"
wx = x1: wy = x2: ww = x3: Dpwind wx, wy, ww
Case "DPSZ"
lwidth = x1: Dpensz lwidth
Case "DPMV"
gx = x1: gy = x2: Dpmove gx, gy
Case "DPDR"
gx = x1: gy = x2: Dpdraw gx, gy
Case "DPNT"
gx = x1: gy = x2: imark = x3: Dpoint gx, gy, imark
Case "DCRC"
gx = x1: gy = x2: rr = x3: Dpcirc gx, gy, rr
Case "DTXT"
gx = x1: gy = x2: text = x3: Dptext gx, gy, text
Case "DSTP"
Itime = x1: Dpause Itime
End Select
Loop
Close #1
FormGraphic.Picture1.AutoRedraw = imode
Exit Sub
'
100
IX = MsgBox("File error", 0)
Close #1
FormGraphic.Picture1.AutoRedraw = imode
End Sub