Daniel, I've tested a prerelease version of pywin32 that contains the new win32com.client.VARIANT class and it works well with AutoCAD. Once released, you can write something like this:
import win32com.client import pythoncom def POINT(x,y,z): return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x,y,z)) acad = win32com.client.Dispatch('AutoCAD.Application') ms = acad.ActiveDocument.ModelSpace ms.AddLine(POINT(0,0,0), POINT(1,1,0)) Additional information in Mark's original post on win32com.client.VARIANT: http://mail.python.org/pipermail/python-win32/2011-October/011844.html -drg On Wed, Feb 1, 2012 at 5:29 PM, DANIEL POSE <iinj...@gmail.com> wrote: > I have used array module because it worked with comtypes module. If I use > simple list it doesn't work with comtypes nor pywin32. > If I use: > > pt1 = [0.0,0.0,0.0] > pt2 =[1.0,1.0,0.0] > > Then Python responds: > > <code> > > Traceback (most recent call last): > File "<ipython console>", line 1, in <module> > File > "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", > line 128, in runfile > execfile(filename, glbs) > File "C:\Documents and Settings\Administrador\Mis > documentos\DropboxDani\Dropbox\PYTHON\PruebaAutoCADLinea.py", line 16, in > <module> > line = ms.AddLine(pt1, pt2) > > File "<COMObject <unknown>>", line 3, in AddLine > com_error: (-2147352567, 'Ocurri\xf3 una excepci\xf3n.', (0, None, None, > None, 0, -2147024809), None) > > </code> > > > 2012/2/1 Mark Hammond <mhamm...@skippinet.com.au> > >> Re-added the python-win32 list - please keep replies on list. >> >> Your code uses: >> >> >> > pt1 = array.array('d', [0.0,0.0,0.0]) >> > pt2=array.array('d',[1.0,1.0,_**_0.0]) >> >> But these aren't supported by pywin32 in the way you expect - what >> happens if you change this to: >> >> pt1 = [0.0,0.0,0.0] >> pt2 =[1.0,1.0,0.0] >> >> ? >> >> Mark >> >> >> >> On 2/02/2012 7:12 AM, DANIEL POSE wrote: >> >>> Hello Mark, >>> >>> I understand the AutoCAD problem, but in my profession it is the most >>> extended software for CAD. In my opinion it justify the efford to make >>> automation tools. >>> Here I post the answer from Python when I try to draw a line using >>> win32com.client code in my last mail: >>> >>> Traceback (most recent call last): >>> File "<ipython console>", line 1, in <module> >>> File >>> "C:\Python27\lib\site-**packages\spyderlib\widgets\** >>> externalshell\startup.py", >>> line 128, in runfile >>> execfile(filename, glbs) >>> File "C:\Documents and Settings\Usuario\Escritorio\**borrar.py", line >>> 15, in <module> >>> line = ms.AddLine(pt1, pt2) #This draw a line in AutoCAD >>> File "<COMObject <unknown>>", line 3, in AddLine >>> com_error: (-2147352567, 'Ocurri\xf3 una excepci\xf3n.', (0, None, None, >>> None, 0, -2147024809), None) >>> >>> Thank you in advance, >>> Daniel Pose. >>> >>> 2012/2/1 Mark Hammond <skippy.hamm...@gmail.com >>> <mailto:skippy.hammond@gmail.**com <skippy.hamm...@gmail.com>>> >>> >>> >>> Sadly not many people have access to autocad so it is hard to test. >>> What errors do you get using win32com? >>> >>> Mark >>> >>> >>> On 1/02/2012 5:11 AM, DANIEL POSE wrote: >>> >>> Hello, >>> >>> Recently I try to write some code to automate AutoCAD from >>> Python. I >>> have to draw lines from Python using win32com.client module, but I >>> obtain error. By other hand I solved the problem using comtypes >>> module. >>> However, If I try to obtain block attributes information, comtypes >>> doesn't work but win32com.client work properly. >>> >>> AutoCAD attributes working code (work for win32com.client but no >>> for >>> comtypes): >>> [code] >>> import win32com.client >>> acad= win32com.client.Dispatch("__**AutoCAD.Application") >>> doc = acad.ActiveDocument >>> seleccion=doc.SelectionSets.__**Add('selection1') >>> >>> seleccion.SelectOnScreen() >>> for objeto in seleccion: >>> if objeto.ObjectName=='__**AcDbBlockReference': >>> bloque=objeto.GetAttributes() >>> bloque[0].TagString='__**newattributename' #This change >>> >>> the name >>> for the first attribute in the selected block >>> [/code] >>> >>> Draw line (work for comtypes but doesn't work for >>> win32com.client): >>> [code] >>> import comtypes.client >>> import array >>> acad = comtypes.client.__**GetActiveObject("AutoCAD.__** >>> Application") >>> >>> doc = acad.ActiveDocument >>> ms = doc.ModelSpace >>> pt1 = array.array('d', [0.0,0.0,0.0]) >>> pt2=array.array('d',[1.0,1.0,_**_0.0]) >>> >>> line = ms.AddLine(pt1, pt2) #This draw a line in AutoCAD >>> [\code] >>> >>> My question is: Is posible to fix the problem using win32com to >>> draw >>> autocad line in order to avoid comtypes use? >>> I found on the web several coments to the problem, but no >>> solution. >>> >>> Thanks for help, >>> Daniel Pose. >>> >>> >>> ______________________________**___________________ >>> python-win32 mailing list >>> python-win32@python.org >>> <mailto:python-win32@python.**org<python-win32@python.org> >>> > >>> >>> http://mail.python.org/__**mailman/listinfo/python-win32<http://mail.python.org/__mailman/listinfo/python-win32> >>> >>> <http://mail.python.org/**mailman/listinfo/python-win32<http://mail.python.org/mailman/listinfo/python-win32> >>> > >>> >>> >>> >>> >> > > _______________________________________________ > 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