본문 바로가기
캐드리습

블럭 이름 변경 리습 (이름 앞,뒤 첨자 추가) 리습 설명

by good-life-story 2023. 2. 14.
728x90


(defun c:renbl ( / key txt op oDocument )

(prompt "\n블럭이름 일괄변경하기 ...")
(initget "Front Back")
(setq key (getkword "\n앞에넣기(F)/뒤에넣기<B>: "))
(if (= key nil) (setq key "Back"))
(cond
((= key "Front") (setq op "앞에"))
((= key "Back") (setq op "뒤에"))
)
(setq txt (getstring (strcat "\n" op " 추가할 이름 입력: ")))
(setq oDocument (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for oBlock (vla-get-blocks oDocument)
(if (/= (substr (vla-get-name oBlock) 1 1) "*")
(cond
((= key "Front") (vla-put-name oBlock (strcat txt (vla-get-name oBlock))))
((= key "Back") (vla-put-name oBlock (strcat (vla-get-name oBlock) txt)))
)
)
)
(princ)
)
(vl-load-com)
(prompt "\n[ RENBL ]")
(princ)

================================================================

 
아래는 각 줄의 코드 설명입니다.

(defun c:renbl ( / key txt op oDocument )
• c:renbl는 AutoCAD에서 사용자 정의 명령어 이름이며, 이 명령은 블록 이름 일괄 변경을 수행합니다.
• key, txt, op, oDocument는 로컬 변수입니다.

(prompt "\n블럭이름 일괄변경하기 ...")
• 사용자에게 메시지를 출력합니다.

(initget "Front Back") (setq key (getkword "\n앞에넣기(F)/뒤에넣기<B>: "))
• initget 함수를 사용하여 "Front" 또는 "Back" 중 하나의 값을 강제로 입력하도록 합니다.
• getkword 함수를 사용하여 사용자가 선택한 키워드 값을 가져옵니다.
• 사용자가 아무것도 선택하지 않으면 "Back"으로 간주합니다.

(if (= key nil) (setq key "Back"))
• key 값이 nil(아무것도 선택하지 않은 경우)이면 "Back"으로 초기화합니다.

(cond ((= key "Front") (setq op "앞에")) ((= key "Back") (setq op "뒤에")) )
• key 값에 따라 op 값을 설정합니다.

(setq txt (getstring (strcat "\n" op " 추가할 이름 입력: ")))
• getstring 함수를 사용하여 사용자로부터 문자열을 입력받습니다.
• 사용자가 입력한 문자열은 txt 변수에 저장됩니다.

(setq oDocument (vla-get-activedocument (vlax-get-acad-object)))
• vlax-get-acad-object 함수를 사용하여 현재 AutoCAD 객체를 가져옵니다.
• vla-get-activedocument 함수를 사용하여 현재 문서를 가져옵니다.
• 가져온 문서는 oDocument 변수에 저장됩니다.

(vlax-for oBlock (vla-get-blocks oDocument) (if (/= (substr (vla-get-name oBlock) 1 1) "*") (cond ((= key "Front") (vla-put-name oBlock (strcat txt (vla-get-name oBlock)))) ((= key "Back") (vla-put-name oBlock (strcat (vla-get-name oBlock) txt))) ) ) )
• vlax-for 함수를 사용하여 모든 블록을 순환합니다.
• vla-get-blocks 함수를 사용하여 문서에 있는 모든 블록을 가져옵니다.
• if 조건문에서, 블록 이름의 첫 글자가 "*"이 아닌 경우에만 조건문 내의 블록 이름 변경 코드를 실행합니다.
• cond 조건문에서, key 값에 따라 블록 이름 앞 또는 뒤에 추가할 문자열 txt를 결합합니다.
• vla-put-name
 
 
 
728x90