У меня есть чертеж, который содержит несколько дверей, представленных так:
Каждая дверь состоит из набора линий и ар 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, но не добавляет аккорд в группу.
Если я раскомментирую последнюю строку, выдается следующая ошибка:
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 ')
Что я делаю не так?