AutoCAD VBAの深淵へ:全ハッチングを一括制御する「プロの自動化」作法
こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの世界から、ついに自らコードを操り、CADを意のままに操る領域へ踏み出そうとしているあなたを、私は心から歓迎します。
今日は、実務で必ずと言っていいほど直面する「図面内の全ハッチングのプロパティを一括で修正したい」という課題に、AutoCAD VBAの真髄を詰め込んだコードで応えます。
ただ動くだけのコードではありません。大規模図面でも重くならない、そして安全に処理を完結させる「エンジニアの作法」を伝授します。
—
1. AutoCADオブジェクトモデルの「心臓部」を理解する
AutoCADのVBAを操るということは、「データベースとしての図面」をどう走査(スキャン)するかを理解することと同義です。
今回使うのは `ModelSpace` です。図面上のすべてのオブジェクトは、この「空間」という名の入れ物に格納されています。私たちはこの空間を順番に巡回し、その中から「ハッチングだけ」を拾い上げる必要があります。
陥りやすい罠:`For Each` の過信
初心者はよく「図面内の全要素を一つずつチェックする」というコードを書きますが、これは大規模図面では自殺行為です。AutoCADのオブジェクトは多種多様(線、円、文字…)。無駄な処理を減らすのが、重い図面をストレスフリーにするコツです。
—
2. 実践:ハッチング一括変更コード
このコードは、ModelSpace内のすべての要素をループし、型が `AcDbHatch` であるものだけを抽出し、プロパティを上書きします。
Public Sub UpdateAllHatchProperties()
Dim obj As AcadEntity
Dim hatchObj As AcadHatch
‘ エラーハンドリングはエンジニアの嗜みです
On Error Resume Next
‘ ModelSpace内の全オブジェクトを巡回
For Each obj In ThisDrawing.ModelSpace
‘ 型がハッチングであるかチェック
If TypeOf obj Is AcadHatch Then
Set hatchObj = obj
‘ ここでプロパティを一括変更
With hatchObj
.PatternName = “ANSI31” ‘ パターン名
.PatternScale = 1.0 ‘ 尺度
.PatternAngle = 0.785 ‘ 角度(ラジアン指定。45度はπ/4)
‘ 変更を反映させるための重要メソッド
.Evaluate
.Update
End With
End If
Next obj
‘ 画面を最新に更新
ThisDrawing.Regen acActiveViewport
MsgBox “全てのハッチングの更新が完了しました。”, vbInformation
End Sub
—
3. なぜこのコードが「プロの作法」なのか?
① `TypeOf` による事前選別
`If TypeOf obj Is AcadHatch Then` を使うことで、線や円といった不要なオブジェクトを即座に無視しています。これだけで、数万要素ある図面での処理速度が劇的に変わります。
② `.Evaluate` と `.Update` の重要性
多くの初心者が忘れるのがこの2つです。
- Evaluate: プロパティを変更した後、ハッチングの境界や内部計算を再構築するために必須です。
- Update: AutoCADのメモリ上のデータだけでなく、画面上の表示を即座に反映させる命令です。これがないと、図面をズームするまで変更が目に見えません。
③ 角度の単位は「ラジアン」
AutoCAD VBAにおいて角度は「度」ではなく「ラジアン」で指定します。
- 計算式:`度 (Atn(1) 4 / 180)` でラジアンに変換できます。45度なら `0.785` です。
—
4. さらなる高みへ:気をつけるべき「落とし穴」
実務でこのコードを走らせる前に、一つだけ注意点があります。それは「ブロック内のハッチング」です。
上記のコードは `ModelSpace`(図面上のメイン空間)しか見ていません。もしブロックの中にハッチングがある場合、このコードでは触ることができません。
もしブロックの中まで操作したくなったとき、あなたは「再帰処理」という概念にたどり着くはずです。それは、VBAを完全に掌握した証です。
まとめ
今日、あなたは「CADを操作するツール」から「CADの挙動を支配するエンジニア」への第一歩を踏み出しました。
1. `TypeOf` で効率的に対象を絞る
2. `Evaluate` で計算を確定させる
3. `Update` で画面をリフレッシュする
この3つの基本さえ守れば、どんな図面修正も自動化可能です。次は、選択したオブジェクトだけに限定する、あるいはダイアログボックスを出して数値を入力できるように改造してみてください。
AutoCAD VBAの世界は広大ですが、あなたの書く一行のコードが、確実に誰かの(あるいはあなたの)残業時間を減らします。応援していますよ。
