【実務・中級編】【実務中級者向け】図面保存と同時に「PDF/JPGプレビュー」を自動生成する統合セーブマクロ – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD自動化の真髄:図面保存と連動した「プレビュー自動生成」の極意

AutoCADの運用において、最も無駄な時間は何か。それは「図面を保存した後、わざわざPDF書き出しやスクリーンショット撮影を行って管理用フォルダに置く」という手作業である。

君たちが開発者として目指すべきは、「ユーザーが意識せずとも、システムが裏側で完璧に同期を取る」という環境だ。今回は、`Save`イベントをフックし、DWG保存と同時にPDFとサムネイル(JPG)を自動生成する堅牢なアーキテクチャを伝授する。

—

1. なぜ「イベントドリブン」で設計するのか

初級エンジニアは、よく「ボタンを押すと保存して、続けてPDFを作る」というマクロを書く。これは悪手だ。ユーザーが「名前を付けて保存」をした場合や、AutoCADの標準保存機能を使った場合に、そのマクロは発動しない。

我々が実装すべきは、AutoCADの `AcadDocumentEvents` を利用したイベント駆動型アーキテクチャだ。図面が保存されたという「事実」をトリガーにすることで、保存方法を問わず常に最新のドキュメントを生成できる。

—

2. 堅牢な実装のためのアーキテクチャ設計

コードを書く前に、以下の3つの鉄則を理解せよ。

  • 排他制御の回避: AutoCADが書き込み中のファイルにアクセスしようとすればエラーは必至だ。イベント発火時には、一呼吸置くか、オブジェクトの参照が確実に解放されていることを確認せよ。
  • パスの正規化: ファイルシステム上のパス操作は `Scripting.FileSystemObject` を使うのが定石だが、AutoCADのオブジェクトモデルとの親和性を考慮して、`ThisDrawing.FullName` を活用せよ。
  • 例外処理の徹底: PDF書き出しに失敗したとしても、DWGの保存自体を阻害してはならない。エラーはログに吐き、ユーザーに通知するに留めるべきだ。

—

3. プロダクションコード:統合セーブマクロ

このコードを「クラスモジュール」に配置することで、信頼性の高い監視システムが構築できる。

クラスモジュール: `clsAutoExport.cls`

Option Explicit

‘ AutoCADの保存イベントを監視する宣言
Public WithEvents DocEvents As AcadDocument

‘ 保存完了時に自動実行されるイベント
Private Sub DocEvents_EndSave(ByVal FileName As String)
On Error Resume Next ‘ 処理エラーが図面保存に悪影響を及ぼさないようにする

Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ PDF出力処理
Call ExportToPDF(FileName, fso)

‘ JPG出力処理
Call ExportToJPG(FileName, fso)

Set fso = Nothing
End Sub

Private Sub ExportToPDF(ByVal dwgPath As String, fso As Object)
Dim pdfPath As String
pdfPath = fso.GetParentFolderName(dwgPath) & “\” & fso.GetBaseName(dwgPath) & “.pdf”

‘ 既にPDFが存在する場合は上書き許可を確認(または強制上書き)
‘ 実務ではPlotToDeviceメソッド等を使用するが、簡略化のためイメージを提示
ThisDrawing.Plot.PlotToFile pdfPath, “DWG to PDF.pc3”
End Sub

Private Sub ExportToJPG(ByVal dwgPath As String, fso As Object)
Dim jpgPath As String
jpgPath = fso.GetParentFolderName(dwgPath) & “\” & fso.GetBaseName(dwgPath) & “.jpg”

‘ サムネイル生成はViewExport等で制御可能
‘ ここでは現在表示されている画面をキャプチャするイメージ
ThisDrawing.SendCommand “_JPGOUT ” & jpgPath & vbCr
End Sub

標準モジュール: `Module1.bas`

Dim myEvents As clsAutoExport

Public Sub InitializeAutoExport()
‘ イベント監視を開始
Set myEvents = New clsAutoExport
Set myEvents.DocEvents = ThisDrawing
MsgBox “図面保存時の自動エクスポートを有効化しました。”
End Sub

—

4. 現場で生き残るための運用上の注意点

このシステムを導入する際、以下のポイントを必ず設計書に盛り込むこと。

1. PDF/JPGの出力先: 同一フォルダに入れるのが基本だが、数千枚規模になる場合は「プロジェクト名\Export」のようなサブディレクトリを作成するルーチンを必ず組み込め。
2. 実行権限の確認: サーバー上の共有フォルダに保存する場合、ネットワークの遅延で書き込みエラーが発生することがある。この場合、ローカルに一時保存してから移動させるなどのバッファ処理が必要だ。
3. パフォーマンスのトレードオフ: 図面が巨大な場合、保存のたびにPDF生成が走るとユーザーの操作感が悪化する。`Application.Documents.Count`を確認し、バックグラウンド処理が可能か、あるいは一定の条件(特定のレイアウトのみ等)でフィルタリングする知恵が必要となる。

最後に:エンジニアとしての矜持

自動化とは、単に手作業を減らすことではない。「ミスが起きる余地をシステム的に排除すること」にある。

君たちが書いたこのマクロが、明日から現場の設計者の「PDF書き忘れた!」という焦りを一つでも消すことができれば、それは立派なエンジニアリングだ。コードは常にシンプルに、かつ堅牢に。それが、AutoCADを自在に操る者たちの流儀である。

さあ、次のイテレーションへ向かおう。君のコードに期待している。

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