AutoCADの世界へようこそ。私はこのプラットフォームの深淵を長年見守ってきたエンジニアです。
「マクロの記録」という安全な岸辺から離れ、コードという名の筆で直接AutoCADを操る決意をしたあなたを歓迎します。AutoCAD VBAは、単なる自動化ツールではありません。あなたのCAD操作という「作業」を、一瞬で終わる「処理」へと昇華させるための最強の武器です。
今回は、すべての始まりである「図面の生成」と「図形の描画」という、AutoCADオートメーションの心臓部を紐解いていきましょう。
—
1. AutoCADオブジェクトモデルの「階層」を理解する
まず、最も重要な地図を描きます。AutoCADの頭の中は、以下の階層構造になっています。
- Application (AcadApplication):AutoCADそのもの。
- Documents (AcadDocuments):開いている図面ファイルの集まり。
- Document (AcadDocument):個別の図面ファイル。
- ModelSpace (AcadModelSpace):図形が住んでいる「現実の空間」。
私たちがコードを書くとき、常に「今どの階層にいるのか?」を意識してください。「アプリケーションから図面を呼び出し、モデル空間へアクセスして図形を置く」。この流れがすべてです。
—
2. 実践:新規図面の作成と描画のコード
それでは、実際に動くコードを見てみましょう。VBAエディタ(`Alt + F11`)を開き、標準モジュールに以下のコードを貼り付けてみてください。
Sub DrawBasicShapes()
‘ 変数の宣言(型を明確にすることで、AutoCADの動作は劇的に安定します)
Dim newDoc As AcadDocument
Dim mSpace As AcadModelSpace
Dim lineObj As AcadLine
Dim circleObj As AcadCircle
‘ 座標用の配列(AutoCADは常に「X, Y, Z」の3点座標で空間を認識します)
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim centerPoint(0 To 2) As Double
Dim radius As Double
‘ 1. 新規図面の作成
‘ “acad.dwt” は標準テンプレート。ここから新しいキャンバスが生まれます。
Set newDoc = ThisDrawing.Application.Documents.Add(“acad.dwt”)
‘ 2. モデル空間へのアクセス
‘ 図形は「どこに」描くのか。ModelSpaceを指定するのが鉄則です。
Set mSpace = newDoc.ModelSpace
‘ 3. 線分の定義(0,0,0 から 100,100,0 まで)
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 100: endPoint(1) = 100: endPoint(2) = 0
Set lineObj = mSpace.AddLine(startPoint, endPoint)
‘ 4. 円の定義(中心 50,50,0、半径 20)
centerPoint(0) = 50: centerPoint(1) = 50: centerPoint(2) = 0
radius = 20
Set circleObj = mSpace.AddCircle(centerPoint, radius)
‘ 描画後の再描画(画面を最新の状態に更新)
newDoc.Regen acActiveViewport
MsgBox “図形の生成が完了しました。”
End Sub
—
3. なぜ「型」を定義し、座標を「配列」にするのか?
初心者の方がここで躓きやすいポイントを、先輩として解説します。
「型(Object)」を指定する意味
`Dim lineObj As AcadLine` と書くことで、VBAは「あ、これは線分だな」と理解し、線分特有のプロパティ(始点や終点など)をインテリセンス(入力補完)で提案してくれるようになります。型を指定しない `Dim lineObj As Object` と書くのは、目隠しをして図面を引くようなものです。
座標が「配列(0 to 2)」である理由
AutoCADは2次元のソフトに見えて、内部的には常に「3次元空間(Z軸含む)」で計算を行っています。そのため、X=100 と指定したい場合でも `point(0)=100` と配列の0番目に格納する必要があります。これは設計上の不変のルールです。
—
4. 陥りやすい「エラー」と対策
現場でよくある失敗を先回りして教えます。
- 「オブジェクト変数またはWithブロック変数が設定されていません」
- 原因:`Set` を忘れていませんか? オブジェクト(図面や図形)を代入するときは必ず `Set` が必要です。
- 「モデル空間が見つからない」
- 原因:まだ図面が開かれていない状態で `ModelSpace` にアクセスしようとしています。`Documents.Add` を実行した直後であることを確認してください。
—
最後に:ここからがスタート地点です
今回解説したのは、広大なAutoCAD APIのほんの入り口に過ぎません。しかし、この「新規図面を作り、モデル空間に線を引き、円を置く」という手順さえマスターすれば、あとは「繰り返す(Loop)」か「条件で分ける(If)」かを組み合わせるだけで、どんなに複雑な図面でも自動生成できるようになります。
コードを書くことは、AutoCADという巨大なシステムと対話することです。エラーが出ても恐れることはありません。それは、システムがあなたに「もっと正しく指示してほしい」と語りかけているだけなのですから。
さあ、次はあなたの業務にある「繰り返し作業」を、このコードで書き換えてみましょう。何か困ったことがあれば、いつでもまた聞きに来てくださいね。あなたの挑戦を応援しています。
