Добрый день, третий день мучаюсь, буду признательна за любую помощь..
Мне нужно из каталога с .m3d сохранить каждый файл в .jpeg
Запускаю через внешний python скрипт, библиотеку апи скопировала в папку с пайтоном.
У меня не работает использование API7
То есть вот такой скрипт
import pythoncom
from win32com.client import Dispatch, gencache
KAPI5 = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI5.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI5.KompasObject.CLSID, pythoncom.IID_IDispatch))
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = KAPI7.iApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))
Вызывает ошибку что у KAPI7 нет атрибута iApplication
При это с API5 все норм, все свойства и методы доступны.
А вот такая попытка использования API7 говорит, что нет атрибута IKompasDocument2D
# Получим активный документ
kompas_document = iApplication.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
Попытка скомбинировать два апи не дает успеха:
import pythoncom, os, time
from win32com.client import Dispatch, gencache
def batch_convert_m3d_to_jpeg(input_folder, output_folder):
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
iApplication = Dispatch('Kompas.Application.7')
documents = iApplication.Documents
for filename in os.listdir(input_folder):
if filename.lower().endswith(".m3d"):
input_path = os.path.join(input_folder, filename)
#png_path = os.path.join(output_folder, os.path.splitext(filename)[0] + ".png")
#m3d_path_out = os.path.join(output_folder, filename)
output_path = os.path.join(output_folder, os.path.splitext(filename)[0] + ".jpeg")
try:
doc = documents.Open(input_path, True, False)
iApplication
iKompasDocument2D = kompas_object.Document2D()
#print(dir(kompas6_api5_module))
if doc:
try:
Param = iKompasDocument2D.RasterFormatParam
print(dir(Param))
Param.format = 2
iKompasDocument2D.SaveAsToRasterFormat(output_path, Param)
except Exception as e:
print(f"SaveAs: {e}")
iKompasDocument2D.Close(0)
else:
print("!")
except Exception as e:
print("{e}")
input_folder = r"C:\Users\puyols\3d"
output_folder = r"C:\Users\puyols\3d_out"
if not os.path.exists(output_folder):
os.makedirs(output_folder)
print("{output_folder}")
batch_convert_m3d_to_jpeg(input_folder, output_folder)
Не вываливается в исключения, но в и папке пусто...
(это примерный код, я очень много его меняла, но какая-то версия не выдавала ошибки, но и джпега не было)
Нашла библиотеку от компаса пакетного сохранения... тоже ни ошибок, ни файлов..
Помогите, пожалуйста, разобраться, к компасу доступ ограниченное время, а нужно сделать..
Цитата: puyol от 05.03.25, 13:54:53Нашла библиотеку от компаса пакетного сохранения... тоже ни ошибок, ни файлов..
Какую библиотеку нашли и какой Компас?
Цитата: UU от 05.03.25, 14:02:15Какую библиотеку нашли и какой Компас?
Компас 23 библиотека с сайта s7.askon 41 версии
Цитата: puyol от 05.03.25, 14:10:09Компас 23 библиотека с сайта s7.askon 41 версии
Нужно полную ссылку на
сайт давать (https://sd7.ascon.ru/Public/Utils/SaveRaster/), хотя и так понятно о чем речь.
На сайте АСКОН, нет библиотеки работающей с Компас V23, соответственно она и не сохраняет.
Версия которая работает с Компас V23, находится здесь - https://forum.ascon.ru/index.php?topic=38319.msg332207#msg332207.
У Вас были ошибки в коде. Немного подправил.
Результат работы на скрине.
P.S. А вообще просто купите у UU его прогу SaveRaster не таких она больших денег уж и стоит, чтобы жадничать.
Цитата: UU от 05.03.25, 14:16:25Нужно полную ссылку на сайт давать (https://sd7.ascon.ru/Public/Utils/SaveRaster/), хотя и так понятно о чем речь.
На сайте АСКОН, нет библиотеки работающей с Компас V23, соответственно она и не сохраняет.
Версия которая работает с Компас V23, находится здесь - https://forum.ascon.ru/index.php?topic=38319.msg332207#msg332207.
Извините, не знала, что можно ссылки вставлять тут, спасибо за ссылку на библиотеку, как я поняла, Вашу.
Если решат использовать на постоянной основе, возможно, воспользуются.
Цитата: Михаил88 от 05.03.25, 14:57:53У Вас были ошибки в коде. Немного подправил.
Результат работы на скрине.
P.S. А вообще просто купите у UU его прогу SaveRaster не таких она больших денег уж и стоит, чтобы жадничать.
Спасибо Вам огромное!!!
Действительно, если добавить константы и запускать через встроенный пайтон(через внешний не работает), то можно обратиться к IKompasDocument3D()
ну и за исправление остальных ошибок)
Про программу пакетного сохранения, узнала только вечером вчера после нескольких дней мучений)), и сегодня узнала от UU, что есть работающая для версии 23
Мне хотелось разобраться, почему не работает мой код, я далека от пайтона и еще дальше от Компаса, но после потраченных дней, захотелось все-таки увидеть файлы jpeg) И дело тут не в деньгах)
С python, который Вы сами поставите тоже будет работать. Нужно установить библиотеку pywin32. У меня например установлен Python 3.10.11 и все работает.
В комплект поставки с компасом входит Python 3.2.5.
Цитата: puyol от 05.03.25, 15:47:17Извините, не знала, что можно ссылки вставлять тут, спасибо за ссылку на библиотеку, как я поняла, Вашу.
Если решат использовать на постоянной основе, возможно, воспользуются.
Сейчас завершаю тестирование, на найденные ошибки и замену ссылок на переменные в файлах, на ссылки файлов компонентов.
Сохранение в версию 5.11 из версии 23 дичь.
(http:///attach%5D)
(http:///attach%5D)
(http:///attach%5D)
(https://forum.ascon.ru/proxy.php?request=http%3A%2F%2F%5Battach%2520id%3D114414%5Dsr1.png%5B%2Fattach%255D&hash=dc166b24ab158f4557d6578065eb87a4e12a8d0a)