Excepción: matriz de objetos no válida con comtypes
Intento implementar una operación de copia simple entre dos documentos de Autocad a través de COM en Python.
from pyautocad import Autocad, APoint
from comtypes.client import GetBestInterface
# Get acad application
acad = Autocad(create_if_not_exists=True)
# Create a new document
doc1 = GetBestInterface(acad.Application.Documents.Add())
# add a circle in this document and make it visible
circle = GetBestInterface(doc1.ModelSpace.AddCircle(APoint(0.0, 0.0), 1.0))
doc1.Application.ZoomExtents()
# create another document
doc2 = GetBestInterface(acad.Application.Documents.Add())
# and copy the circle to the new document
doc1.CopyObjects([circle], doc2.ModelSpace)
Esto arroja:
Traceback (most recent call last):
File "copy_bug.py", line 13, in <module>
doc1.CopyObjects([circle], doc2.ModelSpace)
File "Anaconda2\lib\site-packages\comtypes\__init__.py", line 655, in call_with_inout
rescode = func(self_, *args, **kw)
_ctypes.COMError: (-2145320837, None, (u'Invalid object array', u'AutoCAD.Application', u'C:\\Program Files\\Autodesk\\AutoCAD 2015\\HELP\\OLE_ERR.CHM', -2145320837, None))
Lo mismo se puede lograr en VBA con:
Dim doc1 As AcadDocument
Set doc1 = ThisDrawing.Application.Documents.add
Dim pt(0 To 2) As Double
pt(0) = 0#: pt(1) = 0#: pt(2) = 0#
Dim circ As AcadCircle
Set circ = doc1.ModelSpace.AddCircle(pt, 1)
ThisDrawing.Application.ZoomExtents
Dim doc2 As AcadDocument
Set doc2 = ThisDrawing.Application.Documents.add
Dim arry(0 To 0) As AcadEntity
Set arry(0) = circ
doc1.CopyObjects arry, doc2.ModelSpace
Traté de matrices numpy, intenté lanzar a laIDispatch
interfaz, elIAcadEntity
interfaz yIAcadObject
sin éxito (probablemente un intento tonto).
circle = circle.QueryInterface(IAcadEntity)
También traté de mirar adentrosite-packages\comtypes\automation.py
Pero eso está por encima de mi salario. Establecer elself.vt
aVT_ARRAY | VT_DISPATCH
en_set_value
no sirve de nada pero sospecho que el problema está en esa línea porque, si cambiamosDim arry(0 To 0) As AcadEntity
aDim arry(0 To 0) As Variant
el ejemplo de VBA también arrojaráInvalid object array
.
Debo mencionar que no comenté dos líneas ensite-packages\comtypes\automation.py
:
# These are not yet implemented:
POINTER(IUnknown): VT_UNKNOWN,
POINTER(IDispatch): VT_DISPATCH,
Entonces ... ¿ayuda?