【入門編】【初心者向け】AutoCAD VBAで図面上の点(Point)オブジェクトを、指定した座標に自動配置する – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握する:図面に「点」を打つという極意

こんにちは。AutoCADの自動化の世界へようこそ。

「マクロの記録」ボタンを押して、生成されたコードの羅列に呆然とした経験はありませんか?あれはあくまで「手作業の録画」に過ぎません。今日から皆さんが目指すのは、「AutoCADの頭脳を直接操作するエンジニア」です。

今回は、自動化の第一歩として「指定した座標に点(Point)オブジェクトを配置する」という、一見単純ながらもCADエンジニアの基礎となる技術を伝授します。

1. AutoCADオブジェクトモデルの「心臓部」を理解する

AutoCAD VBAを操る上で、絶対に避けて通れないのが「オブジェクトモデル」という階層構造です。

  • Application(AutoCADそのもの)
  • Document(開いている図面ファイル)
  • ModelSpace(図面の中の「紙面」そのもの)

私たちが何かを描こうとする時、それは必ず「ModelSpace(モデル空間)」というキャンバスに対して命令を送ることになります。「どこに」「何を」置くか、これをプログラムに教えるのが今回の目的です。

2. 実践:座標を指定して「点」を配置するコード

まずは、以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。

Sub CreatePointAtCoordinate()
‘ 1. オブジェクト変数の宣言(メモリの準備)
Dim ptObj As AcadPoint
Dim coord(0 To 2) As Double ‘ X, Y, Z座標を格納する箱

‘ 2. 座標値を設定(今回は X=100, Y=50, Z=0)
coord(0) = 100: coord(1) = 50: coord(2) = 0

‘ 3. 点オブジェクトをモデル空間に追加
‘ AddPointメソッドは「どこに(coord)作成するか」を引数に取ります
Set ptObj = ThisDrawing.ModelSpace.AddPoint(coord)

‘ 4. 更新を通知(これがないと画面がチラつくことがあります)
ptObj.Update

MsgBox “座標(100, 50)に点を配置しました。”
End Sub

3. コードの「裏側」で起きていること(ここが重要!)

ただコピペするだけでは成長はありません。なぜこのコードが動くのか、プロの視点で解説します。

  • 配列 `coord(0 To 2)` の意味

AutoCADの座標系は、常に3次元(X, Y, Z)です。たとえ2次元の図面であっても、プログラム側には必ず3つの箱(Double型)を用意してあげる必要があります。ここを疎かにすると、メモリの型不一致エラーの温床になります。

  • `ThisDrawing` の魔法

VBAには最初から`ThisDrawing`というオブジェクトが用意されており、これは現在アクティブな図面を指します。`Application.Documents.ActiveDocument`と書くのと同じ意味ですが、現場では簡潔に`ThisDrawing`を使うのが定石です。

  • `Set` キーワードの存在

数値の代入には不要ですが、オブジェクト(図形)を扱う時は必ず`Set`が必要です。これを忘れると「オブジェクトが設定されていません」というエラーでプログラムは停止します。

4. 初心者が陥りやすい「落とし穴」

現場でよくある失敗談を共有します。これを知っておくだけで、皆さんのデバッグ時間は半分になります。

1. 「点が見えない!」問題
コードは完璧なのに点が見えない。これはAutoCADのシステム変数 `PDMODE`(点の表示形式)が「点」のままだからです。
対策:コードの冒頭で `ThisDrawing.SetVariable “PDMODE”, 3` を実行し、表示形式を変更しておきましょう。
2. 空間の勘違い
`ModelSpace` ではなく `PaperSpace`(レイアウト)に描こうとしていないか確認してください。初心者のうちは、とりあえず `ModelSpace` に絞って考えるのが安全です。

最後に:なぜ今、AutoCAD VBAを学ぶのか

世の中には様々な自動化ツールがありますが、AutoCADの内部から直接エンジンを叩けるVBAは、今なお現場の強力な武器です。

今回学んだ「座標を指定して図形を配置する」というロジック。これは、「CSVから座標リストを読み込んで何千もの点を一瞬で打つ」という業務効率化の核心部分そのものです。

まずはこのコードを動かし、次に「もし座標をExcelから読み込めたら?」と想像してみてください。そこが、皆さんが自動化エンジニアとして覚醒するポイントです。

困ったことがあれば、いつでもまた聞きに来てください。CADの深淵で、皆さんの成長を楽しみにしていますよ。

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