Hello All,

I'm trying to read some data from CATIA v5 (which is an older CAD
application) via its COM server. Overall it works rather well, even if I'm
fairly new to COM communication.

Nevertheless I have run into a problem: One specific function *GetComponents
* is supposed to return its results via an array passed by reference. As
far as I can tell it is exactly the same problem as in (1)
https://mail.python.org/pipermail/python-win32/2002-November/000562.html
and (2) https://mail.python.org/pipermail/python-win32/2014-July/013234.html
unfortunately there doesn't appear to be a solution as of yet.

The python call looks something like this
a = list(range(0,12))
b = catapp.ActiveProduct.Position.GetComponents(a)
print(a) # outputs (0,1,2,3,4,5,6,7,8,9,10,11) instead of the actual values
The equivalent VBScript code is
Dim a(11) As Float
CATIA.ActiveProduct.Position.GetComponents(a)
MsgBox a(0) & ", " & a(1) & ...
The VBScript works as intended, the python one just passes the array back
out unmodified.

As both other threads state: The Position object above has two methods
*GetComponents
*and *SetComponents *that each take a *CATSafeArrayVariant *as an argument.
This *CATSafeArrayVariant *should in this case be a one-dimensional array
of real values. CATSafeArrayVariant is a typedef for a *CATVariant *which
itself is *typedef any CATVariant*.

Any help would be appreciated. As stated above I haven't done much with
COM, but otherwise I'm reasonably computer savvy and know my way around
python. Obviously Catia is a commercial application but I have access to
the .tlb file if that helps.


best regards
Peter Enenkel
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to