Excel VBA から BricsCAD を操作する
他のソフトウェアから命令を送って BricsCAD で作図・編集をする方法として、Microsoft® Excel® の VBA から、命令を送って操作するという方法があります。
すでに古のカスタマイズ手法に分類されつつある方法かもしれませんが、昔詳しい人が作成されたものを、メンテナンスしながら現在も使っているという会社さんも多いかも?ということで、取り上げたいと思います。
EXCEL VBA とBricsCAD の連携は可能?
BricsCADは、COM(ActiveX)のインターフェスを提供していますので可能です。また、以下の特徴があります。
他ソフトウェアの VBA から BricsCAD をコントロールするのは、AutoCAD® など他のCAD用に作った過去の資産を流用して使う場合に便利な仕組みといえるかもしれません。
BricsCAD のタイプライブラリを参照する
Excel VBA から BricsCAD と連携するには、BricsCAD がインストールされているPC の Excel でタイプライブラリを参照します。
Excel の VBA IDE を開いて参照設定を開いてみてください。
参照ダイアログのリストに「BricscadApp Type Library <バージョン>」、「BricscadDb Type Library <バージョン>」のライブラリ(バージョンごとに登録されています。V23なら 23.0)が見つかるはずですので、チェックを入れて参照します。(無い場合は BricsCAD を再インストールしてみてください。)
参照設定を追加したら VBA IDE のオブジェクトブラウザを表示して、ライブラリの内容を確認してみます。BricscadApp と BricscadDb でそれぞれのクラスやプロパティ、定数などの内容を確認することができます。
BricsCAD の COM オブジェクト モデル
BricsCAD のオブジェクトにアクセスするには、コンポーネントのオブジェクト モデルを把握しておきたいところだと思います。
おおむね AutoCAD と同じような構成ですが、詳細は下記のページをご覧ください。
参考記事: BricsCAD V24 - Developer Reference (bricsys.com)
VBAコードのサンプル
ごく簡単な Excel VBA から BricsCAD に作図をするサンプルを掲載します。
BricsCAD に接続する処理
Excel VBA から BricsCAD に接続する処理は、以下のようになります。
(起動していない場合は起動します。)
Option Explicit
Public acadApp As AcadApplication
Public acadDoc As AcadDocument
Sub Connect_Bcad()
On Error Resume Next
'Set acadApp = Interaction.GetObject(, "AutoCAD.Application")
Set acadApp = Interaction.GetObject(, "BricscadApp.AcadApplication")
If Err Then
Debug.Print "ERROR " & Err.Number
Debug.Print Err.Description
Debug.Print "starting autocad"
Err.Clear
Set acadApp = New AcadApplication
acadApp.Visible = True
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Debug.Print "Now running " + acadApp.Name + " version " + acadApp.Version
Set acadDoc = acadApp.ActiveDocument
If acadDoc Is Nothing Then
Set acadDoc = acadApp.Documents.Add
End If
If acadDoc.ActiveSpace = 0 Then
acadDoc.ActiveSpace = 1
End If
End Sub
コードの移植をイメージして、
Set acadApp = Interaction.GetObject(, "AutoCAD.Application")
をコメントアウトして、
Set acadApp = Interaction.GetObject(, "BricscadApp.AcadApplication")
を足したような形にしています。前述の同じコードを実行する簡単な方法のひとつのケースといえます。
Excel VBA からBricsCAD に線分作図を実行する処理
XYZ座標 1,2,0 と 5,10,0 で線分を作図をする処理です。
Sub Drawline()
Call Connect_Bcad
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 1
startPoint(1) = 2
startPoint(2) = 0
endPoint(0) = 5
endPoint(1) = 10
endPoint(2) = 0
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
Call acadDoc.Application.ZoomExtents
End Sub
始点(startPoint)、終点(endPoint)の配列はそれぞれ 0=X, 1=Y, 2=Z の座標です。
表の座標値を使ってBricsCAD にポリラインを作図する処理
固定の座標に作図させるだけだと汎用的でないので、エクセルに記述されている座標情報を使って軽量ポリラインを作図させてみましょう。
Sub PutCellPoints()
On Error GoTo ErrorHandler
Dim i As Long
Dim row As Long
Dim cell As Variant
Dim x As Double
Dim y As Double
Dim p() As Double
i = 0
For row = 2 To 65536
cell = Sheet1.Cells(row, 1).Value
If IsEmpty(cell) Then
Exit For
Else
x = CDbl(Sheet1.Cells(row, 1).Value)
y = CDbl(Sheet1.Cells(row, 2).Value)
ReDim Preserve p(0 To i * 2 + 1)
p(i * 2) = x: p(i * 2 + 1) = y
i = i + 1
End If
Next row
If i >= 2 Then
Call PutPointsBcad(p())
Else
Call MsgBox("頂点座標は2つ以上必要です。")
End If
Exit Sub
ErrorHandler:
Call MsgBox("エラーが発生したため終了します。")
End Sub
Private Sub PutPointsBcad(p() As Double)
Call Connect_Bcad
Dim BcadLwPline As BricscadDB.AcadLWPolyline
Set BcadLwPline = acadDoc.ModelSpace.AddLightWeightPolyline(p())
Call acadDoc.Application.ZoomExtents
End Sub
以上、Excel VBA から BricsCAD を操作してみるというテーマで、簡単に解説をしました。Windows の場合、COM(ActiveX)を介して他のアプリケーションから BricsCAD と通信してデータなどを送受信できます。
今回は、Excel の VBA から BricsCAD に送る形でしたが、BricsCAD Pro 以上のライセンスレベルでは BricsCAD 内で VBA を使えますので、今回とは逆に BricsCAD 側から Excel のセル情報を読み取って作図するという事もできます。また、データ書き出しコマンド(_DATAEXTRACTION)のように、図面の情報を拾ってエクセルにデータとして取り込むことも可能です。
VBA を使ったカスタマイズは冒頭で書いた通り、過去の資産を流用して使う場合に便利な仕組みとなります。中の人としては、BricsCAD 向けに新たに開発をするケースで Visual Basic の開発言語を使いたい場合は、より汎用的な .NET API を活用して構築することをお勧めします。
参考記事: BricsCAD® V23 の .NET(Visual Basic)でHello World!
では、良い CADライフを!👍