LISP でブロックを作成するにはどうすればいいの?
図形は作成できるけど、それをブロックに含める方法がわからない…
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、ブロックを作成する方法を紹介します。
ブロック テーブルに新しいブロックを追加
ブロックを作成するには、まずは図形がなにもない空のブロックを作成します。
手順は以下のようになります。
- 現在のドキュメント(図面)を取得します。
- ブロック テーブルを取得します。
- ブロックの基点を指定します。
- ブロック テーブルに新しいブロックを追加します。
コードは、以下のようになります。
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))
; ブロックの基点を指定
(setq insertionPoint (vlax-3d-point 0 0 0))
; 新しいブロックを追加
(setq block (vla-Add blockTable insertionPoint "ブロック01"))
上記コードを実行すると、ブロック01 という名前のブロックが作成されます。
やったー!!
ブロックを作成できた!!
作成したブロックに図形を追加
ブロックを作成できましたが、ブロックの中は空っぽです。
では、図形を追加してみましょう。
; 円の中心点を指定
(setq centerPoint (vlax-3d-point 0 0 0))
; 円を追加
(setq circle (vla-addcircle block centerPoint 50))
; ポリラインの頂点を指定
(setq polyLinePoints (vlax-make-safearray vlax-vbDouble '(0 . 11)))
(vlax-safearray-fill polyLinePoints '(-50 -50 0 50 -50 0 50 50 0 -50 50 0))
; ポリラインを追加
(setq polyLine (vla-addpolyline block polyLinePoints))
;ポリラインを閉じる
(vla-put-Closed polyLine :vlax-true)
上記コードを実行すると、ブロック01 という名前のブロックに、円とポリラインが追加されます。
ほんとだ!!
ブロックに、円とポリラインが追加されてる!!
ブロックを作成するコマンドの作成
最後に、今までのコードを CreateBlock というコマンドに割り当ててみましょう。
(defun C:CreateBlock ()
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))
; ブロックの基点を指定
(setq insertionPoint (vlax-3d-point 0 0 0))
; 新しいブロックを追加
(setq block (vla-Add blockTable insertionPoint "ブロック01"))
; 円の中心点を指定
(setq centerPoint (vlax-3d-point 0 0 0))
; 円を追加
(setq circle (vla-addcircle block centerPoint 50))
; ポリラインの頂点を指定
(setq polyLinePoints (vlax-make-safearray vlax-vbDouble '(0 . 11)))
(vlax-safearray-fill polyLinePoints '(-50 -50 0
50 -50 0
50 50 0
-50 50 0)
)
; ポリラインを追加
(setq polyLine (vla-addpolyline block polyLinePoints))
;ポリラインを閉じる
(vla-put-Closed polyLine :vlax-true)
(princ)
)
この LISP をロードして、CreateBlock コマンドを実行すると、ブロック01 という名前の円とポリラインを含んだのブロックが作成されます。😄