LISP でブロックの中の図形のプロパティってどうやって変更するの?
例えば、ブロックの中の図形の色を全部 ByBlock にしたいってときとか…
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、ブロックの中の図形のプロパティを変更する方法を紹介します。
以前、以下の記事で、モデル空間にある図形のプロパティを変更する方法を紹介しました。
-
参考【AutoCAD LISP】モデル空間のすべて あるいは 特定の図形のプロパティを変更する方法
AutoCAD で LISP を使用して、モデル空間にあるすべての図形の色、画層、線種などのプロパティを変更する方法を紹介します。また、特定の図形だけのプロパティを変更する方法も紹介します。
続きを見る
モデル空間もブロックの一種です。
なので、やり方はこれと似ています。☝️
vlax-for 関数でブロックの中の図形を順番に取得して、vlax-put-property 関数でプロパティを変更
モデル空間の図形のプロパティを変更するときと同様に、vlax-for 関数でブロックの中の図形を順番に取得できます。
そして、プロパティを変更すればいいということです。
手順としては、以下のようになります。
- 現在のドキュメント(図面)を取得します。
- ブロック テーブルを取得します。
- 対象のブロックを取得します。
- vlax-for 関数で、ブロックの中のオブジェクトを順番に取得します。
- プロパティを変更します。
コードは以下になります。
(defun C:ChangePropertiesInBlock ()
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))
; block01 という名前のブロックを取得
(setq block (vla-item blockTable "block01"))
(vlax-for vlaObject block
; 色を ByBlock に変更
(vlax-put-property vlaObject 'color 0)
)
(princ)
)
上記 LISP をロードして、ChangePropertiesInBlock コマンドを実行すると、block01 という名前のブロックに含まれるすべての図形の色が ByBlock に変更されます。
-
参考【AutoCAD LISP】LISP の実行方法
こんにちは、メモだよ!!管理人です。 今回は、そんなあなたに、AutoCAD で LISP を実行する方法を紹介します。 せっかく AutoLISP を勉強しようと思って、コードを書いてみても実行 ...
続きを見る
やったー!!
これで、ブロックの中のすべての図形の色を ByBlock に変更できた!!
コツさえつかめば簡単ですよ。😉