SubEntity

Автор Тема: SubEntity  (Прочитано 22389 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн GennadiyАвтор темы

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #30 : 09-02-2017, 16:07:59 »
Думаю, что там используется совсем другой механизм.
Интересно было бы знать какой?
Ведь там нет никакого реального SubEntity.
Так и в рассматриваемом примере, тоже вроде бы реальных SubEntity нет, они вычисляются и рисуются в subWorldDraw?
В любом случае, ведь получают ручки через Сtrl + клик, а значит срабатывает subGetGripPointsAtSubentPath, затем что-то делает их неактивными (синими)
и дальше можно перемещать по одной.


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #31 : 14-02-2017, 23:51:12 »
Наконец-то смог собраться с духом и отправить запрос в ADN DevHelp. По результатам отпишусь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #32 : 23-02-2017, 14:49:15 »
Первый блин со стороны ADN DevHelp оказался комом. :) Они предложили вариант с установкой setGripOpStatFunc(GripOpStatus), а в GripOpStatus запоминать какая ручка начинает "работать" при kGripStart:
Код - C++ [Выбрать]
  1. //change 1
  2. void GripOpStatus(AcDbGripData* pThis, const AcDbObjectId& entId, AcDbGripOperations::GripStatus stat)
  3. {
  4.   if (stat == AcDbGripOperations::GripStatus::kGripStart)
  5.     idxGrips = *(int *)pThis->appData();
  6. }
  7.  
Увы, но это не помогло, так как при выборе любой из ручек этот метод вызывается дважды со значениями обеих ручек. Причем порядок вызова не зависит от того, какая ручка была выбрана.
Это хорошо видно на этом видео:



Так что будем ждать другие варианты решения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #33 : 07-03-2017, 14:41:39 »
А вот эта подсказка похоже работает. Это конечно не идеальный вариант, но...
Код - C++ [Выбрать]
  1. void GripOpStatus(AcDbGripData* pThis, const AcDbObjectId& entId, AcDbGripOperations::GripStatus stat)
  2. {
  3.   if (stat == AcDbGripOperations::GripStatus::kGripStart)
  4.   {
  5.     //get the user click point through
  6.     struct resbuf ptRb;
  7.     acedGetVar(ACRX_T("LASTPOINT"), &ptRb);
  8.     AcGePoint3d pt = pThis->gripPoint();
  9.     AcGePoint3d pt1(ptRb.resval.rpoint[0], ptRb.resval.rpoint[1], ptRb.resval.rpoint[2]);
  10.     acdbUcs2Wcs(ptRb.resval.rpoint, asDblArray(pt1), false);
  11.  
  12.     if (pt.isEqualTo(pt1) == true)
  13.     {
  14.       idxGrips = *(int *)pThis->appData();
  15.     }
  16.   }
  17. }
Смысл в получении последней указанной точки (системная переменная LASTPOINT - она хранится в ПСК (UCS)) и сравнении её с точкой ручки. В моих тестах всё работает адекватно. Единственное неудобство - обе ручки остаются выделенными.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GennadiyАвтор темы

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #34 : 07-03-2017, 15:17:36 »
У меня в проекте тоже всё работает адекватно.
За не имением лучшего этот вариант можно считать решением задачи.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #35 : 07-03-2017, 15:21:42 »
За не имением лучшего этот вариант можно считать решением задачи.
Не-не-не! Пока еще своё слово не сказала Engineering Team - мы ждём от неё информацию. Вот когда они скажут, что это единственный способ, а появление выбранных ручек при Ctrl+click - это баг, для которого нет решения - вот тогда можно будет остановиться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение