프로그램
캐드 분류

블록안의 블록 이름바꾸는 리습 질문요

컨텐츠 정보

  • 187 조회
  • 6 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

CB명령어를 쳐서 블록안에 블록을 치면 원본블록은 그대로 있고 그위에 겹쳐서 다른블록이 생성되는데 원본블록이 지워지게끔 가능하게 고수님 수정좀 해주세요


(defun c:cb nil (LM:RenameBlockReference   t))
(defun c:rb nil (LM:RenameBlockReference nil))


(defun LM:RenameBlockReference ( cpy / *error* abc app dbc dbx def doc dxf new old prp src tmp vrs )


    (defun *error* ( msg )
        (if (and (= 'vla-object (type dbx)) (not (vlax-object-released-p dbx)))
            (vlax-release-object dbx)
        )
        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
            (princ (strcat "nError: " msg))
        )
        (princ)
    )
   
    (while
        (progn
            (setvar 'errno 0)
            (setq src (car (entsel (strcat "nSelect block reference to " (if cpy "copy & " "") "rename: "))))
            (cond
                (   (= 7 (getvar 'errno))
                    (princ "nMissed, try again.")
                )
                (   (= 'ename (type src))
                    (setq dxf (entget src))
                    (cond
                        (   (/= "INSERT" (cdr (assoc 0 dxf)))
                            (princ "nPlease select a block reference.")
                        )
                        (   (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 dxf)))))))
                            (princ "nSelected block is on a locked layer.")
                        )
                    )
                )
            )
        )
    )
    (if (= 'ename (type src))
        (progn
            (setq app (vlax-get-acad-object)
                  doc (vla-get-activedocument app)
                  src (vlax-ename->vla-object src)
                  old (vlax-get-property src (if (vlax-property-available-p src 'effectivename) 'effectivename 'name))
                  tmp 0
            )
            (while (tblsearch "block" (setq def (strcat (vl-string-left-trim "*" old) "_" (itoa (setq tmp (1+ tmp)))))))
            (while
                (and (/= "" (setq new (getstring t (strcat "nSpecify new block name <" def ">: "))))
                    (or (not (snvalid new))
                        (tblsearch "block" new)
                    )
                )
                (princ "nBlock name invalid or already exists.")
            )
            (if (= "" new)
                (setq new def)
            )
            (setq dbx
                (vl-catch-all-apply 'vla-getinterfaceobject
                    (list app
                        (if (< (setq vrs (atoi (getvar 'acadver))) 16)
                            "objectdbx.axdbdocument"
                            (strcat "objectdbx.axdbdocument." (itoa vrs))
                        )
                    )
                )
            )
            (if (or (null dbx) (vl-catch-all-error-p dbx))
                (princ "nUnable to interface with ObjectDBX.")
                (progn
                    (setq abc (vla-get-blocks doc)
                          dbc (vla-get-blocks dbx)
                    )
                    (vlax-invoke doc 'copyobjects (list (vla-item abc old)) dbc)
                    (if (wcmatch old "`**")
                        (vla-put-name (vla-item dbc (1- (vla-get-count dbc))) new)
                        (vla-put-name (vla-item dbc old) new)
                    )
                    (vlax-invoke dbx 'copyobjects (list (vla-item dbc new)) abc)
                    (vlax-release-object dbx)
                    (if cpy (setq src (vla-copy src)))
                    (if
                        (and
                            (vlax-property-available-p src 'isdynamicblock)
                            (= :vlax-true (vla-get-isdynamicblock src))
                        )
                        (progn
                            (setq prp (mapcar 'vla-get-value (vlax-invoke src 'getdynamicblockproperties)))
                            (vla-put-name src new)
                            (mapcar
                               '(lambda ( a b )
                                    (if (/= "ORIGIN" (strcase (vla-get-propertyname a)))
                                        (vla-put-value a b)
                                    )
                                )
                                (vlax-invoke src 'getdynamicblockproperties) prp
                            )
                        )
                        (vla-put-name src new)
                    )
                    (if (= :vlax-true (vla-get-isxref (setq def (vla-item (vla-get-blocks doc) new))))
                        (vla-reload def)
                    )
                    (if cpy (sssetfirst nil (ssadd (vlax-vla-object->ename src))))
                )
            )
        )
    )
    (princ)
)


 


;;———————————————————————-;;
;;                             End of File                              ;;
;;———————————————————————-;;

관련자료

댓글 6 / 1 페이지

뭐하남님의 댓글

(and (/= "" (setq new (getstring t (strcat "nSpecify new block name <" def ">: "))))

rnsdlsajfl님의 댓글

뭐하남님 너무 고맙습니다^^ 염치없지만 하나만 더 물어봐도 되겠습니까 CB명령어로 쳐서 ** (블록안에 블록을)** 치면 원본블록은 그대로 있고 그위에 겹쳐서 다른블록이 생성되는데 원본블록이 지워지게끔 가능하게 고수님 수정좀 해주세요 유일하게 이리습이 블록안에 불록이름을 바꿀수 있더라구요 근데 블록안에 블록이름이 바꿔면서 기존에 있던 원본은 블록이 있더라구요 즉 겹쳐지는데 가능할수 있는지요 부탁좀 드리겠습니다 이런 종루에 블록도면이 너무 많아서 공수가 많이 들어가네요

rnsdlsajfl님의 댓글

머하남님 죄송합니다 직원들이 설명을 잘못해서 1번을 클릭하면 1번2번 동일 블록이름이 같기 때문에  3번처럼 뜹니다 여기서 3번에 M12 이름을 RB나CB로  클릭해서 바꾸면 1번2번 블록이름이 같이 따라 옵니다 즉 M12 만 개별적으로 바꿀수 없는지요  참고로 1번 2번 3번은 같은 이름입니다 즉 서브 블록만 바꿀수 없는가 해서요. 파일 참조해서 봐주세요. 부탁드립니다.

뭐하남님의 댓글

뭔가 착각하신 것 같은데요. 블록 속 블이 다를 수가 있나요? 같은 이름의 블인데 안에 내용물(속성문자가 아닌)이 다를 수가 있나요? abc(록) 안에 123(록), abc(록) 안에 가나다(록)가 가능한가요?

전체 7,232 / 363 페이지
번호
제목
이름
게시물이 없습니다.

최근글


새댓글


알림 0