Наверно кто то заметил что получил объект
doc, но работа идет через
AcadObject.ActiveDocument..
Объект
doc во время активного перестраивания недоступен и вылетает ошибка:
Reloaded modules: win32com.gen_py.4E3F492A-FB57-4439-9BF0-1567ED84A3A9x0x1x0
Traceback (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)
НО! После вызова
AcadObject.ActiveDocument.SendCommand(f'._IMPORT\r"{step_file}"\r')
объект doc доступен после ожидания 0.1 сек и доступен до момента завершения импорта!
значит потеря доступа к doc - признак завершения импорта!
from win32com.client import Dispatch, gencache
# import pythoncom
import 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)
# Импортируем STEP
step_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) # возвращаем диалог выбора файла