Зеркальное отражение

Автор Vashnaemnik, 09.09.24, 12:31:28

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

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

Vashnaemnik

Уважаемые форумчане. Подскажите.
Как заставить делать зеркальное отражения тела.
Написал из того что смог понять из Компас SDK.
obj = iPart.NewEntity(kompas6_constants_3d.o3d_mirrorOperation)
iDefinition = obj.GetDefinition()
iDefinition.SetPlane(kompas6_constants_3d.o3d_planeYOZ)
EntityCollection = iDefinition.GetOperationArray()
EntityCollection.Clear()
EntityCollection.AddSetPlane(iPlane)
obj.Create()
Но никакого зеркального отражения не происходит.
Подскажите, сам туплю.

Vashnaemnik

Уважаемые форумчане. Помогите пожалуйста.
Я не программист, просто пытаюсь автоматизировать свою работу хоть немного.
Застрял на создании зеркального отражения детали в сборке.
Вроде бы, как в учебнике KOMPAS-Invisible (API КОМПАС-3D) прописал.
# вставляем деталь
iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
parts = iPart7.Parts
stenka_koroba = parts.AddFromFile(r""+str(directory) + "/" + str(oboznachenie) + ".02." + str(nomer_sborki) + ".01.002" + "-Стенка короба.m3d",True,True)
iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOZ) # назначаем плоскость симметрии
iDefinition.SetPlane(iPlane) # устанавливаем плоскость симметрии
iPlane.Create()
stenka_koroba = iPlane.NewEntity (kompas6_constants_3d.o3d_MirrorPart) # зеркальная деталь с внешней ссылкой на источник
iDefinition = stenka_koroba.GetDefinition()
stenka_koroba.Update()
Вставил деталь в сборку, назначил плоскость, но категорически не хочет деть ее.
Подскажите.
Сам компас не прописывает данную операцию в записи макроса.

Михаил88

Цитата: Vashnaemnik от 10.09.24, 09:08:16Уважаемые форумчане. Помогите пожалуйста.

Посмотрите пример, может поможет решить Ваш вопрос.

Vashnaemnik

Спасибо большое за присланный пример.
Думаю для дальнейшей автоматизации точно понадобится.
Но у меня деталь находится под углом, и боюсь именно для нее сопряжение не подойдет.
Прикрепляю файл, где вырвал просто свою деталь, без расчетов. Она ставиться в разные места, в зависимости от ввода данных пользователя, и мне именно нужно сделать зеркальное отражение.
# для запуска компаса
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

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

Documents = application.Documents
kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentPart, True)
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()

# эскиз 1

iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOZ)
iDefinition.SetPlane(iPlane)
iSketch.Create()
iDocument2D = iDefinition.BeginEdit()
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()
obj = iDocument2D.ksLineSeg(-1000, 2, -960, 202, 1)
iDefinition.EndEdit()
iDefinition.angle = 180
iSketch.Update()

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

iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
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.UnfoldType = kompas6_constants_3d.ksCoefficient
sheet_metal_body.Direction = kompas6_constants_3d.dtMiddlePlane
sheet_metal_body.SetExtrusionType(True, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(True, 200)
sheet_metal_body.SetExtrusionType(False, kompas6_constants_3d.etBlind)
sheet_metal_body.SetDepth(False, 200)
sheet_metal_body.Update()

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

kompas_document.SaveAs(r"Z:\DIR_12_13_ДЕПАРТАМЕНТ_ЕРС-ПРОЕКТОВ\ГР-ВКУ-УФА\Новая папка\Стенка короба.m3d")

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

kompas_document.Close(True)

# создаем сборку

Documents = application.Documents
kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentAssembly, 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)
parts = iPart7.Parts
stenka_koroba = parts.AddFromFile(r"Z:\DIR_12_13_ДЕПАРТАМЕНТ_ЕРС-ПРОЕКТОВ\ГР-ВКУ-УФА\Новая папка\Стенка короба.m3d",True,True)

# зеркальное отражение стенки короба
Файл в формате .pym
Запускается при открытом компасе. Сам создаст нужные файлы.
Очень надеюсь на помощь данного форума.
Готов оплатить потраченное на это время.

Михаил88

Вам нужно получается тоже самое, что делает эта команда?


Vashnaemnik

Да, именно она. И именно отображать компонент в зеркальном виде.