お世話になります。
拾ってきたRENAMEのAutoCADのLISPなのですが、変更前のレイヤ名と変更後のレイヤ名を固定の文字列で自動で入力したいのですが
変更できるのでしょうか。
やりたいことは、レイヤ名に一部AAが含まれるのをBBに変更したい(例)です。
AutoCADでは名前修正後に同じ名前があると変更できない(同じ名前がありますで終わってしまいます)のでそれを回避したく見つけてきました。
単に2回入力すればいいだけですが、図面枚数が多くなると結構時間がかかるのでお願いでしないでしょうか。
よろしくお願いいたします。
以下LISPの記述です。
(vl-load-com)
(defun c:NRENAME (/ *error* old new acDoc oLayers i oldName newName)
(defun *error* (msg)
(if acDoc (vla-endundomark acDoc))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (and (setq old (getstring T "変更前のレイヤ名"))
(setq new (getstring T "変更後のレイヤ名"))
)
(progn
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
)
(setq oLayers (vla-get-layers acDoc))
(setq i 0)
(vlax-for x oLayers
(if (vl-string-search old (setq oldName (vla-get-name x)))
(if
(tblsearch "layer"
(setq newName (vl-string-subst new old oldName)) ; single replacement only
)
(prompt
(strcat
"\nLayer \"" newName "\" already exists. "
"Move all objects, then delete layer \"" oldName "\" "
)
)
(progn
(vla-put-name x newName)
(setq i (1+ i))
)
)
)
)
(prompt
(strcat "\n" (itoa i) " layer" (if (= 1 i) "s " " ") "renamed. ")
)
)
)
(*error* nil)
)
RENAME LISPの修正
- ひめ
- 2024/04/10 (Wed) 12:07:02