Пользовательская панель: динамическая или нет? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Пользовательская панель: динамическая или нет?

Пользовательская панель: динамическая или нет?

Ответ
Поиск в этой теме
Непрочитано 12.08.2013, 14:04
Пользовательская панель: динамическая или нет?
Twenty
 
Регистрация: 12.08.2013
Сообщений: 22

Добрый день!
Хотел бы попросить совета у программистов по поводу того, каким путём лучше идти при загрузке своих программ в AutoCAD. Имеется несколько программок, и нужно, чтобы они работали на AutoCAD от 2009 до 2014.
1. Создавать динамическую панель инструментов с кнопками для вызова этих программ, прописав (load "abc.lsp") (ABC) в acaddoc.lsp. Плюсы - работает в любых версиях AutoCAD, минусы - зачастую при загрузке AutoCAD код не срабатывает из-за того, что не успевает загрузиться служебная часть программ AutoCAD. Дурацкий выход вроде добавления первой строкой в acaddoc.lsp команды (alert "Привет!") помогает, но сделать загрузку минуя это я не знаю, как.
2. Делать CUI, в которых я не разобрался и не уверен, что один CUI будет читаться всеми версиями AutoCAD. Это, кстати, тоже вопрос.

Вариант с динамической панелью вполне нравится, если бы не ситуация с обрывом загрузки ("ошибка Automation: панель невидима. сделайте её видимой!").
Просмотров: 10345
 
Автор темы   Непрочитано 14.08.2013, 15:18
#21
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Цитата:
Сообщение от hwd Посмотреть сообщение
Можешь программно добавить в файл acad.cui очередной xml элемент PartialMenuFile и будет тебе счастье.
Возможно, это не совсем правильно, но попробую - думаю, так хотя бы не будет проблем с поиском файла и загрузкой. Главное - удалить эти строки после деинсталляции. Спасибо.
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.
Twenty вне форума  
 
Непрочитано 14.08.2013, 15:20
#22
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от Twenty Посмотреть сообщение
Абсолютно не о том. Тема о некоем .NET-приложении одного форумца для некоторых версий AutoCAD. Ничего про правильную загрузку CUI.
По второй ссылке опять же другой пользователь выкладывает для тестирования сборку для автозагрузки. Причём на NET.
Третья ссылка - о PackageContents. Разве это актуально не только для последних нескольких версий AutoCAD и не относится к более старым?
Четвёртая ссылка - очередное пособие в картинках. Хорошо, но при чём тут правильная загрузка CUI(x) через инсталлятор?
Вы где-то писали версию ПО с которым работаете? Старые методы Вам негоже, новые версии ПО не для Вас. "Вам сложно угодить... " (с) Служебный роман

Имхо, сначала должно загрузиться само приложение и оно само себе должно подгружать ресурсы и кнопки. Первая ссылка именно про такой инсталлятор и загрузчик, вторая и третья ссылка о том как сделать пакет, который автокад загрузит сам, включая CUIX файл, НО если разбираться лень, то ВСЕ ЭТО не при чем.

PS.
Вы хоть для приличия напишите на каком языке Вы хотите реализовать свои замыслы и под какую платформу.
Boxa на форуме  
 
Непрочитано 14.08.2013, 15:21
#23
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Twenty Посмотреть сообщение
Возможно, это не совсем правильно
И чем же это неправильно?
Цитата:
Сообщение от Twenty Посмотреть сообщение
Главное - удалить эти строки после деинсталляции.
Какие строки?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 14.08.2013, 15:31
#24
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Цитата:
Сообщение от Boxa Посмотреть сообщение
Вы где-то писали версию ПО с которым работаете?
Первое сообщение этой темы: AutoCAD 2009(мин)-2014
Цитата:
Сообщение от Boxa Посмотреть сообщение
НО если разбираться лень, то ВСЕ ЭТО не при чем
Нет, ну если на лиспе с ActiveX и инсталлятором InnoSetup невозможно сделать нормальный загрузчик, и выход только в приложении на NET, то, конечно, и эту технологию можно изучить.
Цитата:
Сообщение от Boxa Посмотреть сообщение
Вы хоть для приличия напишите на каком языке Вы хотите реализовать свои замыслы и под какую платформу.
Lisp, желательно с vla-vlax (без cmdf), инсталлятор на InnoSetup (паскаль).
Цитата:
Сообщение от hwd Посмотреть сообщение
И чем же это неправильно?
Опять же предположение: тем, что трогаем сокровенные файлы AutoCAD, и в случае неправильного их изменения сама система станет нестабильной (например, если деинсталлятор не удалит списанные туда строки).
Цитата:
Сообщение от hwd Посмотреть сообщение
Какие строки?
"добавить в файл acad.cui очередной xml элемент PartialMenuFile" - это же строки в файле. Кстати, посмотрите, пожалуйста, на отредактированное выше сообщение - там я описал некоторые вопросы касаемо этого метода.
Twenty вне форума  
 
Непрочитано 14.08.2013, 15:41
#25
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


У меня под рукой только AutoCAD 2009, в котором используется CUI (CUIX тогда ещё не было). CUIX - это архив, но внести правку программно можно и в него, выбрав в нём нужный CUI.
Цитата:
Опять же предположение: тем, что трогаем сокровенные файлы AutoCAD, и в случае неправильного их изменения сама система станет нестабильной (например, если деинсталлятор не удалит списанные туда строки).
Не имеет значение, каким образом ты добавляешь очередной элемент PartialMenuFile: посредством GUI AutoCAD, посредством любого программного API или же через обычный Notepad++. Главное - в нужном месте прописать элемент (сложного ничего нет) и кодировку использовать ту, что прописана в заголовке XML файла. Удаление выполняется аналогично.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 14.08.2013 в 15:54.
hwd вне форума  
 
Автор темы   Непрочитано 14.08.2013, 16:52
#26
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Какая-то совсем сложная задача - работа с архивом и XML-файлом через код в инсталляторе InnoSetup... что-то мне кажется, примеров кода не будет, потому что никто этого не делает =)
Twenty вне форума  
 
Непрочитано 14.08.2013, 17:01
#27
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


а я нигде и не писал про InnoSetup. Ты не умеешь программно с текстовыми файлами работать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 14.08.2013, 17:19
#28
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Через лисп? Ну, с архиваторами не работал (к тому же, у пользователя его может не быть, а значит нужно этот архиватор ещё и поставлять!) и XML не парсил. К тому же, если не сделать это в инсталляторе (InnoSetup), то при запуске AutoCAD (когда сможет выполниться lisp) будет уже поздно, да и невозможно (acad.cuix занят). Или под "программно" понимаете тот же NET?
P.S. Что-то сейчас этот путь кажется настолько сложным, что огромное количество затраченного на его изучение время (без примера кодов особенно) вряд ли выглядит целесообразней того же динамического создания панелей (и, может, меню). Вот ещё бы ошибка неизвестная не возникала...
Twenty вне форума  
 
Непрочитано 14.08.2013, 17:25
#29
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


я тебе указал, каким образом можно подгрузить твой CUI\CUIX - подсунув его "родному" механизму автозагрузки файлов меню в AutoCAD. На каком языке ты добавишь запись в текстовый файл - это уже дело твоё (на вкус и цвет все фломастеры разные). Я почти не пишу на лиспе. В 99% случаев пишу на .NET и мне его возможностей хватает почти всегда (чего не хватает - можно достать через C++). В .NET можно легко работать как с XML, так и с архивами (занимает несколько строчек кода). Как это делают автолиспописатели - это уже не ко мне вопрос.
Цитата:
P.S. Что-то сейчас этот путь кажется настолько сложным, что огромное количество затраченного на его изучение время (без примера кодов особенно) вряд ли выглядит целесообразней того же динамического создания панелей (и, может, меню).
Сложного в этом ничего нет, при условии, что умеешь работать с XML.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 14.08.2013 в 17:58.
hwd вне форума  
 
Непрочитано 14.08.2013, 17:58
#30
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если хочешь без лишних заморочек (правда заморочек там особых-то нет, но если изучать что-то еще лень то можно и так):
Инсталятором создай загрузку загрузчика на автолиспе, который при первом старте:
1. Загрузит подготовленную CUI панель (архивом CUIX можешь не заморочиваться - автокад его сам автоматом преобразует).
2. Для записи нужных путей в CUI из автолиспа - можешь поступить по колхозному (чтоб не парсить XML) - в созданном в рукопашную CUI (для этого нужен 2009 или ниже акад) замени необходимые пути/параметры на "****1 заменяемое значение****", "****2 ..." и.т.д. - просто как в текстовом файле (чтение->замена нужного->запись).
3. Лисп вариант AcadApplication.MunuGroups.Load твой cui.
4. И после этого можно удалять свой "чудо" загрузчик вместе с шаблоном CUI.
+ Можно еще и деинсталятор подобным образом подготовить.
Метод скажу сразу колхозней некуда, но кроме лиспа ничего не требует - я бы так делать не стал, а написал-бы "установщик" на любом компилируемом языке программирования, но в принципе вполне рабочий.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.08.2013, 18:07
#31
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Цитата:
Сообщение от Дима_ Посмотреть сообщение
написал-бы "установщик" на любом компилируемом языке программирования, но в принципе вполне рабочий
У меня как раз компилируемый инсталлятор InnoSetup всё везде прописывает и отвечает за деинсталляцию. А вообще, если всё так сложно, предпочту остаться на динамическом создании панелей в acaddoc.lsp. Решить бы проблему только.

P.S. Вообще я предполагал, что Autodesk предусматривает следующий порядок загрузки CUI: сделать всё визуально, сохранить cui-файл, а затем программно подгружать его через тот же acaddoc.lsp. Разве это невозможно и неправильно?
________________________
По динамическим панелям:
удаление строк
Код:
[Выделить все]
       (vla-put-Left tb_test_prog (atoi (nth 1 t_reg)))
      (vla-put-Top tb_test_prog (atoi (nth 2 t_reg)))
а точнее, выравнивание в процессе создания панели, а не после этого, больше не приводит к ошибке.

НО! Хоть и пишу сделать панель принудительно видимой, она не отображается, пока её вручную не выберешь. И ошибок при этом нет никаких. Непонятно. Если вручную загружать код - всё отлично.

Последний раз редактировалось Twenty, 14.08.2013 в 19:09.
Twenty вне форума  
 
Непрочитано 14.08.2013, 20:22
#32
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


http://through-the-interface.typepad...ng_a_part.html
http://through-the-interface.typepad...g_a_parti.html
Boxa на форуме  
 
Автор темы   Непрочитано 14.08.2013, 21:52
#33
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Спасибо, тоже интересный вариант - что-то между динамическим и обычным. Интересно.
Twenty вне форума  
 
Непрочитано 14.08.2013, 23:18
#34
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Twenty Посмотреть сообщение
Разве это невозможно и неправильно?
Так я ж про это и пишу - только есть у автокада 1 косяк - относительные пути и системные имена (типа %appdata%) не поддерживает - поэтому приходиться перед загрузкой править CUI(x) - а лиспом это проще всего делать не "парсируя" XML - а просто обрабатывая как текстовой файл.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.08.2013, 02:13
#35
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Цитата:
Сообщение от Дима_ Посмотреть сообщение
относительные пути и системные имена (типа %appdata%) не поддерживает
А для чего они там нужны?
Twenty вне форума  
 
Непрочитано 15.08.2013, 12:33
#36
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Чтоб не делать "c:\superproga for acad\superlisp.lsp", а прописывать свои программы в специально созданные для этого папки (program files и пр.) в не зависомости от конфигурации компьютера.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.08.2013, 12:58
#37
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Но ведь в макросы записываются не пути, а вызов программ - например, "^C^CMyProg
А сама MyProg подгружается заранее при загрузке AutoCAD. Так ведь?
Twenty вне форума  
 
Непрочитано 15.08.2013, 13:07
#38
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


в CUI прописываеться не только макросы, но и куча чего еще - в том числе и загружаемые лисп файлы - и это самый правильный способ задать их загрузку.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.08.2013, 13:22
#39
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


Если не поддерживается загрузка VLX, то точно не самый лучший способ

Boxa, вы пробовали пример из ссылки №2 про создание cui через NET? Я хотел использовать [LispFunction("test")] вместо [CommandMethod("test")], но что-то не работает (потому что я в этом мало понимаю).

Последний раз редактировалось Twenty, 15.08.2013 в 16:45.
Twenty вне форума  
 
Автор темы   Непрочитано 19.08.2013, 20:01
#40
Twenty


 
Регистрация: 12.08.2013
Сообщений: 22


А тема с созданием cui через NET интересна и, наверно, после реализации вызывает меньше проблем, да и проще. Вот только в реализации вопрос. У меня пример не работает, хотелось бы с привычным LispFunction попробовать, но недостаточно опыта.
Twenty вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Пользовательская панель: динамическая или нет?

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропала панель редактирования таблицы 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