AutoCAD VBAの深淵へ:全ハッチングを一括制御する「プロの作法」
こんにちは。AutoCADの自動化という荒波に挑むあなたへ。
「マクロの記録」から卒業し、独自のロジックでAutoCADを操りたい。そう思った時が、真のエンジニアへの入り口です。今回は、実務で頻出する「図面内の全ハッチングを一括変更する」というタスクを通じて、AutoCAD VBAの心臓部である「オブジェクトモデルの歩き方」を伝授します。
単にコードを動かすだけでなく、なぜそのように書くのか、どこでつまずきやすいのか。現場で生き残るための「本質」を解説していきましょう。
—
1. AutoCADオブジェクトモデルの「地図」を持つ
AutoCADのVBAを操るには、まず「階層構造(オブジェクトモデル)」を理解することが不可欠です。
- Application: AutoCADそのもの。神の視点です。
- Document: 開いている各図面ファイル。
- ModelSpace: 図形が描かれている無限のキャンバス。
- Hatch: 今回のターゲット。ModelSpaceの中に存在する個々のハッチングです。
コードを書く際、私たちは「ApplicationからDocumentへ、DocumentからModelSpaceへ、そして中の図形へ」と、階層を降りて目的のオブジェクトにたどり着く必要があります。
—
2. 実践:ハッチング一括変更コード
このコードは、ModelSpace内のすべてのハッチングを検索し、指定したパターン、尺度、角度へ強制的に書き換えるものです。
Sub UpdateAllHatches()
Dim acadObj As AcadObject
Dim hatchObj As AcadHatch
Dim i As Long
‘ エラーハンドリング:何が起きても図面を壊さないための防波堤
On Error Resume Next
‘ 現在の図面のModelSpaceを操作対象にする
For Each acadObj In ThisDrawing.ModelSpace
‘ オブジェクトが「Hatch」型であるかを確認
‘ ここで型チェックをしないと、線や円まで対象にしてしまいエラーになる
If TypeOf acadObj Is AcadHatch Then
Set hatchObj = acadObj
‘ パターン変更
‘ パターン名が図面内に存在することを確認しておく必要がある
hatchObj.PatternName = “ANSI31”
‘ 尺度(Scale)と角度(Angle)を統一
hatchObj.PatternScale = 1.0
hatchObj.PatternAngle = 0
‘ 変更を確定させるための更新処理
hatchObj.Update
End If
Next acadObj
MsgBox “全ハッチングの更新が完了しました。”
End Sub
—
3. 現場で「詰まない」ための3つの極意
初心者がこのコードを書いていて、必ず一度は遭遇する壁があります。ここをクリアすれば、あなたはもう中級者です。
① 型判定(TypeOf)の重要性
ModelSpaceの中には、線(Line)も円(Circle)も混在しています。`If TypeOf acadObj Is AcadHatch` という分岐を忘れると、ハッチング以外の図形に対して「ハッチングのパターンを変更せよ」という命令を送ることになり、当然ながらVBAは「そんなプロパティはない!」と怒り出します。「目的のモノだけをフィルタリングする」、これが自動化の鉄則です。
② パターン名は厳密に
`PatternName` に指定する文字列は、AutoCADのハッチングパターン定義ファイル(.pat)に記載されているものと完全に一致させる必要があります。もし存在しない名前を入れると、ハッチングは「無」になります。事前に `acad.pat` 等を確認し、スペルミスがないか注意してください。
③ 更新(Update)メソッドを忘れない
VBAでプロパティを変更しても、画面上の見た目がすぐには変わらないことがあります。`hatchObj.Update` を呼ぶことで、AutoCADの表示エンジンに「図形が書き換わったから再描画してくれ」と明示的に伝えるのがプロの流儀です。
—
4. さらなる高みへ:パフォーマンスを意識する
もし図面内に数万個のハッチングがあったら?
上記のコードは非常にシンプルですが、大規模な図面では少しずつ動作が重くなる可能性があります。
- SelectionSet(選択セット)の活用: 今回はFor Eachで全スキャンしましたが、図面が巨大な場合は「選択セット」を作成し、ハッチングだけを抽出してからループを回す方が高速です。
- On Error Resume Nextの乱用禁止: 本来は特定のエラーを個別に処理するのが筋です。今回は簡易化のため入れていますが、実務では「なぜ失敗したか」をログに残す習慣をつけてください。
—
まとめ:あなたの武器になる
今回紹介した「オブジェクトを走査して、条件に合うものだけを書き換える」というパターンは、ハッチングだけでなく、文字(Text/MText)や画層(Layer)の制御にもそのまま応用可能です。
AutoCAD VBAは、あなたの「手」の延長です。退屈な繰り返し作業はコンピュータに押し付け、あなたはもっとクリエイティブで、頭を使う仕事に集中してください。
何か不明点や、「ここをもっとこうしたい」という要望があれば、いつでも教えてくださいね。あなたのエンジニアリングライフを全力でサポートします。
