【テクニカル・上級編】【実務中級者向け】図面保存時の「SummaryInfo」自動書き込み:作成者やタイトル等のプロパティ一括管理 – AutoCAD VBA解析バイブル

スポンサーリンク

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. 最後に:エンジニアへの提言

図面プロパティの自動制御は、ただの「自動化」ではない。それは「図面に知性を持たせる」という行為だ。

もしあなたがシニアエンジニアとしてこの仕組みを構築するなら、単に「書き込む」だけではなく、「読み取り専用のチェック」や「暗号化されたハッシュ値の付与」などを検討してほしい。図面は単なる幾何学データの集まりではなく、プロジェクトの歴史そのものだ。そのメタデータを掌握することは、組織の資産を掌握することに他ならない。

現場のコードが、単なる自動化ツールから、堅牢なシステムの一部へと進化することを期待している。

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