Слияние листовых тел

Автор Vashnaemnik, 16.09.24, 14:53:07

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

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

Vashnaemnik

Добрый день форумчане.
Подскажите.
У меня есть деталь, которая состоит из двух листовых тел.
при создании второго листового тела, если делать напрямую в компасе, есть функция объединить.
А программно я не нашел как это сделать.
Компасом записал 2 макроса, создание второго листового тела как отдельным телом и создание слиянием.
Но в макросе все абсолютно одинаково.
А без объединения, развертка неполная.
Может кто сталкивался с таким?


Vashnaemnik

Добрый день форумчане.
Вот макрос
# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
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

#  Получи API интерфейсов версии 5
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))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Создай документ "Деталь"
documents = application.Documents
kompas_document = documents.Add(kompas6_constants.ksDocumentPart, True)
kompas_document.Active = True

#  Создай объект модели "Эскиз"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
model_container = kompas_api7_module.IModelContainer(part7)
sketchs = model_container.Sketchs
sketch = sketchs.Add()
part7 = kompas_document_3d.TopPart
sketch.Plane = part7.DefaultObject(kompas6_constants_3d.o3d_planeYOZ)
sketch.Name = "Эскиз:1"
sketch.Hidden = False
sketch.Angle = 90.0
sketch.LeftHandedCS = True
sketch.Update()

#  Войди в режим редактирования эскиза
kompas_document = sketch.BeginEdit()

#  Создай графический объект "Отрезок"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
drawing_container = kompas_api7_module.IDrawingContainer(view)
line_segments = drawing_container.LineSegments
line_segment = line_segments.Add()
line_segment.Style = kompas6_constants.ksCSNormal
line_segment.X1 = -41.5395843
line_segment.Y1 = 41.5395841
line_segment.X2 = -41.5395843
line_segment.Y2 = 0.0
line_segment.Update()

#  Создай графический объект "Отрезок"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
drawing_container = kompas_api7_module.IDrawingContainer(view)
line_segments = drawing_container.LineSegments
line_segment = line_segments.Add()
line_segment.Style = kompas6_constants.ksCSNormal
line_segment.X1 = -41.5395843
line_segment.Y1 = 0.0
line_segment.X2 = 37.4604157
line_segment.Y2 = 0.0
line_segment.Update()

#  Создай графический объект "Отрезок"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
drawing_container = kompas_api7_module.IDrawingContainer(view)
line_segments = drawing_container.LineSegments
line_segment = line_segments.Add()
line_segment.Style = kompas6_constants.ksCSNormal
line_segment.X1 = 37.4604157
line_segment.Y1 = 0.0
line_segment.X2 = 37.4604157
line_segment.Y2 = 41.5395841
line_segment.Update()

#  Выйди из режима редактирования эскиза
sketch.EndEdit()

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай объект модели "Листовое тело"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
sheet_metal_container = kompas_api7_module.ISheetMetalContainer(part7)
sheet_metal_bodies = sheet_metal_container.SheetMetalBodies
sheet_metal_body = kompas_api7_module.ISheetMetalBody(sheet_metal_bodies.Add())
model_container = kompas_api7_module.IModelContainer(part7)
sheet_metal_body.Sketch = model_container.Objects(kompas6_constants_3d.o3d_sketch)[0]
sheet_metal_body.Name = "Листовое тело:1"
sheet_metal_body.ThicknessDirection = True
sheet_metal_body.Thickness = 2.0
sheet_metal_body.Straighten = False
sheet_metal_body.Radius = 2.0
sheet_metal_body.UnfoldType = kompas6_constants_3d.ksCoefficient
sheet_metal_body.Direction = kompas6_constants_3d.dtReverse
sheet_metal_body.BendCoefficient = 0.4
sheet_metal_body.SetExtrusionType(True, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(True, 0.0)
sheet_metal_body.SetExtrusionType(False, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(False, 100.0)

sheet_metal_body.Update()

#  Создай объект модели "Эскиз"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
model_container = kompas_api7_module.IModelContainer(part7)
sketchs = model_container.Sketchs
sketch = sketchs.Add()
part7 = kompas_document_3d.TopPart
sketch.Plane = part7.DefaultObject(kompas6_constants_3d.o3d_planeXOZ)
sketch.Name = "Эскиз:2"
sketch.Hidden = False
sketch.Angle = 180.0
sketch.LeftHandedCS = False
sketch.Update()

#  Войди в режим редактирования эскиза
kompas_document = sketch.BeginEdit()

#  Создай графический объект "Отрезок"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
drawing_container = kompas_api7_module.IDrawingContainer(view)
line_segments = drawing_container.LineSegments
line_segment = line_segments.Add()
line_segment.Style = kompas6_constants.ksCSNormal
line_segment.X1 = 0.0
line_segment.Y1 = 0.0
line_segment.X2 = -42.0
line_segment.Y2 = 0.0
line_segment.Update()

#  Создай графический объект "Отрезок"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
drawing_container = kompas_api7_module.IDrawingContainer(view)
line_segments = drawing_container.LineSegments
line_segment = line_segments.Add()
line_segment.Style = kompas6_constants.ksCSNormal
line_segment.X1 = -42.0
line_segment.Y1 = 0.0
line_segment.X2 = -42.0
line_segment.Y2 = -26.0
line_segment.Update()

#  Выйди из режима редактирования эскиза
sketch.EndEdit()

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай объект модели "Листовое тело"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
sheet_metal_container = kompas_api7_module.ISheetMetalContainer(part7)
sheet_metal_bodies = sheet_metal_container.SheetMetalBodies
sheet_metal_body = kompas_api7_module.ISheetMetalBody(sheet_metal_bodies.Add())
model_container = kompas_api7_module.IModelContainer(part7)
sheet_metal_body.Sketch = model_container.Objects(kompas6_constants_3d.o3d_sketch)[1]
sheet_metal_body.Name = "Листовое тело:2"
sheet_metal_body.ThicknessDirection = False
sheet_metal_body.Thickness = 2.0
sheet_metal_body.Straighten = False
sheet_metal_body.Radius = 2.0
sheet_metal_body.UnfoldType = kompas6_constants_3d.ksCoefficient
sheet_metal_body.Direction = kompas6_constants_3d.dtMiddlePlane
sheet_metal_body.BendCoefficient = 0.4
sheet_metal_body.SetExtrusionType(True, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(True, 10.0)
sheet_metal_body.SetExtrusionType(False, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(False, 10.0)

sheet_metal_body.Update()

#  Создай объект модели "Листовой металл, операция развертка"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
sheet_metal_bend_unfold_parameters = sheet_metal_container.SheetMetalBendUnfoldParameters
sheet_metal_bend_unfold_parameters.FixedFaces = part7.SelectByPoint(model_container.Objects(kompas6_constants_3d.o3d_face), -30.0, -2.0395843, 2.0)[0]
sheet_metal_bend_unfold_parameters.UnfoldPlane = part7.SelectByPoint(model_container.Objects(kompas6_constants_3d.o3d_face), -30.0, -2.0395843, 2.0)[0]
sheet_metal_bend_unfold_parameters.Unfold = True
sheet_metal_bend_unfold_parameters.Unfold = False

Делаю два листовых тела. Второе тело слиянием с первым и делаю развертку.
Получается как я и хочу. Получается одно тело.
После сохраняю этот файл и закрываю.
Потом просто открываю этот файл, но он уже показывает что там 2 тела и развертка работает некорректно.
Подскажите, как так происходит? Как заставить это работать как мне надо?