• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Получение уникальных тел (IBody7) и их копий (как PartsEx[1] для iPart7)

Автор Cyclopentan, 28.07.21, 14:05:46

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

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

Cyclopentan

Коллеги, возник ещё один вопрос.

Для получения всех уникальных деталей/сборок (IPart7) есть метод PartsEx[ksUniqueParts], а для получения количества копий этих уникальных деталей/сборок есть get_InstanceCount(IPart7). Тут всё прекрасно работает.

Но как получить такое же для тел (IBody7)? BodyCollection вернёт все тела, без деления на копии и оригинал.
Например, тело было размножено через массив по концентрической сетке (см. рисунок). Компас при этом объединяет эти "Косынки" в группу по 8 штук, где первая косынка - это тело, а остальные - копии. Как для такой ситуации через SDK понять, что это одна косынка с 7 копиями?


Вират Лакх

Может пробовать через IFeature7 этого IBody7 выйти, используя OwnerFeature, выйти на массив, если он будет. А у массива IFeaturePattern можно получить IsInitialObject и InitialObjects...

Cyclopentan

Цитата: Вират Лакх от 29.07.21, 09:36:53Может пробовать через IFeature7 этого IBody7 выйти, используя OwnerFeature, выйти на массив, если он будет. А у массива IFeaturePattern можно получить IsInitialObject и InitialObjects...

Звучит как план!
Но что-то мне не хватило соображения, как это реализовать. OwnerFeature от IFeature7 этого IBody7 указывает сразу на TopPart файла, не на группировку.
А можно какой-нибудь пример кода, в котором реализуются данные функции, а то что-то по форуму поискал - ничего особо похожего не нашёл.

Вират Лакх

#3
План такой себе. Просто мысли вслух.
Нас, значит, интересуют массивы. SDK гласит:
ЦитироватьТипы операций копирования
o3d_BodiesPointDrivenPattern 521 IPointDrivenPattern Массив тел по точ­кам
o3d_BodiesTablePattern 525 ITablePattern Массив тел по та­блице из файла
o3d_BodiesMeshCopy 528 ILinearPattern Массив тел по сетке
o3d_BodiesCircularCopy 529 ICircularPattern Массив тел по кон­центрической сетке
o3d_BodiesCurveCopy 530 IPathPattern Массив тел по кри­вой

KompasAPIObjectTypeEnum - Типы объектов КОМПАС API
ksObjectBodies ...
Можно попробовать:
TopPart -> IPart7 -> IModelContainer -> FeaturePatterns или Objects(например ksObjectBodiesLinearPattern) -> все IFeaturePattern -> там получить все InitialObjects -> у них могут быть тоже массивы. А там разбираться, что чему принадлежит...

UPD
Если выделить в дереве сам массив, то API7.IFeature7(SelectedObjects).ResultBodies выдаст производные тела.
UPD2
Во! Нашёл. Если выделить тело из массива, то API7.IFeature7(SelectedObjects).SubFeatures(0 или 1, True, False) выдаст, например, ILinearPattern. То, что он выдал массив, уже означает, что тело является производным массива. Дальше можно обратиться к выданному интерфейсу и получить исходник.
Относительно моего первого сообщения - тут, оказывается, надо двигаться от тела не "вверх", а "вниз".
UPD3
Цитата: Cyclopentan от 29.07.21, 13:42:57А можно какой-нибудь пример кода, в котором реализуются данные функции, а то что-то по форуму поискал - ничего особо похожего не нашёл.
Вот тут в программе ОКТ есть def get_part_body, где происходит получение тела или компонента по выделенному объекту. Но такую задачку там я не решал. Может в новых версиях для новых компасов пригодится.

Cyclopentan

Вот спасибо, добрый человек! Здоровья побольше, счастья вагон, и чтобы жена была умница и чтобы детки не хворали!
Перетащил отсюда пару идей - всё заработало!