・ ブロック定義の置換え

ブロック定義の置換えは、ブロックのテーブルデータを(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
  )