Работа с сопряжениями в сборке на C#

Автор mish15, 10.11.23, 18:10:07

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

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

mish15

При работе со сборкой на C# требуется вывести в форму список сопряжений, которые находятся в сборке, однако при захвате o3d_mateConstraint, в форму выводится список основных осей, что не так-то сделано? Код и фото прикреплены.

KrissKross

API5
Массив сопряжений (Интерфейсы ksMateConstraintCollection, IMateConstraintCollection)

Данный интерфейс может быть получен с использованием метода интерфейса ksRequestInfo3D::GetMateConstraintCollection.

ссылки
https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/ksmateconstraint.html
https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/ksmateconstraintcollection.html

API7
MateConstraints - Коллекция сопряжений
https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/imateconstraints3d.html

P.S.
Удобно давать ссылки на сайт SDK


feron


p3452

mish15, попробуйте заменить DisplayMateConstraints(ksPart Partsb) на listConstraint(ksDocument3D pDocument3Dsb, ksPart pPartsb)...
Список_Сопряжений.png
+ Благодарностей: 1

mish15

Цитата: p3452 от 12.11.23, 00:34:47mish15, попробуйте заменить DisplayMateConstraints(ksPart Partsb) на listConstraint(ksDocument3D pDocument3Dsb, ksPart pPartsb)...
Список_Сопряжений.png

Спасибо большое, все работает великолепно.

zaytsev

#6
а можно вопрос по теме для апи7 не совсем понимаю как использовать
ObjectConstraints = Object.ObjectConstraints( Object ) - типа что за объект в скобках

есть сборка две детали + одно соосное сопряжение
IApplication application = (IApplication)Marshal.GetActiveObject("KOMPAS.Application.7");
IKompasDocument3D document3D_7 = (IKompasDocument3D)application.ActiveDocument;
IPart7 part7 = document3D_7.TopPart;

IMateConstraints3D mateConstraints3D = part7.MateConstraints;
int count = mateConstraints3D.Count;

IMateConstraint3D mc = mateConstraints3D.MateConstraint3D[0];
IMateConstraint3D[] arrMc = mateConstraints3D.ObjectConstraints[part7];

вижу его в количестве - mateConstraints3D.Count
вижу по индексу объект типа IMateConstraint3D - mateConstraints3D.MateConstraint3D
хочу увидеть в виде массива IMateConstraint3D - mateConstraints3D.ObjectConstraints[но не знаю что здесь писать....]
если mateConstraints3D.ObjectConstraints[part7] - возвращает null
если mateConstraints3D.ObjectConstraints[(IModelObject)part7.MateConstraints] - типа интерфейс не тот и т.д.

не въезжаю короче )) подскажите... -как массив сопряжений в апи7 получить?
----

получилось вот так достать через дерево построения (индексы 0 ось, 1-2 две детали, 3 сопряжения)
IFeature7 feature7 = part7.Owner;
object[] sub = feature7.SubFeatures[ksTreeTypeEnum.ksOperTree, true, true];
object[] arrMc = mateConstraints3D.ObjectConstraints[(IModelObject)sub[1]]; 

но как то не очень выглядит через дерево - поскольку для индексов 1 и 2 возвращается один и тот же массив
хочется просто получить массив сопряжений сборки без конкретизации объекта...

p3452

- В "сопряжении" участвуют ДВА объекта...
- Если в Сборке всего две Детали и есть Сопряжение только между ними, то массив сопряжений для каждой из них будет одинаков.
- Интерфейс IKompasDocument3D1, свойство MateConstraints - Коллекция сопряжений.
+ Благодарностей: 1

zaytsev

#8
да спасибо)) до меня тоже дошло с утра правда с другой стороны (просто запутался в описании интерфейса IMateConstraints3D)
part7.MateConstraints уже возвращает массив IMateConstraint3D который сразу можно перебрать без метода mateConstraints3D.ObjectConstraints
(ну или в цикле через Count методом mateConstraints3D.MateConstraint3D[ current index])
ну собственно и ваш ответ = тот же - вид сбоку!!!
спасибо еще раз

IApplication application = (IApplication)Marshal.GetActiveObject("KOMPAS.Application.7");
IKompasDocument3D document3D_7 = (IKompasDocument3D)application.ActiveDocument;

foreach (IMateConstraint3D item in document3D_7.TopPart.MateConstraints)
{
    string nameMate = item.Name;
}

foreach (IMateConstraint3D item in ((IKompasDocument3D1)document3D_7).MateConstraints)
{
        string nameMate1 = item.Name;
}

p3452

zaytsev, Вы задали не один, а ТРИ ВОПРОСА(!) - получили ТРИ ОТВЕТА (достаточно конкретных)...
+ Благодарностей: 1