Тема: Как правильно использовать реакторы?

Уважаемые гуру! Расскажите, где лучше подключать (и выгружать) реакторы:
1. AcEditorReactor. Можно ли его подключать в InitApplication. Почему-то акад 2005,2006 валятся при старте, если acedEditor->addReactor находится в InitApplication.
2. AcDbDatabaseReactor - как его лучше подключать к любому документу (открытому или только что созданному)? Обязательно ли его выгружать при закрытии чертежа и где это лучше сделать?
3. AcDbEntityReactor - должен добавлятся к определенным примитивам. В только что открытом чертеже делаю это в endDwgOpen, для новых примитивов в objectAppended из AcDbDatabaseReactor. А как делаете вы? И надо ли делать removeReactor при закрытии файла.
Может быть ссылочку кто-н. подбросит, где описано, как правильно использовать реакторы.
Спасибо...

Re: Как правильно использовать реакторы?

1. AcEditorReactor. Можно ли его подключать в InitApplication. Почему-то акад 2005,2006 валятся при старте, если acedEditor->addReactor находится в InitApplication.

Странно. У меня это работает нормально. Без кода понять почему так у тебя происходит - сложно. Возможно в этот момент AutoCAD не полностью инициализирован если приложение грузится по demand load.

2. AcDbDatabaseReactor - как его лучше подключать к любому документу (открытому или только что созданному)?
Обязательно ли его выгружать при закрытии чертежа и где это лучше сделать?

Например, в методе documentCreated() производного от AcApDocManagerReactor класса реактора. Выгружать очень желательно (если не хочешь развалить AutoCAD). IMHO в методе documentToBeDestroyed() того же класса.
Посмотри в samples\ARXDBG\Reactors. IMHO - самая лучшая ссылочка. :)

Re: Как правильно использовать реакторы?

Странно. У меня это работает нормально

Закомментировал два макроса, сгенерированных визардом и все заработало, даже не знаю для чего они были нужны (а может нужны?)

ACRX_DECLARE_MEMBERS(MyEditorReactor) ;
ACRX_CONS_DEFINE_MEMBERS(MyEditorReactor, AcEditorReactor, 1)

Попытаюсь разобраться....
2. documentCreated() имхо не срабатывает,если например при запуске акада создается новый файл (сразу). Потом уже, когда File->New он срабатывает. Возможно documentCreated в этом случае рассылается до загрузки arx из StartUp Suite? (по demand load не пробовал, возможно загрузка происходит и раньше). Хотелось бы, чтобы оба варианта работали.

Re: Как правильно использовать реакторы?

bkrug пишет:

Закомментировал два макроса, сгенерированных визардом и все заработало, даже не знаю для чего они были нужны (а может нужны?)

Я их сразу выкидываю.

documentCreated() имхо не срабатывает,если например при запуске акада создается новый файл (сразу).

Так кто тебе мешает подключить реактор в момент загрузки arx-файла (в InitApp)к существующим (уже открытым) документам, а потом уже в документном реакторе к тем которые прошли через documentCreated()?

Re: Как правильно использовать реакторы?

Вот блин, столько головной боли....
Я уже их как-то выкидывал из AcDbEntityReactor, да уже забыл... Тоже были глюки...

Я их сразу выкидываю.

а здесь не выкинули;)
https://www.caduser.ru/forum/topic22021.html

Так кто тебе мешает подключить реактор в момент загрузки arx-файла (в InitApp)к существующим (уже открытым) документам, а потом уже в документном реакторе к тем которые прошли через documentCreated()?

Никто, так и сделаю видимо - спасибо...
Я просто думал, что есть какой-н. метод типа

virtual void ВсеЗагруженоДокументСозданПодключитеРеакторы(void)

Гы...