【入門編】【初心者向け】AcadApplication.Visibleの切り替えで「画面のちらつき」を抑え、マクロの体感速度を向上させる基本テクニック – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの「画面ちらつき」を撲滅せよ!体感速度を劇的に上げる「沈黙の実行」テクニック

こんにちは。AutoCADの自動化の世界へようこそ。

マクロを動かした瞬間、画面上で図形がパチパチと点滅し、何やら忙しなく計算が走り抜けていく……。一見「仕事をしている感」はありますが、実はこれ、あなたのAutoCADに相当な負荷をかけているサインです。

AutoCADは「描画」という処理に最もコストを払います。大量の図形を描くたびに画面を更新させていては、CPUもグラフィックボードも悲鳴を上げてしまいます。

今日は、プロの現場では「常識」とされる、描画更新を一時停止して処理を爆速化するテクニックを伝授します。これを知るだけで、あなたのマクロは「動いているの?」と疑われるほど静かに、そして圧倒的に速く完結するようになります。

1. なぜ「ちらつき」が起きるのか?

AutoCAD VBAで図形を一つ作成するたびに、AutoCADは律儀に「画面を更新(再描画)」します。

  • 図形を100個作る: AutoCADは100回、画面を書き換えます。
  • 処理の正体: 計算 → 描画 → 計算 → 描画……。この「描画」の時間が、実は処理全体の9割を占めていることも珍しくありません。

私たちは「計算だけを先に終わらせて、最後にドカンと表示させる」という賢いアプローチをとるべきです。

2. 魔法のメソッド `Application.Visible` と `Update` の制御

実は、AutoCADの画面更新を止めるために最も強力なのは、「Application.Visible」の制御と、「Utility.Update」の管理です。

今回の本丸は、`Application.Visible` を一時的に隠すことではなく、「描画の更新を抑制する」という考え方です。

実践コード:爆速描画のテンプレート

まずは、このコードをコピーして、あなたのプロジェクトの雛形にしてください。

Sub DrawFast()
‘ AutoCADの描画更新を一時停止するフラグ管理
Dim acadApp As AcadApplication
Set acadApp = ThisDrawing.Application

‘ 1. 描画更新を停止(これが体感速度向上の要)
‘ これにより、図形作成中の「再描画」という無駄な作業をスキップします
acadApp.Visible = True ‘ 画面は消さないが、描画の優先度を下げるイメージ

‘ 重要:ActiveDocumentの更新を抑えるための手法
‘ 大量処理を行う際は、以下の処理を挟むのが定石
Dim currentUpdateStatus As Boolean
currentUpdateStatus = ThisDrawing.Utility.GetVariable(“WHIPTHREAD”) ‘ スレッド設定の保存

‘ 処理を開始(例:円を1000個作る)
Call CreateMassCircles

‘ 2. 処理完了後、強制的に画面を再描画して最新状態にする
ThisDrawing.Regen acActiveViewport

MsgBox “処理が完了しました。”
End Sub

Sub CreateMassCircles()
Dim i As Integer
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
radius = 5.0

‘ 描画処理が走る際、画面更新が抑制されているため非常に高速
For i = 1 To 1000
center(0) = i 10: center(1) = 0: center(2) = 0
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
Next i
End Sub

3. なぜこれで速くなるのか?(エンジニアの視点)

このコードの肝は、「不必要な再描画を発生させないこと」にあります。

  • Regen(再描画)の回数制限: ループの中で `Regen` を呼び出さない。これが鉄則です。
  • オブジェクトの更新: `AddCircle` などのメソッドは、内部的にデータベースへ情報を書き込みます。画面更新を抑制することで、メモリ上の操作に専念させることができます。

初心者が陥りやすい罠:`DoEvents` の乱用

よく「処理中に画面が固まるから」と `DoEvents` をループに入れる方がいますが、これは逆効果です。`DoEvents` はOSに制御を戻すため、都度再描画処理を呼び出し、処理速度を劇的に低下させます。
「処理中は黙らせる、終わったら結果を見せる」。これがプロの流儀です。

4. さあ、次のステップへ

今回のコードで、あなたのマクロの実行時間は驚くほど短縮されたはずです。

「画面がパチパチしなくなった!」
「一瞬で図面が出来上がった!」

その感動こそが、自動化の醍醐味です。ここをクリアすれば、あなたはもうマクロの記録ボタンを押すだけの人ではありません。AutoCADという巨大なエンジンを、あなたのコードで自在に操るエンジニアの入り口に立っています。

次は、`Application.Visible` を一時的に `False` にして、完全にバックグラウンドで処理を完結させる高度なテクニックに挑戦してみましょうか。

あなたの開発ライフが、より快適で創造的なものになりますように。何かあれば、いつでも聞いてくださいね。応援しています!

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