BricsCADは、COM(ActiveX)のインターフェスを提供していますので可能です。また、以下の特徴があります。

BricsCAD の COMインターフェースは、AutoCAD COMモデルに非常に近く、両方のプラットフォーム上で 同じコードを実行する簡単な方法を提供しています。

他ソフトウェアの VBA から BricsCAD をコントロールするのは、AutoCAD® など他のCAD用に作った過去の資産を流用して使う場合に便利な仕組みといえるかもしれません。


BricsCAD のタイプライブラリを参照する

Excel VBA から BricsCAD と連携するには、BricsCAD がインストールされているPC の Excel でタイプライブラリを参照します。
Excel の VBA IDE を開いて参照設定を開いてみてください。

1689816819736-U6pWDY8hRP

参照ダイアログのリストに「 BricscadApp Type Library <バージョン> 」、「 BricscadDb Type Library <バージョン> 」のライブラリ(バージョンごとに登録されています。V23なら 23.0)が見つかるはずですので、チェックを入れて参照します。(無い場合は BricsCAD を再インストールしてみてください。)

1689817701199-Q2MwlGtW92参照設定ダイアログ

参照設定を追加したら VBA IDE のオブジェクトブラウザを表示して、ライブラリの内容を確認してみます。BricscadAppBricscadDb でそれぞれのクラスやプロパティ、定数などの内容を確認することができます。

1689817799165-aiGUD7j7YQオブジェクトブラウザ

BricsCAD の COM オブジェクト モデル

BricsCAD のオブジェクトにアクセスするには、コンポーネントのオブジェクト モデルを把握しておきたいところだと思います。
おおむね AutoCAD と同じような構成ですが、詳細は下記のページをご覧ください。

参考記事: BricsCAD V24 - [Developer Reference (bricsys.com)]
(https://developer.bricsys.com/bricscad/help/en_US/CurVer/DevRef/index.html)


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


picture pc f3e775dbb303f614cf8c14f8d8bc0208PutCellPoints のマクロを実行した例
記述されている2行目から9行目の座標点でポリラインが生成されています。

以上、Excel VBA から BricsCAD を操作してみるというテーマで、簡単に解説をしました。Windows の場合、COM(ActiveX)を介して他のアプリケーションから BricsCAD と通信してデータなどを送受信できます。
今回は、Excel の VBA から BricsCAD に送る形でしたが、BricsCAD Pro 以上のライセンスレベルでは BricsCAD 内で VBA を使えますので、今回とは逆に BricsCAD 側から Excel のセル情報を読み取って作図するという事もできます。また、データ書き出しコマンド(_DATAEXTRACTION)のように、図面の情報を拾ってエクセルにデータとして取り込むことも可能です。

VBA を使ったカスタマイズは冒頭で書いた通り、過去の資産を流用して使う場合に便利な仕組みとなります。中の人としては、BricsCAD 向けに新たに開発をするケースで Visual Basic の開発言語を使いたい場合は、より汎用的な .NET API を活用して構築することをお勧めします。

sugihara-avatericon.png
Hiroki Sugihara - Solution Consultant

デジタルなものづくりに引き寄せられて CAD&CG の世界に入った Hiroki Sugihara は、長年 CAD、WEB、DTP など幅広い経験を持っています。Lisp プログラムでもあり建築、設備系のアプリケーション開発での知見や、長い DWG系CADの業界経験を活かして BricsCAD の導入を支援するため Bricsys Japan の立ち上げメンバーとして活動しています。