QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 4412|回复: 3
收起左侧

[已解决] AUTOCAD2010 使用VBA调用系统打印机完成打印非常慢,如何解决?

[复制链接]
发表于 2010-4-27 09:03:03 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑
2 o( ^) q$ @6 u/ b4 F$ W, g8 ]9 d0 ?% }
本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。1 V" [$ y9 z( ~* H4 V! Y- I  d
; i+ F8 y! K( p9 X
问题出现在使用plottofile方法进行虚拟打印过程。
' b8 Q  m. E* U# V& v7 Q+ |$ _) r9 y
原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。
! T6 w( N. p9 l) I4 Z  `
) Z1 z0 O$ ]# u1 w- U5 T# C& V具体代码如下:
2 O+ U7 R$ j% U; \( R- e  k
6 P- M" I/ g7 z' t+ {        point1(0) = -5 0 w0 n- V) e. }8 k
        point1(1) = 310
  ~) j; o8 d& Z+ Z# U7 e8 T        point2(0) = 420
2 O& k; W6 w, W! G2 M, P        point2(1) = 610 + b* U, U; P9 r5 _2 n, t  Z, g
       i = 0- T: h/ B: Y7 K6 `  O
        ' Send information about window to current layout% s4 A  v" ]7 Z; |4 h2 E
        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
1 C, U* b- z1 O        ' Read back window information
, X) n$ r+ l7 V        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
, m& W) ?- R- p8 a'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览
$ Z3 H; w% H) m1 o$ @: f; k* Q" n        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees6 j8 f4 s: ]4 P5 J9 \9 b: U! x
         ' 将打印份数设置为 1& F! j# L1 A& r3 I$ E
        ThisDrawing.Plot.NumberOfCopies = 1
; _6 ]- `8 m0 p* E" T1 u7 m: s, I        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow1 K* v4 H0 x; M4 a
        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
7 ]8 a! K" B; S* E- u        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '
5 K% Q& ?' q8 Y  l        ThisDrawing.Plot.QuietErrorMode = True
7 X( G. ~# `( {- A        ThisDrawing.Regen acActiveViewport
" h/ ]. j4 n; b8 H2 M9 q5 r9 A         ' 初始化打印
* h( T. _4 w0 a3 L. N        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result) Q4 f3 T  m% Z, U; F
        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
5 }: f$ v# L+ ^8 }8 v( _  C0 F        RegCloseKey Result
) v) c& N5 x; S    * Q6 c6 j# W4 p
        ThisDrawing.Plot.PlotToFile KHpathmdi1
# U0 X/ e- B- `5 \. A              '判断文件是否存在) U: S. T2 R6 T
     Do While Dir(KHpathmdi1) = ""
4 E& \" q% Z: ?' r) ^            DoEvents2 w$ R# G5 L6 s  y/ j4 @0 r
            i = i + 11 [9 s8 a0 {4 U! e6 v( n
        Loop
    4 k1 K* ]. U- E) M- {; _& z
    i = 0
% p9 r5 o" X3 F! h. N  z4 t   'On Error Resume Next
" M& N- u# q7 T# ]' t    point1(0) = -5 2 b% q6 c7 j+ S4 s/ H% U
    point1(1) = -3
$ W: L9 m4 I  f1 k    point2(0) = 420
6 }. w* A5 v0 W7 H    point2(1) = 297
( b; J  w* c. A* S    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2(). x$ E9 V" _% ?6 I# b6 J
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
' u9 ~$ V9 ?2 x+ E    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees& ^2 {  S6 F& y. A! J1 s  g
'    ThisDrawing.Regen acActiveViewport) Z0 p- O: Z% R6 e+ U3 }$ @3 a0 Z- ^8 M
    ThisDrawing.Plot.NumberOfCopies = 1/ S8 q5 [8 t  I
    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow4 d4 @2 ], Z5 N! Q, Y* l- `
    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
* X6 l$ t" X- x" G4 ]4 H( `    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True# I! F7 |1 Z/ _# ?" R5 j! o0 u/ |
    ThisDrawing.Plot.QuietErrorMode = True# I% p% ]% r6 o$ X& L  n, W4 M
    ThisDrawing.Regen acActiveViewport
- w: q! n7 M1 ^: g    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result+ n: a0 F0 P. I5 u' t8 S
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 44 V% L$ d- o- p" O
    RegCloseKey Result& a% e  Z0 L. e  n; E" C1 K
    ThisDrawing.Plot.PlotToFile AZpathmdi1
8 g" n0 I: U9 W0 q, I+ G! ~    Do While Dir(AZpathmdi1) = ""  T! v' }" e$ [. z  y$ P$ a
        DoEvents6 F$ }& r8 v4 `% w
        i = i + 15 B! h$ {  k; Z6 f. Y, i/ R
    Loop

9 R+ |8 m, X! k$ T0 y* K ) z" a% K; v8 ~0 G2 _2 P9 R
在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
8 e4 ~: C- n* Y
& V7 m, V3 n2 d6 Z而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。9 A- \2 }; l1 P( P0 {2 ~2 y; J

! J/ |: \1 M4 o& ~
$ h8 S8 s: ~4 u8 T; \9 z( J+ b为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决  s/ p% w3 p# `7 K) Y+ U1 a! V

6 U' H" U& A9 ~8 j解决方法:
) b+ _- t" k4 `- i* N) o$ r2 A在选项中不勾选后台打印关闭

评分

参与人数 1三维币 +5 收起 理由
woaishuijia + 5 经验分享

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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