clh521 发表于 2014-9-19 08:33 
但打印机和纸张有了,但如何获得纸张的具体规格呢?比如A4的具体规格为297*210,这个规格如何得到呢,打印程 ...
给你个更完整可行的。 - (defun feng:plot ( ss / layout file dcl nameli sizeli pr w h styleli )
- (setq layout (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))
- file (open (setq dcl (VL-FILENAME-MKTEMP nil nil ".dcl")) "w")
- )
- (WRITE-LINE
- "plot:dialog {
- label = "打印配置" ;
- width = 150 ;
- :row {
- :column {
- :list_box {
- label = "打印机名称:" ;
- key = "name" ;
- height = 30 ;
- }
- :list_box {
- label = "样式:" ;
- key = "style" ;
- }
- :text {
- key = "1" ;
- }
- :text {
- key = "2" ;
- }
- :text {
- key = "3" ;
- }
- }
- :list_box {
- label = "纸张:" ;
- key = "size" ;
- height = 50 ;
- }
- }
- ok_cancel;
- }"
- file
- )
- (close file)
- (NEW_DIALOG "plot" (LOAD_DIALOG dcl))
- (START_LIST "name")
- (MAPCAR 'ADD_LIST (setq nameli (vlax-safearray->list (vlax-variant-value (vla-GetPlotDeviceNames layout)))))
- (END_LIST)
- (START_LIST "style")
- (MAPCAR 'ADD_LIST (setq styleli (vlax-safearray->list (vlax-variant-value (vla-GetPlotStyleTableNames layout)))))
- (END_LIST)
- (vla-RefreshPlotDeviceInfo layout)
- (START_LIST "size")
- (MAPCAR 'ADD_LIST (MAPCAR '(LAMBDA (x) (vla-GetLocaleMediaName layout x)) (setq sizeli (vlax-safearray->list (vlax-variant-value (vla-GetCanonicalMediaNames layout))))))
- (END_LIST)
- (SET_TILE "1" (strcat "打印设备:" (vla-get-ConfigName layout)))
- (vla-GetPaperSize layout 'w 'h)
- (SET_TILE "2" (strcat "纸张尺寸:" (vla-GetLocaleMediaName layout (vla-get-CanonicalMediaName layout)) "--(" (itoa (fix w)) "x" (itoa (fix h)) ")"))
- (SET_TILE "3" (Strcat "打印样式:" (nth (atoi (GET_TILE "style")) styleli)))
- (ACTION_TILE "name" "(SET_TILE "1" (strcat "打印设备:" (nth (atoi $VALUE) nameli)))(setq sizeli (feng:plot:size layout nameli $VALUE))")
- (ACTION_TILE "size" "(feng:plot:paper layout sizeli $VALUE)")
- (ACTION_TILE "style" "(SET_TILE "3" (strcat "打印样式:" (nth (atoi $VALUE) styleli)))")
- (ACTION_TILE "accept" "(setq pr (GET_TILE "style")) (DONE_DIALOG 1)")
- (if (= (START_DIALOG) 1) (feng:plot:done layout ss (nth (atoi pr) styleli)))
- )
- (defun feng:plot:paper ( layout li nu / w h )
- (vla-put-CanonicalMediaName layout (nth (atoi nu) li))
- (vla-GetPaperSize layout 'w 'h)
- (SET_TILE "2" (strcat "纸张尺寸:" (vla-GetLocaleMediaName layout (vla-get-CanonicalMediaName layout)) "--(" (itoa (fix w)) "x" (itoa (fix h)) ")"))
- (list w h)
- )
- (defun feng:plot:size ( layout li nu / sizeli w h )
- (vla-put-ConfigName layout (nth (atoi nu) li))
- (vla-RefreshPlotDeviceInfo layout)
- (START_LIST "size")
- (setq sizeli (vlax-safearray->list (vlax-variant-value (vla-GetCanonicalMediaNames layout))))
- (MAPCAR 'ADD_LIST (MAPCAR '(LAMBDA (x) (vla-GetLocaleMediaName layout x)) sizeli))
- (END_LIST)
- (vla-put-CanonicalMediaName layout (nth 0 sizeli))
- (vla-GetPaperSize layout 'w 'h)
- (SET_TILE "2" (strcat "纸张尺寸:" (vla-GetLocaleMediaName layout (vla-get-CanonicalMediaName layout)) "--(" (itoa (fix w)) "x" (itoa (fix h)) ")"))
- sizeli
- )
- (defun feng:plot:done ( layout ss style / driver paper w h bl n li p1 p2 )
- (setq driver (vla-get-ConfigName layout)
- paper (vla-GetLocaleMediaName layout (vla-get-CanonicalMediaName layout))
- bl (getint "\n请输入比例<布满>1=")
- )
- (vla-GetPaperSize layout 'w 'h)
- (repeat (setq n (sslength ss))
- (setq li (cons (vlax-ename->vla-object (ssname ss (setq n (1- n)))) li))
- )
- (setq li (MAPCAR '(LAMBDA (x) (vla-GetBoundingBox x 'p1 'p2) (MAPCAR 'vlax-safearray->list (list p1 p2))) li))
- (MAPCAR '(LAMBDA (x) (command "plot" "y" "" driver paper "m"
- (if (and (>= w h) (>= (- (car (last x)) (car (car x))) (- (cadr (last x)) (cadr (car x))))) "l" (progn (setq n w w h h w) "p"))
- "y" "w" (car x) (last x)
- (if (or (null bl) (<= (* bl w 0.1) (- (car (last x)) (car (car x)))) (<= (* bl h 0.1) (- (cadr (last x)) (cadr (car x)))))
- "f"
- (strcat "1=" (itoa bl))
- )
- "c" "y" style "y" "a" "n" "y" "y")) li)
- )
- (feng:plot (ssget))
|