Создание 'ObjectArray as Variant' в python с win32com - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь сделать что-то условно простое в 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 . Но я понятия не имею, как именно выполнить это преобразование - если я смотрю на вариантный массив, массив альтернативных объектов, и то, и другое - и я не уверен, как выполнить преобразование в любой случай.

Любое понимание приветствуется.

...