Как добавить объект в группу в AutoCAD? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть чертеж, который содержит несколько дверей, представленных так:

arc

Каждая дверь состоит из набора линий и ар c, которые сгруппированы вместе. Чтобы упростить обнаружение границ, я хотел бы программно отредактировать группы так, чтобы ar c заменялся аккордом от начальной точки до конечной точки. Вот что я попробовал:

import win32com.client

acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
doc = acad.Documents.Open(r'C:\path\to\my\drawing\my_drawing.dwg')
ms = doc.ModelSpace

door = doc.Groups.Item(0)

for index in range(door.Count):
    obj = door.Item(index)
    if obj.ObjectName == 'AcDbArc':
        x_start, y_start, z_start = obj.StartPoint
        x_end, y_end, z_end = obj.EndPoint
        obj.Visible = False
        doc.SendCommand(f'LINE {x_start},{y_start} {x_end},{y_end}\n ')
        chord = ms.Item(ms.Count - 1)
        #door.AppendItems(chord)

Приведенный выше код скрывает аккорд ar c и dr aws, но не добавляет аккорд в группу.

chord

Если я раскомментирую последнюю строку, выдается следующая ошибка:

Traceback (most recent call last):

  File "<ipython-input-100-6f3359955c31>", line 1, in <module>
    door.AppendItems(chord)

  File "<COMObject Item>", line 2, in AppendItems

com_error: (-2147352567, 'Ocurrió una excepción.', (0, 'AutoCAD.Application', 'Invalid object array', 'C:\\Program Files\\Autodesk\\AutoCAD 2017\\HELP\\OLE_ERR.CHM', -2145320837, -2145320837), None)

Я также пытался door.AppendItems([chord]), но безрезультатно. Я думаю, что решение может быть что-то вроде приведенного ниже фрагмента, но я не могу заставить его работать:

doc.SendCommand(f'GROUPEDIT (handent "{door.handle}")\n A\n (handent "{chord.handle}")\n ')

Что я делаю не так?

...