AutoCAD VBAの深淵へ:ハッチング自動化で「手作業」を過去にする極意
こんにちは。AutoCADの自動化の世界へようこそ。
これまで「マクロの記録」ボタンを頼りにしていたあなたも、そろそろ限界を感じている頃ではないでしょうか。AutoCADの真の力は、その背後に広がる「オブジェクトモデル」を掌握した瞬間に解放されます。
今回は、実務で最も退屈かつミスが許されない「ハッチング作業」を例に、AutoCAD VBAの心臓部を紐解いていきましょう。ここをクリアすれば、あなたはもう「初学者」ではありません。
—
1. なぜ「ハッチング」が自動化の登竜門なのか
AutoCADにおいて、ハッチング(`AcadHatch`オブジェクト)は非常に強力ですが、同時に「気難しい」オブジェクトでもあります。
- 境界線が閉じていないとエラーを吐く
- 尺度や角度の設定が図面単位に依存する
- 大量の領域に適用すると計算負荷が高い
これらを人の手で一つずつ設定するのは、プロの仕事ではありません。プログラムに「領域を特定し、パターンを流し込み、属性を整える」という一連のフローを叩き込むことで、作業時間は1/100以下になります。
—
2. Hatchオブジェクトの「作法」を理解する
コードを書く前に、頭の中に「図面の構造」をイメージしてください。
1. AcadDocument: あなたの作業台。
2. ModelSpace: 図形が配置される空間。
3. AcadHatch: 空間上に配置する「塗りつぶし」の塊。
4. OuterLoop: ハッチングの「境界線」。これが重要です。
ハッチングを作る手順は、「空のハッチング箱を作り、そこに境界線という名の図形を放り込む」というプロセスです。
—
3. 実践:ハッチング自動生成スクリプト
それでは、実際に動くコードを見てみましょう。このコードは、選択した閉じたポリラインに対して、指定のパターンを適用する汎用的なものです。
Sub CreateSimpleHatch()
Dim hatchObj As AcadHatch
Dim patternName As String
Dim patternType As Long
Dim bAssociativity As Boolean
Dim outerLoop(0 To 0) As AcadEntity
‘ 設定:ANSI31パターンを適用
patternName = “ANSI31”
patternType = 0 ‘ 0 = ユーザー定義, 1 = 定義済み
bAssociativity = True ‘ 境界線と連動させる
‘ 1. ハッチングオブジェクトをモデル空間に作成
Set hatchObj = ThisDrawing.ModelSpace.AddHatch(patternType, patternName, bAssociativity)
‘ 2. 境界線となるオブジェクトを取得(ここでは簡易的に直前に選択したものと想定)
‘ 実務ではフィルタリングして取得するのが鉄則です
Set outerLoop(0) = ThisDrawing.PickfirstSelection(0)
‘ 3. 境界線を追加
hatchObj.AppendOuterLoop (outerLoop)
‘ 4. ハッチングの尺度と角度を設定(ここを調整するのがプロの腕の見せ所)
hatchObj.PatternScale = 1.0
hatchObj.PatternAngle = 0
‘ 5. 評価(これを行わないとハッチングが表示されません!)
hatchObj.Evaluate
ThisDrawing.Regen acActiveViewport
MsgBox “ハッチングの適用が完了しました。”
End Sub
—
4. 陥りやすい「罠」とその回避策
罠その1:Evaluateの忘れ
初心者が最もよくやるミスが、`hatchObj.Evaluate`を書き忘れることです。コードを実行したはずなのに図面が真っ白……というときは、大抵これが原因です。AutoCADのオブジェクトは、配置しただけでは計算されず、明示的に「再計算」を命じる必要があります。
罠その2:閉じられた境界線
`AppendOuterLoop`に渡す図形が閉じていない場合、AutoCADは沈黙のままエラーを返します。実務では、必ず`IsClosed`プロパティを確認するか、エラーハンドリング(`On Error Resume Next`)を適切に活用しましょう。
—
5. 次のステップへ:プロのエンジニアになるために
このコードが理解できれば、次は「パターンの一括置換」に挑戦してみてください。
- `For Each`文を使って、図面内のすべての`AcadHatch`を巡回する。
- `If`文で、特定のパターン名を持つものだけを抽出する。
- 尺度をまとめて変更する。
これだけで、数千個のハッチングを修正する作業が、コーヒーを飲んでいる間に終わるようになります。
最後に
VBAは古い技術だと言う人もいますが、AutoCADのAPIがこれほど洗練されている限り、その価値は不変です。まずはこのコードを書き写し、自分の図面で動かしてみてください。「動いた!」というその感覚こそが、最高の自動化エンジニアへの第一歩です。
何か分からないことがあれば、いつでもまた聞きに来てください。あなたの挑戦を応援しています。
