"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

Reply via email to