처음 사진처럼 도면 번호가 각각 나눠져있는 겨우에는 번호가 제대로 안나오더라고요
혹시 두번째 사진처럼 도면 번호를 합쳐서 나타나게 할수있을까요???
이전에 사용하던 리습에서는 됬는데 지금 리습은 안서 이렇개 글을 씁니다
————————————-지금 사용하는 dsav —————————————
; 아키모아 운영진 “행복한하루”
; http://cafe.daum.net/archimore
; 한파일안에 여러도면 찢기
; 2007.10.02.
; 1차수정 2007.12.05 / 텍스트선택 “c” 로 변경 / 공백제거루틴변경 / 도면이름 2개이상일때 합쳐서만들기
(defun c:dsave(/ path os ent en minpt maxpt bn scal baseang p1 p2 p3 p4 dis1 dis2 dis3 dis4 ang1 ang2 ang3 ang4
ss var tadd k en1 $p1 $p2 $p3 $p4 ss2 num svnum savename ss3 $$len $$k fname1 $$ed $$txt)
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os) (if ent (redraw ent 4)) (command “ucs” “”)
(princ))
;-<*error* end
(prompt “n>> 한파일안에 여러도면 개별 저장하기..”)
(vl-load-com)
(setq path (getvar “dwgprefix”))
(setq os (getvar “osmode”))
(setq ent nil)
(while (= ent nil) (setq ent (car (entsel “n블럭을 선택하세요. 한개만.”))))
(setq en (cdr (assoc 0 (entget ent))))
(if (= en “INSERT”)
(progn
(redraw ent 3)
(setvar “osmode” 0)
(vla-GetBoundingBox (vlax-ename->vla-object ent) ‘MinPt ‘MaxPt)
(setq MinPt (vlax-safearray->list MinPt))
(setq MaxPt (vlax-safearray->list MaxPt))
(command “zoom” minpt maxpt)
(setq bn (cdr (assoc 2 (entget ent))))
(setq scal (abs (cdr (assoc 41 (entget ent)))))
(setq baseang (cdr (assoc 50 (entget ent))))
(setq p1 (getpoint “n도곽안에 저장될 파일명인 text 구역지정:”)
p2 (getcorner p1 ” ->다음점:”))
(setq dis1 (/ (distance minpt p1) scal) ang1 (angle minpt p1))
(setq dis2 (/ (distance minpt p2) scal) ang2 (angle minpt p2))
(setq p3 (getpoint “n도면번호 text 구역지정-없으면 엔터:”))
(if p3
(progn
(setq p4 (getcorner p3 ” ->다음점:”))
(setq dis3 (/ (distance minpt p3) scal) ang3 (angle minpt p3))
(setq dis4 (/ (distance minpt p4) scal) ang4 (angle minpt p4))
)
)
(prompt “n>> wblock으로 내보낼 sheet 선택:”)
(command “zoom” “e”)
(setq ss (ssget (list (cons 0 “insert”) (cons 2 bn) (cons 50 baseang))))
(setq ss (@ss_new_lst_x ss))
(if ss
(progn
(setq var (getint “n E-0<1> / T-0<2> / F-0<3> / MF-0<4> / EF-0<5> / NONE<엔터> :”))
(cond ((= var 1) (setq tadd “E-0”))
((= var 2) (setq tadd “T-0”))
((= var 3) (setq tadd “F-0”))
((= var 4) (setq tadd “MF-0”))
((= var 5) (setq tadd “EF-0”))
(t (setq tadd “”))
);cond
(setq k 0)
(repeat (sslength ss)
(setq en1 (ssname ss k))
(setq scal (abs (cdr (assoc 41 (entget en1)))))
(vla-GetBoundingBox (vlax-ename->vla-object en1) ‘MinPt ‘MaxPt)
(setq MinPt (vlax-safearray->list MinPt))
(setq MaxPt (vlax-safearray->list MaxPt))
(setq $p1 (polar minpt ang1 (* dis1 scal)))
(setq $p2 (polar minpt ang2 (* dis2 scal)))
(setq ss1 (ssget “c” $p1 $p2 (list (cons 0 “text,mtext”))))
(if ss1
(progn
;—————————–선택텍스트 합치기 추가
(setq $$len (sslength ss1))
(setq $$k 0 fname1 “”)
(if (> $$len 1)
(progn
(setq ss1 (@ss_new_lst_x ss1))
(repeat (sslength ss1)
(setq $$ed (entget (ssname ss1 $$k)))
(setq $$txt (cdr (assoc 1 $$ed)))
(setq fname1 (strcat fname1 $$txt))
(setq $$k (1+ $$k))
)
);progn
(setq fname1 (cdr (assoc 1 (entget (ssname ss1 0)))))
);if
;—————————–
(setq fname (@tspace-delete fname1))
(if p3
(progn
(setq $p3 (polar minpt ang3 (* dis3 scal)))
(setq $p4 (polar minpt ang4 (* dis4 scal)))
(setq ss2 (ssget “c” $p3 $p4 (list (cons 0 “text,mtext”))))
(setq num (@tspace-delete (cdr (assoc 1 (entget (ssname ss2 0))))))
)
(setq num “”)
)
(setq svnum 0)
(setq savename (strcat path tadd num “” “(” fname “)” ))
(while (findfile (strcat savename “.dwg”))
(setq savename (strcat savename”_” (rtos (setq svnum (1+ svnum)) 2 0)))
)
(setq ss3 (ssget “w” minpt maxpt))
(command “ZOOM” “W” minpt maxpt)
(command “ucs” “m” minpt)
(command “wblock” savename “” (list 0 0 0) ss3 “”)
(command “oops”)
(command “ucs” “”)
(command “ZOOM” “P”)
)
(progn (command “line” minpt maxpt “”) (command “line” (list (car minpt) (cadr maxpt)) (list (car maxpt) (cadr minpt)) “”))
)
(setq k (1+ k))
);repeat
;———————————————————————————–
)
)
)
)
(setvar “osmode” os)
(princ)
);defun
(defun @tspace-delete(txt / k newascii @1 ascii_list) ; 공백제거
(setq ascii_list (vl-string->list txt))
(setq k 0 newascii ‘())
(repeat (length ascii_list)
(setq @1 (nth k ascii_list))
(if (and (/= @1 32) (/= @1 92) (/= @1 47) (/= @1 58) (/= @1 63) (/= @1 60) (/= @1 62) (/= @1 34) (/= @1 42) (/= @1 124))
(setq newascii (append newascii (list @1))))
(setq k (1+ k))
)
(setq newascii (vl-list->string newascii))
newascii
)
(defun @ss_new_lst_x (ss / ssn n ss-y1 en en1y ss-y2 ss-y3) ;선택정렬
(setq ssn (sslength ss))
(setq n 0)
(setq ss-y1 ‘())
(repeat ssn
(setq en (ssname ss n))
(setq en1y (list en (cadr (cdr (assoc 10 (entget en)) ) ) ))
(setq ss-y1 (cons en1y ss-y1))
(setq n (+ n 1))
)
(setq ss-y2 (vl-sort ss-y1 ‘(lambda (e1 e2) (> (cadr e1) (cadr e2)))) )
(setq n 0 ss-y3 (ssadd))
(repeat ssn
(setq ss-y3 (ssadd (car (nth n ss-y2)) ss-y3))
(setq n (+ n 1))
)
ss-y3
)
——————————– 이전에 사용하던 dsave———————————-
; 아키모아 운영진 “행복한하루”
; http://cafe.daum.net/archimore
; 한파일안에 여러도면 찢기
; 2008. 07. 09 LT 용
; 1차수정 2007.12.05 / 텍스트선택 “c” 로 변경 / 공백제거루틴변경 / 도면이름 2개이상일때 합쳐서만들기
(defun c:dsave1(/ path os ent en minpt maxpt bn scal baseang p1 p2 p3 p4 dis1 dis2 dis3 dis4 ang1 ang2 ang3 ang4
ss var tadd k en1 $p1 $p2 $p3 $p4 ss2 num svnum savename ss3 $$len $$k fname1 $$ed $$txt numname1)
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os) (if ent (redraw ent 4)) (command “ucs” “”)
(princ))
;-<*error* end
(prompt “n>> 한파일안에 여러도면 개별 저장하기..”)
(vl-load-com)
(setq path (getvar “dwgprefix”))
(setq os (getvar “osmode”))
(setq ent nil)
(while (= ent nil) (setq ent (car (entsel “n블럭을 선택하세요. 한개만.”))))
(setq en (cdr (assoc 0 (entget ent))))
(if (= en “INSERT”)
(progn
(redraw ent 3)
(setq MinPt (getpoint “nSHEET 의 좌하단점 :”))
(setq MaxPt (getcorner MinPt “nSHEET 의 우상단점 :”))
(setvar “osmode” 0)
(command “zoom” minpt maxpt)
(setq bn (cdr (assoc 2 (entget ent))))
(setq scal (abs (cdr (assoc 41 (entget ent)))))
(setq baseang (cdr (assoc 50 (entget ent))))
(setq p1 (getpoint “n도곽안에 저장될 파일명인 text 구역지정:”)
p2 (getcorner p1 ” ->다음점:”))
(setq dis1 (/ (distance minpt p1) scal) ang1 (angle minpt p1))
(setq dis2 (/ (distance minpt p2) scal) ang2 (angle minpt p2))
(setq p3 (getpoint “n도면번호 text 구역지정-없으면 엔터:”))
(if p3
(progn
(setq p4 (getcorner p3 ” ->다음점:”))
(setq dis3 (/ (distance minpt p3) scal) ang3 (angle minpt p3))
(setq dis4 (/ (distance minpt p4) scal) ang4 (angle minpt p4))
)
)
(prompt “n>> wblock으로 내보낼 sheet 선택:”)
(command “zoom” “A”)
(setq ss (ssget (list (cons 0 “insert”) (cons 2 bn) (cons 50 baseang))))
(setq ss (@ss_new_lst ss))
(if ss
(progn
(setq var (getint “n A-<1> / S-<2> / E-<3> / EF-<4> / M-<5> / MF-<6> / NONE<엔터> :”))
(cond ((= var 1) (setq tadd “A-“))
((= var 2) (setq tadd “S-“))
((= var 3) (setq tadd “E-“))
((= var 4) (setq tadd “EF-“))
((= var 5) (setq tadd “M-“))
((= var 6) (setq tadd “MF-“))
(t (setq tadd “”))
);cond
(setq k 0)
(repeat (sslength ss)
(setq en1 (ssname ss k))
(setq scal (abs (cdr (assoc 41 (entget en1)))))
(setq MinPt (cdr (assoc 10 (entget en1))))
(setq MaxPt (list (+ (* scal 841) (car MinPt)) (+ (* scal 594) (cadr MinPt))))
(setq $p1 (polar minpt ang1 (* dis1 scal)))
(setq $p2 (polar minpt ang2 (* dis2 scal)))
(setq ss1 (ssget “c” $p1 $p2 (list (cons 0 “text,mtext”))))
(if ss1
(progn
;—————————–선택텍스트 합치기 추가
(setq $$len (sslength ss1))
(setq $$k 0 fname1 “”)
(if (> $$len 1)
(progn
(setq ss1 (@ss_new_lst ss1))
(repeat (sslength ss1)
(setq $$ed (entget (ssname ss1 $$k)))
(setq $$txt (cdr (assoc 1 $$ed)))
(setq fname1 (strcat fname1 $$txt))
(setq $$k (1+ $$k))
)
);progn
(setq fname1 (cdr (assoc 1 (entget (ssname ss1 0)))))
);if
;—————————–
(setq fname (@tspace-delete fname1))
(if p3
(progn
(setq $p3 (polar minpt ang3 (* dis3 scal)))
(setq $p4 (polar minpt ang4 (* dis4 scal)))
(setq ss2 (ssget “c” $p3 $p4 (list (cons 0 “text,mtext”))))
;—————————– 종이한장님 추가요청->도면번호 합치기추가
(setq ss2 (@ss_new_lst ss2))
(setq $$k 0 numname1 “”)
(repeat (sslength ss2)
(setq $$ed (entget (ssname ss2 $$k)))
(setq $$txt (cdr (assoc 1 $$ed)))
(setq numname1 (strcat numname1 $$txt))
(setq $$k (1+ $$k))
)
;—————————–
(setq num (@tspace-delete numname1))
)
(setq num “”)
)
(setq svnum 0)
(setq savename (strcat path tadd num “(“fname”)”))
(while (findfile (strcat savename “.dwg”))
(setq savename (strcat savename”_” (rtos (setq svnum (1+ svnum)) 2 0)))
)
(setq ss3 (ssget “w” minpt maxpt))
(command “ucs” “m” minpt)
(command “wblock” savename “” (list 0 0 0) ss3 “”)
(command “oops”)
(command “ucs” “”)
)
(progn (command “line” minpt maxpt “”) (command “line” (list (car minpt) (cadr maxpt)) (list (car maxpt) (cadr minpt)) “”))
)
(setq k (1+ k))
);repeat
;———————————————————————————–
)
)
)
)
(setvar “osmode” os)
(princ)
);defun
(defun @tspace-delete(txt / k newascii @1 ascii_list) ; 공백제거
(setq ascii_list (vl-string->list txt))
(setq k 0 newascii ‘())
(repeat (length ascii_list)
(setq @1 (nth k ascii_list))
(if (and (/= @1 32) (/= @1 92) (/= @1 47) (/= @1 58) (/= @1 63) (/= @1 60) (/= @1 62) (/= @1 34) (/= @1 42) (/= @1 124))
(setq newascii (append newascii (list @1))))
(setq k (1+ k))
)
(setq newascii (vl-list->string newascii))
newascii
)
(defun @ss_new_lst (ss / ssnew ssn n en dx dy ss-x1 ss-y1 ss-x2 ss-y2 ss-x3 ss-y3)
(setq ssn (sslength ss))
(setq n 0)
(setq ss-x1 ‘() ss-y1 ‘())
(repeat ssn
(setq en (ssname ss n))
(setq en1x (list en (car (cdr (assoc 10 (entget en)) ) ) ))
(setq en1y (list en (cadr (cdr (assoc 10 (entget en)) ) ) ))
(setq ss-x1 (cons en1x ss-x1))
(setq ss-y1 (cons en1y ss-y1))
(setq n (+ n 1))
)
(setq ss-x2 (vl-sort ss-x1 ‘(lambda (e1 e2) (< (cadr e1) (cadr e2)))) )
(setq ss-y2 (vl-sort ss-y1 ‘(lambda (e1 e2) (> (cadr e1) (cadr e2)))) )
;;;선택방향설정기준
(setq dx (- (cadr (nth (- ssn 1) ss-x2)) (cadr (nth 0 ss-x2))) )
(setq dy (- (cadr (nth 0 ss-y2)) (cadr (nth (- ssn 1) ss-y2))) )
;;;새로운 선택세트 만들기
(setq n 0 ss-x3 (ssadd) ss-y3 (ssadd))
(repeat ssn
(setq ss-x3 (ssadd (car (nth n ss-x2)) ss-x3))
(setq ss-y3 (ssadd (car (nth n ss-y2)) ss-y3))
(setq n (+ n 1))
(command “zoom” “A”)
)
;;;선택방향설정
(if (>= (- dx dy) 0) (setq ssnew ss-x3) (setq ssnew ss-y3) )
)