현재 빠른 블록 리습을 사용하고 있습니다.
명령어는 B로
영역 선택 후 B를 누르면 왼쪽 아래를 원점으로 하고, 현재시간을 블록명으로 하는 블록이 생성됩니다.
오토캐드를 사용할 때부터 썼던 리습인데
지스타캐드에서는 가끔씩 블록을 잡다가 캐드가 튕겨버리는 현상이 생깁니다.
다행히 열었던 도면 파일은 뒤에 RECOVER 붙은 파일이 새로 생성이 되어 조금 귀찮긴 해도 날아가진 않는데, 신규로 작성하던 도면은 아예 날아가 버립니다.
지스타 캐드와 호환성 문제인 것 같은데
어느 부분이 문제인지 모르겠습니다.
고수님들 도움 요청드립니다.
;Fast Block >> 빠른 블록 , 임의의 이름으로 블록지정 , 원점은 좌하귀
(defun c:B (/ d d1 t1 r1 ss vv os)
(defun *error* (msg) (setvar “osmode” os) (princ) )
(setq os (getvar “osmode”))
(setq d (rtos (getvar “cdate”) 2 7))
(setq d1 (substr d 1 8)
t1 (substr d 10 7)
r1 (strcat d1 “_” t1))
(setq vv (GetvAr “viewctr”))
(tblsearch “block” (setq B (strcat d1 “_” t1)))
(princ “n블록으로 묶을 범위를 지정하세요.”)
(setq ss (ssget))
(Boundarycheckblock ss)
(setq vv blockctr)
(setvar “osmode” 0)
(command “block” B “none” vv “si” ss)
(command “insert” B “none” vv “1” “1” “0”)
(setvar “osmode” os)
);end defun
;;서브 함수
(defun Boundarycheckblock (objs / entname vlentname minpoint maxpoint lowleftpoint lowleftpointx
lowleftpointy lowleftpointxlist lowleftpointylist uprightpoint uprightpointx
uprightpointy uprightpointxlist uprightpointylist llp urp
sspt sgap sgap2 pt1 pt2 ) ;min max )
(defun *error* (msg) (princ) )
(if (= objs nil) (progn
(setq blockctr (GetvAr “viewctr”))
(exit)
));p if end
(setq n 0)
(repeat (sslength objs)
(setq entname (ssname objs n))
(setq vlentname (vlax-ename->vla-object entname))
(vla-getboundingbox vlentname ‘minpoint ‘maxpoint)
(setq lowleftpoint (vlax-safearray->list minpoint))
(setq lowleftpointx (car lowleftpoint))
(setq lowleftpointxlist (cons lowleftpointx lowleftpointxlist))
(setq lowleftpointy (cadr lowleftpoint))
(setq lowleftpointylist (cons lowleftpointy lowleftpointylist))
(setq uprightpoint (vlax-safearray->list maxpoint))
(setq uprightpointx (car uprightpoint))
(setq uprightpointxlist (cons uprightpointx uprightpointxlist))
(setq uprightpointy (cadr uprightpoint))
(setq uprightpointylist (cons uprightpointy uprightpointylist))
(setq n (1+ n))
)
(setq lowleftpointxlist (vl-sort lowleftpointxlist ‘<))
(setq lowleftpointylist (vl-sort lowleftpointylist ‘<))
(setq uprightpointxlist (vl-sort uprightpointxlist ‘>))
(setq uprightpointylist (vl-sort uprightpointylist ‘>))
(setq llp (list (nth 0 lowleftpointxlist) (nth 0 lowleftpointylist)))
(setq urp (list (nth 0 uprightpointxlist) (nth 0 uprightpointylist)))
(setq ptran1 llp)
(setq ptran2 urp)
;(setq blockctr (list
; (+ (car ptran1) (/ (- (car ptran2) (car ptran1)) 2 ))
; (+ (cadr ptran1) (/ (- (cadr ptran2) (cadr ptran1)) 2 ))
; 0) )
(setq blockctr llp)
)