【入門編】【初心者向け】AutoCAD VBAで図形を操作!円、線、ポリラインの作成と編集 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは。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オペレーター」から「エンジニア」へと進化しているはずです。

もし分からないことがあれば、いつでも聞いてください。次は、より実践的な「レイヤー管理」や「ブロック挿入」の深淵へご案内しましょう。応援していますよ。

タイトルとURLをコピーしました