「消えた図面」の恐怖を回避せよ。PROXYGRAPHICSを制御して、他社CADとの互換性を手に入れる
こんにちは。現場の自動化を支えるアーキテクトです。
AutoCADで業務をしていると、こんな経験はありませんか?
「設計データを協力会社に送ったのに、『図面を開いたら中身が空っぽだ』『プロキシ図形が消えている』と電話が来た……」
これ、実はAutoCADの仕様を知っていれば、プログラムで「確実に防げる」問題なんです。
今日は、マクロの記録(レコーディング)から一歩踏み出し、「図面のデータ構造」という本質に触れながら、PROXYGRAPHICS(プロキシグラフィックス)をVBAでスマートに制御する方法を伝授します。ここをマスターすれば、あなたは「ただのマクロ使い」から「信頼される設計自動化エンジニア」へと進化できるはずですよ。
1. なぜ、図面が「空っぽ」に見えるのか?
まず、敵(問題の原因)を知ることから始めましょう。
AutoCADには、標準機能にはない「拡張オブジェクト」が存在します。例えば、Civil 3Dの特殊なオブジェクトや、サードパーティ製のアドオンで作られた図形です。これらはAutoCAD本体の「標準のルール」とは異なるデータ構造を持っています。
他社のCAD(例:IJWorksやBricsCADなど)でこれらの図面を開いたとき、彼らはその「特殊なルール」を知りません。その結果、「データは存在するけれど、どう描画していいかわからないから、何も表示しない」という事態が起こるのです。
ここが解決の鍵:PROXYGRAPHICSとは?
ここで登場するのが、今回扱う`PROXYGRAPHICS`というシステム変数です。
これを「ON」にして保存すると、AutoCADは「特殊なデータ」と一緒に、「その図形がどう見えるべきか」という「見た目の情報(画像的なデータ)」をセットで保存してくれます。
- OFFの場合: 特殊なデータだけを保存。他社CADでは「空っぽ」に見える。
- ONの場合: 特殊なデータ + 「見た目のエッセンス」を保存。他社CADでも「形」が見える。
2. 【実践】PROXYGRAPHICSを制御するVBAコード
それでは、実際にコードを書いていきましょう。
単に設定を変えるだけでなく、「設定を変更して、保存し、元の設定に戻す」という、プロフェッショナルな作法(ステート管理)を組み込んだコードを紹介します。
'==============================================================================
' Module: Module1
' Purpose: 図面の互換性を高めるためにPROXYGRAPHICSを制御して保存する
' Author: Legendary Architect
'==============================================================================
Option Explicit
''' <summary>
''' プロキシグラフィックスを有効にして図面を保存するメインルーチン
''' </summary>
Public Sub SaveWithProxySupport()
Dim currentProxyGraphics As Integer
Dim currentProxyNotice As Integer
' エラーハンドリング:予期せぬエラーで設定が書き換わったままになるのを防ぐ
On Error GoTo ErrorHandler
' 1. 現在のシステム変数の値をバックアップ(後で元に戻すため)
' PROXYGRAPHICS: 1=ON, 0=OFF
' PROXYNOTICE: 1=警告表示あり, 0=警告表示なし
currentProxyGraphics = ThisDrawing.GetVariable("PROXYGRAPHICS")
currentProxyNotice = ThisDrawing.GetVariable("PROXYNOTICE")
Debug.Print "--- 保存プロセス開始 ---"
Debug.Print "現在の設定: PROXYGRAPHICS=" & currentProxyGraphics
' 2. 互換性を高める設定を適用
' 他社CADで見えるように、プロキシグラフィックスを強制的にONにする
ThisDrawing.SetVariable "PROXYGRAPHICS", 1
' 保存時に「プロキシオブジェクトがあります」という警告が出ると業務効率が落ちるため、
' 自動化処理中は通知をOFFに設定するのがスマートな判断です
ThisDrawing.SetVariable "PROXYNOTICE", 0
' 3. 図面を保存
' ※注意:この処理は現在の図面を上書き保存します
ThisDrawing.Save
Debug.Print "図面を保存しました(互換性モード)"
' 4. 設定を元の状態に戻す(ユーザーの作業環境を汚さないための作法)
ThisDrawing.SetVariable "PROXYGRAPHICS", currentProxyGraphics
ThisDrawing.SetVariable "PROXYNOTICE", currentProxyNotice
MsgBox "互換性を確保した状態で保存が完了しました。", vbInformation, "完了"
CleanExit:
Debug.Print "--- プロセス終了 ---"
Exit Sub
ErrorHandler:
' エラーが発生した場合でも、可能な限り設定を元に戻して終了する
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
Resume CleanExit
End Sub
3. プロの視点:なぜこの書き方をするのか?
コードの中に、いくつか「ただの記録」では出てこないポイントを入れました。ここが、初級者と中級者を分ける境界線です。
① 「バックアップと復元」の重要性
プログラミングにおいて、「システム全体の状態(Global State)を書き換える」行為は、非常にリスクが高いものです。
もし、`PROXYGRAPHICS`をONにしたままマクロが終了してしまったら、そのユーザーのAutoCADは、それ以降ずっと「ファイルサイズが大きくなりやすい設定」のままになってしまいます。
「変えたら、必ず元に戻す」。これは自動化エンジニアが守るべき鉄則です。
② `PROXYNOTICE` の同時制御
`PROXYGRAPHICS`を操作していると、保存時に「この図面にはプロキシオブジェクトが含まれています…」というダイアログがポップアップして、マクロが止まってしまうことがあります。
これを防ぐために、一時的に`PROXYNOTICE`を`0`(警告なし)に制御しています。ユーザーの手を止めさせない。これが「使いやすいツール」の条件です。
③ エラーハンドリング(`On Error GoTo`)
もし保存中にネットワークエラーなどでマクロが止まったらどうなるでしょうか?
バックアップを取っていなければ、設定は書き換わったまま放置されます。`ErrorHandler`を用意することで、最悪の事態を防ぎ、プログラムを安全に終了させています。
4. 陥りやすい落とし穴(トラブルシューティング)
この機能を実装する際に、以下の点に注意してください。
1. ファイルサイズが増大する
`PROXYGRAPHICS`をONにすると、図形データだけでなく「見た目」のデータも書き込むため、ファイルサイズが少し大きくなります。大量の図面を一括処理する場合は、ディスク容量に注意しましょう。
2. 「データ」は更新されない
あくまで「見た目」を保存するものです。他社CADでその図形を編集したとしても、それは「画像」をいじっているようなものです。元の「賢いデータ(オブジェクト情報)」まで他社CADで扱えるわけではない、ということをクライアントには伝えておきましょう。
まとめ:ここをクリアすれば、基本はバッチリ!
いかがでしたか?
単に「設定を変えるコード」を書くだけなら、マクロの記録でも可能です。しかし、「ユーザーの環境を守るために元の設定を保持する」「エラーが起きても安全に終了させる」といった、オブジェクトのライフサイクルを意識した設計ができるようになれば、あなたの書くコードの信頼性は格段に上がります。
「図面が消える」というトラブルを、技術の力で未然に防ぐ。
そんなスマートなエンジニアを目指して、一歩ずつ進んでいきましょう。
応援していますよ!
