【AutoCAD LISP】LISP でオブジェクトを分解する方法

2022年3月12日

花火

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))

-API
-