Построение эскиза на новой ЛСК

Автор Vashnaemnik, 12.09.24, 11:09:42

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

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

Vashnaemnik

Добрый день.
Подскажите. Мне надо создать эскиз детали на смещенной плоскости.
Создаю ЛСК. И на плоскости этой ЛСК строю эскиз.
Но он мне упорно строит это эскиз на главной СК. Почему?
# -*- coding: utf-8 -*-
#|111

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы 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 = application.ActiveDocument
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)

iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(kompas_api7_module.IAuxiliaryGeomContainer.CLSID, pythoncom.IID_IDispatch)
iAuxiliaryGeomContainer = kompas_api7_module.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
iPoint3D = iLocalCoordinateSystem._oleobj_.QueryInterface(kompas_api7_module.IPoint3D.CLSID, pythoncom.IID_IDispatch)
iPoint3D = kompas_api7_module.IPoint3D(iPoint3D)
iPoint3D.ParameterType = kompas6_constants_3d.ksPParamCoord
iPoint3D.X = 500
iPoint3D.Y = 0
iPoint3D.Z = 0
iLocalCoordinateSystem.OrientationType = kompas6_constants_3d.ksAxisOrientation
iLocalCoordinateSystem.Update()

iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
iLocalCSAxesDirectionParam = iLocalCSParameters._oleobj_.QueryInterface(kompas_api7_module.ILocalCSAxesDirectionParam.CLSID, pythoncom.IID_IDispatch)
iLocalCSAxesDirectionParam = kompas_api7_module.ILocalCSAxesDirectionParam(iLocalCSAxesDirectionParam)
matrix = [0.984808, 0, 0.173648, 0, 0, 1, -0, 0, -0.173648, 0, 0.984808, 0, 500, 0, 0, 1]

iLocalCoordinateSystem.InitByMatrix3D(matrix)
iLocalCoordinateSystem.Update()

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_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(0, 0, 0, 74.467741466864, 1)
obj = iDocument2D.ksLineSeg(0, 74.467741466864, 76, 74.467741466864, 1)
obj = iDocument2D.ksLineSeg(76, 74.467741466864, 76, 0, 1)
obj = iDocument2D.ksLineSeg(76, 0, 0, 0, 1)
iDefinition.EndEdit()
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)

Михаил88

Записал с помощью PyKompasMacro, но пришлось немного поправить.
+ Благодарностей: 1

Vashnaemnik

Михаил. Вы волшебник.
Я 2 часа пытался понять. А вы за 10 минут сделали.
Огромное вам спасибо!!!

Vashnaemnik

Цитата: Михаил88 от 12.09.24, 11:31:57Записал с помощью PyKompasMacro, но пришлось немного поправить.
Михаил, а как ее повернуть вокруг нужной оси?

Vashnaemnik

Цитата: Михаил88 от 12.09.24, 11:31:57Записал с помощью PyKompasMacro, но пришлось немного поправить.
Михаил, а как повернуть ЛСК относительно оси?
И что за PyKompasMacro? Я нашел его, но скачать не могу. Как его достать?

Михаил88

Интерфейс ILocalCSAxesDirectionParam

если был задан local_coordinate_system.OrientationType = kompas6_constants_3d.ksAxisOrientation

Михаил88

Цитата: Vashnaemnik от 12.09.24, 12:46:12И что за PyKompasMacro? Я нашел его, но скачать не могу. Как его достать?

Пишите автору программы  Slaviation, он на форуме есть.

Vashnaemnik


Vashnaemnik

Цитата: Михаил88 от 12.09.24, 13:14:42Интерфейс ILocalCSAxesDirectionParam

если был задан local_coordinate_system.OrientationType = kompas6_constants_3d.ksAxisOrientation
Сейчас мозг взорвется  :o:
Не могу понять как добавить что бы ЛСК повернулась.
 :((( помогите.
Я настолько слаб в этом деле.

По справочнику SDK нашел вот эту страницу:
AngleByOwnAxis - Угол поворота вокруг собственной оси

 

Интерфейс...

Синтаксис Automation:

iObject.AngleByOwnAxis = AngleByOwnAxis( axis );

Установить свойство (* )

iObject.SetAngleByOwnAxis( axis, angle );

Установить свойство (**)

Синтаксис COM:

iObject->put_AngleByOwnAxis( axis, angle );

Установить свойство

Входные параметры:

axis

- тип оси из перечисления ksObj3dTypeEnum,

допустимые значения:

- o3d_axisOX

- o3d_axisOY

- o3d_axisOZ,

angle

- угол поворота.

Примечание:

Свойство доступно только для записи.

Но как ее читать, ума не приложу.

Михаил88

Нужно вставить в этот участок кода.

Михаил88

Цитата: Vashnaemnik от 12.09.24, 14:16:47Синтаксис Automation:

iObject.AngleByOwnAxis = AngleByOwnAxis( axis );

Так на python не сделать, здесь у них похоже ошибка.


Vashnaemnik

Цитата: Михаил88 от 12.09.24, 14:22:48Нужно вставить в этот участок кода.
Спасибо вам огромное!!!!!!!!!!!!!!!!!!!

Vashnaemnik

Цитата: Михаил88 от 12.09.24, 14:25:15Так на python не сделать, здесь у них похоже ошибка.


Доброе утро.
Подскажите. Мой эскиз лежит на плоскости листового тела. И какую либо координату я не давал для выдавливания эскиза, он определяет ее как листовое тело. Что в этом месте линия эскиза он не видит. И соответственно ничего не выдавливает. Почему нужно вводить именно координаты? Возможно ли выдавить по имени эскиза?

Vashnaemnik

Цитата: Vashnaemnik от 13.09.24, 08:18:06Доброе утро.
Подскажите. Мой эскиз лежит на плоскости листового тела. И какую либо координату я не давал для выдавливания эскиза, он определяет ее как листовое тело. Что в этом месте линия эскиза он не видит. И соответственно ничего не выдавливает. Почему нужно вводить именно координаты? Возможно ли выдавить по имени эскиза?
Все, решил проблему :)
Капец, столько мороки в этом всем :) но так интересно.