【実務・中級編】図面プロパティ(カスタムプロパティ含む)の自動設定・取得!AcadDocumentのSummaryInfo – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの「深淵」を操る:SummaryInfoによる図面プロパティの完全制御

AutoCADの図面管理において、ファイルプロパティ(タイトル、作成者、カスタムプロパティなど)を「手動」で入力していないか?もしそうなら、今すぐその習慣を捨てるべきだ。

図面情報は、BIM/CIMやPDM(製品データ管理)連携の礎だ。プロパティが不正確な図面は、検索不能なゴミデータと同じである。今回は、`AcadDocument.SummaryInfo`オブジェクトを駆使し、図面情報を標準化・自動化するための「現場で生き残るための実装」を伝授する。

—

1. なぜ「SummaryInfo」の設計が重要なのか

多くの開発者が陥る罠は、プロパティを単なる「文字列の器」と捉えていることだ。しかし、`SummaryInfo`はAutoCADのデータベース(DWG)のメタデータを司る重要なインターフェースである。

特に重要なのは「カスタムプロパティ」の扱いだ。標準プロパティ(タイトル、サブジェクト等)とは異なり、カスタムプロパティはキーと値のペアで動的に追加・削除される。ここを雑に扱うと、後続のシステム(Excel集計やデータベース同期)で例外が多発する。

プロフェッショナルの設計思想:

  • イミュータブル(不変)な設計を意識せよ: 実行時にプロパティを「追加」するのか「更新」するのかを明確に分けること。
  • 遅延バインディングを避けよ: `AcadSummaryInfo`オブジェクトを明示的に宣言し、メモリリークの温床となるオブジェクト参照の放置を避ける。

—

2. プロダクションコード:堅牢なプロパティ操作クラス

このコードは、単なるサンプルではない。現場で「壊れない」ことを前提とした設計だ。エラーハンドリングとオブジェクトの解放を徹底している。

Option Explicit

‘ SummaryInfoの操作をカプセル化したプロシージャ
‘ 戻り値で成功/失敗を制御し、呼び出し元でログ管理を行う設計
Public Sub SetDrawingMetadata(ByVal title As String, ByVal author As String)
Dim doc As AcadDocument
Dim sInfo As AcadSummaryInfo

On Error GoTo ErrorHandler

Set doc = ThisDrawing
Set sInfo = doc.SummaryInfo

‘ 標準プロパティの設定
sInfo.Title = title
sInfo.Author = author

‘ カスタムプロパティの安全な更新
‘ 存在しなければ追加、存在すれば上書きするロジック
UpdateCustomProperty sInfo, “ProjectID”, “PJ-2023-001”
UpdateCustomProperty sInfo, “DrawingStatus”, “Approved”

Debug.Print “メタデータの更新が完了しました。”
Exit Sub

ErrorHandler:
MsgBox “プロパティ設定エラー: ” & Err.Description, vbCritical
End Sub

‘ カスタムプロパティを安全に扱うためのプライベートメソッド
Private Sub UpdateCustomProperty(sInfo As AcadSummaryInfo, key As String, val As String)
Dim i As Integer
Dim keyFound As Boolean
keyFound = False

‘ 既存のキーを探索
For i = 0 To sInfo.NumCustomInfo – 1
Dim k As String, v As String
sInfo.GetCustomByIndex i, k, v

If k = key Then
sInfo.SetCustomByIndex i, key, val
keyFound = True
Exit For
End If
Next i

‘ 存在しない場合は新規追加
If Not keyFound Then
sInfo.AddCustomInfo key, val
End If
End Sub

—

3. 実務で「失敗しない」ための3つの鉄則

① GetCustomByIndexのインデックス境界を意識せよ

`NumCustomInfo`で取得した数値をループの終了条件に使う際、インデックスは「0からN-1」であることを忘れるな。これをオフバイワンエラー(1ずれるミス)で落とす開発者は、大規模な図面管理システムでは信用されない。

② 外部DB連携時のデータクレンジング

AutoCADから抽出したプロパティをSQL ServerやAccessに流し込む場合、プロパティ値に「改行」や「特殊文字」が含まれているとデータベース側でクエリが破壊される。

  • 鉄則: 読み取った値に対して `Replace(val, vbCrLf, ” “)` などのサニタイズを必ず噛ませること。

③ オブジェクトライフサイクルの管理

VBAはガベージコレクションが強力ではない。`AcadSummaryInfo`を広域変数に持ち続けるのは自殺行為だ。必要なメソッド内で参照し、スコープが外れたら適切に解放されるよう、ローカル変数での運用を徹底してほしい。

—

結論:標準化は「自動化」から始まる

図面のプロパティが統一されていない組織は、情報の検索に年間数百時間を浪費している。今回提示したコードをベースに、自社の図面管理ルールを自動適用するツールを構築してほしい。

プログラミングは単なるコード書きではない。「情報の流れを制御すること」こそが、真の自動化エンジニアの仕事だ。

次回の記事では、このメタデータを活用して「図面枠の自動書き出しと一括更新」を同期させる高度な手法について解説する。準備はいいか?コードは裏切らない。ただ、書き手次第だ。

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