Я пытаюсь сделать что-то условно простое в AutoCAD, написав скрипт python. В частности, я хочу добавить объект (в этом примере, круг; в конечном итоге замкнутую ломаную линию), что я и сделал; а затем добавить к нему люк, который не удается. Добавление штриховки состоит из добавления (см. Код ниже) и немедленной установки внешней границы, которая является точной точкой отказа.
Соответствующая документация AutoCAD гласит (с моим акцентом):
AppendOuterL oop: Добавляет внешний l oop к штриховке. Внешний l oop должен быть закрыт и должен быть создан до добавления любых внутренних циклов. Параметр: ObjectArray As Variant .
Параметр представляет собой массив объектов , образующих замкнутую границу, которая может состоять из одного или нескольких объектов. Если используется более одного объекта, их конечные точки должны совпадать для правильного создания l oop. L oop может содержать следующие типы объектов: AcadLine, AcadPolyline, AcadCircle, AcadEllipse, AcadSplin e или AcadRegion. Важно, чтобы массив объектов, используемый при вызове AppendInnerLoop, образовывал замкнутую границу.
Мой код:
import comtypes
from comtypes.client import *
from comtypes.automation import *
import win32com.client
import math
import collections
from win32com.client import VARIANT
from pythoncom import VT_VARIANT
app = GetActiveObject("AutoCAD.Application")
doc = app.ActiveDocument
ms = comtypes.client.GetBestInterface(doc.ModelSpace)
center = array.array('d', [0, 0, 0])
newCircle = ms.AddCircle(center, 0.3)
pprint(newCircle)
pprint(type(newCircle))
#vari1 = VARIANT(VT_VARIANT, newCircle)
#vari2 = VARIANT(VT_ARRAY, [vari1])
newHatch = ms.addHatch(0, 'Solid', False)
newHatch.AppendOuterLoop(newCircle) # <--- This fails with newCircle or or vari1 or vari2
Выводы операторов print и сообщения об ошибке:
COMError: (-2145320837, None, ('Недопустимый массив объектов', 'AutoCAD.Application', 'C: \ Apps \ Autodesk \ ACADM2016 \ AutoCAD 2016 \ HELP \ OLE_ERR.CHM ', -2145320837, Нет))
Очевидно, что это ошибка com, и, скорее всего, она связана с преобразованием (или отсутствием) в ObjectArray As Variant . Но я понятия не имею, как именно выполнить это преобразование - если я смотрю на вариантный массив, массив альтернативных объектов, и то, и другое - и я не уверен, как выполнить преобразование в любой случай.
Любое понимание приветствуется.