|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Пользовательская панель: динамическая или нет?
Регистрация: 12.08.2013
Сообщений: 22
|
||
Просмотров: 10359
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Вы уверенны что причина в этом...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Дело, скорее всего, в том, что код из acaddoc.lsp загружается одновременно с какими-то внутренними процессами AutoCAD, потому как если добавить (alert "") первой строкой в acaddoc.lsp, то после того, как всплывёт окошко, все последующие сроки кода загружаются успешно, и панель появляется. Раньше (в более старых AutoCAD) такой проблемы вообще не было.
|
|||
![]() |
|
||||
а если грузите через автозагрузку "чемоданчиком", вместо того, чтобы писать непосредственно в acaddoc.lsp, проблема так же наблюдается?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 30.10.2010
Сообщений: 123
|
Чемоданчик - это команда _appload (сервис - приложения...).
Цитата:
для 2010 - 2014 - mySuperMenu.cuix (это на самом деле архив, примечателен тем, что картинки к кнопкам можно запихнуть внутрь него) Создайте рядом с mySuperMenu.cui/cuix текстовый файл mySuperMenu.mnl и пропишите в него свои load "abc.lsp", а не в acaddoc.lsp Последний раз редактировалось Petrov-Vodkin, 12.08.2013 в 16:11. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
На загрузку (того что внутри defun'ов) алерты повлиять никак не могут, там у Вас явно что-то запускаеться еще не инициализированное - например реактор срабатывает (на который еще функция не загруженна) или (vl-load-com) поздно идет, или панель какую пытается сформировать. Выкладывайте, что там у Вас в acaddoc.lsp - без него только на кофейной гуще.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Без отличий для каждой из этих версий?
Для того, чтобы было понятно и наглядно, я подготовил немного упрощённый код, который воспроизводит мою проблему. Итак, следующий код можно вставить в acaddoc.lsp (ну или вызвать этот код из lsp там же): Код:
И можно открывать AutoCAD: появится ошибка, описанная выше, и панель не загрузится. Теперь убираем следующий код из предыдущей программы, вынося его в отдельную подпрограмму: Код:
Я не могу понять, в чём тут хитрость, и почему один и тот же код не работает при загрузке, но работает после неё. Последний раз редактировалось Twenty, 12.08.2013 в 19:18. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
MNL&CUIX всё же лучше? Я присмотрелся к сообщению, и уточняю: если этот способ лучше динамических панелей (хоть уже есть минус - 2009 и 2010-2014 - это уже как минимум две версии файлов), то я о нём почитаю у того же Полещука (правда, у него уже староват материал для cuix). Но и с этой непонятной проблемой хотелось бы разобраться.
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Нет, вы можете даже использовать устаревший вариант меню (mnu/mns), все равно автокад "скомпилирует" cui/cuix-файл. Причем в таком случае вам понадобится гораздо меньше времени на создание меню
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну я раз 10 запустил - ошибок нет, панель в 100% случаев загрузилась (2010, пустой чертеж, грузится секунды 3-4). Попробуй убрать "Освобождение памяти от ненужных VLA-объектов", скорее всего с ними "в фоне" еще работа идет, а ты их уже освобождаешь - не к чему это их коллектор сам освободит если переменные локальные.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 12.08.2013 в 23:28. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Интересно... тестирую на 2012 и 2014.
Не помогло. Затык происходит именно в строке Код:
____________________________________________________ Что касается варианта с CUI(X). Думаю, что при текущей версии AutoCAD 2014 использовать такие старые средства, как MNU, нерационально. Но и с CUI проблема: ради поддержки 2009 версии придётся делать не cuix с вложенными изображениями кнопок, а cui, а это, как я понял, проблема с местом хранения изображений кнопок (или они всё же автоматически находятся по любому из прописанных путей?). Последний раз редактировалось Twenty, 14.08.2013 в 01:26. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Был бы очень признателен, если бы кто-то выложил простенький пример lisp-кода (желательно vla-vlax) для загрузки CUI(x), содержащего панель инструментов и меню. У меня в половине случаев не работает часть кода или панель не появляется. Нужен просто современный (не от 2005 Автокада) рабочий кусочек кода.
P.S. Возникшие проблемы, похоже, заставят вернуться к динамическим панелям, хоть и это тоже содержит проблемы, которые озвучены в этой теме и пока не решены. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Насколько я помню, должно сработать (vla-load (vla-get-menugroups (vlax-get-acad-object)) <Полное имя файла меню>)
Пишу с компьютера, на котором нет AutoCAD, так что могу ошибаться. P.S. Не факт, что сработает отображение ленты, но эту проблему в свое время обсуждали, кажется, на theswamp.org
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Цитата:
Там проскакивали вот такие ссылки: http://forum.dwg.ru/showthread.php?t=90983 http://docs.autodesk.com/ACD/2013/RU...ber=d30e494119 http://through-the-interface.typepad...r-posting.html Конкретней некуда, с примерами кода и прочими плюшками. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Цитата:
По второй ссылке опять же другой пользователь выкладывает для тестирования сборку для автозагрузки. Причём на NET. Третья ссылка - о PackageContents. Разве это актуально не только для последних нескольких версий AutoCAD и не относится к более старым? Четвёртая ссылка - очередное пособие в картинках. Хорошо, но при чём тут правильная загрузка CUI(x) через инсталлятор? ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Twenty, тебе одной темы что, мало? Посты перенесены.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Вообще-то та тема была не моей, и была посвящена инсталлятору и правильному прописыванию CUI, а эта тема - моя, и посвящена проблеме загрузки динамической панели инструментов и проблемам с нединамическими адаптациями. Не надо в эту тему сваливать материал из другой.
Цитата:
Код:
Последний раз редактировалось Twenty, 14.08.2013 в 15:15. |
|||
![]() |
|
||||
@Twenty,
Можешь программно добавить в файл acad.cui очередной xml элемент PartialMenuFile и будет тебе счастье.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Цитата:
P.S. А что насчёт изображений кнопок? Для cuix, как я понимаю, надо будет в архив acad.cuix запаковать эти новые изображения, а для cui - будет ли достаточно того, что картинки будут лежать по одному из путей AutoCAD'а? P.P.S. В архиве acad.cuix 17 файлов CUI =) Какой из них править? ![]() Мне это видится так: в InnoSetup прописываем код: если это автокад 2009 и ниже, находим его acad.cui и добавляем некие нужные строки, а путь к картинкам кнопок прописываем. Если это автокад от 2010, то находим acad.cuix, добавляем в этот архив в какие-то файлы некие строки и изображения, затем снова запаковываем (при деинсталляции проводится обратная процедура). Нелёгкое дело, конечно. Особенно без наглядных примеров. Последний раз редактировалось Twenty, 14.08.2013 в 15:25. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Цитата:
Имхо, сначала должно загрузиться само приложение и оно само себе должно подгружать ресурсы и кнопки. Первая ссылка именно про такой инсталлятор и загрузчик, вторая и третья ссылка о том как сделать пакет, который автокад загрузит сам, включая CUIX файл, НО если разбираться лень, то ВСЕ ЭТО не при чем. PS. Вы хоть для приличия напишите на каком языке Вы хотите реализовать свои замыслы и под какую платформу. |
|||
![]() |
|
||||
И чем же это неправильно?
![]() Какие строки? ![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Первое сообщение этой темы: AutoCAD 2009(мин)-2014
Нет, ну если на лиспе с ActiveX и инсталлятором InnoSetup невозможно сделать нормальный загрузчик, и выход только в приложении на NET, то, конечно, и эту технологию можно изучить. Цитата:
Опять же предположение: тем, что трогаем сокровенные файлы AutoCAD, и в случае неправильного их изменения сама система станет нестабильной (например, если деинсталлятор не удалит списанные туда строки). "добавить в файл acad.cui очередной xml элемент PartialMenuFile" - это же строки в файле. Кстати, посмотрите, пожалуйста, на отредактированное выше сообщение - там я описал некоторые вопросы касаемо этого метода. |
|||
![]() |
|
||||
У меня под рукой только AutoCAD 2009, в котором используется CUI (CUIX тогда ещё не было). CUIX - это архив, но внести правку программно можно и в него, выбрав в нём нужный CUI.
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 14.08.2013 в 15:54. |
||||
![]() |
|
||||
а я нигде и не писал про InnoSetup. Ты не умеешь программно с текстовыми файлами работать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Через лисп? Ну, с архиваторами не работал (к тому же, у пользователя его может не быть, а значит нужно этот архиватор ещё и поставлять!) и XML не парсил. К тому же, если не сделать это в инсталляторе (InnoSetup), то при запуске AutoCAD (когда сможет выполниться lisp) будет уже поздно, да и невозможно (acad.cuix занят). Или под "программно" понимаете тот же NET?
P.S. Что-то сейчас этот путь кажется настолько сложным, что огромное количество затраченного на его изучение время (без примера кодов особенно) вряд ли выглядит целесообразней того же динамического создания панелей (и, может, меню). Вот ещё бы ошибка неизвестная не возникала... |
|||
![]() |
|
||||
я тебе указал, каким образом можно подгрузить твой CUI\CUIX - подсунув его "родному" механизму автозагрузки файлов меню в AutoCAD. На каком языке ты добавишь запись в текстовый файл - это уже дело твоё (на вкус и цвет все фломастеры разные). Я почти не пишу на лиспе. В 99% случаев пишу на .NET и мне его возможностей хватает почти всегда (чего не хватает - можно достать через C++). В .NET можно легко работать как с XML, так и с архивами (занимает несколько строчек кода). Как это делают автолиспописатели - это уже не ко мне вопрос.
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 14.08.2013 в 17:58. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если хочешь без лишних заморочек (правда заморочек там особых-то нет, но если изучать что-то еще лень то можно и так):
Инсталятором создай загрузку загрузчика на автолиспе, который при первом старте: 1. Загрузит подготовленную CUI панель (архивом CUIX можешь не заморочиваться - автокад его сам автоматом преобразует). 2. Для записи нужных путей в CUI из автолиспа - можешь поступить по колхозному (чтоб не парсить XML) - в созданном в рукопашную CUI (для этого нужен 2009 или ниже акад) замени необходимые пути/параметры на "****1 заменяемое значение****", "****2 ..." и.т.д. - просто как в текстовом файле (чтение->замена нужного->запись). 3. Лисп вариант AcadApplication.MunuGroups.Load твой cui. 4. И после этого можно удалять свой "чудо" загрузчик вместе с шаблоном CUI. + Можно еще и деинсталятор подобным образом подготовить. Метод скажу сразу колхозней некуда, но кроме лиспа ничего не требует - я бы так делать не стал, а написал-бы "установщик" на любом компилируемом языке программирования, но в принципе вполне рабочий.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Цитата:
P.S. Вообще я предполагал, что Autodesk предусматривает следующий порядок загрузки CUI: сделать всё визуально, сохранить cui-файл, а затем программно подгружать его через тот же acaddoc.lsp. Разве это невозможно и неправильно? ________________________ По динамическим панелям: удаление строк Код:
НО! Хоть и пишу сделать панель принудительно видимой, она не отображается, пока её вручную не выберешь. И ошибок при этом нет никаких. Непонятно. Если вручную загружать код - всё отлично. Последний раз редактировалось Twenty, 14.08.2013 в 19:09. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Так я ж про это и пишу - только есть у автокада 1 косяк - относительные пути и системные имена (типа %appdata%) не поддерживает - поэтому приходиться перед загрузкой править CUI(x) - а лиспом это проще всего делать не "парсируя" XML - а просто обрабатывая как текстовой файл.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Чтоб не делать "c:\superproga for acad\superlisp.lsp", а прописывать свои программы в специально созданные для этого папки (program files и пр.) в не зависомости от конфигурации компьютера.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Если не поддерживается загрузка VLX, то точно не самый лучший способ
![]() Boxa, вы пробовали пример из ссылки №2 про создание cui через NET? Я хотел использовать [LispFunction("test")] вместо [CommandMethod("test")], но что-то не работает (потому что я в этом мало понимаю). Последний раз редактировалось Twenty, 15.08.2013 в 16:45. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
А тема с созданием cui через NET интересна и, наверно, после реализации вызывает меньше проблем, да и проще. Вот только в реализации вопрос. У меня пример не работает, хотелось бы с привычным LispFunction попробовать, но недостаточно опыта.
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Цитата:
Только у мена задача была обратная, я этот код для 2006 автокада переписывал. Повеселился. |
|||
![]() |
|
||||
Регистрация: 12.08.2013
Сообщений: 22
|
Странно: я в тот же 2012 загружаю, но команда "bm" не найдена. Поэтому и хотел попробовать с LispFunction - может, заработало бы.
P.S. А, понятно: там ищется файл acad.cui, а в 2012 AutoCAD его, конечно, нет, т.к. там cuix. Последний раз редактировалось Twenty, 19.08.2013 в 21:54. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пропала панель редактирования таблицы | Ust | AutoCAD | 6 | 05.06.2013 16:15 |
приложение не грузиться в Акад2012-х64 | BriAri | AutoCAD | 7 | 28.06.2012 10:53 |
Не могу убрать панель с Главной вкладки ленты AutoCAD 2011 | Albino | AutoCAD | 8 | 03.10.2010 13:13 |
СПДС панель масштаба (запуск из меню) | dextron3 | Прочее. Программное обеспечение | 27 | 08.01.2009 14:42 |
Как в Автокад вставить свою собственную панель инструментов? | АлександрМихайлович | AutoCAD | 10 | 05.03.2007 14:28 |