|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Функция AutoLisp getPathLoadedApplication или как ее написать ?
инженер
Брест
Регистрация: 15.09.2009
Сообщений: 55
|
||
Просмотров: 9547
|
|
||||
ObjectARX - в командной строке набрать: _arx _c
Lisp - в командной строке набрать: _lsp _c п.с. правда это будет перечень подгруженных команд, а не имён библиотечных файлов.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Меня интересует путь откуда загружено приложение.
Нужна функция похожая на (arx) но чтобы возвращала путь и имя приложения причем не только arx а lsp vlx (getPathLoadedApplication)->'("c:\ProgramFile\Autodesk\acapp.arx" "c:\etc\test.vlx ... ) |
|||
![]() |
|
||||
Я знаю как на .net, получить пути для lisp/net. Насчёт получения путей для vba/arx - может и их удастся, но я не пробовал. Если мне не изменяет память, средствами автолиспа получить такие каталоги не удастся (например функция лиспа вроде как не может определить полное имя файла из которого она вызвана). Т.о. чтобы дать лиспу функционал, запрашиваемый топикстартером - нужно писать обёртку, написанную на objectarx/.net (мне видится решение именно таким).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Написал сам на c++ используя класс acDocManager из objectArx неужели нет доступа к этому классу из autoLispa ?
Код прилагаю может кому пригодиться т.к считаю она должна быть библиотечной функцией и почему ее до сих пор нет ? Жаль что autolisp все меньше поддерживают в autodesk. Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 10.06.2011 в 10:33. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Один из вариантов выкладывал hwd на своем сайте. Если нужно просто в коде vlx-файла определить, откуда этот vlx загружен, то при условии, что файл расположен по одному из путей поддержки AutoCAD, путь можно узнать (setq fullpath (findfile "ИмяФайла.vlx")).
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 10.06.2011 в 19:22. |
|||
![]() |
|
||||
Цитата:
Как поддерживался, так и поддерживается. Ты кажется не понимаешь природу Autolisp, когда функции могут генерироваться на лету, вообще без использования файлов. |
||||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Мне иногда надо загрузить autoLisp и иметь доступ к ресурсам(например файлу конфигурации) .
Если проект не указан в пути доступа в AUTOCAD то поиск при помощи функции findfile не возможен. Бывает что несколько файлов с одинаковым именем расположены по разным директориям и какой файл загружен так же удобно использовать выше написанную функцию на C++ используя ObjectArx. Функция (getloadedlispapp) котороя возвращает то же самое что показано в диалоговом окне и команда appload ->("C:\\Program Files\\Autodesk\\AutoCAD 2012 - English\\Express\\acetutil.fas" 2012 - English\\R18.2\\enu\\support\\acad.mnl" "G:\\AutoLisp\\LIB\\ak_lib0.lsp" "G:\\AutoLisp\\LIB\\ak_max_min.lsp" "G:\\AutoLisp\\LIB\\ak_util.lsp" "G:\\AutoLisp\\EXCEL\\ak_EXCEL.lsp" "G:\\AutoLisp\\ak_tools.mnl" "C:\\Documents and Settings\\Пользователь\\Application Data\\Autodesk\\AutoCAD 2012 - English\\R18.2\\enu\\support\\acetmain.mnl" "G:\\AutoLisp\\AK_STAIR\\AK_STAIR.VLX") etc Например загруженное приложение AK_STAIR.VLX не указано в пути Support File Search и доступ к файлу конфигурации AK_STAIR.ini получить проблематично не имея function (getLoadedLispApp). Возможно кто-то и использует autoLISP в ИИ и генерирует функции которые сами пишут функций, но для этого удобнее использовать Common Lisp используя например defmacro и если вы используете эти библиотеки поделитесь, мне будет интересно. |
|||
![]() |
|
||||
Цитата:
![]() P.S.: Аналогичную функцию я написал 6 лет назад (здесь), но она оказалась невостребованной именно по причине "возможных вариантов", когда однозначно нельзя сказать какой это файл. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Беда в Вашей функции - в том что она под objectarx - ну есть у меня загруженный лисп - как мне загрузить Вашу функцию? - где она? - надо к ней знать путь, если я его знаю - то значит программа проинсталированна или путь "жестко" прописан - а при таком раскладе мне она не нужна - с этими условиями можно и средствами лиспа получить конфигурацию (по тому-же пути). Если только не доходить до крайности - вписывать Ваш бинарный код (в каком нибудь base64) в лисп (под все версии?), распаковывать в какой-нибудь временный файл и запускать (либо-же брать исходный файл - но лучше на .net т.к. компиляторы встроены в дистрибутив, компилировать его на лету (с использованием библиотек текущей системы) и запускать) - но это получается большой гемор - непонятно из-за чего.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Нужно изначально писать код так, чтобы не пришлось под каждую лиспину добавлять очередную запись в каталоги поиска.
Для этого в каталогах поиска задаёшь всего один путь, например C:\AutoCAD\Addons\LISP. Теперь каждого пакета лиспов создаёшь в этот каталоге свой подкаталог и кидаешь лиспы в него, а в коде этих лиспов поиск ресурсов задаёшь с учётом имени подкаталога в котором они находится. Т.е. если твой пакет лежит в C:\AutoCAD\Addons\LISP\Sample, то в коде поиск всяких там dcl-файлов, иконок и т.п. нужно прописывать в виде "Sample\\ИмяФайла", а не просто "ИмяФайла", как зачастую пишут некоторые говнокодеры (по другому язык не поворачивается сказать). Имея общий знаменатель в виде C:\AutoCAD\Addons\LISP (или др. путь - на твоё усмотрение) и обозначая поиск ресурсов с учётом родительского каталога, ты сразу же снимаешь с себя проблему необходимости добавлять под каждый каталог с лиспами свой путь в список поиска, зашлаковывая тем самым профиль автокада и снижая скорость его работы). А если ещё и имена функциям будешь давать согласованные (начиная со своего префикса), а не такие как dt, pb, cmd1, www и т.п. - то сможешь ещё избежать и конфликтов имён. Хотя, как показывает практика - гуана с подобным названиями/указаниями ресурсов всё равно будет море в тех лиспах, которые тебе притащат юзеры, понабрав их с двг.ру и кадюзера, ибо каждый из таких кодо-писателей считает себя единственным и неповторимым, и потому не допускает видимо мысли о том, что помимо его лиспа юзер может загрузить и др лиспы и пишет код так, что для того, чтобы его багоподелие работало - юзер должен под него добавить в каталоги поиск очередной путь. Имхо Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Не плохо бы иметь библиотеку OpenLibForAutolisp с исходными текстами на C++ C#Net VBNet VBA типа OpenDCL для AutoLispa
Господин Александр Ривилис написал 6 лет функцию скомпилировал, а исходников не выложил. Пришлось тратить время. А время деньги ... Например с подшивками AutoLIsp не дружит и неплохо бы иметь функции доступа к этому объекту ... |
|||
![]() |
|
||||
Цитата:
Автодеск положил на это дело болт (не развивает автолисп), хотя существует слабая надежда, что когда-то снова продолжит, т.к. в опросе есть такой пункт, мол на что по вашему следует сделать упор в развитии - там и лисп присутствовал в качестве пункта выбора... имхо
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Цитата:
Цитата:
Код:
|
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) | Supermax | Библиотека функций | 20 | 14.03.2018 10:05 |
написать программу-листинг в AutoLisp | students | LISP | 31 | 23.05.2011 23:47 |
Autolisp функция как аргумент другой функции | xsakabsx | LISP | 9 | 17.12.2010 14:15 |
структурированный список | Holon | Программирование | 22 | 11.09.2007 14:09 |
Написать текст (autolisp) | Torero | LISP | 2 | 23.10.2004 23:53 |