AutoCAD図面管理の深淵:SummaryInfoを「真のメタデータ」へ昇華させる技術
AutoCADの図面プロパティ(SummaryInfo)。多くの現場では「図面タイトル」や「作成者」を埋めるだけの、おまけのような機能として扱われている。しかし、大規模なBIM/CIM連携や、社内資産としての図面管理システムを構築する際、この領域は「CADと外部データベースを繋ぐ唯一の物理的架け橋」となる。
今日は、AutoCAD VBAの深い階層に潜り込み、単なる書き込みを超えた「堅牢なメタデータ制御」の極意を伝授する。
—
1. なぜ「SummaryInfo」なのか:メモリ空間の生存戦略
AutoCADの`Database`オブジェクトから取得できる`SummaryInfo`は、図面ファイルそのものに付随するストリームだ。外部のExcelやSQL Serverで図面リストを管理する手法も一般的だが、「図面ファイルが独立して存在しうる」というCADの性質を鑑みれば、メタデータは図面内に刻印するのが最も生存確率が高い。
ただし、`SummaryInfo`の操作には注意が必要だ。`GetSummaryInfo`で取得したオブジェクトは、適切に扱わなければメモリリークの温床となる。
—
2. 実践:図面保存時の自動書き込み実装
以下のコードは、図面を保存するイベント(`BeginSave`)にフックし、確実にメタデータを更新するプロトタイプだ。
‘ クラスモジュール: ThisDrawing
Option Explicit
Private WithEvents oDoc As AcadDocument
Private Sub AcadDocument_BeginSave(ByVal FileName As String)
‘ 【重要】保存直前にメタデータを同期させる
‘ 外部システムとの連携時、ここではDB接続ではなくキャッシュされた変数を用いること
Call UpdateSummaryInfo(“Project-001”, “Chief-Architect-01”, “2023-V1.0”)
End Sub
Private Sub UpdateSummaryInfo(projID As String, author As String, version As String)
Dim oSumInfo As AcadSummaryInfo
Set oSumInfo = ThisDrawing.SummaryInfo
‘ プロパティの更新
oSumInfo.Title = “AutoCAD-Auto-Managed-File”
oSumInfo.Author = author
‘ カスタムプロパティへの書き込み
‘ 既存のキーを探索し、存在すれば更新、なければ追加
Dim i As Integer
Dim key As String, val As String
Dim found As Boolean: found = False
For i = 0 To oSumInfo.NumCustomInfo – 1
oSumInfo.GetCustomByIndex i, key, val
If key = “ProjectID” Then
oSumInfo.SetCustomByIndex i, projID
found = True
Exit For
End If
Next i
If Not found Then
oSumInfo.AddCustomInfo “ProjectID”, projID
End If
‘ メモリ最適化:明示的に参照を解放(VBAにおいては重要)
Set oSumInfo = Nothing
End Sub
—
3. チーフアーキテクトの視点:極限のチューニング
1. レガシー環境とWindows APIの壁
`SummaryInfo`はCOMインターフェースを介しているが、非常に巨大なDWGファイルや、ネットワークドライブ上の図面を開く際、稀にオブジェクトの応答が遅延する。この時、バックグラウンドでのI/O競合を避けるために、`Sleep`関数(`kernel32`)を用いて処理をわずかに分散させる実装が必要になる場合がある。
2. バージョン互換制御の極意
`SaveAs`コマンドを多用する環境では、ファイル形式(`ac2010_dwg`など)によって`SummaryInfo`のメタデータ構造が微妙に変化することがある。
- 教訓: `Database.SaveAs`を呼ぶ際は、必ず現在の`SummaryInfo`が、保存先のフォーマットで要求される型に適合しているかを確認せよ。特にカスタムプロパティの文字列長制限(255文字以下)を越えると、保存時にサイレントエラーを引き起こすリスクがある。
3. エクスプローラーとの同期(Windows Shell Extensionの落とし穴)
Windowsのエクスプローラーでプロパティを表示させるには、`iProperty`ハンドラが正しく登録されている必要がある。もし「VBAで書き込んだはずなのにエクスプローラーに反映されない」という事象が発生した場合、それはAutoCADの`SummaryInfo`の問題ではなく、OS側のシェルキャッシュの問題だ。その際、コマンドラインから `attrib` をいじるような小細工はせず、図面を一度 `Close` し、キャッシュを無効化するプロセスを挟むのが最もスマートな解決策となる。
—
4. 最後に:エンジニアへの提言
図面プロパティの自動制御は、ただの「自動化」ではない。それは「図面に知性を持たせる」という行為だ。
もしあなたがシニアエンジニアとしてこの仕組みを構築するなら、単に「書き込む」だけではなく、「読み取り専用のチェック」や「暗号化されたハッシュ値の付与」などを検討してほしい。図面は単なる幾何学データの集まりではなく、プロジェクトの歴史そのものだ。そのメタデータを掌握することは、組織の資産を掌握することに他ならない。
現場のコードが、単なる自動化ツールから、堅牢なシステムの一部へと進化することを期待している。
