리습 - 범위선택 pdf 자동출력하기
본문 바로가기
■ 유용한 캐드&리습/▫ AutoLISP

리습 - 범위선택 pdf 자동출력하기

by 아키모아 주말농부 2024. 12. 31.
728x90
Ga3.ctb
0.00MB
qa3p.lsp
0.00MB

 
<리습소스>
;;=============================
;  범위선택 pdf자동출력하기(2016.5 ChoiDongWoo)
;  ->DWG To PDF.pc3를 이용하여 축척을 자동계산하여 A3 pdf출력 하기
;  ->선택순으로 작업디렉토리에 화일명-1,화일명-2,...으로 자동으로 이름를 부여하여 출력
;  ->model & paper space에서 모두작동(2016.7 오류수정)
;;--------------------------------------------
(defun c:qa3p(/ ds ctb prt sheet n k1 k ss wpt pt1 pt2 px1 px2 py1 py2 p1 d1 sc sc1 yn num)
  (setvar "cmdecho" 0)
  (setq ds 514.420) ; A3대각선길이
  (setq ctb "Ga3.CTB")
  (setq prt "DWG To PDF.pc3")
  (setq sheet "ISO 전체 페이지 A3(297.00 x 420.00 mm)")
  (setq pname (getvar "dwgprefix") dname (getvar "dwgname"))
  (setq dname (substr dname 1 (- (strlen dname) 4)))
  (setq newname (strcat pname dname))
  (setq pname (strcat newname "-1"))
  (setq n 0 k1 0) (setq ss '())
;->범위선택
  (setq pt1 (getpoint "\n첫 번째 구석점->"))
  (while pt1
    (setq pt2 (getcorner pt1 " 다른 구석점->"))
    (while pt2
        (setq ss (cons (list pt1 pt2) ss))
        (setq pt1 pt2)
        (setq k1 (+ k1 1)) (princ k1)
        (setq pt2 (getcorner pt1 " 다른 구석점->"))
    );->while end
    (setq pt1 (getpoint "\n첫 번째 구석점->"))
  )
;<-범위선택 종료
  (setq n (length ss)) (setq k (- n 1)) (setq num 0)
  (repeat n
    (setq wpt (nth k ss))
    (setq pt1 (car wpt) pt2 (cadr wpt))
    (if (< (car pt1) (car pt2))
        (setq px1 (car pt1) px2 (car pt2)) (setq px1 (car pt2) px2 (car pt1))  )
    (if (< (cadr pt1) (cadr pt2))
        (setq py1 (cadr pt1) py2 (cadr pt2)) (setq py1 (cadr pt2) py2 (cadr pt1))  )
    (setq p1 (list px1 py1) p2 (list px2 py2))
    (if (< (angle p1 p2) (* 0.25 pi)) (setq tem "h") (setq tem "v"))
    (setq d1 (distance pt1 pt2))
    (setq sc (/ d1 ds) sc1 (strcat "1="(rtos sc 2 0))) (terpri)
;--> tilemode
(if (= (getvar "tilemode") 1)
    (if (= tem "v")
       (COMMAND "-PLOT" "Y" "" prt sheet "M" "P" "N" "w" P1 P2 sc1 "c" "Y" ctb
                "Y" "W" pname "N" "Y") ;세로방향 출력
       (COMMAND "-PLOT" "Y" "" prt sheet "M" "L" "N" "w" P1 P2 sc1 "c" "Y" ctb
                "Y" "W" pname "N" "Y") ;가로방향 출력
    )
    (if (= tem "v")
       (COMMAND "-PLOT" "Y" "" prt sheet "M" "P" "N" "w" P1 P2 sc1 "c" "Y" ctb
                "Y" "n" "n" "n" pname "N" "Y") ;세로방향 출력
       (COMMAND "-PLOT" "Y" "" prt sheet "M" "L" "N" "w" P1 P2 sc1 "c" "Y" ctb
                "Y" "n" "n" "n" pname "N" "Y") ;가로방향 출력
    )
)
;<-- tilemode
    (setq k (- k 1))
    (setq num (1+ num))
    (setq pname (strcat newname "-" (rtos (+ num 1) 2 0)))
  );->repeat end
  (prompt"프린터로 ")(princ n)(prompt "장 을 출력함{S:")(princ sc1)(prompt "}")
(princ))

 

 
 

728x90