CATISpecObject из CATBody

Программирование для CATIA.

CATISpecObject из CATBody

Сообщение Wireless_Fidelity » 12 май 2011 15:55

Здравствуйте.

Стоит задача получить имя исходного объекта в парте для сгенерированного элемента из чертежа (чтобы можно было условно делать утверждения вида "эта линия была сгенерирована из Body.1")

У CATIDftGenGeom есть метод GetBody, который возвращает объект класса CATBody. Нужно выцепить его "имя", что отображается в дереве спецификаций.
Как мне кажется, это можно сделать, воспользовавшись методом GetName соответствующего объекта класса CATISpecObject. Но вот с его получением возникают проблемы.

Приведённый ниже код нужный объект в spBody не возвращает:
Код: Выделить всё
CATISpecObject *spBody = NULL;
oBody->QueryInterface(IID_CATISpecObject, (void**)&spBody);


Правильный ли путь я выбрал для решения поставленной задачи? Если да, то как победить CATISpecObject?
Последний раз редактировалось Wireless_Fidelity 12 май 2011 17:45, всего редактировалось 1 раз.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: CATISpecObject из CATBody

Сообщение bit » 12 май 2011 17:39

Возможно CATIDftGenGeom::GetFeature
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: CATISpecObject из CATBody

Сообщение Wireless_Fidelity » 12 май 2011 17:49

Не вижу такого метода в Энциклопедии:

o GetBody(CATBody**)
Gets the body of origin.
o GetGeometryOfOrigin(CATLISTP(CATCell)**)
Gets the 3D geometry of origin.
o GetProduct(IID&,IUnknown**)
Gets the product of origin.
o GetShowMode(DftGenShowMode&)
Gets the mode of visualisation.
o GetTransformation(CATMathTransformation**)
Gets the transformation of the generated geometry.
o GetUnderlyingGeometry(CATCurve**)
Gets the underlying 2D geometry.
o IsCut(CATBoolean*)
Used to know if the generated geometry is cut by the section plane.
o SetShowMode(DftGenShowMode)
Sets the mode of visualisation.


Была мысль использовать GetGeometryOfOrigin, но в этом случае мне непонятно, что делать с коллекцией CATCell, которую этот метод возвращает :-(
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: CATISpecObject из CATBody

Сообщение bit » 12 май 2011 18:48

Wireless_Fidelity писал(а):Не вижу такого метода в Энциклопедии:

А он там не описан.

virtual HRESULT GetFeature(const IID & iIID, IUnknown ** oFeature)=0;

Я сам не пробовал, но думаю, что если в качестве первого параметра дать IID_CATISpecObject, то может и вернет нужный SpecObject.
Если не поможет, то можно перебрать в парте все CATIGeometricalElement и сравнить у них GetBodyResult() с тем CATbody что вернул CATIDftGenGeom::GetBody().
Ну и для получения имени надо использовать не CATISpecObject::GetName а CATIAlias::GetALias
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: CATISpecObject из CATBody

Сообщение Wireless_Fidelity » 13 май 2011 14:03

bit, спасибо за советы.

К сожалению, заставить работать GetFeature пока не получилось. Ниже привожу кусок кода с различными вариантами вызова этого метода. Каждый из них возвращает NULL в переданном параметре iuFeature:

Код: Выделить всё
// retrieve feature from generated geometry
IUnknown *iuFeature=NULL;
//piGenGeom->GetFeature(IID_CATISpecObject,&iuFeature);
//piGenGeom->GetFeature(IID_IUnknown,&iuFeature);
//piGenGeom->GetFeature(IID_CATIGeometricalElement,&iuFeature);
//piGenGeom->GetFeature(IID_CATIMfGeom,&iuFeature);
//piGenGeom->GetFeature(IID_CATIMechanicalFeature,&iuFeature);
//piGenGeom->GetFeature(IID_CATBaseUnknown,&iuFeature);

// get retrieved feature on CATISpecObject interface
CATISpecObject *spFeature=NULL;
iuFeature->QueryInterface(IID_CATISpecObject,(void **)&spFeature);


Отмечу, что метод GetProduct из того же интерфейса CATIDftGenGeom прекрасно работает при вызове его следующим образом:

Код: Выделить всё
IUnknown *iuProduct=NULL;
piGenGeom->GetProduct(IID_CATIProduct,&iuProduct);


Что же до альтернативного способа с проходом по CATIGeometricalElement и сравнением соответствующих CATIBody, то я пока работаю над его реализацией. Думаю, что всё должно получиться, но всё-таки, как мне кажется, должен быть "прямой" метод наподобие GetFeature.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: CATISpecObject из CATBody

Сообщение sochnev_ve » 28 мар 2022 13:08

Уважаемы Wireless_Fidelity удалось ли решить эту проблему? Столкнулся с похожей ситуацией, нужно получить от 2D геометрии 3D и никак не выходит... Никак не могу найти подходящий метод. Было бы идеально узнать как это происходит через Сервис->Анализ->Показ геометрии со всех точек обзора. Конечно тема уже стара и форум не особо жив, но всё же)
sochnev_ve
Новичок
Новичок
 
Сообщения: 8
Зарегистрирован: 21 июл 2021 13:14

Re: CATISpecObject из CATBody

Сообщение sochnev_ve » 05 апр 2022 15:01

Нашёл способ решить мою проблему. Помог GetGeometryOfOrigin(CATLISTP(CATCell)**). Метод возвращает набор плоскостей, вершин и граней, которые ссылаются на геометрию в 3D. В принципе то что мне нужно.
sochnev_ve
Новичок
Новичок
 
Сообщения: 8
Зарегистрирован: 21 июл 2021 13:14


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5