AutoCAD VBAの深淵へ:Named Objects Dictionaryで「図面に魂を吹き込む」技術
こんにちは。AutoCADの自動化という荒野を切り拓く仲間の皆さん。
これまで「マクロの記録」や、せいぜい「図形をループで回して色を変える」といった初歩的なステップを踏んできた皆さんに、今日お伝えしたいのは「図面そのものをデータベースとして使いこなす極意」です。
AutoCADの図面(DWG)には、線や円といった目に見える図形以外に、プログラムが自由に使える「隠し場所」があります。それが今回解説する「Named Objects Dictionary(名前付きオブジェクト辞書)」です。
これを知れば、図面の中に「管理番号」「最終承認者」「特定のカスタム設定」を埋め込み、他人が触れない自分だけの管理システムを作れるようになります。さあ、一歩先のエンジニアへと進化しましょう。
—
1. Named Objects Dictionary(NOD)とは何か?
AutoCADの図面内には、画層や線種といったテーブルとは別に、「辞書(Dictionary)」と呼ばれるデータ格納庫が存在します。
- 何ができるのか?:図面に独自のキー(文字列)と値(文字列やバイナリ)を紐付けて保存できます。
- なぜ使うのか?:図面を誰かに渡しても、そのデータは図面と共に移動します。「設定用テキストファイル」を別途送る必要はもうありません。
イメージとしては、図面ファイルという「巨大な金庫」の中に、あなた専用の「引き出し」を作る作業です。
—
2. 実践:NODへのアクセスとデータ保存
まずは、図面に「MyProject_Settings」という名前の辞書を作り、そこに「ManagerName」というデータを書き込むコードを見てみましょう。
Sub SaveCustomData()
Dim dict As AcadDictionary
Dim xrec As AcadXRecord
Dim keyName As String
Dim data(0) As Variant
Dim type(0) As Integer
‘ 1. 名前付きオブジェクト辞書(NOD)のルートを取得
Set dict = ThisDrawing.Database.Dictionaries.Add(“MyProject_Settings”)
‘ 2. データを格納するためのXRecordを作成
Set xrec = dict.AddXRecord(“ManagerInfo”)
‘ 3. 格納するデータの設定(データ型と値)
‘ 1は文字列であることを示すDXFコード
type(0) = 1
data(0) = “Yamada_Taro”
‘ 4. データを書き込む
xrec.SetXRecordData type, data
MsgBox “データの保存に成功しました!”
End Sub
ここがエンジニアの勘所:
- Dictionaries.Add: 既に同名の辞書が存在するとエラーになります。実務では「エラーハンドリング(On Error Resume Nextなど)」で存在確認を挟むのが定石です。
- XRecord: NODは直接値を持ちません。必ず`XRecord`というコンテナを介すのがAutoCADの流儀です。
—
3. 保存したデータを読み出す
保存したデータは、もちろんいつでも取り出せます。図面を開いた瞬間に「この図面の管理者は誰か?」を判定するような自動化に応用できます。
Sub ReadCustomData()
Dim dict As AcadDictionary
Dim xrec As AcadXRecord
Dim type As Variant
Dim data As Variant
‘ 1. 既存の辞書を取得
Set dict = ThisDrawing.Database.Dictionaries(“MyProject_Settings”)
Set xrec = dict.GetObject(“ManagerInfo”)
‘ 2. データの取得
xrec.GetXRecordData type, data
‘ 3. 表示
MsgBox “保存されていた管理者は: ” & data(0)
End Sub
—
4. 陥りやすい罠と解決策
初心者が必ずと言っていいほどハマるのが以下のポイントです。
- 「キーが見つからない」エラー: 辞書名やXRecord名が完全に一致していないと、AutoCADは容赦なくエラーを吐きます。必ず`On Error`で制御するか、`Dictionaries`コレクションの中身をループで確認するデバッグコードを書いてください。
- データ型の不一致: `XRecord`はDXFコードに従います。文字列なら`1`、整数なら`70`など、AutoCADの内部仕様に合わせる必要があります。これが面倒な場合は、すべて文字列として保存するのも一つの賢い逃げ道です。
—
まとめ:あなたの図面は「ただの絵」ではなくなる
Named Objects Dictionaryを使いこなすということは、「AutoCADを単なる作図ソフトから、設計情報を司るデータベースへと昇華させる」ということです。
この手法を習得すれば、外部ファイルとの連携ミスに悩まされることはなくなります。図面ファイルさえあれば、すべての設定がそこにある。これこそが、業務自動化エンジニアが目指すべき「完結したシステム」の第一歩です。
まずはこのコードをコピーして、ご自身の環境で試してみてください。エラーが出たら、それがあなたの技術を磨く最高のチャンスです。応援しています!
