同名のブロックが複数配置されている中から、1つだけブロック名を変更する。
(変更後のブロック名が既に存在したら、そのブロックに置き換わる)
(defun C:Rename_PickedBlock ( / ss conf oldName InputName tempName)
(vl-load-com) ; ActiveX/VLA関数をロード
(princ "\n名前を変更するブロックを1個選択。")
(if (setq ss (ssget "_+.:S" '((0 . "INSERT"))))
(progn
(setq ent (ssname ss 0))
(setq obj (vlax-ename->vla-object ent))
(setq oldName (vla-get-EffectiveName obj))
)
)
(if oldName
(progn
(if (eq *newName* nil) (setq *newName* ""))
(setq InputName "")
(princ (strcat "\n現在のブロック名=[" oldName "]です。"))
(while (eq "" InputName)
(setq InputName (getstring T (strcat "\n変更後のブロック名を入力<" *newName* ">:")))
(if (eq "" InputName) (setq InputName *newName*) (setq *newName* InputName))
(if (eq oldName *newName*)
(progn
(alert "\n変更前と変更後の名前が同じです")
(setq InputName "")
)
)
)
(if (tblsearch "BLOCK" *newName*)
(progn
(initget "Yes No") ; "Yes" または "No" の入力を受け付けるように設定
(setq conf (getkword (strcat "\nブロック [" *newName* "] が存在します。処理を続行しますか? [Yes/No]: ")))
)
(setq conf "Yes")
)
)
)
(if (eq conf "Yes")
(progn
(setq tempName (strcat *newName* "_" (rtos (* 1000000 (getvar "CDATE")) 2 0) "_temp"))
(setvar "CMDECHO" 0)
(command "undo" "be")
(if (tblsearch "BLOCK" *newName*) (command "-rename" "b" *newName* tempName))
(command "-rename" "b" oldName *newName*)
(command "copybase" "non" "0,0,0" ss "")
(command "undo" "e" "u" "erase" ss "")
(command "pasteclip" "non" "0,0,0")
(princ (strcat "\n選択したブロックの名前を [" *newName* "] に変更しました"))
)
)
(princ)
)
同名のブロックが複数配置されている中から、1つだけブロック名を変更する。
- Hamu
- 2026/07/01 (Wed) 17:03:09