【入門編】【上級】AcadApplication.Preferences.Display.CursorSizeを0%から100%へ動的変更:精密な位置合わせを支援するVBA十字カーソル制御 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化やカスタマイズの海へようこそ。
今回は、マクロの記録から一歩抜け出して、AutoCAD VBAの本質に迫る「上級編」をお届けします。

テーマは『`CursorSize`の動的制御』。
広大な土木図面や複雑な機械図面を扱っていて、「あともうちょっとで正確な位置にスナップできるのに、十字カーソルが短すぎて狙いづらい…!」と思ったことはありませんか?

今回は、特定の作業(例えば、文字やブロックの精密な位置合わせ)を行っている間だけ、カーソルを画面いっぱいの「100%」に拡張し、作業が終わったら元のサイズにスマートに復元するという、実務でめちゃくちゃ使えるUIカスタマイズを実装します。

ここをクリアすれば、単なる「作業の自動化」を超えた、「AutoCADのUIを意のままに操るエンジニア」の仲間入りです。一緒にバッチリマスターしていきましょう!

—

1. なぜ「カーソルサイズ」をVBAで制御するのか?

AutoCADのオプション画面([オプション]ダイアログボックス > [表示]タブ)を開くと、「カーソル サイズ」という設定項目があります。通常は5%〜10%程度に設定されている方が多いはずです。

  • 普段(5%〜10%): 画面がすっきりし、オブジェクトが重なっていてもカーソル周辺が見やすい。
  • 精密作業時(100%): 画面の端から端まで十字線が伸びるため、離れた場所にある基準線との位置合わせが圧倒的に視覚化しやすくなる。

しかし、これを手動で毎回オプション画面を開いて変更するのは、ハッキリ言って苦行です。
「VBAのプログラム(マクロ)の裏側で、この設定を瞬間的に切り替えられたらどれほど楽か……」
それを実現するのが、今回の主役である `AcadApplication.Preferences.Display.CursorSize` です。

—

2. オブジェクトモデルの階層を理解する

AutoCAD VBAのオブジェクトモデルは、ロシアの民芸品「マトリョーシカ」のように階層構造になっています。今回の `CursorSize` がどこに所属しているか、地図を確認してみましょう。

ThisDrawing (AcadDocument)
┗ Application (AcadApplication) ← AutoCAD全体の大親分
┗ Preferences (AcadPreferences) ← 設定全般を司るマネージャー
┗ Display (AcadPreferenceDisplay) ← 画面表示に関する設定グループ
┗ CursorSize (Long型:0~100) ← 今回のターゲット!

最上位の `Application` から `.Preferences` を経由して `Display` にアクセスする。このルートさえ覚えておけば、VBAのインテリセンス(入力補完)が優しく導いてくれます。

—

3. 実装コード:動的カーソル制御モジュール

それでは、実際に開発環境(VBE)に貼り付けて動かせる実用コードを公開します。
今回は、「現在のカーソルサイズを退避させ、100%に変更して何らかの処理を行い、最後に元のサイズへ綺麗に戻す」という、プログラミングとして非常に美しいライフサイクル管理を実装します。

VBE(Visual Basic Editor)を開き、標準モジュールに以下のコードを貼り付けてください。

Option Explicit

Public Sub ToggleCursorForPrecisionWork()
Dim acadApp As AcadApplication
Dim originalCursorSize As Long

‘ 1. AutoCAD アプリケーションオブジェクトを取得
‘ ※VBAからは ThisDrawing.Application でも取得可能です
Set acadApp = ThisDrawing.Application

On Error GoTo ErrorHandler

‘ 2. 現在のカーソルサイズを記憶(退避)しておく
originalCursorSize = acadApp.Preferences.Display.CursorSize

‘ 【デバッグ確認用】現在のサイズをイミディエイトウィンドウに出力
Debug.Print “元のカーソルサイズ: ” & originalCursorSize & “%”

‘ 3. カーソルを画面いっぱいの「100%」に動的変更!
acadApp.Preferences.Display.CursorSize = 100

‘ —————————————————-
‘ 4. ここに「精密な位置合わせを行いたいメイン処理」を書く
‘ —————————————————-
MsgBox “現在、十字カーソルが100%になっています。” & vbCrLf & _
“画面の端まで伸びたカーソルを確認してください。”, vbInformation, “精密位置合わせモード”

‘ 5. 処理が終わったら、カーソルサイズを元の大きさに「完全復元」
acadApp.Preferences.Display.CursorSize = originalCursorSize
Debug.Print “カーソルサイズを元の ” & originalCursorSize & “% に復元しました。”

Exit Sub

ErrorHandler:
‘ 予期せぬエラーが発生した場合でも、確実にカーソルを元に戻すための安全装置
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “異常終了”
acadApp.Preferences.Display.CursorSize = originalCursorSize

End Sub

コードのここがポイント!

  • `On Error GoTo ErrorHandler` の重要性:

もしメイン処理の途中でユーザーがコマンドを強制終了させたりエラーが起きた場合、カーソルが100%のまま放置されてしまいます。エラーハンドラを必ず用意し、どんな結末になろうとも最後に元のサイズへ戻す(`originalCursorSize`を代入する)のが、プロのエンジニアの作法です。

  • `Debug.Print` の活用:

VBEの「イミディエイトウィンドウ(Ctrl + G)」に現在の状態を出力することで、プログラムが意図通りに動いているかを視覚的に確認できます。

—

4. 陥りやすい罠と知っておくべき注意点

上級者を目指すあなたにこそ知っておいてほしい、AutoCAD VBA特有の「罠」をいくつかシェアしておきます。

1. レジストリへの書き込み頻度に注意する
`CursorSize` の変更は、AutoCADの環境設定(レジストリおよび内部プロファイル)に即時反映されます。あまりにも高頻度(1秒間に何回もループさせるなど)で書き換えを行うと、パフォーマンスの低下や予期せぬ挙動の原因になります。必要なタイミング(コマンドの開始時・終了時など)でピンポイントに呼び出すのが鉄則です。
2. AutoCADのバージョンによる挙動の違い
基本的にはどのバージョン(AutoCAD 2010〜最新版まで)でも共通のオブジェクトモデルで動作しますが、マルチモニター環境や高DPIディスプレイ環境において、100%カーソルが意図した描画パフォーマンスを発揮するかどうかは、グラフィックボード(GPU)のハードウェアアクセラレーション設定にも依存します。もし「カクつく」と感じた場合は、AutoCAD側の「グラフィックス パフォーマンス」を確認してみてください。

—

まとめ:UIの自動化で図面作成のストレスをゼロへ

今回は `AcadApplication.Preferences.Display.CursorSize` を使った、十字カーソルの動的制御について解説しました。

  • オブジェクトモデルの階層(`Application` > `Preferences` > `Display`)をたどる。
  • 処理の開始前に元の設定を「退避」させ、終了時(あるいはエラー時)に必ず「復元」する。
  • 実務の痒い所に手が届くUIカスタマイズをVBAで実現する。

ここをクリアしたあなたなら、単に線を引くだけのVBAマクロから、ユーザーの作業環境そのものをプロデュースする「高度なツール開発」へとステップアップできています。

「ここをこう改造したらもっと実用的になるかな?」という好奇心を大切に、ぜひ日々の業務に組み込んでみてくださいね。それでは、次回の極限の知見でお会いしましょう!

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