SubEntity

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

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #15 : 07-02-2017, 15:46:54 »
Не удается открыть проект SliderCrankUi (не обнаружен PathsToSdk.props)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #16 : 07-02-2017, 16:14:51 »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #17 : 07-02-2017, 18:11:42 »
Не удается открыть проект SliderCrankUi (не обнаружен PathsToSdk.props)
Сейчас нормально?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #18 : 07-02-2017, 18:15:21 »
Да, сейчас нормально компилируется. Завтра внимательней посмотрю в чем отличия от моего и отпишусь.

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #19 : 08-02-2017, 09:02:19 »
Изучил работу приведенного выше примера. В нем такая же проблема, как и у меня.
В описании проекта readme.txt сказано:
Цитировать
2) Type the command "AddSliderCrank":
        ...
   b) On selecting the sub-entity, the sub-entity grips will appear on the screen. For example, if the connecting rod is selected, two grip points along the rod will be enabled. Using these grip points, the position of the         connecting rod can be modified at both ends.
(При выборе подобъекта, ручки подобъекта появятся на экране. Например, если соединительный стержень будет выбран, две ручки вдоль стержня будут включены. Используя эти ручки, позиция соединительного стержня может быть изменена в обоих концах.)

На самом деле какая бы ручка соединительного стержня не была выбрана, перемещается только один конец стержня. Это происходит потому, что (как и у меня)
при перемещении ручки в методе subMoveGripPointsAtSubentPaths в коллекции AcDbVoidPtrArray &gripAppData находятся сразу все ручки подобъекта (в данном случае у LINK две ручки)
и в коде
Код - C++ [Выбрать]
  1.  int *idx = (int*)gripAppData.at(0);
выбирается всегда первая (т.к. по идее в gripAppData и должна быть всего одна выбранная ручка)

Похоже что это баг AutoCAD 2017. (Может быть в примере под AutoCAD 2009 работало все нормально?)
В других версиях пока нет возможности проверить.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #20 : 08-02-2017, 14:07:16 »
Я проверил в AutoCAD 2008 - там поведение другое:



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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #21 : 08-02-2017, 16:20:06 »
Придумал для 2017 "костыль":
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #22 : 08-02-2017, 18:02:35 »
Скомпилировал упрощенный вариант примера для AutoCAD 2014, там тоже работает как в AutoCAD 2017.
Видимо поэтому этот пример и перестали добавлять в ObjectARX SDK после версии 2009.

Придумал для 2017 "костыль":

А в чем секрет, если не секрет?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #23 : 08-02-2017, 18:10:17 »
А в чем секрет, если не секрет?
Особенность при работе этого кода в том, что при выборе subentity (т.е. через CTRL+клик) его ручки становятся все выделенными (красными). Как от этого избавиться я не знаю и по логике такого быть не должно (и в AutoCAD 2008 такого нет). Но если кликнуть по одной из ручек c Shift'ом (когда она становится синенькой), то в gripAppData только одна ручка. Попробуй так. Я еще и код слегка модифицировал:

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #24 : 08-02-2017, 18:25:37 »
Да, пожалуй это единственно приемлемый выход для меня. Спасибо за подсказку, а то я уже загрустил.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #25 : 08-02-2017, 18:51:57 »
Еще немного исправил код:
Извините, вам запрещён просмотр содержимого спойлеров.

Теперь работает не только в визуальном стиле 2D-каркас:

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #26 : 09-02-2017, 14:30:04 »
Заметил ещё одну важную деталь.
Для конкретного случая в примере все верно, но если предположить, что
ручек в подобъекте будет более двух (скажем N), то в методе subMoveGripPointsAtSubentPaths  в коллекции gripAppData будет не одна, а N - 1 ручка
и, соответственно, код будет прерываться на проверке
Код - C++ [Выбрать]
  1.         int n = gripAppData.length();
  2.         if (n > 1) return Acad::eOk;

Лучше эту проверку убрать, а в методе subGetGripPointsAtSubentPath вернуть как было в первом варианте
Код - C++ [Выбрать]
  1. Acad::ErrorStatus AsdkSliderCrank::subGetGripPointsAtSubentPath(const AcDbFullSubentPath & path, AcDbGripDataPtrArray & grips, const double  curViewUnitSize, const int  gripSize, const AcGeVector3d & curViewDir, const int  bitflags) const
  2. {
  3.     assertReadEnabled();
  4.     idxGrips = -1;
  5.     ...
  6. }

Вообще, интересно было бы узнать мнение разработчиков, почему при выборе subentity его ручки становятся все выделенными (красными).
Может быть у них для этого предусмотрено как сделать их не выделенными, или это всё-таки БАГ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #27 : 09-02-2017, 14:57:19 »
Заметил ещё одну важную деталь.
Для конкретного случая в примере все верно, но если предположить, что
ручек в подобъекте будет более двух (скажем N), то в методе subMoveGripPointsAtSubentPaths  в коллекции gripAppData будет не одна, а N - 1 ручка
и, соответственно, код будет прерываться на проверке
В любом случае должна быть выбрана только одна ручка и в этом случае в gripAppData будет одна ручка. Другое дело, что я не пробовал на > 2 ручках как их следует выбирать.

Лучше эту проверку убрать, а в методе subGetGripPointsAtSubentPath вернуть как было в первом варианте
Этот вариант не работает на визуальных стилях кроме 2D-каркас, так как в нём этот метод вызывается однократно, а в остальных дважды.

Вообще, интересно было бы узнать мнение разработчиков, почему при выборе subentity его ручки становятся все выделенными (красными).
Может быть у них для этого предусмотрено как сделать их не выделенными, или это всё-таки БАГ?
Отправлю. Думаю, что будут разбираться они с этим долго, так как такое использование крайне редкое.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: SubEntity
« Ответ #28 : 09-02-2017, 15:23:07 »
Однако, если взять, к примеру, полилинию, то при выделении её сегмента как SubEntity (кликом мыши + Сtrl) ручки сегмента синие (не активные) и все работает как надо.
Значит решение где-то есть! Какой механизм выбора ручек используется там?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: SubEntity
« Ответ #29 : 09-02-2017, 15:53:21 »
Значит решение где-то есть! Какой механизм выбора ручек используется там?
Думаю, что там используется совсем другой механизм. Ведь там нет никакого реального SubEntity.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение