【実務・中級編】【初心者向け】図面内の「点(Point)」の表示形式を一括変更!システム変数 PDMODE と PDSIZE のVBA制御 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握する:システム変数「PDMODE/PDSIZE」を制し、図面の視認性を極限まで高める

AutoCADでの作図業務において、「点(Point)」というオブジェクトは、測量データやノード配置など、極めて重要な役割を果たす。しかし、デフォルト設定のままでは「ただの小さなドット」に過ぎず、図面が複雑になればなるほど迷子になる。

「図面を開くたびに設定を変える」――そんな非効率な作業を繰り返しているなら、それはエンジニアの怠慢だ。今回は、システム変数 `PDMODE` と `PDSIZE` をVBAから制御し、一瞬で図面全体の視認性を最適化する「プロ仕様の自動化コード」を伝授する。

なぜ「手動」ではなく「VBA」で制御すべきか

AutoCADのシステム変数は、図面(DWG)ごとに保存される。つまり、外部から受け取った図面や、過去のテンプレートで作成された図面は、意図しない表示設定になっていることが多い。

これを手動で修正するのは時間の無駄であるだけでなく、ヒューマンエラーの温床だ。「PDMODEを3(×印)にする」という標準ルールをコード化し、ボタン一つで実行できるようにしておくこと。これが、堅牢な図面管理の第一歩である。

堅牢なコードを実現するための設計思想

今回作成するコードでは、以下の2点にこだわる。

1. エラーハンドリングの徹底: 万が一、図面が読み取り専用であったり、ドキュメントがアクティブでない場合に備える。
2. 実行環境の明示: `ThisDrawing` を多用せず、`AcadDocument` オブジェクトを明示的に取得することで、将来的な外部アプリ化(EXE化)への拡張性を担保する。

実務用コード:Point Style Controller

以下のコードをVBAエディタ(Alt+F11)の標準モジュールに貼り付けてほしい。

Option Explicit

‘ ==============================================================================
‘ 機能名: SetPointStyle
‘ 概要: システム変数 PDMODE と PDSIZE を一括制御し、点の視認性を統一する
‘ 引数:
‘ mode : 点の形状 (0=ドット, 2=+, 3=X, 34=円+Xなど)
‘ size : 点のサイズ (0は画面の5%固定、正の値は絶対サイズ)
‘ ==============================================================================
Public Sub SetPointStyle(ByVal mode As Integer, ByVal size As Double)
Dim oDoc As AcadDocument

‘ エラーハンドリング: ドキュメントが存在しないケースを考慮
On Error Resume Next
Set oDoc = ThisDrawing
If Err.Number <> 0 Then
MsgBox “対象となる図面が開かれていません。”, vbCritical
Exit Sub
End If
On Error GoTo 0

‘ システム変数の変更
‘ SetVariableは、AutoCADのシステム変数を操作するための黄金律
On Error GoTo ErrorHandler
oDoc.SetVariable “PDMODE”, mode
oDoc.SetVariable “PDSIZE”, size

‘ 再描画を強制し、変更を即座に反映
oDoc.Regen acAllViewports

Exit Sub

ErrorHandler:
MsgBox “システム変数の更新に失敗しました: ” & Err.Description, vbCritical
End Sub

‘ 実行用ラッパープロシージャ
Public Sub ApplyStandardPointStyle()
‘ 現場標準:Xマーク(3) かつ 画面の2%サイズ(2) に設定
Call SetPointStyle(3, 2)
MsgBox “点の表示スタイルを更新しました。”, vbInformation
End Sub

実務で意識すべき「罠」と解決策

1. 「なぜ点が変わらないのか?」という疑問への回答

コードを実行しても、すでに描画済みの点の形状が変わらない場合がある。これはAutoCADの仕様だ。`Regen`(再生成)を実行しないと、グラフィックスキャッシュが更新されない。上記のコードには `oDoc.Regen acAllViewports` を組み込んでいるため問題ないが、大規模図面では `Regen` がパフォーマンスに影響を与える可能性があることを忘れてはならない。

2. ファイル連携時の注意点

もし、このマクロを「図面を開くたびに自動実行」させたいのであれば、`AcadDocument_Activate` イベントを利用するのが定石だ。ただし、他人のPCで動かす場合は、信頼できる場所(Trusted Locations)の設定を忘れるとセキュリティ警告で弾かれる。これは、AutoCADエンジニアなら必ず押さえておくべきポイントである。

3. 拡張性とデータベース連携

もし、クライアントごとに「点の見え方」のルールが異なるなら、この設定値を `CSV` や `INIファイル`、あるいは `SQL Server` から読み込む設計に拡張せよ。ハードコーディング(コードに直接値を書くこと)は、初期の開発スピードは速いが、将来的な保守コストを増大させるだけだ。

まとめ:エンジニアとして次のステップへ

PDMODEを制御するという小さなタスクであっても、そこに「なぜそうするのか」という論理的根拠と、堅牢なエラー処理を組み込むことで、それは「単なるマクロ」から「業務の標準化ツール」へと昇華する。

次は、図面内の全点オブジェクトを抽出し、それらの画層を自動で「POINT_LAYER」へ移動させるような、より高度な操作に挑戦してほしい。AutoCAD VBAのオブジェクトモデルは、あなたの命令を待っている。

現場の生産性は、こうした「小さな自動化の積み重ね」によってのみ、劇的に向上するのだ。健闘を祈る。

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