【AutoCAD LISP】ハッチングの作成

2022年2月14日

【AutoCAD LISP】ハッチングの作成

LISP でハッチングを作成するには、どうしたらいいですか?

モデル空間に、ハッチングを作成するサンプルを紹介します。

最初の 3 行で、モデル空間を変数 mspace に設定しています。

その後に、境界のポリラインを作成して、それに対してハッチングを作成しています。

;;; この LISP をロードして、DrawHatch コマンドを事項すると、ハッチングが作成されます。
(defun C:DrawHatch ()
  (setq acadobj (vlax-get-acad-object))
  (setq document (vla-get-activedocument acadobj))
  (setq modelSpace (vla-get-modelspace document))
  
  ; 境界のポリラインを作成
  (setq polyLinePoints (vlax-make-safearray vlax-vbDouble '(0 . 11)))
  (vlax-safearray-fill polyLinePoints '(50 50 0
                                        150 50 0
                                        150 150 0
                                        50 150 0)
  )
(setq polyLine (vla-addPolyline modelSpace polyLinePoints))
(vla-put-closed polyLine :vlax-true)

  ; ハッチングのタイプを指定(acadiso.pat のパターンを使用)
  (setq hatchType acHatchPatternTypePredefined)
  
  ; ハッチングのパターンを指定
  (setq hatchPattern "AR-B816")
  
  ; ハッチングを追加
  (setq hatch (vla-AddHatch modelSpace hatchType hatchPattern :vlax-true acHatchObject))
  
  ; ハッチング パターンの尺度を 0.1 に設定
  (vla-put-patternscale hatch 0.1)
  
  ; セーフ配列にポリラインを設定
  (setq outerLoop (vlax-make-safearray vlax-vbObject '(0 . 0)))
  (vlax-safearray-put-element outerLoop 0 polyLine)
  
  ; ハッチングの境界として、作成したポリラインを設定
  (vla-appendouterloop hatch outerLoop)
  ; (vla-Evaluate hatch)
  ; (vla-Regen activeDocument :vlax-true)

  (princ)
)

最後の (vla-Evaluate hatch) と (vla-Regen activeDocument :vlax-true) は、ハッチングを評価して再作図するものです。

ヘルプにハッチングの境界を指定したあとにこの記述があったので入れましたが、この記述がなくてもハッチングは問題なく表示されたので、コメント アウトしています。

-API
-