【AutoCAD LISP】ブロックの作成方法

2022年1月31日

積み木

LISP でブロックを作成するにはどうすればいいの?

図形は作成できるけど、それをブロックに含める方法がわからない…

こんにちは、メモだよ!!管理人です。

今回は、そんなあなたに、AutoCAD で LISP を使用して、ブロックを作成する方法を紹介します。

 

ブロック テーブルに新しいブロックを追加

ブロックを作成するには、まずは図形がなにもない空のブロックを作成します。

手順は以下のようになります。

  1. 現在のドキュメント(図面)を取得します。
  2. ブロック テーブルを取得します。
  3. ブロックの基点を指定します。
  4. ブロック テーブルに新しいブロックを追加します。

コードは、以下のようになります。

(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 という名前の円とポリラインを含んだのブロックが作成されます。😄

-API
-