QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑
0 D9 F. U" K- W7 g' g2 b& |% g
" k$ w' }, f9 `0 w8 s2 q本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。1 [/ T2 W7 b9 n6 K3 ]# u
6 R! y, j- E  O" J% P0 k
问题出现在使用plottofile方法进行虚拟打印过程。
! d% j6 @: K0 f6 V2 m  {- {
- D2 @* Y3 X( d# j! k8 O" Q8 `原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。
6 h0 R* c. ]  G5 X1 w! O" N3 B* d5 m1 ]; g4 H* i
具体代码如下:
2 D, D4 H1 A0 W! d; P2 X" ?! K- N! [) g& X+ D6 V
        point1(0) = -5 3 @% N: T8 V+ X4 Q9 Y
        point1(1) = 310
! _9 A% n" S/ U6 n/ Q        point2(0) = 420
; s! G' a6 K6 K/ y        point2(1) = 610 + H- A  j( l- `" h
       i = 0! z% E3 {5 X+ C6 P  E
        ' Send information about window to current layout
% y: y7 b7 k# d) Z" m6 s+ r        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()# R2 L6 l) \- w" I0 h; j! J7 E
        ' Read back window information( `* B$ H! P8 x. p
        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()6 }2 a) }- V: b7 I( j
'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览
& ~. S. P6 g' C# `9 Q8 R        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees# j: Z& e2 p, _' K
         ' 将打印份数设置为 1
/ n! \  U( V. E0 J% m        ThisDrawing.Plot.NumberOfCopies = 1, Y4 F; x' N' ~, K6 ^' ?
        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
# E8 z% s5 v) ]1 h- n9 }5 z        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
3 _* o+ I" s! h& V" m& k        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '
# T! ]+ x' E( H. `. H2 y        ThisDrawing.Plot.QuietErrorMode = True
4 k/ E- ~" i& D# @9 m        ThisDrawing.Regen acActiveViewport1 @  B2 E& _7 y  g& Y. @
         ' 初始化打印
4 `9 ~* r* P# A- e/ c. w        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
- R- k/ }+ K1 R- C        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4; }, n3 V/ j- P& U9 z2 Y
        RegCloseKey Result
% ~, C3 r1 a% s/ J6 j   
* V6 Y# \, ^; {- L& W        ThisDrawing.Plot.PlotToFile KHpathmdi1# ?; Z5 g7 t  T
              '判断文件是否存在: e/ |# g5 O2 l! H; z2 C
     Do While Dir(KHpathmdi1) = ""% j  [' l% p9 S# n  I
            DoEvents
1 g0 [* J5 O) x6 O( C$ Y5 @4 F2 g/ G            i = i + 1
/ [4 V' v; T+ t        Loop
    ) `; v# T3 C. i9 @/ n
    i = 0
. L# I7 N$ }) e" Y0 G1 c* }   'On Error Resume Next
' g/ w- P4 U/ m/ l. }    point1(0) = -5 7 u- Y/ f2 a) _5 \2 i5 q
    point1(1) = -3 3 D) v/ \- T8 z/ P" Y  A( a4 d
    point2(0) = 420* P( @4 z& _5 A' U5 u# ]% M
    point2(1) = 2971 Y( i4 O0 ^. G( L, G/ z  ^/ k
    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()0 I5 k4 ^, e, q" f4 K
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2(), r7 }" K5 {- \2 @! H
    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
1 J3 K2 M- e" P. s'    ThisDrawing.Regen acActiveViewport( ^/ j7 S+ X6 Q( b: H" {
    ThisDrawing.Plot.NumberOfCopies = 1: u. g: d4 c2 }% o" @
    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow/ R* p: O: f* t
    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
3 R2 X# J0 H+ Y5 S  `8 n% G: M    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True. z$ ]6 u2 }6 X5 v
    ThisDrawing.Plot.QuietErrorMode = True
3 L+ V2 @) o3 _% \8 }: y    ThisDrawing.Regen acActiveViewport2 S! H* j4 u1 {& r& r
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result1 D; n) W7 r6 `2 U0 M
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
9 N- }5 r* w( {. O- ]    RegCloseKey Result
) z& M5 O! J  w5 u+ a  {7 H& Q" H( f' T: n    ThisDrawing.Plot.PlotToFile AZpathmdi1
0 q$ x8 F7 D$ n% i1 _" l# h0 p    Do While Dir(AZpathmdi1) = ""+ w. F8 U' O$ X, ]
        DoEvents
: i+ e3 X7 V6 S# n        i = i + 1
  ]4 ^  {$ f& i4 n* B& U    Loop
, y. V6 b0 c8 z: i2 U

0 @3 S3 U4 ~9 Q) J; y* H% ^在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
. _6 N$ C6 w: q1 U - B0 {4 z+ o) Q) ~  |+ b
而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。3 i9 l) a! N6 Y- k$ Q* U
4 o( I; r6 E# I

2 i9 j& E* u3 z  ^* f为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决  c7 [+ V2 N1 q3 V( L6 \

2 u1 ~* V# _3 f3 c. K- i6 \解决方法:7 \* w* e; e' u  e- \8 N# R, i
在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则

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

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

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