Ed Blake schrieb:
> AutoCAD 2008 typelib:
> [id(0x00000403), helpstring("Sets the extended data (XData) associated with 
> an object"), helpcontext(0x00010231)] void SetXData(
>                 [in] VARIANT XDataType, 
>                 [in] VARIANT XDataValue);
> 
> Taken from Ole2View.
>>From Autocad Developer Help:
> Signature 
> 
> object.SetXData XDataType, XData 
> 
> Object
> 
> All Drawing Objects , AttributeReference, Block, Dictionary, DimStyle, Group, 
> Layer, Linetype, PlotConfigurations, RegisteredApplication, TextStyle, UCS, 
> View, Viewport; XRecord
> The object or objects this method applies to. 
> 
> XDataType
> 
> Variant (array of short); input-only 
> 
> XData
> 
> Array of Variant; input-only 

Ah, if XDataType must be an array of short (integers), then this call should 
work:

  line.SetXData(array.array("h", [1001, 1070]), ['Test_Application', 600])


The rules how the parameters (array.array("h", ...) and [...]) are converted
into VARIANTs are as follows:

- tuples and lists (which can contain items of any datatype - string, integer, 
float, ...)
  are converted to a VARIANT containing a SAFEARRAY of VARIANTs, typecode 
VT_SAFEARRAY | VT_VARIANT

- array.array instances are converted to a VARIANT containing a SAFEARRAY a 
VARIANTs
  with a typecode as specified in the comtypes.automation._arraycode_to_vartype
  dictionary, near line 650:

  _arraycode_to_vartype = {
    "d": VT_R8,
    "f": VT_R4,
    "l": VT_I4,
    "i": VT_INT,
    "h": VT_I2,
    "b": VT_I1,
    "I": VT_UINT,
    "L": VT_UI4,
    "H": VT_UI2,
    "B": VT_UI1,
    }

So, an array.array("h", ...) will result in a VARIANT with typecode VT_ARRAY | 
VT_I2.

In the comtypes 0.5 version, this can be easily checked since VARIANT instances
contain the typecode in their repr() string (VARIANT.from_param(arg) is what 
comtypes
calls internally when 'arg' is passed as parameter to a method which expects a 
VARIANT):

>>> VARIANT.from_param(array.array('i', [1001, 1070]))
VARIANT(vt=0x2003, (1001, 1070))
>>> VARIANT.from_param(array.array('h', [1001, 1070]))
VARIANT(vt=0x2002, (1001, 1070))
>>> VARIANT.from_param(['foo', 600])
VARIANT(vt=0x200c, (u'foo', 600))
>>>

The typecodes are: 0x2000 - VT_ARRAY, 0x3 - VT_I4, 0x2 - VT_I2

Thomas

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to