・ (nentsel) で選択したオブジェクトが"VERTEX"の場合、POLYLINE
の図形名を取得する
・ (nentsel) で選択したオブジェクトが"ATTRIB"の場合、INSERT
の図形名を取得する
(nentsel) は従属図形があると、従属図形名を返します
そのため、POLYLINE を選択すると、従属図形である
"VERTEX" が返されます。
また、属性情報を持つ INSERT
図形の属性文字を選択した場合は "ATTRIB"
が返されます。
この "VERTEX" "ATTRIB" のデータから、主図形の "POLYLINE"
"INSETR"の図形名を取得するには、(entnaxt) で 図形タイプ "SEQEND"
を探して、そのエンティティーデータのグループコード -2
の値を取得します。
"VERTEX"も"ATTRIB"も同じ処理で親図形の名前が取り出せます
(defun Jo_en_list ( / en ed en_list x Jof_en_list)
;サブルーチン PLINE INSERT の従属図形名を含む図形名リストを取得 ;
(defun Jof_en_list ( en ed / en_list )
(while ed
(if (= (cdr (assoc 0 ed)) "SEQEND") ;"SEQEND"が見つかったら
(progn
(setq en (cdr (assoc -2
ed))) ;グループコード -2 を取得して while
終了
(setq ed nil)
)
(setq ed (entget (setq en (entnext en))))
;"SEQEND"が見つかるまで entnext
)
)
(while en ;"POLYLINE""INSERT"の図形名からスタート
(setq en_list (append en_list (list en))) ;"SEQEND"が現れるまで図形名を
en_list に追加
(if (= (cdr (assoc 0 (entget en))) "SEQEND")
(setq en nil)
(setq en (entnext en)) ;"SEQEND"が見つかるまで
entnext
)
)
en_list
)
;メインルーチン ;
(setq ed (entget (setq en (car (nentsel "\nPOLYLINEか属性文字を選択")))))
(if (not(or
(= "VERTEX" (cdr (assoc 0
ed)))
(= "ATTRIB"
(cdr (assoc 0 ed)))
))
(exit)
)
(setq en_list (Jof_en_list en ed))
(mapcar '(lambda (x)
(princ (strcat "\n" (cdr (assoc 0 (entget x)))))
(princ x)
) en_list)
(princ)
)