Развертка тела

Автор Vashnaemnik, 03.09.24, 13:02:13

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vashnaemnik

Добрый день уважаемые форумчане.
Прошу у вас помощи.
Пытаюсь автоматизировать свою работу.
Строю нужную мне модель, но ни как не могу сделать развертку. Надеюсь здесь мне помогут, подскажут.
from tkinter import *
from tkinter import messagebox as mb
from tkinter.ttk import Combobox # добавляем класс Combobox (выпадающий список)
import tkinter.filedialog as fd # работа с файлами

# для запуска компаса
import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

import math # для вычислений

#  Подключим константы API Компас
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))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов 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))
MH.iApplication  = application

#диалоговое окно (начало)
# назначение пути для проекта
def clicked_1():
        global directory
        directory = fd.askdirectory(title="Открыть папку", initialdir="/")
           
# нажатие клавиши старт
def clicked_2():
   

    global diametr
    diametr = txt_2.get()
    if not diametr.isdigit():
        mb.showerror("Диаметр аппарата", "Введите целое число")
    else:
        diametr=int(diametr)

   
    global diametr_shtycera
    diametr_shtycera = combo_3.get()
    diametr_shtycera = int(diametr_shtycera)

    global nomer_sborki
    nomer_sborki = combo_4.get()
   
    window.quit()
 
# окно
window = Tk() # создаем окно
window.resizable(False, False)
window.title("Построение распределителя") # Название окна
window.geometry('430x750') # размер окна
window.configure(background='lightblue') # цвет окна

# надписи

lbl_2 = Label(window, text="Диаметр аппарата, мм", font=("Times New Roman", 14), bg="lightblue", height=2, justify='left')
lbl_2.grid(column=0, row=2, sticky=W, padx=5)
txt_2 = Entry(window,width=10)
txt_2.grid(column=1, row=2, sticky=E, padx=10)

lbl_13 = Label(window, text="Диаметр штуцера", font=("Times New Roman", 14), bg="lightblue", height=2, justify='left')
lbl_13.grid(column=0, row=13, sticky=W, padx=5)
combo_3 = Combobox(window, state="readonly")
combo_3['values'] = ("50", "80", "100", "125", "150", "200", "250", "300", "350", "400", "450", "500")
combo_3.current(0)  # установите вариант по умолчанию
combo_3.grid(column=1, row=13, sticky=E, padx=10)

lbl_14 = Label(window, text="Номер сборки", font=("Times New Roman", 14), bg="lightblue", height=2, justify='left')
lbl_14.grid(column=0, row=14, sticky=W, padx=5)
combo_4 = Combobox(window, state="readonly")
combo_4['values'] = ("01", "02", "03", "04", "05", "06", "07", "08", "09", "10")
combo_4.current(0)  # установите вариант по умолчанию
combo_4.grid(column=1, row=14, sticky=E, padx=10)

btn_1 = Button(window, text="Выбрать папку", font=("Times New Roman", 14), command=clicked_1, height=1, width=20)
btn_1.grid(column=0, row=15)

btn_2 = Button(window, text="Старт", font=("Times New Roman", 14), command=clicked_2, height=1, width=10)
btn_2.grid(column=1, row=15)
 
window.mainloop()

#диалоговое окно (конец)

#построение (начало)

#  Создаем новый документ

Documents = application.Documents
kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentPart, True)

kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

#эскиз 1

iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeYOZ)
iDefinition.SetPlane(iPlane)
iSketch.Create()
iDocument2D = iDefinition.BeginEdit()
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()
obj = iDocument2D.ksLineSeg((math.ceil((diametr_shtycera/2+100)/10)*10), 202, (math.ceil((diametr_shtycera/2+100)/10)*10), 0, 1)
obj = iDocument2D.ksLineSeg((math.ceil((diametr_shtycera/2+100)/10)*10), 0, -(math.ceil((diametr_shtycera/2+100)/10)*10), 0, 1)
obj = iDocument2D.ksLineSeg(-(math.ceil((diametr_shtycera/2+100)/10)*10), 202, -(math.ceil((diametr_shtycera/2+100)/10)*10), 0, 1)
iDefinition.angle = 90
iSketch = kompas_object.TransferInterface(iDefinition, kompas6_constants.ksAPI7Dual, 0)
iSketch.LeftHandedCS = True
iSketch.Update()
iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

# листовое тело

iSheetMetalContainer = iPart7._oleobj_.QueryInterface(kompas_api7_module.ISheetMetalContainer.CLSID, pythoncom.IID_IDispatch)
iSheetMetalContainer = kompas_api7_module.ISheetMetalContainer(iSheetMetalContainer)
iSheetMetalBodies = iSheetMetalContainer.SheetMetalBodies
iSheetMetalBody = iSheetMetalBodies.Add()
iSheetMetalBody.BendCoefficient = 0.4
iSheetMetalBody.SetDepth(True, ((math.floor(((math.sqrt((diametr/2)**2-(diametr_shtycera/2+100)**2))-20)/10))*10)*2)
iSheetMetalBody.SetDepth(False, ((math.floor(((math.sqrt((diametr/2)**2-(diametr_shtycera/2+100)**2))-20)/10))*10)*2)
iSheetMetalBody.Direction = kompas6_constants_3d.dtMiddlePlane
iSheetMetalBody.SetExtrusionType(True, kompas6_constants_3d.etBlind)
iSheetMetalBody.SetExtrusionType(False, kompas6_constants_3d.etBlind)
iSheetMetalBody.Radius = 2
iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
iCollection.SelectByPoint(0, 0, 0)
iEdge = iCollection.Last()
iEdgeDefinition = iEdge.GetDefinition()
iSketch = iEdgeDefinition.GetOwnerEntity()

iSketch7 = kompas_object.TransferInterface(iSketch, kompas6_constants.ksAPI7Dual, 0)
iSheetMetalBody.Sketch = iSketch7
iSheetMetalBody.Straighten = False
iSheetMetalBody.ThicknessDirection = False
iSheetMetalBody.Thickness = 2
iSheetMetalBody.UnfoldType = kompas6_constants_3d.ksCoefficient
obj = kompas_object.TransferInterface(iSheetMetalBody, kompas6_constants.ksAPI5Auto, kompas6_constants_3d.o3d_entity)
obj.name = "Листовое тело:1"
iColorParam = obj.ColorParam()
iColorParam.ambient = 0.5
iColorParam.color = 9474192
iColorParam.diffuse = 0.6
iColorParam.emission = 0.5
iColorParam.shininess = 0.8
iColorParam.specularity = 0.8
iColorParam.transparency = 1
obj.Create()
iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

#  Создай развертку
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
sheet_metal_bend_unfold_parameters = iSheetMetalContainer.SheetMetalBendUnfoldParameters
sheet_metal_bend_unfold_parameters.FixedFaces = iPart7.SelectByPoint(0, 0, 2.0)
sheet_metal_bend_unfold_parameters.UnfoldPlane = iPart7.SelectByPoint(0, 0, 2.0)
sheet_metal_bend_unfold_parameters.Unfold = True


# сохраняем документ

kompas_document.SaveAs(r""+str(directory) + "/" + ".02." + str(nomer_sborki) + ".01.001" + "-Основание короба.m3d")

Что я делаю не так.

Vashnaemnik

Всем спасибо  :)
Разобрался.