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

리습 - 시트선택 pdf 자동출력하기

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

 
<리습소스> *빨간색 부분을 수정하여 사용하세요
;;===============================================================================
;  Auto Plotting (2016.5 ChoiDongWoo)
;  ->DWG To PDF.pc3를 이용한 A3 pdf출력 하기
;  ->지정한 것만 위에서 아래로 좌측에서 우측의 순서로 pdf출력
;  ->작업디렉토리에 화일명-1,화일명-2,...으로 자동으로 이름를 부여하여 출력
;;-------------------------------------------------------------------------------
(defun c:a3p(/ xsize ysize prt ctb ssnew pname dname newname
              os ss1 nb an num ob1 obj p1 p2 p2x p2y sc sc1 lp)
;->*error* start
 (defun *error* (msg)(princ "error: ")(princ msg)
 (setvar "osmode" os)
 (princ))
;-<*error* end
   (setq xsize 841 ysize 594)                            ;-<1>sheet size 지정
   (setq ctb "Ga3.CTB")                                  ;-<2>ctb 지정
   (setq prt "DWG To PDF.pc3")                           ;-<3>Printer 지정
   (setq sheet "ISO 전체 페이지 A3(297.00 x 420.00 mm)") ;-<4>sheet 규격
   (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 os (getvar "osmode"))(terpri)
   (prompt "출력할 x-sheet을 선택하시오->")
   (setq ss1 (ssget '((0 . "INSERT") (2 . "x-sheet,x-sheet-dp3"))));지정된 블럭만 선택함
(if (= ss1 nil) (setq ss1 (ssget '((0 . "INSERT")))) );블럭만 선택함
(if ss1 (progn
   (setq ssnew (@a3_ss_lst ss1))
   (setq ss1 ssnew)
   (setq nb (sslength ss1))
   (prompt "\n...출력물 총 ") (prin1 nb) (prompt " 장")
   (prin1 (strcat "1=" (rtos (* (cdr (assoc 41 (entget (ssname ss1 0)))) 2))))
   (setq an (getint " 을 출력하시겠습니까?<enter>"))
   (setq num 0)
   (repeat nb
      (setq ob1 (ssname ss1 num))
      (setq obj (entget ob1))
      (setq p1 (cdr (assoc 10 obj)))
      (setq sc (cdr (assoc 41 obj)))
      (setq lp (cdr (assoc 50 obj)))
      (setq sc1 (* sc 2))
      (setq sc1 (strcat "1="(rtos sc1)))
      (setq p2x (* xsize sc) p2y (* ysize sc))
      (setvar "osmode" 0)
      (if (> lp 0)
         (progn ;세로방향 출력
         (setq p2 (strcat "@" (rtos p2y) ",-" (rtos p2x)))
         (COMMAND "-PLOT" "Y" "" prt sheet "M" "P" "N" "w" P1 P2 sc1 "c" "Y" ctb
                  "Y" "W" pname "N" "Y")  )
         (progn ;가로방향 출력
         (setq p2 (strcat "@" (rtos p2x) "," (rtos p2y)))
         (COMMAND "-PLOT" "Y" "" prt sheet "M" "L" "N" "w" P1 P2 sc1 "c" "Y" ctb
                  "Y" "W" pname "N" "Y")  )
      )
      (setvar "osmode" os)
      (setq num (1+ num))
      (setq pname (strcat newname "-" (rtos (+ num 1) 2 0)))
   );repeat end
   (princ)
));if end
);defun

 
 
 
 
 
*시트블럭을 변경하여 사용하세요.^^

728x90