Я хочу автоматически обработать кучу чертежей AutoCAD, используя Python. Для этого мне нужно программно изменить свойства объектов рисования. Некоторое время я боролся, но безрезультатно.
Этот код я использую для чтения .dxf
и открытия файлов .dwg
:
import win32com.client
import dxfgrabber
import os
folder = r'C:\path\to\my\folder'
filename = 'my_file'
dwg_path = os.path.join(folder, filename + '.dwg')
dxf_path = os.path.join(folder, filename + '.dxf')
acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
doc = acad.Documents.Open(dwg_path)
acad.Visible = True
dxf = dxfgrabber.readfile(dxf_path)
Затем я перебираю объекты, помещенные в слой с именем FirstLayer
, и выбираю один из них:
item = [obj for obj in dxf.entities if obj.layer == 'FirstLayer'][0]
Эта конкретная сущность является текстовым объектом:
In [1122]: type(item)
Out[1122]: dxfgrabber.dxfentities.Text
In [1123]: item.insert
Out[1123]: (4022.763956904745, 3518.371877135191, 0.0)
In [1124]: item.layer
Out[1124]: 'FirstLayer'
In [1125]: item.handle
Out[1125]: '298'
Моя цель состоит в том, чтобы изменить свойства, такие как color
, layer
, et c. Это одна из моих попыток переместить текстовый объект на другой слой с именем SecondLayer
:
doc.SendCommand(f'CHPROP {item.insert[0]},{item.insert[1]} LA\n SecondLayer\n ')
Я думаю, проблема в том, что объект нельзя выбрать через координаты точки вставки. Я также попытался (безуспешно) выбрать объект по его ручке, используя следующий скрипт:
_CHPROP (handent 298) _LA SecondLayer
Есть идеи, как обойти это?
РЕДАКТИРОВАТЬ
Я пришел к следующему решению, прежде чем @Lee Ma c опубликовал свой отличный ответ:
doc.SendCommand(f'CHPROP (handent "{item.handle}") \n_LA SecondLayer\n ')