PIbd-42_SSPR/app/services/geom_service.py
2024-10-21 23:12:37 +03:00

93 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional, Dict, Any
import os
from win32com.client import gencache
from win32com.client import Dispatch
import pythoncom
from app.core.config import settings
def create_geometry(params: Dict[str, Any], file_name: str):
pythoncom.CoInitializeEx(0)
geom_path = os.path.join(settings.current_directory, "model_3d/Поток.m3d")
# Проверяем на корректность ключи в запросе
valid_keys = {'N1', 'L1', 'a1', 'N2', 'L2', 'N3', 'L3'}
list_collms = []
values = []
for key in params:
if key not in valid_keys and key not in {"plan_title"}:
raise ValueError(f"Invalid parameter: {key}")
if key in valid_keys:
list_collms.append(key)
values.append(params[key])
# Генерация уникального имени файла на основе параметров
# file_name = generate_file_name(params)
def get_kompas_api7():
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
api = module.IKompasAPIObject(
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID,
pythoncom.IID_IDispatch))
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
return module, api, const
module7, api7, const7 = get_kompas_api7() # Подключаемся к API7
app7 = api7.Application # Получаем основной интерфейс
app7.Visible = True # Показываем окно пользователю (если скрыто)
app7.HideMessage = const7.ksHideMessageNo # Отвечаем НЕТ на любые вопросы программы
print(app7.ApplicationName(FullName=True)) # Печатаем название программы
doc7 = app7.Documents.Open(PathName=geom_path,
Visible=True,
ReadOnly=True)
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
# Подключим описание интерфейсов API5
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))
# Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID,
pythoncom.IID_IDispatch))
Documents = application.Documents
# Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
kPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
varcoll = kPart.VariableCollection()
varcoll.refresh()
for i in range(len(values)):
Variable = varcoll.GetByName(list_collms[i], True, True)
Variable.value = values[i]
kPart.RebuildModel()
# Перерисовываем документ
iDocument3D.RebuildDocument()
generated_files_path = os.path.join(settings.current_directory, "generated_files/")
if not os.path.exists(generated_files_path):
os.makedirs(generated_files_path)
save_path = os.path.join(generated_files_path, file_name)
kompas_document.SaveAs(save_path)
kompas_document.Close(True)
return save_path