Выделение всех объектов чертежа после открытия чертежа

Автор Тема: Выделение всех объектов чертежа после открытия чертежа  (Прочитано 6872 раз)

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Добрый день, уважаемые форумчане!
Написал небольшой плагин, который должен выделить все объекты чертежа, а затем отправит в консоль ещё одну операцию, которая вызовет некий плагин. Плагин arx загружается автоматически, с ним проблем никаких нет.
Добавил запись в реестр, чтобы dll автоматически загружалась при запуске Акада, всё отрабатывает как нужно, но команда выделения объектов и вызова нужного мне плагина происходит до того, пока чертеж успел загрузиться.. То есть, сначала появляется окошечко плагина, а затем уже загружается чертёж.

Следовательно, мне нужно сначала подписаться на событие EndDwgOpen, и затем уже выполнять свои команды. Вот код:
Код - C# [Выбрать]
  1. public class Program : IExtensionApplication
  2.     {        
  3.         public void Initialize()
  4.         {
  5.             Application.DocumentManager.DocumentCreateStarted += DocumentManager_DocumentCreateStarted;
  6.         }
  7.  
  8.         public void DocumentManager_DocumentCreateStarted(object sender, DocumentCollectionEventArgs e)
  9.         {            
  10.             e.Document.EndDwgOpen += Document_EndDwgOpen;
  11.         }
  12.  
  13.         private void Document_EndDwgOpen(object sender, DrawingOpenEventArgs e)
  14.         {
  15.             Application.ShowAlertDialog("DocumentIsOpen");
  16.  
  17.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  18.             acDoc.SendStringToExecute("AI_SELALL ", true, false, false);
  19.             acDoc.SendStringToExecute("запуск_некоторого_плагина", true, false, false);
  20.         }
  21.  
  22.         public void Terminate()
  23.         {
  24.  
  25.         }
  26.     }


Но в таком случае не происходит ни выделения всех объектов, ни запуска моего плагина.. Но событие отлавливается, поскольку ShowAlertDialog всплывает! Почему такое может быть? У кого-нибудь есть предположения?

P.S. Извините, не нашёл тэг с подсветкой синтаксиса для кода.
« Последнее редактирование: 30-01-2017, 14:07:50 от Александр Ривилис »

Отмечено как Решение strayker1206 30-01-2017, 15:48:27

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

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Александр Ривилис, спасибо, это помогло! Объекты выделяются, а затем запускается мой плагин. Однако, при закрытии автокада, выбивает ошибку.. FATAL ERROR: Unhandled Access Violation Reading 0x0000 Exception at ... (код эксепшена для разных файлов - разный).
Причём второй плагин тут не причём, я оставил только выделение объектов, но фатал не исчезает.. Вот переписанный код:
Код - C# [Выбрать]
  1.     public class Program: IExtensionApplication
  2.     {        
  3.         public void Initialize()
  4.         {
  5.             Application.DocumentManager.DocumentActivated += DocumentManager_DocumentActivated;
  6.         }
  7.  
  8.         public void DocumentManager_DocumentActivated(object sender, DocumentCollectionEventArgs e)
  9.         {
  10.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  11.             acDoc.SendStringToExecute("AI_SELALL ", true, false, false);
  12.         }
  13.  
  14.         public void Terminate()
  15.         {
  16.  
  17.         }
  18.     }

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
P.S. Установлен AutoCad 2017 x64

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Проблема решилась заменой события DocumentActivated на DocumentActivationChanged. Фатал больше не появляется. Необходимое поведение получено. Всем спасибо =)

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

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Александр Ривилис, необходимо выделить все объекты, для корректной работы стороннего плагина, который я буду вызывать после выделения. Проблема в том, что сначала нужно выделить все объекты, а потом уже запустить плагин. Дальнейшая работа в автокаде не предполагается, так что не критично, что событие DocumentActivationChanged вызывается при переключении режима активации документа. Зато фатала нет, который, неизвестно почему, возникает при подписке на событие DocumentActivated и последующем закрытии автокада.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
который, неизвестно почему, возникает при подписке на событие DocumentActivated и последующем закрытии автокада.
1. Проверяйте acDoc на null перед использованием.
2. Отписывайтесь от DocumentManager_DocumentActivated сразу после того, как отправили команду на запуск ARX-плагина.