Как получить событие в ARX выделение ( фокус ) объекта на чертеже?

Автор Тема: Как получить событие в ARX выделение ( фокус ) объекта на чертеже?  (Прочитано 31477 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Добрый день всем.
Подскажите, пожалста, как мне получить событие в ARX?
Суть дела:
нужно создать плагин, который создает окно.
в окне нужно выводить информацию об объекте.
окно типа стандартного проперти только объекты не примитивы а блоки созданные другими плагинами.

Не могу понять как в здесь вообще система построена с событиями.
Как  с ними работать?
Если есть у кого пример такого события напишите пожалста.
Заранее спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Олег
Приветствую на форуме. Речь идёт именно об ObjectARX (т.е. native C++). Я на всякий случай уточняю, так как понятие события присуще .NET
В ObjectARX это называется реакторами.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Верно, вопрос по ObjectARX (т.е. native C++).
А существует такой метод у реактора как выделение объекта на чертеже?
И как им воспользоваться?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А существует такой метод у реактора как выделение объекта на чертеже?
Да. Кстати, в ObjectARX разных типов реакторов воз и малая тележка.
Нужно еще одно уточнение. Имеется в виду выбор объекта (графические объекты принято называть примитивами) вне запущенной команды (т.е. предварительный выбор или pickfirst) или в любой момент, т.е. и когда работают какие-то команды?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
По принципу как работает стандартное окно проперти.
Висит оно себе, никому не мешает.
Кликнули мышкой на примитиве - выводит назвение и свойства.
Затем нужно будет добавить возможность менять свойства примитивов.
Например нарисована коробка в 2Д или 3Д.
Кликаем мышкой или выделяем, т.е. примитив получает фокус
и в моем окне выводится название коробки, например "Коробка для ананасов",
и ниже ее размеры.
Дале размеры можно будет редактировать и коробка соответственно меняется на чертеже.

Соответственно если коробок выделить более одной то тогда отображаются общие свойства и их редактирование приводит к изменению всех выделенных объектов.


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ладно. Начни с изучения примера ObjectARX SDK \samples\reactors\inputpoint - тебе там понадобится не всё. Но ты сможешь отследить события, которые возникают при выборе объектов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Спасибо за подсказку.
Я его как раз открыл, воспользовался поисками в мануале и в примерах по содержимому файла.
Искал AcEdInputContextReactor.

Не буду высказывать свое мнение по структуре и принципу ObjectARX   )))
Мне еще рано

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, в примере \samples\database\ARXDBG есть коллекция разных реакторов, которые тоже могут тебе помочь. И не только в этом случае.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не буду высказывать свое мнение по структуре и принципу ObjectARX   )))
Мне еще рано
Перед тем как высказываться на всякий случай почитай Правила форума (п. 3.9)!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Учту.   :)
Спасибо за помощь 

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Добрый день всем снова.
Экспериментировал с AsdkInputContextReactor.

Вызываются, печатают сообщения  в командной строке, только beginQuiescentState(), endQuiescentState().
Когда выделяю чтото на чертеже, даже если пустое место, вызываются  beginDragSequence(), endDragSequence()
Другие методы не вызываются. ??? :o :-\

Я думал что при выборе примитива будут вызываться   beginEntsel() и endEntsel().
Так нет же, никакой реакции.

Может я чтото упустил? :-\
Может реактор работать только наполовину или меньше? )))  ???

Ктонить сталкивался с таким?
Подскажите пожалста.
 

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В этом случае работает AcEditorReactor::pickfirstModified
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я думал что при выборе примитива будут вызываться   beginEntsel() и endEntsel().
Эти методы вызываются при запросе выбора одиночного примитива в командах AutoCAD и при вызове (entsel) из Lisp или acedEntSel из ObjectARX
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Попытался использовать AcEditorReactor.
Содал класс
 
Код - C++ [Выбрать]
  1.  class ArxDbgEditorReactor : public AcEditorReactor2 {}
В
   
Код - C++ [Выбрать]
  1. virtual AcRx::AppRetCode On_kInitAppMsg(void* pAppData)
вставил
          
Код - C++ [Выбрать]
  1. ArxDbgEditorReactor::rxInit();
  2. acrxBuildClassHierarchy();
Но когда загружаю ARX программа падает.

Как правильно подключить AcEditorReactor?

С  AcEdInputContextReactor  было проще.

Отмечено как Решение Олег 26-10-2015, 15:40:32

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я подумал, что лучше приложить готовый проект. Реактор включается при загрузке приложения и выключается при выгрузке. Хотя можно тоже самое (т.е. включение и выключение реактора) реализовать командами.

Ну и на всякий случай видео:


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