Alan Gauld wrote: > > > "Krasyn" <[EMAIL PROTECTED]> wrote > >>> >>> I'm trying to translate the following VB code into Python and not >>> sure how >>> to create an array of variants. > > All variables in Python are effectively variants - variables that can > store any type. So an array of variants equates to a Python list > >>> VB Code: >>> Sub SetXdata() > > def SetXData(): > >>> Dim lineObj As AcadLine >>> Set lineObj = ThisDrawing.ModelSpace.Item(0) > > > lineObj = ThisDrawing.ModelSpace.Item(0) > > Where ThisDrawing.ModelSpace.Item(0) is s0ome kind of > data structure you have defined elsewhere. Or fetch using COM. > >>> Dim DataType(0 To 1) As Integer >>> Dim Data(0 To 1) As Variant > > DataType = [] > Data = [] > > But it looks like you are trying to fake a dictionary - although VB > has dictionaries! > >>> DataType(0) = 1001: Data(0) = "Test_Application" >>> DataType(1) = 1070: Data(1) = 600 > > Data = {'Test_application' : 1001, 600 : 1070} > >>> lineObj.SetXdata DataType, Data > > lineObj.SetXdata( Data ) > >>> Python code >>> import array >>> import comtypes.client >>> >>> def SetXData(): >>> activedoc = >>> comtypes.client.GetActiveObject("AutoCAD.Application").ActiveDocument >>> line = activedoc.ModelSpace.Item(0) >>> >>> dataType = array.array('i', [1001, 1070]) >>> dataValue = array.array('?', ['Test_Application', 600]) #What >>> should I >>> use >>> for the type code? >>> >>> line.SetXData(dataType, dataValue) > > Here's the snag with the dictionary approach so its back to > two lists. I wouldn't use the array module just lists. > > It might be enough to just pass DataType and Data as two lists > into the COM object. I don't know enough about Python's COM > integration to be sure that it will sort it all out though. But I > suspect > it will. > > > -- > Alan Gauld > Author of the Learn to Program web site > http://www.freenetpages.co.uk/hp/alan.gauld > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > >
# -*- coding:UTF-8 -*- from comtypes.client import * from array import array acad = GetActiveObject("AutoCAD.Application") dwg = acad.ActiveDocument mspace = dwg.ModelSpace circle = mspace.AddCircle(array("d",[0,0,0]),100) circle.Color = 3 acad.ZoomExtents() dtype = array("h",[1001,1070]) # [1001,1070] doesnt' work (comtypes 0.5.1) dvalue = ['Test_Application', 600] #OK VARIANT is not needed circle.SetXData(dtype,dvalue) #test: (entget (car (entsel)) '("*")) #result:((-1 . <Entity name: 7ef98150>) (0 . "CIRCLE") (330 . <Entity name: 7ef01cf8>) (5 . "12A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 3) (100 . "AcDbCircle") (10 0.0 0.0 0.0) (40 . 100.0) (210 0.0 0.0 1.0) (-3 ("Test_Application" (1070 . 600)))) -- View this message in context: http://www.nabble.com/How-to-create-array-of-variants--tp18331322p19450606.html Sent from the Python - tutor mailing list archive at Nabble.com. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor