見出し画像

Excel VBA から BricsCAD を操作する

他のソフトウェアから命令を送って BricsCAD で作図・編集をする方法として、Microsoft® Excel® の VBA から、命令を送って操作するという方法があります。
 すでに古のカスタマイズ手法に分類されつつある方法かもしれませんが、昔詳しい人が作成されたものを、メンテナンスしながら現在も使っているという会社さんも多いかも?ということで、取り上げたいと思います。

EXCEL VBA とBricsCAD の連携は可能?

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

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

他ソフトウェアの 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 のオブジェクトブラウザを表示して、ライブラリの内容を確認してみます。BricscadAppBricscadDb でそれぞれのクラスやプロパティ、定数などの内容を確認することができます。

オブジェクトブラウザ

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
	 
PutCellPoints のマクロを実行した例
記述されている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 を活用して構築することをお勧めします。

参考記事: BricsCAD® V23 の .NET(Visual Basic)でHello World!

では、良い CADライフを!👍

BricsCAD の体験版は無料ですべての機能を試せます。 BricsCAD は 2D設計と3D設計を一つのプラットフォーム上で行える学習コスト・運用コスト共に優しい CAD です。 記事が役に立ったら「❤スキ」のクリックもお願いします!