(defun c:test_1( / ss ssn otx ntx ky1 dclf file )
(setq dclf (vl-filename-mktemp nil nil ".dcl")
file (open dclf "w")
)
(foreach l
'(
"ct_dcl : dialog { label=\"레이어 이름 변경\";"
" : boxed_column { "
" label = \"문자열 변경\"; "
" :row{ "
" : button { "
" label=\"변경전 문자열\"; "
" key=\"butt1\"; "
" } "
" : edit_box { "
" key = \"text_old\"; "
" edit_width = 30; "
" edit_limit = 150; "
" allow_accept = true; "
" } "
" } "
" :row{ "
" : button { "
" label=\"변경후 문자열\"; "
" key=\"butt2\"; "
" } "
" : edit_box { "
" key = \"text_new\"; "
" edit_width = 30; "
" edit_limit = 150; "
" allow_accept = true; "
" } "
" } "
" "
" } "
" ok_cancel; "
"} "
)
(write-line l file)
)
(close file)
(prompt "선택한 객체의 레이어 이름중 지정한 문자열 변경하기...")
(setq ss (ssget))
(if ss
(progn
(setq ssn (sslength ss))
(setq otx nil ntx nil)
(setq otx (cdr (assoc 8 (entget (ssname ss 0)))))
(setq ntx otx)
(setq dcl_id (load_dialog dclf))
(setq ky1 3)
(while (or (= ky1 3) (= ky1 33))
(new_dialog "ct_dcl" dcl_id)
(set_tile "text_old" otx)
(set_tile "text_new" ntx)
(cond
((= ky1 3)(mode_tile "text_old" 2))
((= ky1 33)(mode_tile "text_new" 2))
)
(action_tile "butt1" "(setq ky1 3)(done_dialog)")
(action_tile "butt2" "(setq ky1 33)(done_dialog)")
(action_tile "text_old" "(setq otx $value)")
(action_tile "text_new" "(setq ntx $value)")
(action_tile "accept" "(setq ky1 9)(done_dialog)")
(action_tile "cancel" "(setq ky1 nil)(done_dialog)")
(start_dialog)
(cond
((= ky1 3)
(setq elst (entget (car (entsel "\n변경전 문자열->"))))
(setq otx
(cond
( (wcmatch (cdr (assoc 0 elst)) "*TEXT")
(cdr (assoc 1 elst))
)
( t
(cdr (assoc 8 elst))
)
)
)
)
((= ky1 33)
(setq elst (entget (car (entsel "\n변경후 문자열->"))))
(setq ntx
(cond
( (wcmatch (cdr (assoc 0 elst)) "*TEXT")
(cdr (assoc 1 elst))
)
( t
(cdr (assoc 8 elst))
)
)
)
)
)
)
(if (= ky1 9) (@ct_run ss otx ntx))
(unload_dialog dcl_id)
)
)
(vl-file-delete dclf)
(princ)
)
;문자열 교체하기
(defun @ct_run (ss otx ntx / otxl ntxl ssn k num tem sn tx txl db1 ed col)
(setq otxl (strlen otx) ntxl (strlen ntx))
(setq ssn (sslength ss))
(setq k 0 num 0)
(while (< k ssn)
(setq ed (entget (ssname ss k)))
(setq tem nil sn 1)
(setq tx (cdr (setq db1 (assoc 8 ed))))
(if (not (setq col (cdr (assoc 62 ed))))
(setq col (cdr (assoc 62 (tblsearch "layer" tx))))
)
(while (= otxl (setq txl (strlen (setq st (substr tx sn otxl)))))
(if (= st otx)
(setq tx (strcat (substr tx 1 (- sn 1)) ntx (substr tx (+ sn otxl)))
sn (+ sn ntxl)
tem t
)
(setq sn (+ sn 1))
)
)
(if tem
(progn
(setq ed (subst (cons 8 tx) db1 ed))
(entmod ed)
(vlax-put-property (vlax-ename->vla-object (ssname ss k)) 'color col)
(setq num (+ num 1))
)
)
(setq k (+ k 1))
)
(terpri)
(prin1 (strcat "변경된 레이어 이름 = " (rtos num 2 0) "개"))
)
첫댓글
요 몇일 시간이좀 있어서
도도도님.. 감사합니다.
그런데 리습실행하여보니 문자열을 변경하는 창이 확인을 눌러도 계속 열리는 데 어디를 손봐서 수정하여야 하는지요??
테스트를 하고서 올렸어야 하는데 그냥 올려서 오류가 있는지 몰랐네요.
수정해서 다시 올렸습니다.
@도도도 지금 실행해보니 무리없이 레이어명 변경이 잘 되고 있습니다.
그런데 한가지 변경된 레이어의 bylayer 색상이 기존 레이어의 bylayer 색상을 따르지 않고 흰색의 bylayer 색상으로 됩니다.
(라인타입은 문제가 없더라고요..)
위 구문에서는 어디를 손봐야 하는지 전혀 감이 오지 않습니다.
죄송스럽지만 bylayer 색상까지 상속 일치되도록 되었으면 업무에 많은 도움이 될것 같습니다.
(번거롭지 않게 한번에 모든 질의를 하여야 하는데 이부분을 놓쳐서 질의 한것 같습니다.)
@스르르르 본문에 노랑바탕에 붉은색 글씨로된 부분을 추가 하세요.
@도도도 도도도님..
진심~ 다시한번 감사드립니다..