Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Dziubyna от 15-03-2017, 11:29:26

Название: Выделение SubEntity
Отправлено: Dziubyna от 15-03-2017, 11:29:26
Вопрос о программном выделении вложенного Entity.

Пример кода для выделении любого графического объекта:
Код - C++ [Выбрать]
  1. bool makeEntitySelected(const AcDbObjectId &id)
  2. {
  3.         ads_name ss, ename;
  4.  
  5.         // создайом набор выделения
  6.         if(acedSSAdd( NULL, NULL, ss ) != RTNORM)
  7.                 return false;
  8.  
  9.         // получаем имя примитива с ид
  10.         if(acdbGetAdsName( ename, id ) != Acad::eOk)
  11.                 return false;
  12.  
  13.         // добавляем выделеный примитив в набор
  14.         if(acedSSAdd( ename, ss, ss ) != RTNORM)
  15.                 return false;
  16.  
  17.         // выделяем примитив вместе с грипами
  18.         acedSSSetFirst( ss, NULL );
  19.  
  20.         return (acedSSFree( ss ) == RTNORM);
  21. }

Тут все просто.
Нашел примеры как запросить у пользователя SubEntity, как проанализировать какая SubEntity выделена. Но не могу найти решения как программно выделить (чтобы появились грипы, не просто подсветить) SubEntity если у меня есть AcDbObjectId нужного Entity, и для нужного мне SubEntity есть GSMarker  и AcDbFullSubentPath. Может кто-то знает решение?
Название: Re: Выделение SubEntity
Отправлено: Александр Ривилис от 15-03-2017, 14:15:26
Но не могу найти решения как программно выделить (чтобы появились грипы, не просто подсветить) SubEntity
Насколько мне известно такого API не существует, но я уточню в ADN DevHelp.
Название: Re: Выделение SubEntity
Отправлено: Dziubyna от 15-03-2017, 14:59:49
но я уточню в ADN DevHelp.

Спасибо!
Название: Re: Выделение SubEntity
Отправлено: Dziubyna от 15-03-2017, 16:00:14
Спасибо! Уже сам разобрался. Выглядит вот так:

Код - C++ [Выбрать]
  1. bool makeSubEntitySelected(const AcDbFullSubentPath &path)
  2. {
  3.         ads_name ss;
  4.         // создайом набор выделения
  5.         if(acedSSAdd( NULL, NULL, ss ) != RTNORM)
  6.                 return false;
  7.  
  8.         // добавляем SubEntity
  9.         if (acedSSSubentAdd(path, ss, ss) != RTNORM)
  10.                 return false;
  11.  
  12.         // выделяем примитив вместе с грипами
  13.         acedSSSetFirst( ss, NULL );
  14.  
  15.         return (acedSSFree( ss ) == RTNORM);
  16. }

Что-то сходу не нашел этой функции
Название: Re: Выделение SubEntity
Отправлено: Александр Ривилис от 15-03-2017, 16:22:05
Отлично! Не думал, что так сработает.