Выделение(подсветка) "тела" в процессе

Автор andykl, 26.12.22, 17:45:03

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

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

andykl

26.12.22, 17:45:03 Последнее редактирование: 26.12.22, 18:03:10 от andykl
В качестве примера того что требуется получить показываю на скринах:


Необходимо выделить тело, использую для этого IChooseManager. Объект или объекты какого типа надо скормить методу Choose? Как отфильтровать то что находится под курсором мыши для "тела"?

Vi2

Вот есть часть кода приложения
virtual BOOL WINAPI filterProc(IEntity* entity)
{
if (entity == NULL)
return TRUE; // пусть разбирается selectProc
...

virtual BOOL WINAPI selectProc(IEntity* entity, IRequestInfo* info)
{
if (entity == NULL)
{
IUnknownPtr obj(::ksGetCallBackObject(), NOADDREF);
IFeaturePtr feature(obj); // также или IPart, или IBody

if (feature == NULL)
return FALSE;

IEntityCollectionPtr ec(feature->EntityCollection(o3d_face), NOADDREF);
for (long i = 0, imax = ec ? ec->GetCount() : 0; i < imax; i++)
{
IEntityPtr face(ec->GetByIndex(i), NOADDREF);
IChooseManager.Choose(face);
}
return TRUE;
}
else
...
Возможно, можно скормить IChooseManager и само feature как IFeature, как и потребовать IPart или IBody, но я не пробовал - нам всё одно нужны грани.

filterProc отвечает за перебор объектов, нужных процессу, selectProc отвечает за выбор и подсветку.

PS
У IEntity есть метод BodyCollection(), который возвращает коллекцию тел, куда это энтити входит. Т.е. в filterProc приходит IEntity, у которого есть не нулевая коллекция тел, которую можно скормить selectProc, которая в свою очередь выделит все тела. Тоже вариант.
+ Благодарностей: 1