こんにちは。AutoCADの自動化という深淵な世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの羅列に絶望したことはありませんか?実は、AutoCAD VBAにおいて「マクロの記録」は存在しません。なぜなら、AutoCADのエンジンはあまりに巨大で、ユーザーの操作をそのままコードに落とし込むには複雑すぎるからです。
しかし、恐れることはありません。AutoCADのオブジェクトモデルさえ理解してしまえば、あなたはCADを「操作する側」から「支配する側」へ回ることができます。
今日は、図形作成の基本中の基本、円・線・ポリラインを自在に操るための「設計図」を伝授しましょう。
—
1. AutoCADオブジェクトモデルの「絶対法則」
コードを書く前に、これだけは頭に叩き込んでください。AutoCAD VBAの世界は、以下の階層構造で成り立っています。
- Application: AutoCADそのもの
- Document: 開いている図面ファイル
- ModelSpace: 図面上の「紙面(空間)」
VBAで図形を作るということは、「現在アクティブなDocumentのModelSpaceに対し、新しい図形を追加する」という命令を出すことに他なりません。
—
2. 最初のステップ:図形を描く
まずは、直線、円、ポリラインを自動生成するコードを見てみましょう。
Sub DrawBasicShapes()
‘ 現在の図面(ActiveDocument)のモデル空間(ModelSpace)を取得
Dim ms As AcadModelSpace
Set ms = ThisDrawing.ModelSpace
‘ 1. 直線 (AddLine)
‘ 開始点(0,0,0)から終了点(100,100,0)へ
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 100: endPoint(1) = 100: endPoint(2) = 0
Dim myLine As AcadLine
Set myLine = ms.AddLine(startPoint, endPoint)
‘ 2. 円 (AddCircle)
‘ 中心(50,50,0)、半径20
Dim center(0 To 2) As Double
center(0) = 50: center(1) = 50: center(2) = 0
Dim myCircle As AcadCircle
Set myCircle = ms.AddCircle(center, 20)
‘ 3. ポリライン (AddLightweightPolyline)
‘ 頂点を配列で渡すのがコツ
Dim pts(0 To 5) As Double
pts(0) = 100: pts(1) = 0
pts(2) = 150: pts(3) = 50
pts(4) = 200: pts(5) = 0
Dim myPline As AcadLWPolyline
Set myPline = ms.AddLightweightPolyline(pts)
‘ 変更を反映させるために画面を更新
ThisDrawing.Regen acActiveViewport
End Sub
コードのここがポイント!
- 座標は配列で定義: AutoCADの座標は、必ず `(0 to 2)` のDouble型配列で渡します。Z軸を使わない場合でも `0` を入れるのが作法です。
- Set命令: オブジェクト(線や円)を生成するときは必ず `Set` を使います。これを忘れると「オブジェクトが設定されていません」というエラーの洗礼を受けることになります。
—
3. 図形を「編集」する魔法
図形は作って終わりではありません。作成したオブジェクトを変数(`myLine`など)に代入しておけば、後からプロパティを書き換えるだけで編集が可能です。
Sub EditShapes()
Dim ms As AcadModelSpace
Set ms = ThisDrawing.ModelSpace
‘ モデル空間の最後のオブジェクトを取得(例)
Dim lastObj As AcadEntity
Set lastObj = ms.Item(ms.Count – 1)
‘ 色を変更する(AutoCADの色番号:1=赤, 2=黄, 3=緑…)
lastObj.Color = 1
‘ ポリラインなら閉じることも可能
If TypeOf lastObj Is AcadLWPolyline Then
Dim pline As AcadLWPolyline
Set pline = lastObj
pline.Closed = True
End If
lastObj.Update
End Sub
—
4. 初学者が必ずハマる「落とし穴」
現場でよくある失敗事例を共有します。これを知っておけば、あなたは一歩先を行くエンジニアです。
1. 「オブジェクトがありません」エラー:
ModelSpaceを取得せずにいきなり `AddLine` をしようとしていませんか?VBAは「どこに」描くのかを明示しないと動きません。
2. 型不一致エラー:
`AddLightweightPolyline` に渡す頂点配列のサイズを間違えていませんか?配列のインデックスは「要素数-1」です。
3. コマンドの更新:
コードを実行しても画面が変わらない?それは `Regen`(再作図)が足りないからです。AutoCADは効率化のために、明示的な命令がない限り画面の再描画をサボることがあります。
—
最後に:ここをクリアすれば、あなたは変わる
今回紹介したコードは、言わば「AutoCADを動かすための最小単位」です。この基本さえマスターすれば、あとは「ループ文(For…Next)」を組み合わせるだけで、数千本の線を一瞬で描くことも、CSVから座標を読み込んで図面を自動作成することも可能になります。
まずは、このコードをコピーして、エディタ(VBE)に貼り付けてみてください。自分の書いたコードで画面上の図形が踊り出した瞬間、あなたは「CADオペレーター」から「エンジニア」へと進化しているはずです。
もし分からないことがあれば、いつでも聞いてください。次は、より実践的な「レイヤー管理」や「ブロック挿入」の深淵へご案内しましょう。応援していますよ。
