【実務・中級編】図面内のハッチングパターンを自動設定・変更!AcadDocumentのHatchオブジェクト – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを極める:Hatchオブジェクト操作で「自動作図の壁」を突破せよ

AutoCADの自動化において、Hatch(ハッチング)は多くのエンジニアが躓く鬼門だ。「単純なオブジェクト作成」と「Hatchの生成」は、その内部構造において決定的な差がある。

ただ`AddHatch`メソッドを呼べば動く、というレベルで止まっているなら、大規模図面を扱った瞬間にコードは破綻するだろう。今日は、プロフェッショナルとして現場で戦い抜くための「Hatch自動化の流儀」を伝授する。

—

1. Hatchのライフサイクルと「落とし穴」を理解する

AutoCADのAPIにおいて、Hatchは単なる閉じたポリラインではない。これは「境界(Boundary)」と「パターン定義(Pattern)」の複雑な相関関係の上に成り立つオブジェクトだ。

初心者がよくやる間違いは、境界情報を曖昧にしたままHatchを生成し、AutoCADの再計算負荷でフリーズを誘発させることである。

堅牢な設計のための3箇条

1. 境界の確定: `AddHatch`の前に、閉じたループ(AcadEntityの配列)が正しく閉じているか、数学的に保証せよ。
2. レイヤーとプロパティの分離: ハッチング自体にプロパティを直書きするな。画層管理を徹底し、ハッチング設定は「スタイル」として論理的に管理せよ。
3. エラーハンドリングの徹底: 境界が複雑な場合、AutoCADの幾何演算エンジンが例外を吐くことがある。`On Error GoTo`での安全な切り離しは必須だ。

—

2. 【プロダクションコード】堅牢なHatch自動生成の実装

以下は、選択した閉じたポリラインに対して、指定のパターンを適用する実戦的な関数だ。単なるサンプルではない。実務で求められる「戻り値による成否判定」と「オブジェクト解放」を組み込んでいる。

‘ ————————————————————————-
‘ 機能: 指定された境界(エンティティ配列)にハッチングを適用する
‘ 引数: targetEntities – 境界となるエンティティの配列
‘ patternName – ハッチングパターン名(ANSI31など)
‘ 戻り値: 生成されたHatchオブジェクト(失敗時はNothing)
‘ ————————————————————————-
Public Function CreateManagedHatch(ByRef targetEntities() As AcadEntity, _
ByVal patternName As String) As AcadHatch
On Error GoTo ErrorHandler

Dim hatchObj As AcadHatch
Dim patternType As Long: patternType = acHatchPatternTypePreDefined
Dim bAssociativity As Boolean: bAssociativity = True ‘ 境界と連動させる

‘ モデル空間への追加
Set hatchObj = ThisDrawing.ModelSpace.AddHatch(patternType, patternName, bAssociativity)

‘ 境界の追加(AddHatchはループを要求する)
hatchObj.AppendOuterLoop targetEntities

‘ パターン設定と評価
hatchObj.PatternScale = 1.0
hatchObj.Evaluate

‘ AutoCADに再描画を通知
hatchObj.Update

Set CreateManagedHatch = hatchObj
Exit Function

ErrorHandler:
Debug.Print “Hatch生成失敗: ” & Err.Description
Set CreateManagedHatch = Nothing
End Function

—

3. 大規模図面での運用:パフォーマンスとデータベース連携の知見

実務で数千の閉領域に対してハッチングをかける場合、上記のコードをただループさせるだけではいけない。

パフォーマンスを最適化する「3つの鉄則」

  • 非表示状態での処理: 大量のハッチングを行う際は、`Application.ScreenUpdating = False`(またはそれに準ずる描画停止処理)を検討せよ。AutoCADのGUI更新は極めて重い。
  • データベース連携: Excelや外部DBからパターン情報を読み込む際は、一度メモリ内の連想配列(Dictionary)にキャッシュせよ。I/O回数を減らすことが、処理時間を秒単位で短縮する鍵だ。
  • Evaluateのタイミング: `Evaluate`メソッドは重い計算を伴う。すべての境界を設定し終えた後に、一括で適用するロジックを組むのがアーキテクトとしての作法である。

—

結論:自動化は「設計」が9割

コードが書けることは前提に過ぎない。真のエンジニアは、AutoCADの「オブジェクト・データベース構造」を俯瞰し、いかにして再計算のコストを最小化するかを計算している。

今回紹介したHatchの操作は、ほんの入り口だ。しかし、この「境界情報の管理」と「エラーハンドリング」の意識があれば、どんなに複雑な図面でも制御下に置くことができるはずだ。

あなたのツールが、誰かの残業を減らし、図面の品質を担保する「真の武器」になることを期待している。次回のステップでは、ブロック属性とHatchを連動させる「メタデータ駆動型図面管理」について深掘りしよう。

さあ、コードを叩け。AutoCADは、あなたの意思を待っている。

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