Не срабатывают команды при запуске AutoCAD 2016?

Автор Тема: Не срабатывают команды при запуске AutoCAD 2016?  (Прочитано 17911 раз)

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

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Подскажите пожалуйста, до AutoCAD 2016 при загрузке dll через плагин,  то что было написано в коде на IExtensionApplication.Initialize() срабатывало нормально и сразу при загрузке AutoCAD. Начиная с AutoCAD 2016 не срабатывает при загрузке AutoCAD, а выполняется только после вызова команды?

Что теперь нужно сделать чтобы код сработал при загрузке AutoCAD 2016?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Может ты не тот шрифт в текстовом редакторе используешь? Или background не подходящий :) Гадать можно долго.

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Код - C# [Выбрать]
  1. void IExtensionApplication.Initialize()
  2. {
  3.      Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("load app");
  4. }
  5. [CommandMethod("testcommand")]
  6. public void testcoommand()
  7. {
  8.     Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("test command");
  9. }

В PackageContents.xml прописано
Код - XML [Выбрать]
  1. <Command Local="testcommand" Global="testcommand" HelpTopic="#testcommand"/>   
  2. ...
  3. LoadOnAutoCADStartup="True"

Если запустить автокад, то окно не появляется с текстом, а появляется только после ввода команды (два).

Если же грузить через netload - то сообщение появляется сразу.   

Как сделать чтобы сообщение появилось сразу при загрузке AutoCAD 2016 при загрузке через PackageContents.xml?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Начиная с AutoCAD 2016 не срабатывает при загрузке AutoCAD, а выполняется только после вызова команды?
Из основных особенностей при запуске AutoCAD 2016 возможна ситуация, когда нет ни одного открытого документа и Application.DocumentManager.MdiActiveDocument == null и HostApplicationServices.WorkingDatabase == null
Отсюда возможны и другие проблемы. Без понимания того, что делает код ничего сказать нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
эээ, код выше просто выводит сообщение Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("load app")

собственно вопрос в том почему инициализация происходит после вызова команды в командной строке, а не при загрузке AutoCAD и как сделать чтобы IExtensionApplication.Initialize() произошло до вызова команды testcommand в командной строке?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как сделать чтобы сообщение появилось сразу при загрузке AutoCAD 2016 при загрузке через PackageContents.xml?
Для этой цели в PackageContents.xml есть параметр StartupCommand: http://adndevblog.typepad.com/autocad/2012/04/autoloader-the-startupcommand-parameter.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
В командную строку тоже ничего не выводится и не пишется.
Поясню суть проблемы на IExtensionApplication.Initialize() я подписываюсь на события - до 2016 они срабатывали, а в 2016 я нажимаю два раза по dwg, запускается AutoCAD 2016 и отображается чертеж но ничего не происходит - ни окна не появляются, ни сообщения в командной строке и события не срабатывают. Только если ввести любую команду из плагина то срабатывает код из IExtensionApplication.Initialize() и сообщение появляется и окна!
У меня для отладки доступно по 2015, проверить отладчиком в 2016 сейчас не могу :(

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
эээ, код выше просто выводит сообщение Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("load app")

собственно вопрос в том почему инициализация происходит после вызова команды в командной строке, а не при загрузке AutoCAD и как сделать чтобы IExtensionApplication.Initialize() произошло до вызова команды testcommand в командной строке?
А с чего ты взял, что при вызове команды происходит инициализация? У тебя что, при вызове команды окно открывается два раза подряд (ты же в команду тот же код запихнул)? Оберни содержимое Initialize() в try\catch и посмотри, не генерируется исключение (покажи текст ошибки в модальном окне WinForms или WPF).

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

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

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
это диалогове окно привязано к окну документа, а окна такого еще нет. Вот диалог и не показывается.
Если такая привязка существует, то скорее всего проблема именно в этом.

Цитировать
В командную строку тоже ничего не выводится и не пишется.
В последних версиях акада загрузка плагинов порой происходит в контексте временного документа, который затем удаляется (это помимо возможности натолкнуться на null). Сталкивался с этим, когда в консоль акада не выводилась информация, хотя документ в момент исполнения кода был не null. Оказывается текст выводился в консоль временного документа, который затем акадом же и закрывался. А юзер, создавая новый документ при открытии акада, не видел этого консольного вывода. Пришлось добавить аналитику текущего документа и если выяснялось, что это временный, то подписывался на создание нового документа. Когда событие срабатывало - выводил текст в консоль нового документа и отменял подписку.

Но в случае с ShowAlertDialog документ скорее всего null в момент выполнения кода в Initialize. Проверь.

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Два раза нажимаю по dwg - открывается автокад и чертеж.
Ввожу команду в командную строку и появляется ДВА сообщения !
Автокад и документ на экране уже точно есть - см. видео.
Первым появляется сообщение "load app" - оно же на Initialize() - как так?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ввожу команду в командную строку и появляется ДВА сообщения !
Покажи полностью свой файл PackageContents.xml
Так же покажи полность свой CS-файл с твоим "хелло-ворлдом" (интересуют атрибуты сборки). Другие CS-файлы присутствуют в проекте? Если да, то покажи и их содержимое. Надеюсь, что ты не додумался создать более одного атрибута сборки, указывающего на разные классы, реализующие интерфейс IExtensionApplication, и что реализация этого интерфейса у тебя так же одна...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
долго носки жевать будем? Спать уже пора, а ты всё резину тянешь.

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Приложил, у меня как на видео