CAFE

★ CAD/LISP/분과 Q&A

[[Lisp]]선택한 블럭의 도면내 이름 전체 변경가능한 리습 문의

작성자푸쉬킨|작성시간24.04.02|조회수318 목록 댓글 7

※ 말머리 필수 (말머리 누락시 통보없이 게시 글이 삭제될 수 있습니다.)

 

※ 회원정보는 최소한 '운영진 공개'로 지정

 

※ 캐드나 리습 관련 질문일 경우 반드시 캐드 종류와 버전 명기 (ex> 오토캐드2022 / 윈10 64비트)

   <캐드 / 윈도우 종류 및 버전 :                            /                               >

 

※ 질문은 최대한 성의있고 자세하게 (답변자가 되묻게 질문하지 말아주세요.)

 

※ 이외는 자유롭게 글 남겨 주시면 됩니다.

 

수고많으십니다...

언제나 도움을 받고 업무를 원활하게 잘 하고 있습니다..

다름이 아니라 블럭 이름변경 관련하여 리습문의를 드리고자 합니다..

블럭 선택시 블럭내부 외부 전체 이름 변경하는 리습은 있으나...

제가 바라는 기능은

묶여있는 블럭들중 제가 원하는 블럭선택시 도면내 전체 이름 변경을 하는것이나...

제가 선택한 이름의 블럭만 전체 변경이 되었으면 합니다....

블럭안의 블럭이나... 다른곳에 원하는 블럭위에 블럭이 잡혀있는 경우의( 최종블럭이름) 블럭이름은 변경이 되지 않고요...

조금.. 어려울수 있을것 같은데.. 혹시 가능할까하여 이렇게 문의 드립니다...

이해를 위해 참고도면을 참조로 올렸습니다...

아무쪼록 부탁 드리겠습니다... 

감사합니다...

 

 ( 원하는 블럭만 도면내 전체 이름 변경,  원하는 블럭의 내,외에 있는 블럭들의 이름은 변경안함) 

 

 

 참고로 예성님이 올려주셨던 리습 구문입니다...

 

(defun c:BB (/ Dec2Hex #Block_Randname #Block_Rename acDoc ss $Block_OBJ bli n)
(prompt (strcat "AUTORENBLK\n이름을 자동으로 변경할 블록 객체를 선택..."))
(vl-load-com)
(setq ss (ssget (list (cons 0 "INSERT"))) n 0)

(if ss
  (progn
    (vla-startUndomark (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))))

    (defun Dec2Hex (num / str r)
      (setq str "")
      (while
(progn
  (setq r (rem num 16.))
  (cond
    ((< r 10) (setq str (strcat (itoa (fix r)) str)))
    ((< r 16) (setq str (strcat (chr (+ (fix r) 55)) str)))
  )
  (> (setq num (fix (/ num 16.))) 0)
)
      )str
    )

    (defun #Block_Randname ( / nbl_name nbl_hex nbl_hex2)
      (while (not nbl_name)
(setq tic (atof (vl-list->string (reverse (vl-string->list (rtos (getvar "cputicks") 2 0)))))
      nbl_hex (Dec2Hex (+ (rem tic 2130706432) 16777216))
)
(if (< (strlen nbl_hex) 8) (setq nbl_hex (strcat "0" nbl_hex)))
(setq nbl_hex2 (strcat "A$C" nbl_hex))
(or (/= (strlen nbl_hex2) 11) (tblsearch "block" nbl_hex2) (setq nbl_name nbl_hex2))
      )nbl_name
    )
  )
)

;unsigned var: bli
(setq $Block_OBJ
  (function
    (lambda (x / bn bob)
      (if (not (member (setq bn (cdr (assoc 2 (entget x)))) bli))
(progn
  (setq n (1+ n) bob (vlax-ename->vla-object (cdr (assoc 330 (entget (tblobjname "BLOCK" bn))))))
  (prompt (strcat "\n**Change BlockName: " bn " ---> "));prompt부
  (setq bn (#Block_Randname) bli (append bli (list bn)))
  (princ bn);prompt부
  (vla-put-name bob bn)
  (vlax-for o bob
    (if
      (and
(wcmatch (vla-get-ObjectName o) "*Block*")
(not (wcmatch (vla-get-name o) "`**"))
      )
      ((eval‎ $Block_OBJ) (vlax-vla-object->ename o))
    )T
  )T
)
      )
    )
  )
)

(mapcar $Block_OBJ (if (= (type ss) 'PICKSET) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))

(if (zerop n)
  (prompt (strcat "\n선택한 블록이 없습니다."))
  (progn (prompt (strcat "\n" (rtos n 2 0) "개의 블록 이름이 변경 되었습니다.")) (vla-endUndomark acDoc))
)(princ)
)

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 답댓글 작성자푸쉬킨 작성자 본인 여부 작성자 | 작성시간 24.04.04 푸쉬킨 1번과 2번의 경우 같은 내용이 맞으며, 필요한 블럭이 나올때까지 밖으로 불러내 이름을 변경하면 됩니다.....
    하지만 조랍된 블럭의 이름을 변경하고 싶은데.. A(B)에서.. A만 변경하고 싶으나,, D(B), C(B)라는 블럭에서 A라는 이름 변경시 A 블럭 내부에 있는 B라는 블럭이름이 함께 변경된다는 점이 문제입니다..
    한도면에서 작업을 하면 문제가 없으나.... 다른 도면에서 수정작업을 하고 필요한 블럭만 이름을 변경해서 들어왔는데... B라는 블럭 이름이 달라지니... 나중에 B라는 블럭을 수정했을시... B가 B, Y등의 여러가지 이름의 블럭으로 나뉘어 져서요...
  • 작성자drawing | 작성시간 24.04.04 https://www.lee-mac.com/copyblock.html
  • 답댓글 작성자푸쉬킨 작성자 본인 여부 작성자 | 작성시간 24.04.04 죄송한데 저건 어떻게 받는걸까요?? 테스트 해보고 싶은데...ㅜㅜ
  • 답댓글 작성자drawing | 작성시간 24.04.04 푸쉬킨 CopyRenameBlockV1-5.lsp
    위에 클릭하면 다운됩니다.
  • 답댓글 작성자푸쉬킨 작성자 본인 여부 작성자 | 작성시간 24.04.04 drawing 감사합니다.. 리습은 제가 원하는 리습이 아닙니다.. ㅜㅜ
    같은 이름의 블럭 전체 이름을 변경하고자 합니다...
    다만 블럭위에 블럭의 이름을 변경시 그 내부에 있는 작은 블럭들(예 : 볼트, 너트 등)은 이름이 변경되지 않았으면 해서요......
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼