QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4457|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑 + M& r% J" t3 g  S, E" E& ]2 f* P
+ Z- ?5 ^" c! o4 ^9 X4 a
本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。
: z3 q; D% D/ B3 W/ J, I! ^1 ~' Z/ s% f3 ^/ x! u' J
问题出现在使用plottofile方法进行虚拟打印过程。! [/ `" M. {6 O" [2 M

4 n% j8 X8 f9 o# _9 N原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。
6 P* g% h3 ]8 z9 x; _9 J2 t: n6 |# R# G% `1 c
具体代码如下:8 q1 e) G& h! H4 i4 a

+ M. @* e+ v: c2 j        point1(0) = -5
$ l& V/ @% E( z, x. Q2 M) E        point1(1) = 310   S9 k0 B0 [3 \# m8 o6 H
        point2(0) = 420 0 u9 f- L* E) [' j+ N
        point2(1) = 610
' E8 ^) c$ P0 w/ d7 z9 S0 F       i = 0, O: ]. G- \/ p" U1 X2 }7 e
        ' Send information about window to current layout
/ a7 A3 G& z3 Y2 G; W0 Z        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()& K' o& b' c2 U( J! o9 ]( h3 L& |
        ' Read back window information( v8 F/ t. D" ~$ q% T
        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
& g7 Q3 z7 X% b8 `4 @# R. Z9 m* z'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览9 {; o- V( M& q' F- y% j1 w/ G
        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
0 b, u- G' w+ l$ S" H         ' 将打印份数设置为 1
8 {+ h- J. T2 ~! H& @7 c- J        ThisDrawing.Plot.NumberOfCopies = 1! C8 R( f2 A3 g2 Q
        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
) A( |! h1 |; I2 z6 M. ?3 u  a        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit  e6 _% T+ g/ ^/ z8 t
        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '
; s5 J* \* d  c3 r# I$ ], g        ThisDrawing.Plot.QuietErrorMode = True
/ l) s" E" N' e, z, s; q* C        ThisDrawing.Regen acActiveViewport
# y: V# P! g" b3 d2 K         ' 初始化打印
& P; z& M* H# D5 j        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result# `2 o2 _" x: h$ ^5 q8 t1 `
        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
) ^' [/ e! U( `8 R6 h        RegCloseKey Result' g, Y( p+ `) Q$ J) W" @8 E
    ' m; S& s0 ?8 @3 T- R% u, n
        ThisDrawing.Plot.PlotToFile KHpathmdi1  C, w& ?8 k5 ~/ M7 T
              '判断文件是否存在( a; t0 P% {$ q+ j2 I0 o* c- ]: [
     Do While Dir(KHpathmdi1) = ""
6 T- f0 L$ ~$ g- r8 N. S! g/ }' }) m            DoEvents/ ~0 ]2 r  E. B- H6 u3 m$ D
            i = i + 12 V- @: A8 b* z0 g+ E$ q
        Loop
   
6 O. ?) d* ~; u    i = 08 S1 v4 E1 _: b. m
   'On Error Resume Next6 T4 [: W3 h  k% ]  E
    point1(0) = -5
/ ~) U7 P  `2 I1 Y( z
    point1(1) = -3
; \- r% m- v/ T1 A% ?    point2(0) = 420& h1 p3 y* C8 s, r7 i, j
    point2(1) = 297* U' S& ?  T- Z) r: \; L* n$ E
    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
, _* n0 ^$ a! o6 L. c# Q6 Q- D    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
) y: U% p- H* c6 U/ n7 }    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees) B- T9 c$ G3 B, p- s
'    ThisDrawing.Regen acActiveViewport
; N4 [6 F( r0 }# J* E$ a- C) `+ x    ThisDrawing.Plot.NumberOfCopies = 1
8 K2 B6 \& n# ?# ]* a    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow/ O5 Q7 U* Z) {/ c: j! w* w9 a
    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
7 N" s- T7 d$ n2 X    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True
* r/ i- f7 Q/ c0 g( w/ R( w0 p3 j    ThisDrawing.Plot.QuietErrorMode = True
+ V4 M" j( N5 ?! X# S    ThisDrawing.Regen acActiveViewport( W& M. U5 P' ^3 t
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result$ ?, U& V% \# u1 K+ i
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 44 ?2 M3 v2 @$ V! P0 b
    RegCloseKey Result' j4 K/ J/ Z; ?  J8 _
    ThisDrawing.Plot.PlotToFile AZpathmdi1
& e+ q$ W2 @9 [    Do While Dir(AZpathmdi1) = ""! k0 L) N& \# C! P% }. E7 ^
        DoEvents6 n2 x; u) L8 n4 L0 H* ?3 G! s2 t
        i = i + 1
: O3 P8 K: R# P7 n3 Y; {1 X    Loop

5 s; K( q6 z, | + K5 M. s. u' t" b% ]5 S
在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。  J5 Q* f) E! S, z8 k

9 S# P7 w" H) |+ j! E# ]" n而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。
; G8 X0 L  [5 v) b 2 n' K% W# S1 [4 N" |- q
  o, _9 r6 k5 ~+ r' f/ S4 y- b
为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决
. s( x6 c6 ~# `
* _- G. a8 Z8 y5 X5 a; v8 ]解决方法:
  w* @( m; h" b3 a. [3 w在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则


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

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

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