Python win32com und 2-dimensionale Arrays

Bei der Verwendung von Python und Win32Com zur Automatisierung der Software von Adobe stößt man auf ein Problem bei der Übergabe von Arrays mit 2D-Koordinaten. Wenn man sich Code ansieht, den Adobe für Visual Basic (VB) liefert, ist das ganz einfach. Ein vereinfachtes Beispiel zum Zeichnen einer Linie in Illustrator sieht folgendermaßen aus:

<code>Set appObj = CreateObject("Illustrator.Application")
Set docObj = appObj.Documents.Add

Set pathItem = docObj.PathItems.Add
    pathItem.SetEntirePath Array(Array(0.0, 0.0), Array(20.0, 20.0))
</code>

Nun ist die naive Annahme, dass VB-Code einfach in Python umgewandelt werden kann, indem er wie folgt konvertiert wird:

<code>from win32com.client import Dispatch

appObj = Dispatch("Illustrator.Application")  
docObj = appObj.Documents.Add()

pathItem = docObj.PathItems.Add()
pathItem.SetEntirePath( [ [0.0,0.0], [20.0,20.0] ] )
</code>

Offensichtlich ist es nicht so einfach, Python gibt den Fehler "Nur Arrays mit Dimension 1 werden unterstützt" aus. Jetzt weiß ich, dass es einen Unterschied zwischen Arrays von Arrays und zweidimensionalen Arrays gibt. Die Frage ist also, wie ich Python zwinge, ein Array der richtigen Art zu erstellen.

Ich habe versucht, meinen eigenen VARIANT-Typ zu machen, bin aber kläglich gescheitert. Ich habe mir auch C-Typen dafür angesehen. Hat jemand das gleiche Problem gehabt und könnte etwas Licht ins Dunkel bringen?

PS:

Mir ist bekannt, dass das Problem umgangen werden kann, indem Folgendes verwendet wird:

<code>pathItem = docObj.PathItems.Add()
for point in (  [0.0,0.0], [20.0,20.0] ):
    pp = pathItem.PathPoints.Add() 
    pp.Anchor = point
</code>

Aber es gibt ähnliche Fälle, in denen dies tatsächlich nicht funktioniert. Auf jeden Fall geht es darum, Richtlinien für die Portierung an Studenten zu schreiben. Daher ist es besser, wenn Sie der ursprünglichen Absicht möglichst nahe kommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage