明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3118|回复: 8

批量打印出图问题求救,高手进!

[复制链接]
发表于 2005-9-7 22:32 | 显示全部楼层 |阅读模式
AutoCAD中用PLOT命令每次只能打印一张图纸,如果在一个图形文件内有多张大小一样的图纸成纵向排列,间距M_d=500mm。通过Mplot只需调试一张,便可打印所有图纸。不知道怎么来写程序,我用的是autocad 2004,望高手能指点
发表于 2005-9-17 00:16 | 显示全部楼层
我也想知道
 楼主| 发表于 2005-9-23 23:30 | 显示全部楼层

怎么没有人回答?困惑我好久的问题!希望高手能给解答!

发表于 2005-9-24 08:30 | 显示全部楼层

一个贼土的思路:在大小不一的图框上画一个矩形——赋予它与众不同的颜色或是专用图层 我们就可以通过 这个矩形得到列印所需的参数

没有编程试过,不知可否行的通 有待各位指正!

发表于 2005-9-24 09:01 | 显示全部楼层

秋枫老弟有个批量打印的程序,可以试试

发表于 2005-9-25 20:26 | 显示全部楼层
where?
发表于 2005-9-28 17:36 | 显示全部楼层

曾经也有如此想法,编了这样的程序!不过,格式什么的得先设置好!

发表于 2005-9-28 17:38 | 显示全部楼层
(DEFUN C:DY (/   OSM  OEI  OEA  S1  Y1  I1 F   1   2   3
      4   5   6   D1  D2   D3   D4 D5   SX1  SX2  A
      B   C    FN0  FN1  ATH FX1  TZ 00  01  SS   F1
     )
  (SETQ OSM (GETVAR "OSMODE"))
  (SETQ OEI (GETVAR "EXTMIN"))
  (SETQ OEA (GETVAR "EXTMAX"))
  (SETVAR "BLIPMODE" 0)
  (SETVAR "CMDECHO" 0)
  (IF (= (MEMBER "geomcal.arx" (ARX)) NIL)
;;;注意要小写GEOMCAL.ARX
    (ARXLOAD "GEOMCAL")
  )
  (INITGET "Y N")
  (SETQ TZ (GETKWORD "\n 是否调整图形间距[是(Y)/否(N)]<N>:"))
  (IF (= TZ NIL)
    (SETQ TZ "N")
  )
  (IF (= TZ "Y")
    (PROGN
      (SETVAR "OSMODE" 0)
      (SETQ 1 (GETPOINT "\n 指定第一个调整区域的第一个角点:"))
      (WHILE 1
 (FW)
 (SETQ SX1 0)
 (SETQ SX2 (/ I 2))
 (SETQ 00 (GETPOINT "\n 指定调整后的基点:"))
 (SETVAR "OSMODE" 33)
 (INITGET 128)
 (SETQ D3 (/ (- (CADR 4) (CADR 3)) 2))
 (WHILE (< (ABS D3) (ABS (- (CADR 4) (CADR 3))))
   (SETQ D3 (GETPOINT "\n 请指定调整后的行间距离:"))
   (COND
     ((= (TYPE D3) 'STR)
      (SETQ D3 (C:CAL D3))
     )
     ((= (TYPE D3) 'LIST)
      (PROGN
        (SETQ D4 (GETPOINT))
        (SETQ D3 (- (CADR D4) (CADR D3)))
      )
     )
   )
 )
 (INITGET 128)
 (SETQ D4 (/ (- (CAR 4) (CAR 3)) 2))
 (WHILE (< (ABS D4) (ABS (- (CAR 4) (CAR 3))))
   (SETQ D4 (GETPOINT "\n 请指定调整后的列间距离:"))
   (COND
     ((= (TYPE D4) 'STR)
      (SETQ D4 (C:CAL D4))
     )
     ((= (TYPE D4) 'LIST)
      (PROGN
        (SETQ D5 (GETPOINT))
        (SETQ D4 (- (CAR D5) (CAR D4)))
      )
     )
   )
 )
 (SETVAR "OSMODE" 0)
 (WHILE (AND (PORA 3) (PORA 4))
   (SETQ 5  3
  6  4
  01 00
   )
   (WHILE (OR (AND (= 3) (= 4))
       (AND (PORA 5) (PORA 6))
   )
     (IF (SETQ SS (SSGET "_C" 6))
       (COMMAND "_MOVE" SS "" 01)
     )
     (SETQ 5  (POLAR 5 SX1 D2)
    6  (POLAR 6 SX1 D2)
    01 (POLAR 01 SX1 D4)
     )
   )
   (SETQ 3  (POLAR 3 SX2 D1)
  4  (POLAR 4 SX2 D1)
  00 (POLAR 00 SX2 D3)
   )
 )
 (SETQ 1 (GETPOINT "\n 指定下一个调整区域的第一个角点:"))
      )
    )
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (INITGET "Y N")
  (SETQ F (GETKWORD "\n 是否打印到文件[是(Y)/否(N)]<Y>:"))
  (IF (= F NIL)
    (SETQ F "Y")
  )
  (IF (= F "Y")
    (PROGN
      (GETFOLDER "选择文件夹:")
      (SETQ FN0 (STRCAT ATH "\\" "PM.BAT"))
      (INITGET 6)
      (IF (NOT I)
 (SETQ I 1)
      )
      (SETQ I1 I)
      (PRINC "\n 请输入要保存的打印文件名序号<")
      (PRINC I)
      (PRINC ">:")
      (SETQ I (GETINT))
      (IF (= I NIL)
 (SETQ I I1)
      )
    )
  )
  (SETVAR "OSMODE" 0)
  (SETQ 1 (GETPOINT "\n 指定第一个打印区域的第一个角点:"))
  (WHILE 1
    (FW)
    (SETVAR "OSMODE" 0)
    (COMMAND "_ZOOM" 2)
    (INITGET "P L")
    (SETQ SX1 (GETKWORD "\n 先按[纵向(P)/横向(L)]次序打印图形<L>:"))
    (IF (= SX1 NIL)
      (SETQ SX1 "L")
    )
    (SETQ SX1 (STRCASE SX1))
    (COND ((= SX1 "L")
    (SETQ SX1 0)
    (SETQ SX2 (/ I 2))
   )
   ((SETQ SX1 (/ I 2))
    (SETQ SX2 0)
    (SETQ D3 D1)
    (SETQ D1 D2)
    (SETQ D2 D3)
   )
    )
    (INITGET "P L")
    (IF (NOT FX)
      (SETQ FX "L")
    )
    (SETQ FX1 FX)
    (PRINC "\n 输入图形打印方向[纵向(P)/横向(L)]<")
    (PRINC FX1)
    (PRINC ">:")
    (SETQ FX (GETKWORD))
    (IF (= FX NIL)
      (SETQ FX FX1)
    )
    (IF (NOT S)
      (SETQ S "F")
    )
    (SETQ S1 S)
    (PRINC "\n 输入打印比例(打印的毫米=图形单位)或[布满(F)]<")
    (PRINC S)
    (PRINC ">:")
    (INITGET 6)
    (SETQ S (GETSTRING))
    (IF (= S "")
      (SETQ S1)
    )
    (IF (NOT Y)
      (SETQ Y "C")
    )
    (SETQ Y1 Y)
    (PRINC "\n 输入打印偏移(X,Y)或[居中打印(C)]<")
    (PRINC Y)
    (PRINC ">:")
    (INITGET 6)
    (SETQ Y (GETSTRING))
    (IF (= Y "")
      (SETQ Y1)
    )
    (WHILE (AND (PORA 3) (PORA 4))
      (SETQ 3
     4
      )
      (WHILE (OR (AND (= 3) (= 4))
   (AND (PORA 5) (PORA 6))
      )
 (IF (SSGET "_C" 6 '((0 . "~DIMENSION")))
   (PROGN
     (SETVAR "MODEMACRO"
      (STRCAT "正在打印第 " (ITOA I) " 张...")
     )
     (IF (= F "Y")
       (PROGN
  (SETQ
    FN1
     (STRCAT ATH
      "\\"
      (SUBSTR "000" 1 (- 3 (STRLEN (ITOA I))))
      (ITOA I)
      ".PLT"
     )
  )
  (COMMAND "-PLOT"   "Y" ""   ""   ""   "M"  FX  "N"
    "W"  5   S   Y   "Y"  ""   "Y"  "A"
    "Y"  FN1  "Y" "Y"
   )
  (IF (= I 1)
    (SETQ F1 (OPEN FN0 "W"))
    (SETQ F1 (OPEN FN0 "A"))
  )
  (PRINC "COPY " F1)
  (PRINC FN1 F1)
  (PRINC " LPT2" F1)
  (PRINC "\n" F1)
  (CLOSE F1)
  (SETQ I (1+ I))
       )
       (COMMAND "-PLOT"  "Y"  ""   "" ""   "M"  FX   "N"
         "W"  5  6   S   Y "Y"  ""   "Y"  "A"
         "N"  "Y"  "Y"
        )
     )
   )
 )
 (SETQ 5 (POLAR 5 SX1 D2)
       6 (POLAR 6 SX1 D2)
 )
      )
      (SETQ 3 (POLAR 3 SX2 D1)
     4 (POLAR 4 SX2 D1)
      )
    )
    (COMMAND "_ZOOM" OEI OEA)
    (SETQ 1 (GETPOINT "\n 指定下一个打印区域的第一个角点:"))
    (IF (NOT 1)
      (SETQ 1 (GETPOINT "\n 指定下一个打印区域的第一个角点:"))
    )
  )
  (SETVAR "MODEMACRO" "")
  (SETVAR "CMDECHO" 1)
  (SETVAR "OSMODE" OSM)
  (PRINC)
)
(PRINC "\n 打印程序已加载,运行命令:DY")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN ORA (P1 T / D D3 D4)
  (SETQ D (+ (ABS (- (CAR 2) (CAR 1)))
      (ABS (- (CADR 2) (CADR 1)))
   )
  )
  (SETQ D3 (+ (ABS (- (CAR T) (CAR 1))) (ABS (- (CAR T) (CAR 2)))))
  (SETQ D4 (+ (ABS (- (CADR T) (CADR 1)))
       (ABS (- (CADR T) (CADR 2)))
    )
  )
  (IF (EQUAL D (+ D3 D4) 0.000001)
    T
    NIL
  )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN GETFOLDER (MSG / WINSHELL SHFOLDER CATCHIT)
  (VL-LOAD-COM)
  (SETQ WINSHELL (VLAX-CREATE-OBJECT "SHELL.APPLICATION"))
  (SETQ SHFOLDER (VLAX-INVOKE-METHOD WINSHELL 'BROWSEFORFOLDER 0 MSG 1))
  (SETQ
    CATCHIT (VL-CATCH-ALL-APPLY
       '(LAMBDA ()
   (SETQ SHFOLDER (VLAX-GET-PROPERTY SHFOLDER 'SELF))
   (SETQ ATH (VLAX-GET-PROPERTY SHFOLDER 'PATH))
        )
     )
  )
  (IF (VL-CATCH-ALL-ERROR-P CATCHIT)
    NIL
    ATH
  )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN FW ()
  (INITGET 3)
  (SETQ 2 (GETCORNER
      1
      "\n 指定第(下)一个区域的另一个角点:"
    )
  )
  (SETVAR "OSMODE" 33)
  (INITGET 3)
  (SETQ 4 (GETCORNER
      (SETQ 3
      (GETPOINT "\n 指定区域内首个范围的第一个角点:")
      )
      "\n 指定区域内首个范围的另一个角点:"
    )
  )
  (SETVAR "OSMODE" 33)
  (INITGET 128)
  (SETQ D1 (/ (- (CADR 4) (CADR 3)) 2))
  (WHILE (AND (/= D1 0) (< (ABS D1) (ABS (- (CADR 4) (CADR 3)))))
    (SETQ D1 (GETPOINT "\n 请指定行间距离(单行请输0)<0>:"))
    (COND
      ((OR (= D1 NIL) (= (C:CAL D1) 0.0))
       (SETQ D1 (- (CADR 2) (CADR 1)))
      )
      ((= (TYPE D1) 'STR)
       (SETQ D1 (C:CAL D1))
      )
      ((= (TYPE D1) 'LIST)
       (PROGN
  (SETQ D2 (GETPOINT))
  (SETQ D1 (- (CADR D2) (CADR D1)))
       )
      )
    )
  )
  (INITGET 128)
  (SETQ D2 (/ (- (CAR 4) (CAR 3)) 2))
  (WHILE (AND (/= D2 0) (< (ABS D2) (ABS (- (CAR 4) (CAR 3)))))
    (SETQ D2 (GETPOINT "\n 请指定列间距离(单列请输0)<0>:"))
    (COND
      ((OR (= D2 NIL) (= (C:CAL D2) 0.0))
       (SETQ D2 (- (CAR 2) (CAR 1)))
      )
      ((= (TYPE D2) 'STR)
       (SETQ D2 (C:CAL D2))
      )
      ((= (TYPE D2) 'LIST)
       (PROGN
  (SETQ D3 (GETPOINT))
  (SETQ D2 (- (CAR D3) (CAR D2)))
       )
      )
    )
  )
)
发表于 2005-10-16 03:24 | 显示全部楼层
我写了一个程式,操作相当简单,键入命令后只须选取要打印的图面就好了。图面自动依图号大小依序打出,打印日期自动修改。也不必管图面图框用什么比例。打印一套三百来张的图纸大约二分钟就好了.我已用了四年,非常稳定。大家如有兴趣,可电话联系。13642906045 伍建永先生
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 06:30 , Processed in 0.203200 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表