93 lines
4.0 KiB
Python
93 lines
4.0 KiB
Python
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
|