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

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

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

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

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

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

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

Как добраться до конкретного ребра/поверхности

Автор gabik, 10.12.12, 13:28:07

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

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

gabik

У нас есть например компонент:
ksPart part = (ksPart)_doc.GetPart((short)Part_Type.pNew_Part);
В нем у нас есть два эскиза, которые мы выдавливаем и получаем общее ребро между двумя объектами. Теперь нам необходимо применить операцию скругления этого ребра. Откуда взять именно это ребро?
В примерах скругления из SDK скругляется весь ksPart:
ksEntityCollection collect = (ksEntityCollection)part.EntityCollection((short)Obj3dType.o3d_edge) и добавление этой коллекции в filletDef.array().
Можно конечно подобрать индекс поверхности и добавить конкретную, но если таких поверхностей сотни?
Можно как-нибудь из конкретной операции вытащить элементы которые были созданы после неё? Например у нас есть конкретная операция выдавливания, я хочу получить все ребра/ поверхности/ точки которые образовались после этой операции?

ksFaceDefinition::EdgeCollection - Получить указатель на интерфейс массива ребер, ограничивающих грань.
Получить одну коллекцию до операции, вторую после и сравнить, что не совпадает будут новыми ребрами.
+ Благодарностей: 1

chelkar

Цитата: gabik от 10.12.12, 13:28:07
Можно как-нибудь из конкретной операции вытащить элементы которые были созданы после неё? Например у нас есть конкретная операция выдавливания, я хочу получить все ребра/ поверхности/ точки которые образовались после этой операции?
Можно получить аналог подсветки элементов модели по выделению операции в Дереве построения.
Для этого после создания операции получаем от нее элемент в дереве IEntity::GetFeature
и далее IFeature::EntityCollection с нужным типом. Функция вернет коллекцию объектов, тех которые КОМПАС подсветит при указании такой операции в Дереве построения.
+ Благодарностей: 1

gabik

Получаю дерево, далее из него коллекцию конкретных объектов. Все отлично.
ksFeature featureHandle = (ksFeature)baseLoftHandle.GetFeature();
ksEntityCollection coll = (ksEntityCollection)featureHandle.EntityCollection((short)Obj3dType.o3d_face);

Мне, например, нужно сделать операцию с одной конкретной полученной гранью:
filletCollection.Add(coll.GetByIndex(1));
Всего получил я их 3. Операция применяется отлично, скругление происходит, но элементы в коллекции постоянно меняются местами при перерисовке. Таким образом при каждом запуске операция скругления применяется к новой грани из трех. Как быть в этом случае?

#4
Вам необходимо однозначно определить одну грань из трёх, по тем признакам, которые Вам известны, Вы делаете поиск по индексу, а это не правильно, он не даёт однозначности.
+ Благодарностей: 1

chelkar

Чтобы что-то посоветовать, надо понимать условия выполнения действия.
Можно попробовать поискать нужный объект по геометрии. Например отфильтровать по заданной геометрической точке. См. функцию IEntityCollection::SelectByPoint
Либо, при выполнении предыдущих операций именовать грани через IEntity::name, а потом перебирать их по имени.
Если же код моделирования выполняется в заведомо неизвестных условиях, например, на произвольной пользовательской модели, то что то определить можно только через запрос пользователю.
+ Благодарностей: 1