LISP で図形を分解したいんだけど…
どうすればいいのかなぁ?
例えば、こんなブロックを分解したいんだけど…
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、オブジェクトを分解する方法を紹介します。
vla-explode 関数を使用してオブジェクトを分解
vla-explode 関数を使用して、オブジェクトを分解できます。
サンプルコードを見てみましょう。
(defun c:ExplodeObject ()
; AutoCAD のオブジェクトを取得
(setq acadObject (vlax-get-acad-object))
; アクティブなドキュメントを取得
(setq activeDocument (vla-get-activedocument acadObject))
; ドキュメントの Utilyty オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
; 選択した図形の VLA オブジェクトを取得
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
; オブジェクトを分解
(setq explodedObjects (vla-explode vlaObject))
(princ)
)
この LISP をロードして、ExplodeObject コマンドを実行してみてください。
やったー!!
オブジェクトを分解できた!!
分解しているのは、以下の部分です。
; オブジェクトを分解
(setq explodedObjects (vla-explode vlaObject))
分解されてばらばらになった図形は、変数 explodedObjects に代入されます。
なので、分解されたあとの図形に対してなにか処理をしたいときは、explodedObjects に対して行います。
分解は、普通の 分解(EXPLODED)コマンドとちょっと違います。
分解できるのは、以下のオブジェクトです。
- 3DPolyline
- BlockReference
- ComparedReference
- ExternalReference
- LWPolyline
- MInsertBlock
- PolygonMesh
- Polyline
- Region
ブロック参照やポリラインなどはありますが、ハッチングがないですね。😅
そんなときは、command 関数で EXPLODED コマンドを使用して分解しましょう。
(command "._explode" (vlax-vla-object->ename vlaObject))