・ エンティティーデータのリストからグループコードを指定して要素を削除したい
(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) )