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

ADN Club => ObjectARX => Тема начата: Sergey_K от 14-08-2019, 14:57:20

Название: Контекстное меню
Отправлено: Sergey_K от 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)
Когда набор примитивов одного класса - работает.
Если в текущем наборе разнотипные примитивы (линии и полилинии) меню не работает (не добавляется в контекстное)

Лечится ли это?
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 14-08-2019, 15:14:48
Если в текущем наборе разнотипные примитивы (линии и полилинии) меню не работает (не добавляется в контекстное)
Только добавлением родительского класса (AcDbCurve)
Название: Re: Контекстное меню
Отправлено: Sergey_K от 14-08-2019, 15:22:05
Только добавлением родительского класса (AcDbCurve)

В таком случае меню будет задействовано и для AcDbCircle, AcDbLeader & etc...
А нужно только для линий и полилиний
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 14-08-2019, 15:23:33
А нужно только для линий и полилиний
Увы. Просто будешь игнорировать примитивы, которые не следует обрабатывать.
Название: Re: Контекстное меню
Отправлено: Sergey_K от 14-08-2019, 15:31:51
Просто будешь игнорировать примитивы

Придётся.
+ menu->EnableMenuItem(CH, MF_GRAYED) для непрошедших фильтрацию
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 14-08-2019, 15:32:19
Есть еще один вариант (я не проверял, но думаю, что он должен работать):
acedAddObjectContextMenu для AcDbCurve вызывать в реакторе AcEditorReactor::pickfirstModified, предварительно проанализировав набор предварительного выбора и если есть то, что следует обрабатывать. В противном случае acedAddObjectContextMenu не вызывается. Нужно еще подумать в какой момент вызывать acedRemoveObjectContextMenu. Наверное там же в  AcEditorReactor::pickfirstModified если ничего подходящего нет. Конечно следует отслеживать парность вызовов acedAddObjectContextMenu/acedRemoveObjectContextMenu
Название: Re: Контекстное меню
Отправлено: Sergey_K от 14-08-2019, 15:51:49
Александр Ривилис,

ИМХО слишком сложно... + для смешанных наборов бесполезно
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 14-08-2019, 15:53:56
ИМХО слишком сложно... + для смешанных наборов бесполезно
Ну тут ты можешь сам решать. Если в наборе только линии и полилинии добавляешь контекстное меню, если еще что-то убираешь. Но тебе виднее...
Название: Re: Контекстное меню
Отправлено: Sergey_K от 14-08-2019, 16:01:02
Если в наборе только линии и полилинии добавляешь контекстное меню, если еще что-то убираешь

Линии и полилинии обрабатываются по любому. Остальное в игнор. Меню для наборов не содержащих линии и полилинии - disable, остальные - enable + фильтр
--
Название: Re: Контекстное меню
Отправлено: Sergey_K от 15-08-2019, 11:05:03
вызывать в реакторе AcEditorReactor::pickfirstModified
прикрутил реактор + меню на AcDbEntity + фильтр на линии и полилинии
Извините, вам запрещён просмотр содержимого спойлеров.

Спасибо за идею!
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 15-08-2019, 11:29:49
прикрутил реактор + меню на AcDbEntity + фильтр на линии и полилинии
Можно было на AcDbCurve, чтобы меньше лишнего попадало.
Спасибо за идею!
Пожалуйста!
Название: Re: Контекстное меню
Отправлено: Sergey_K от 15-08-2019, 11:40:00
Можно было на AcDbCurve, чтобы меньше лишнего попадало

При AcDbCurve меню не срабатывало бы при смешанном наборе (состоящем из нужных примитивов и не наследников AcDbCurve). А так обрабатываются все
Название: Re: Контекстное меню
Отправлено: Александр Ривилис от 15-08-2019, 11:41:23
Sergey_K,
Точно! Не учел.
Название: Re: Контекстное меню
Отправлено: DimVer от 26-12-2024, 02:26:27
Sergey_K, Добрый вечер, ваше решение будет работать если нужно показать контекстное меню для выборки части чертежа, в которой по сути может быть все что угодно, блоки и примитивы и тд. Если нет, не подскажете как лучше это реализовать?
Название: Re: Контекстное меню
Отправлено: DimVer от 26-12-2024, 02:33:08
GPT подсказывает использовать AcDbEntity::desc(). Это корректно?
Название: Re: Контекстное меню
Отправлено: Sergey_K от 26-12-2024, 07:43:25
DimVer, будет работать для всех примитивов, наследуемых от AcDbEntity