現場の「見栄え」を極める:AutoCAD保存前処理の最適化とメモリマネジメント
多くのエンジニアが軽視しがちな「保存直前の表示状態」。Windowsエクスプローラーのサムネイルや、図面管理システムのプレビューで「真っ暗な画面」や「意図しないズーム位置」が表示され、上司やクライアントから指摘を受けた経験はないだろうか。
これは単なる見栄えの問題ではない。図面検索の効率、ひいては組織全体の生産性に直結する「UI/UXの基本」である。今回は、AutoCAD VBAを用い、保存前に強制的に `ZoomExtents` を実行し、かつメモリを汚さない「プロフェッショナルなセーブ・ルーチン」の構築法を伝授する。
—
1. なぜ「Zoom Extents」が重要なのか
AutoCADのサムネイル生成は、ファイル保存時の表示領域をキャプチャする。デフォルトのまま保存すると、前回の作業状態がそのまま記録される。巨大な図面で微小な線分にズームしたまま保存すれば、プレビューは何も映らない。
これを防ぐには、`Database.SaveAs` の前に必ずビューを全域へ誘導する必要がある。しかし、単にコマンドを叩くだけでは不十分だ。AutoCADの非同期処理や、COMオブジェクトの残存によるメモリリークを考慮せねばならない。
—
2. 実装の核心:COMインターフェースの完全制御
VBAで実装する場合、`SendCommand` は避けるべきだ。これは処理が同期されず、かつ図面の状態に依存するため不安定極まりない。必ず `Application.ZoomExtents` メソッドを直接叩くこと。
また、大規模図面でのメモリリークを防ぐため、オブジェクトはスコープを限定し、明示的にNothingを代入する。
‘ 【実務推奨】安全かつ高速な保存前処理ルーチン
Public Sub OptimizedSave(ByVal targetDoc As AcadDocument)
On Error GoTo ErrHandler
‘ 1. アクティブドキュメントの切り替え(マルチドキュメント対応)
If Not targetDoc Is Nothing Then
targetDoc.Activate
‘ 2. Zoom Extents の実行
‘ SendCommandではなく、COMメソッドを使用して同期処理を保証
ThisDrawing.Application.ZoomExtents
‘ 3. 図面情報の更新(レガシー環境での同期漏れを防ぐ)
targetDoc.Regen acActiveViewport
‘ 4. 保存実行
targetDoc.Save
End If
Exit Sub
ErrHandler:
Debug.Print “Save Failed: ” & Err.Description
‘ 必要に応じてログを出力
End Sub
—
3. チーフアーキテクトの視点:パフォーマンスと安定性の境界線
このルーチンを「一括処理(Batch Processing)」に応用する場合、注意すべき点が2つある。
① Windows APIによる待機状態の監視
大量の図面を一括処理する際、AutoCADの `Save` 処理は、ファイルサイズや外部参照(XRef)の数によって完了までの時間が変動する。単なる `DoEvents` だけでは、巨大なDWGの保存中に次の処理へ移行し、プロセスがクラッシュする原因となる。
もし、より高度な安定性を求めるなら、Windows API `GetProcessMemoryInfo` を使い、メモリ使用率が安定するまで待機するロジックを組み込むのが「伝説級」の解法だ。
② メモリ解放の鉄則(Object Management)
VBAはガベージコレクションが脆弱だ。以下のように、処理の最後には必ずオブジェクトを解放せよ。
‘ ループ処理の例
Dim doc As AcadDocument
For Each doc In AcadApplication.Documents
Call OptimizedSave(doc)
‘ 明示的な解放
Set doc = Nothing
‘ 必要であればここでプロセス間通信のクリーンアップを行う
Next doc
—
4. システム間連携を見据えた設計
今後、図面管理システムをWebブラウザベースのものへ移行したり、C# (.NET) へコードを移植する可能性があるなら、`VBA` のコードは「ロジック」と「UI」を分断せよ。
上記のようなセーブ・ルーチンを独立したモジュールとして切り出しておくことで、将来的に `AutoCAD .NET API`(`Editor.CommandAsync`等を使用)に移植する際、ロジックをそのままコピー&ペーストできる。
結論
「たかが保存」と侮るなかれ。
図面のサムネイルひとつで、あなたの設計チームの「整理整頓能力」は推し量られる。
システムを構築する者は、常に「その先」にあるエンドユーザーの体験を想像せよ。
コードをコピペして終わりではない。貴殿の現場の環境(外部参照の有無、ネットワークドライブの速度、CADのバージョン)に合わせて、このロジックをチューニングすることこそが、エンジニアとしての真の腕の見せ所である。
健闘を祈る。
