Контекстное меню

Автор Тема: Контекстное меню  (Прочитано 9002 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Контекстное меню
« : 14-08-2019, 14:57:20 »
Есть меню, используемое для группы примитивов:
Код - C++ [Выбрать]
  1. acedAddObjectContextMenu(AcDbLine::desc(), m_Context, m_acadAppPtr);
  2. acedAddObjectContextMenu(AcDbPolyline::desc(), m_Context, m_acadAppPtr);
  3. acedAddObjectContextMenu(AcDb2dPolyline::desc(), m_Context, m_acadAppPtr)
Когда набор примитивов одного класса - работает.
Если в текущем наборе разнотипные примитивы (линии и полилинии) меню не работает (не добавляется в контекстное)

Лечится ли это?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #1 : 14-08-2019, 15:14:48 »
Если в текущем наборе разнотипные примитивы (линии и полилинии) меню не работает (не добавляется в контекстное)
Только добавлением родительского класса (AcDbCurve)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #2 : 14-08-2019, 15:22:05 »
Только добавлением родительского класса (AcDbCurve)

В таком случае меню будет задействовано и для AcDbCircle, AcDbLeader & etc...
А нужно только для линий и полилиний

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #3 : 14-08-2019, 15:23:33 »
А нужно только для линий и полилиний
Увы. Просто будешь игнорировать примитивы, которые не следует обрабатывать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #4 : 14-08-2019, 15:31:51 »
Просто будешь игнорировать примитивы

Придётся.
+ menu->EnableMenuItem(CH, MF_GRAYED) для непрошедших фильтрацию

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #5 : 14-08-2019, 15:32:19 »
Есть еще один вариант (я не проверял, но думаю, что он должен работать):
acedAddObjectContextMenu для AcDbCurve вызывать в реакторе AcEditorReactor::pickfirstModified, предварительно проанализировав набор предварительного выбора и если есть то, что следует обрабатывать. В противном случае acedAddObjectContextMenu не вызывается. Нужно еще подумать в какой момент вызывать acedRemoveObjectContextMenu. Наверное там же в  AcEditorReactor::pickfirstModified если ничего подходящего нет. Конечно следует отслеживать парность вызовов acedAddObjectContextMenu/acedRemoveObjectContextMenu
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #6 : 14-08-2019, 15:51:49 »
Александр Ривилис,

ИМХО слишком сложно... + для смешанных наборов бесполезно

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #7 : 14-08-2019, 15:53:56 »
ИМХО слишком сложно... + для смешанных наборов бесполезно
Ну тут ты можешь сам решать. Если в наборе только линии и полилинии добавляешь контекстное меню, если еще что-то убираешь. Но тебе виднее...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #8 : 14-08-2019, 16:01:02 »
Если в наборе только линии и полилинии добавляешь контекстное меню, если еще что-то убираешь

Линии и полилинии обрабатываются по любому. Остальное в игнор. Меню для наборов не содержащих линии и полилинии - disable, остальные - enable + фильтр
--

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #9 : 15-08-2019, 11:05:03 »
вызывать в реакторе AcEditorReactor::pickfirstModified
прикрутил реактор + меню на AcDbEntity + фильтр на линии и полилинии
Извините, вам запрещён просмотр содержимого спойлеров.

Спасибо за идею!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #10 : 15-08-2019, 11:29:49 »
прикрутил реактор + меню на AcDbEntity + фильтр на линии и полилинии
Можно было на AcDbCurve, чтобы меньше лишнего попадало.
Спасибо за идею!
Пожалуйста!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Контекстное меню
« Ответ #11 : 15-08-2019, 11:40:00 »
Можно было на AcDbCurve, чтобы меньше лишнего попадало

При AcDbCurve меню не срабатывало бы при смешанном наборе (состоящем из нужных примитивов и не наследников AcDbCurve). А так обрабатываются все

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Контекстное меню
« Ответ #12 : 15-08-2019, 11:41:23 »
Sergey_K,
Точно! Не учел.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение