ADN Club > AutoCAD .NET API
Импорт step файла в Autocad (Python)
(1/1)
izhgtumekhanik:
Добрый день!
Как импортировать Step файл в Autocad Mechanical 2016 x64 ?
Вот часть кода - рабочий:
--- Код - Python [Выбрать] ---from win32com.client import Dispatch, gencache AcadAPI = gencache.EnsureModule('{4E3F492A-FB57-4439-9BF0-1567ED84A3A9}', 0, 1, 0)AcadObject = Dispatch('AutoCAD.Application.20.1', None, AcadAPI.IAcadApplication.CLSID)AcadObject.Visible = True # Открываем ГОСТ-шаблонtemplate_path = r"C:\Users\ZeroHour\AppData\Local\Autodesk\AutoCAD Mechanical 2016\R20.1\rus\Acadm\Template\am_gost.dwt"doc = AcadObject.Documents.Add(template_path) # Импортируем STEPAcadObject.ActiveDocument.SetVariable("FILEDIA", 0) # отключаем диалог выбора файлаAcadObject.ActiveDocument.SendCommand(f'._IMPORT\r"{r"C:\cad\Деталь.stp"}"\r')
А дальше я так понимаю Autocad тратит время на обработку этого файла и выходит всплывающее окошко о готовности с гиперссылкой по которому надо кликнуть и модель открывается. Фото окошка прикладываю.
izhgtumekhanik:
Через события средствами api Autocad не могу подойти.
izhgtumekhanik:
Вот вторя часть - рабочий.
--- Код - Python [Выбрать] ---time.sleep(4) # Открываем готовый результат (аналог клика по уведомлению)AcadObject.ActiveDocument.SendCommand("IMPORTTRANSLATIONRESULT\r") # Перестраиваем видAcadObject.ActiveDocument.SendCommand("._REGEN\r")
Остается каким то образом отловить событие окончания импорта.
izhgtumekhanik:
Так как отловить событие конца импорта ?
izhgtumekhanik:
Наверно кто то заметил что получил объект doc, но работа идет через AcadObject.ActiveDocument..
Объект doc во время активного перестраивания недоступен и вылетает ошибка:
--- Код - Python [Выбрать] ---Reloaded modules: win32com.gen_py.4E3F492A-FB57-4439-9BF0-1567ED84A3A9x0x1x0Traceback (most recent call last): File C:\Python3.13.5x64\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File c:\cad\безымянный1.py:31 doc.SetVariable("FILEDIA", 0) # отключаем диалог выбора файла File ~\AppData\Local\Temp\gen_py\3.13\4E3F492A-FB57-4439-9BF0-1567ED84A3A9x0x1x0.py:7038 in SetVariable return self._oleobj_.InvokeTypes(52, LCID, 1, (24, 0), ((8, 1), (12, 1)),Name com_error: (-2147418111, 'Вызов был отклонен.', None, None)
НО! После вызова
--- Код - Python [Выбрать] ---AcadObject.ActiveDocument.SendCommand(f'._IMPORT\r"{step_file}"\r')
объект doc доступен после ожидания 0.1 сек и доступен до момента завершения импорта!
значит потеря доступа к doc - признак завершения импорта!
--- Код - Python [Выбрать] ---from win32com.client import Dispatch, gencache# import pythoncomimport time AcadAPI = gencache.EnsureModule('{4E3F492A-FB57-4439-9BF0-1567ED84A3A9}', 0, 1, 0)AcadObject = Dispatch('AutoCAD.Application.20.1', None, AcadAPI.IAcadApplication.CLSID)# AcadObject = DispatchWithEvents('AutoCAD.Application.20.1', AcadAPI.IAcadApplication) AcadObject.Visible = True # Открываем ГОСТ-шаблонtemplate_path = r"C:\Users\ZeroHour\AppData\Local\Autodesk\AutoCAD Mechanical 2016\R20.1\rus\Acadm\Template\am_gost.dwt"doc = AcadObject.Documents.Add(template_path) # AcadObject.ActiveDocument.SetVariable("FILEDIA", 0) # отключаем диалог выбора файла time.sleep(0.1)doc.SetVariable("FILEDIA", 0) # Импортируем STEPstep_file = r"C:\cad\Деталь.stp"# Импортируем STEP# AcadObject.ActiveDocument.SendCommand(f'._IMPORT\r"{step_file}"\r') time.sleep(0.1)doc.SendCommand(f'._IMPORT\r"{step_file}"\r') flag = True # for i in range(20):# # pythoncom.PumpWaitingMessages() # print(doc.ModelSpace.Count)# time.sleep(0.2) while flag: try: tmp = doc.ModelSpace.Count time.sleep(0.2) except: flag = False time.sleep(1) print('модель импортирована') # Открываем готовый результат (аналог клика по уведомлению)AcadObject.ActiveDocument.SendCommand("IMPORTTRANSLATIONRESULT\r") # Перестраиваем видAcadObject.ActiveDocument.SendCommand("._REGEN\r") AcadObject.ActiveDocument.SetVariable("FILEDIA", 1) # возвращаем диалог выбора файла
Навигация
Перейти к полной версии