VBA is faster because it's running in-process inside AutoCAD (everything is
loaded into acad.exe).  Python runs out-of-process (AutoCAD objects need to
be passed back and forth between acad.exe and python.exe).

You can use AutoCAD's ObjectARX API to embed python inside AutoCAD and make
python in-process; you'll get a significant speedup.  You'll need to know
C++ in order to do that.  Let me know if you'd like further details.

64-bit AutoCAD runs VBA out-of-process because there is no 64-bit VBA;
you'd see the same slowness there that you're seeing with python.

-drg



On Mon, May 7, 2012 at 5:26 PM, DANIEL POSE <iinj...@gmail.com> wrote:

> Hello,
>
> I am writing code to program AutoCAD access from Python using pywin32.
> When I need to work with a high number of AutoCAD objects, it is faster to
> use vba than python.
> Are there some way to speed up python code in order to work faster with
> AutoCAD elements?
> For example in the next code when I work with 512 AutoCAD blocks:
>
> import win32com.client
>
> import time
>
> t1=time.clock()
>
> acad= win32com.client.Dispatch("AutoCAD.Application")
>
> doc = acad.ActiveDocument
>
> seleccion=doc.SelectionSets.Add('selection6')
>
> seleccion.SelectOnScreen()
>
> t2=time.clock()
>
> M=[]
>
> for objeto in seleccion:
>
> if objeto.ObjectName=='AcDbBlockReference':
>
> M.append(objeto.InsertionPoint)
>
> t3=time.clock()
>
> print 'M_dimension=',len(M)
>
> R=[]
>
> for m in M:
>
> for x in M:
>
> R.append(max(m)+max(x))
>
> print 'R_dimension=',len(R)
>
> t4=time.clock()
>
> t_block1=t2-t1
>
> t_block2=t3-t2
>
> t_block3=t4-t3
>
> print 't_block1=',t_block1
>
> print 't_block2=',t_block2
>
> print 't_block3=',t_block3
>
>
> The output for the code is the following:
>
> M_dimension= 512
> R_dimension= 262144
> t_block1= 4.25343304805
> t_block2= 3.88635510938
> t_block3= 0.487477319045
>
>
> Then it is faster to work with R than M, even though R is bigger.
>
> Some suggestions for speed up pywin32 code in this example?
>
>
> Best Regards,
>
> Daniel Pose.
>
>
>
>
>
>
> _______________________________________________
> python-win32 mailing list
> python-win32@python.org
> http://mail.python.org/mailman/listinfo/python-win32
>
>
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to