1. Интересует приемлемое решение обозначенной проблемы.Вопрос передам в ADN DevHelp, хотя я думаю что ты сам догадался, что видимо начиная с AutoCAD 2015 в консоль можно будет выводить не всегда. Впрочем в ObjectARX такое уже было. Кстати, кое что может зависеть и от состояния системной переменной STARTUP.
2. Почему при открытии модального окна наблюдается иное поведение (первый вариант кода)?А что тебе в этом удивляет? Модальное окно никак не привязано к документу и соответственно к консоли AutoCAD
А что тебе в этом удивляет? Модальное окно никак не привязано к документу и соответственно к консоли AutoCADМеня не то, чтобы удивляет, но несколько напрягает тот факт, что содержимое расширения может непреднамеренно повлиять на состояние AutoCAD при его инициализации. В одном случае на конечном этапе мы получаем уже открытый документ, а во втором - нет. Считаю такое поведение некорректным (имхо).
В одном случае на конечном этапе мы получаем уже открытый документ, а во втором - нет.Ах вот ты о чем. Я видимо не понял сразу что тебя насторожило. Нужно подумать.
Как вариант, можно подключиться на событие DocumentCreated и в обработчике выводить информацию в консоль создаваемого документа. Однако в том случае, если сборка загружена не при помощи автозагрузчика AutoCAD, но вручную, при помощи NETLOAD, юзер снова не увидит это сообщение (в текущем документе), но вместо этого он увидит его лишь в очередном созданном документе, что опять не есть хорошо.А если подписаться на DocumentLockModeWillChange? Ну само собой сразу отписаться после первого вывода сообщения.
А если подписаться на DocumentLockModeWillChange? Ну само собой сразу отписаться после первого вывода сообщения.А что толку? Ведь будет это происходить всё в том же "призраке" Drawing1.dwg, который временно создаётся AutoCAD'ом при старте и затем удаляется (обозначен выше в теме)... Сообщение по прежнему будет попадать именно в его консоль и юзер ничего не увидит.
А что толку? Ведь будет это происходить всё в том же "призраке" Drawing1.dwg, который временно создаётся AutoCAD'ом при старте и затем удаляется (обозначен выше в теме)... Сообщение по прежнему будет попадать именно в его консоль и юзер ничего не увидит.А такой вариант не устроит?:
А такой вариант не устроит?:Не устроит. Расширение загружается один раз. Соответственно и сообщение о загрузке должно выводиться в консоль один раз. Выводя сообщение о загрузке в консоль каждого документа, ты тем самым создаёшь у пользователя иллюзию многократной загрузки расширения - это неприемлемо.
будет один раз в консоли для каждого документа.Но правильней - в консоль только текущего.
Рисовать на 5 секунд свое окно без обрамления и прочего и плавно его гасить...Можно, конечно, рюшечки придумывать, но всё же хочу так, как обычно делаю: именно в консоль текущего документа (и только его). В общем, я так понимаю, это очередное проявление одного из множества багов, которые в каждой новой версии AutoCAD множатся как черви. Титаник медленно идёт ко дну.
Но правильней - в консоль только текущего.Почему? Предположим, там выводится:
Почему?Прочитай внимательней Ответ #2.
На мой вопрос там точно ответа нет.Там обозначена основная проблема, поднимаемая в топике.
ОК, сформулирую его полностью: Почему правильней выводить информацию только в консоль текущего документа?Потому что, как правило, выполняемая операция выводит текстовую информацию в консоль именно текущего документа. Ты ведь когда запускаешь команду audit, не ожидаешь, что она будет тебе выводить отчёт в консоль каждого открытого документа? Аналогично, загрузив своё приложение при помощи NETLOAD - ты запускаешь эту команду из консоли конкретного документа.
Опять же, не каждый пользователь знает, загружено у него приложение в документ или нет. Лиспы, например, грузятся только в текущий документ. А сообщение дает понять, что именно это в новый документ дополнительно грузить не надо.Юзеру никто не мешает запустить команду, определённую в составе подгруженного расширения, дабы узнать, загружено оно или нет.
Если же надо вывести сообщение одно на все приложение - поддержу Дима_, логичнее вывести "приветственное окошко".Я предпочитаю писать в консоль. К различного рода всплывающим и|или плавно исчезающим "фенечкам" отношусь негативно (всё должно происходить быстро и ненавязчиво). Если юзер загрузив расширение захочет убедиться в том, что загрузка прошла успешно - он просто тут же посмотрит в консоль. Выводить дублирующуюся информацию во все без исключения документы я не вижу никакого смысла и считаю этот подход плохим. То, что .NET расширения не нужно грузить в каждый документ - юзеры узнают и запоминают достаточно быстро, равно как и то, что LISP приходится грузить в каждый чертёж.
Document.Window.Visible?Я бы эту идею развил до проверки видима ли командная строка на экране.
Или есть более "айпишные" варианты?Угу. Через P/Invoke acedGetAcadTextCmdLine и acedGetAcadDockCmdLine.
Только они возвращают указатель на CWnd, эквивалента которого в .NET нет.Но как минимум на null его проверить можно.
Но как минимум на null его проверить можно.Можно, но это не поможет. Думаю, что это значение никогда не null.