(defun c:PDFOUT ( / buffer SF_List sa ss AcDoc AcLay AcPlot DCSFix Minxy Maxxy n LP)
(vl-load-com)
(defun list->safearray (lst)
(vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length lst)))) lst)
)
(setq
AcDoc (vla-get-activedocument (vlax-get-acad-object))
AcLay (vla-get-activelayout AcDoc)
AcPlot (vla-get-plot AcDoc)
pdf_prt_name "DWG To PDF.pc3" ;; 프린터 이름 설정
pdf_ctb_file "monochrome.ctb" ;; 펜 설정
pdf_paper_size "ISO_expand_A3_(420.00_x_297.00_MM)" ;; 용지 설정
n 0
)
;;PDF플롯으로 변환
(and
(or
(/= (vla-get-ConfigName AcLay) pdf_prt_name)
(/= (vla-get-StyleSheet AcLay) pdf_ctb_file)
(/= (vla-get-CanonicalMediaName AcLay) pdf_paper_size)
)
(progn
(vla-put-ConfigName AcLay pdf_prt_name)
(vla-put-StyleSheet AcLay pdf_ctb_file)
(vla-put-CanonicalMediaName AcLay pdf_paper_size)
)
)
;;PDF 파일경로 및 이름 지정
(if #PDF_Filename
($PDF_NUM_ADD)
(setq #PDF_Filename (strcat (getvar "dwgprefix") "A001.pdf")) ; pdf 파일이름
)
;;MAIN FUNTION
(setq SF_List (list (cons 0 "LWPOLYLINE") (cons 40 0) (cons 41 0) (cons 70 1) (cons 90 4))) ; 폴리라인 박스
(setq sa (ssget SF_List))
(if sa ; (setq Buffer (getfiled "PDF 파일 작성" #PDF_Filename "pdf" 1))
(and
(setq Buffer (getfiled "PDF 파일 작성" #PDF_Filename "pdf" 1))
(setq #PDF_Filename Buffer)
($PDF_NUM_ADD)
($PDF_NUM_MINUS)
; (setq SF_List (list (cons 0 "LWPOLYLINE") (cons 40 0) (cons 41 0) (cons 70 1) (cons 90 4))) ; 폴리라인 박스
; (setq sa (ssget SF_List))
(setq ss (#SS_Sort_Main sa))
(#BoxReaction ss SF_List)
(/= (sslength ss) 0)
(progn
(setvar "backgroundplot" 0)
(vla-put-paperunits AcLay acmillimeters)
(vla-put-standardscale AcLay acvpscaletofit)
(vla-put-centerplot AcLay :vlax-true)
(setq DCSFix (trans '(0 0) 2 0) DCSFix (list (car DCSFix) (cadr DCSFix)))
(repeat (sslength ss)
(vla-GetBoundingBox (vlax-ename->vla-object (ssname ss n)) 'Minxy 'Maxxy)
(setq Minxy (vlax-safearray->list minxy) Maxxy (vlax-safearray->list maxxy))
(if (< (- (car Minxy) (car Maxxy)) (- (cadr Minxy) (cadr Maxxy)))
(setq LP 1)
(setq LP 0)
)
(setq
Minxy (list->safearray (list (- (car Minxy) (car DCSFix)) (- (cadr Minxy) (cadr DCSFix))))
Maxxy (list->safearray (list (- (car Maxxy) (car DCSFix)) (- (cadr Maxxy) (cadr DCSFix))))
n (1+ n)
)
(vla-put-plotrotation AcLay LP)
(vla-setwindowtoplot AcLay Minxy Maxxy)
(vla-put-plottype AcLay acwindow)
(vla-plottofile AcPlot #PDF_Filename)
($PDF_NUM_ADD)
)
)
)
)
($PDF_NUM_Minus)
(princ)
)
(defun #SS_Sort_Sub (ss / n buffer ss_lst)
(setq n (cadddr (car (ssnamex ss))))
(foreach x (ssnamex ss)
(if (equal n (cadddr x))
(setq buffer (append buffer (list (cadr x))))
(setq ss_lst (append ss_lst (list (list n buffer))) n (cadddr x) buffer (list (cadr x)))
)
)
(setq ss_lst (vl-remove-if '(lambda (x) (listp (car (cadr x)))) (append ss_lst (list (list n buffer)))))
ss_lst
)
(defun #SS_Sort_Main (ss / SortSS MinPt MaxPt MinPtB MaxPtB)
(setq SortSS (ssadd))
(foreach x (#SS_Sort_Sub ss)
(if (= (length (cadr x)) 1)
(ssadd (car (cadr x)) SortSS)
(mapcar
'(lambda (f) (ssadd f SortSS))
(vl-sort (cadr x)
'(lambda (a b)
(if
(equal
(cadr (progn (vla-GetBoundingBox (vlax-ename->vla-object a) 'MinPt 'MaxPt) (vlax-safearray->list MinPt)))
(cadr (progn (vla-GetBoundingBox (vlax-ename->vla-object b) 'MinPtB 'MaxPtB) (vlax-safearray->list MinPtB)))
40.0
)
(< (car (vlax-safearray->list MinPt)) (car (vlax-safearray->list MinPtB)))
(> (cadr (vlax-safearray->list MinPt)) (cadr (vlax-safearray->list MinPtB)))
)
)
)
)
)
)
SortSS
)
(defun #BoxReaction (ss SF_List / en n MinPt MaxPt ns nb)
(repeat (setq n (sslength ss))
(and
(setq en (ssname ss (setq n (1- n))))
(progn
(vla-GetBoundingBox (vlax-ename->vla-object en) 'MinPt 'MaxPt)
(setq MinPt (vlax-safearray->list MinPt) MaxPt (vlax-safearray->list MaxPt))
(if (> 70 (distance MinPt MaxPt))
(ssdel en ss)
(if (setq nb 0 ns (ssget "w" MinPt MaxPt SF_List))
(progn
(ssdel en ns)
(repeat (sslength ns)
(ssdel (ssname ns nb) ss)
(setq nb (1+ nb))
)
)
)
)
)
)
)
ss
)
(defun $PDF_NUM_ADD ( / n TXT1 TXT2 FN F1 F2)
(setq
n 0
TXT1
(vl-list->string
(reverse
(vl-remove-if '(lambda (f) (= 0 (if (= f 92) (setq n nil) n))) (reverse (vl-string->list #PDF_Filename)))
)
)
TXT2 (substr #PDF_Filename (1+ (strlen TXT1)))
FN (substr TXT2 1 (- (setq n (strlen TXT2)) 4))
)
(if (< 4 n)
(progn
(setq
n 0
F2 (reverse (vl-remove-if '(lambda (f) (= nil (if (or (< f 48) (> f 57)) (setq n nil) n))) (reverse (vl-string->list FN))))
F1 (substr FN 1 (- (strlen FN) (length F2)))
)
(setq F2 (vl-string->list (itoa (fix (1+ (atoi (vl-list->string F2)))))))
(if (> 3 (length F2))
(while (> 3 (length F2))
(setq F2 (append (list 48) F2))
)
)
(setq F2 (vl-list->string F2) FN (strcat F1 F2))
)
(setq FN (strcat FN "001"))
)
(setq #PDF_Filename (strcat TXT1 FN ".pdf"))
#PDF_Filename
)
(defun $PDF_NUM_MINUS ( / n TXT1 TXT2 FN F1 F2)
(setq
n 0
TXT1
(vl-list->string
(reverse
(vl-remove-if '(lambda (f) (= 0 (if (= f 92) (setq n nil) n))) (reverse (vl-string->list #PDF_Filename)))
)
)
TXT2 (substr #PDF_Filename (1+ (strlen TXT1)))
FN (substr TXT2 1 (- (setq n (strlen TXT2)) 4))
)
(if (< 4 n)
(progn
(setq
n 0
F2 (reverse (vl-remove-if '(lambda (f) (= nil (if (or (< f 48) (> f 57)) (setq n nil) n))) (reverse (vl-string->list FN))))
F1 (substr FN 1 (- (strlen FN) (length F2)))
)
(setq F2 (vl-string->list (itoa (fix (1- (atoi (vl-list->string F2)))))))
(if (> 3 (length F2))
(while (> 3 (length F2))
(setq F2 (append (list 48) F2))
)
)
(setq F2 (vl-list->string F2) FN (strcat F1 F2))
)
(setq FN (strcat FN "001"))
)
(setq #PDF_Filename (strcat TXT1 FN ".pdf"))
#PDF_Filename
)
첫댓글 df_prt_name "DocuCentre-V C2265" ;; 프린터 이름 설정 하기
pdf_ctb_file "monochrome.ctb" ;; 펜 설정
pdf_paper_size "ISO_expand_A3_(420.00_x_297.00_MM)" ;; 용지 설정
n 0
)
프린트 설정 했는데 바로 인쇄가 안돼고 오류가 뜨는데 요
AutoCAD 변수 설정이 거부됨: "osmode" nil 이런 메세지가 뜸.
이상해서 프린트설정안하고 리습실행을 했더니 또 pdf파일로 돼는데 ..
도도도님 제가 원하는것은 바로 인쇄입니다. pdf파일변화 말고요 ! ㅜㅜ
어떻게 안됄까요 ㅜㅜ
PDF 파일경로 및 이름 지정 관련 루틴을 주석 처리 하시고 용지사이즈는 "A3" 로 변경하시면 됩니다.
@도도도 아제가 머리가 나빠서 ㅜㅜ
PDF 파일경로 및 이름지정관련 루틴을 주석 처리는 어떻게 하는거죠 제가이해가 안돼서요
A3용지는 지금 그대로 가면돼는것같고 , 주석처리는 어떻게 하는거죠>>?
@성룡님 올렸습니다.
제가 지금 외부에있어서 폰으로 답글을 작성중 입니다. 복귀후 pc로 수정해서 올려드릴께요
감사합니다 . 도도도님