・ ブロック定義の置換え
ブロック定義の置換えは、ブロックのテーブルデータを(entmod)
か (entmake)
し直すことで行えます。
ネストされたオブジェクトのプロパティーを変更する場合などは
(entmode)
でOKですが、ネストされたオブジェクトを削除したり追加したりするには
(entmake) しないとダメです。
また、ブロック図形がネストされている場合、(entupd) か
(command "REGEN")
で再作画させないと、ディスプレーに反映されないので、注意が必要です。(
UNDO で戻る場合も同様 )
同名ブロックが、複数存在する場合は、(command "REGEN")
でないと、すべてが画き換わりません。
; サブルーチン 選択したオブジェクトを除いてブロックを再定義;
(defun Jof_blk ( dn en_l ) ; dn:削除する図形名 en_l:ネストされたブロック図形のリスト
(setq en (cadr en_l))
(setq bn (cdr (assoc 2 (entget en)))) ;ブロック名取得
(setq nen (tblobjname "BLOCK" bn)) ;ブロック定義の図形名取得
(entmake) ; entmake の明示的終了
(while nen
(if (not (equal nen dn)) ; equal
の代わりに = ではだめ eq だとうまくいかないことがある
(entmake (entget nen)) ;ブロック定義の始まり、dn以外をentmake
)
(setq nen (entnext nen))
)
(entmake '((0 . "ENDBLK"))) ;ブロック定義の終了
(entupd (cadr en_l)) ;再作画 (command
"REGEN") でもOK
)