본문 바로가기
캐드리습

제자리 블럭 만들기 이름지정 가능 리습

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

;;일반객체를 카피클립으로  블럭 만들어서 제자리 붙이고 원본은 삭제함-블럭이름 지정가능
(defun c:MB (/ os ent bp blk_nme obn ins rnam byn byn2)
 (defun *error* (msg)(princ "error: ")(princ msg)
  (setvar "osmode" os) (princ))
   (graphscr)(terpri) (setvar "CMDECHO" 0)
   (setq os (getvar "osmode"))
   (prompt "≫ 블럭으로 만들 객체를 선택을 하세요... ")
   (setq ent (ssget ))
   (setq bp (getpoint "\n≫ 삽입점 클릭하세요 : "))(terpri)
   (command "_copybase" bp ent "" "_pasteblock" bp "erase" ent "") 
   (setq blk_nme (getstring "\n≫ 블럭이름을 지정하시겠습니까? [Yes/No][Y]  : "))  
   (if (or (= blk_nme "")(= blk_nme "Y") (= blk_nme "y"))
   ;;블럭 이름 설정
      (if (setq ent (entlast))
   (progn (setq elist (entget ent))
        (setq obn (cdr (assoc 2 elist)))
        (setq ins (cdr (assoc 10 elist)))
        (setq rname nil)
        (while (= rname nil)
          (setq rname (getstring t "\n≫ 블럭이름을 입력하세요 : "))
          (setq byn (assoc 2 (tblsearch "block" rname)))
          (setq byn2 (cdr byn)) ; byn2 블럭이름
          (if (= rname byn2)
            (progn (setq rname nil)
               (prompt "≫ 중복된 이름입니다 -> 다시 입력해 주세요")
            ) ;progn
          );if
        ) ;while
        (if (/= rname "")
          (progn (command "explode" ent)
            (setvar "osmode" 0)
            (command "_.block" rname ins "P" "")
            (command "_.insert" rname ins "" "" "")
            (setvar "osmode" os)
          (princ "≫ 블록이름 : ")(princ "[ ")(princ obn)(princ " ]")(princ " 에서 ")
    (princ "[ ")(princ rname)(princ " ]")(princ "(으)로 설정되었습니다.")
          );progn
        );if
      );progn
     );if
   ;;블럭 이름 설정 끝
   );if
   (setvar "osmode" os)
   (princ)
   );defun

728x90