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