・ エンティティーデータのリストからグループコードを指定して要素を削除したい
(entmake) (entmod)
を利用してオブジェクトの編集をする場合、不要な要素を削除したいことがあります
要素を書換えるためには (subst)
という関数が用意されていますが、削除するのはないですね
そこで、まず考えたのが、(subst) を使って nil
におきかえる
これは、だめでした
エンティティーデータのリストの中に nil
がはいっちゃいまいた
そこで、(append)
を使って、新しいリストを作る方法でアプローチしたのが次のサンプルです
;//////////////////////////////////////////////////////////////////////////////////////
; Jo_del_ed.lsp エンティティーデータのリストからグループコードを指定して要素を削除
; By Kamijo
;//////////////////////////////////////////////////////////////////////////////////////
(defun Jo_del_ed ( / ed index index_list edn )
;サブルーチン:削除したエンティティデータのリストを返す;
;ed:エンティティーデータのリスト、index_list:削除したいグループコードのリスト;
(defun Jof_del_ed ( ed index_list / n ret )
(foreach n ed (setq ret (append ret (if (member (car n) index_list) nil (list n)))))
ret
)
;メインルーチン(Jo_del_ed);
(setq ed (entget (car (entsel))))
(terpri)
(princ ed)
(setq index t)
(while index ;削除するグループコードを繰り返し指定 <Enter>で指定終了;
(setq index (getstring "\n削除するリストのINDEXを入力 <Enterで入力終了>:")) ;整数値を指定しないとエラーになります;
(if (= "" index)
(setq index nil)
(setq index_list (append index_list (list (atoi index))))
)
)
(setq edn (Jof_del_ed ed index_list))
(terpri)
(princ edn)
(princ)
)