CAD&BIM

반응형

블럭 insert point  변경하기

 

인터넷에서 받은 자료입니다.

 

참고하세요.

 

;;=================================================================================
;  Block base point change (2007.3 블럭기준점 변경하기)
; ->블럭의 환경변화없이 기준점만을 변경하는 명령어
;;---------------------------------------------------------------------------------
(defun c:bba(/ ss os ent old10 new10 bname old41 old50 newss b en blp addents ang dist index)
   (setq os (getvar "osmode")  ss nil)
   (prompt " 블럭기준점 변경...<블럭선택>")
   (while (= ss nil) (setq ss (ssget ":s" (list (cons 0 "insert"))))  )
   (if ss (progn
          (command "undo" "be")
          (setq ent (entget (ssname ss 0)))
          (setq old10 (cdr (assoc 10 ent)))
          (setq bname (cdr (assoc 2 ent)))
          (setvar "osmode" 111)(terpri)
          (prin1 bname)
          (setq new10 (getpoint old10 " 블럭의 새로운 기준점 선택->"))

          (if new10 (progn
              (setvar "osmode" 0)
              (setq old41 (cdr (assoc 41 ent)));->블럭의 x-scale값
              (setq old50 (cdr (assoc 50 ent)));->블럭의 회전각도
              (if (> old41 0);->회전되기전 값으로 기준점 다시설정
                  (setq new10 (polar old10 (- (angle old10 new10) old50) (/ (distance old10 new10) old41)))
                  (setq new10 (polar old10 (- old50 (angle old10 new10)) (/ (distance old10 new10) old41)))
              )
              (setq newss (ssadd));-> newss을 빈 선택 세트에 설정
              ;---<
              (if (setq b (tblsearch "block" bname))
                  (if (setq en (cdr (assoc -2 b))) (progn
                      (setq blp (cdr (assoc 10 b)))
                      (setq ent (entget en))
                      (entmake ent)
                      (setq addents (entlast))
                      (ssadd addents newss);-> addents를 newss요소에 추가
                      (while (setq en (entnext en))
                          (setq ent (entget en))
                          (entmake ent)
                          (setq addents (entlast))
                          (ssadd addents newss)
                      )
                      (command "block" bname "y" (polar blp (angle old10 new10) (distance old10 new10)) newss "")
                      (setq ang (angle old10 new10))
                      (setq dist (distance new10 old10))
                      (setq ss (ssget "x" (list (cons 2 bname))));->삽입된 블럭을 모두 축출
                      (setq index 0)
                      (repeat (sslength ss)
                          (setq ent (entget (ssname ss index)))
                          (setq old10 (cdr (assoc 10 ent)))
                          (setq old41 (cdr (assoc 41 ent)))
                          (setq old50 (cdr (assoc 50 ent)))
                          (if (> old41 0)
                              (setq new10 (polar old10 (+ old50 ang) (* dist old41)))
                              (setq new10 (polar old10 (- old50 ang) (* dist old41)))
                          )
                          (entmod (subst (cons 10 new10) (assoc 10 ent) ent));->블럭을 원위치로 변경
                          (setq index (1+ index))
                      );repeat end
                  ) );if+progn end
              ); if setq b end
              ;--->
           )  ); if new10 progn end
          (setvar "osmode" os)
          (command "undo" "e")
   )      );  if progn end
   (princ)
)

 

1283673148_bba.lsp
0.00MB

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band