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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Адаптация древних lisp-приложений под AutoCad 2016

Адаптация древних lisp-приложений под AutoCad 2016

Ответ
Поиск в этой теме
Непрочитано 26.01.2016, 14:26
Адаптация древних lisp-приложений под AutoCad 2016
trushev
 
Регистрация: 12.01.2015
Сообщений: 261

Суть вопроса: как в AutoCad 2016 обойти отсутствие в путях поиска по умолчанию текущего каталога?

Наименование темы схоже с закрытой: Адаптация lisp-приложения под AutoCAD 2010 от 18.08.2010.
Ничего иного не нашел.

Есть около сотни lisp программ (расчетных и параметрического вычерчивания) с одинаковыми именами файлов поддержки и с системой пуска изначально примененной под R12:
"...\acad.exe" "...\*.dwg" /b "...\*.scr" /nologo, где "...\acad.exe" - запуск AutoCad с загрузкой "...\*.dwg" - файла прототипа и /b "...\*.scr" -пакета, запускающего lisp; /nologo - без заставки AutoCad.

Такой пуск позволяет работать с файлом, где уже установлена значительная часть настроек (системные переменные, слои, шрифты, типы линий, необходимые блоки и тп). Каталог с файлом прототипа является текущим, и при размещении в нем вспомогательных файлов снимался вопрос поиска файлов поддержки для версий от R12 по AutoCad 2015.
Пример программы: http://forum.dwg.ru/showthread.php?t=125737

Возможные пути решения проблемы:
1. Указать в путях поиска файлов поддержки каталог с программой.
Приемлемо только для одной программы. Имена файлов поддержки разных программ совпадают и, при указании нескольких путей, нет ни какой гарантии что загрузятся нужные файлы.

2. В программах прописать полные имена файлов поддержки.
Существенный объем переработки.
Каждая программа будет жестко привязана к своему каталогу.

3. Указать в путях поиска файлов поддержки каталоги с программами, файлам поддержки дать уникальные имена.
Существенный объем переработки.

4. Как еще можно решить проблему?
Просмотров: 15091
 
Непрочитано 28.01.2016, 09:36
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


А кто-то мешает создать свою и внести ее в общий перечень?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.01.2016, 09:50
#22
trushev


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


Вариант уже рассматривался:
Цитата:
Сообщение от trushev Посмотреть сообщение
Возможные пути решения проблемы:
1. Указать в путях поиска файлов поддержки каталог с программой.
Приемлемо только для одной программы. Имена файлов поддержки разных программ совпадают и, при указании нескольких путей, нет ни какой гарантии что загрузятся нужные файлы.
или я чего-то не догоняю.
trushev вне форума  
 
Непрочитано 28.01.2016, 09:56
1 | #23
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А кто-то мешает создать свою и внести ее в общий перечень?
Причем эта "своя" должна быть не где попало, и не в корне диска, а там, где должна быть в Windows.

Для пользовательских настроек программ это {localappdata}\имя программы или {userappdata}\имя программы. Вот там можно хранить что угодно - доступ пользователю есть всегда. Но значения {localappdata} и {userappdata} должны определяться программно - это "пространство имен" Windows. В каждой версии Windows они могут быть свои.

Вот тогда программа будет работать везде и всегда.
ShaggyDoc вне форума  
 
Непрочитано 28.01.2016, 10:01
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


trushev, для твоего "примера" программы лично я вижу только один вариант развития. Полная переработка.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.01.2016, 12:55
#25
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
для твоего "примера" программы лично я вижу только один вариант развития. Полная переработка.
Ну зачем ты его так напугал! Приложенный топикстартёром "фрагмент оформленный в самостоятельную программу"
я бы причесал в прожку за пару часов.
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот тогда программа будет работать везде и всегда.
Но я в отпуск хочу.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 28.01.2016, 14:26
#26
trushev


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


Цитата:
Сообщение от Alan Посмотреть сообщение
Но я в отпуск хочу
Alan, я не против. Возьмем таймаут на некоторое время.
Однако без костыля предложенного VVA в #9, очень сомневаюсь что будет работать на кнопке. Надо чем-то жертвовать.
На следующей неделе обещают поставить AutoCad 2016, можно будет поэксперементировать.
trushev вне форума  
 
Непрочитано 28.01.2016, 14:56
#27
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от trushev Посмотреть сообщение
Однако без костыля предложенного VVA в #9, очень сомневаюсь что будет работать на кнопке.
Совершенно спокойно будет.
А вот без теории, изложенной в п.23 уважаемым ShaggyDoc, работать не желательно.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 28.01.2016, 17:35
#28
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от trushev Посмотреть сообщение
Однако без костыля предложенного VVA в #9, очень сомневаюсь что будет работать на кнопке. Надо чем-то жертвовать.
Это не "костыль", а элементарная вежливость - твоя программа не должна никак влиять на другие и на "голый" AutoCAD. Однако, прежде чем запустить этот "костыль", его надо загрузить. Т.е. AutoCAD должен заранее знать, откуда загружать.

Вот для решения подобных вопросов и придуманы профили. Имеете профиль для своей программы, в свойствах профиля записываете всё, что требуется (в том числе пути поиска) для своей программы. И делаете ярлык для запуска AutoCAD с именем профиля в командной строке. Запись профиля в реестр можно сделать из reg-файла, редактируя его вручную для разных версий Windows. Это можно сделать и без программирования.

И совсем изящно будет если сделать некую программу-стартер, которая будет и профиль создавать, и файл автозагрузки генерировать и удалять все это после выхода. Но это сложнее.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 29.01.2016, 08:41
#29
trushev


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Это не "костыль", а элементарная вежливость - твоя программа не должна никак влиять на другие и на "голый" AutoCAD. Однако, прежде чем запустить этот "костыль", его надо загрузить. Т.е. AutoCAD должен заранее знать, откуда загружать.
Прошу прощения за неудачное слово. Имелось ввиду дополнение программы функциями формирующими и удаляющими пути поиска вспомогательных файлов.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот для решения подобных вопросов и придуманы профили. Имеете профиль для своей программы, в свойствах профиля записываете всё, что требуется (в том числе пути поиска) для своей программы. И делаете ярлык для запуска AutoCAD с именем профиля в командной строке. Запись профиля в реестр можно сделать из reg-файла, редактируя его вручную для разных версий Windows. Это можно сделать и без программирования.
Спасибо за разжевование пояснения. Теперь понятен путь решения проблемы.

Никогда не работал с кнопками. Несложно скомпоновать функции под кнопку, перенеся вспомогательные в тело основной. При запуске с кнопки будут ли действовать пути поиска из профиля?

Последний раз редактировалось trushev, 29.01.2016 в 10:11.
trushev вне форума  
 
Непрочитано 29.01.2016, 10:33
1 | #30
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от trushev Посмотреть сообщение
При запуске с кнопки будут ли действовать пути поиска из профиля?
Неважно каким способом запущена лисп-функция. Если в текущем профиле есть требуемые пути - они и будут использоваться.
Пути поиска записаны в реестре в ветке, наподобие:
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:409\Profiles\ruCAD\General

В ключе ACAD в виде строки с разделителем ; и перечислены все пути, например:

E:\ruCAD\Install\LocalAppData\ru\CAD-2008\AppData\AutoCAD\R17.1\;E:\ruCAD\Install\LocalAppData\ru\CAD-2008\AppData\AutoCAD\;C:\Acad\AutoCAD 2008\support;C:\Acad\AutoCAD 2008\fonts;C:\Acad\AutoCAD 2008\help;C:\Acad\AutoCAD 2008\Express;C:\Acad\AutoCAD 2008\support\color;

Свой путь надо подставлять в начало, тогда он и будет обрабатываться в первую очередь. Проще всего из REGEDIT экспортировать существующие настройки в reg-файл, а потом откорректировать, как надо. Например

Код:
[Выделить все]
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:409\Profiles\ruCAD\General]
"ACAD"="E:\\ruCAD\\Install\\LocalAppData\\ru\\CAD-2008\\AppData\\AutoCAD\\R17.1\\;E:\\ruCAD\\Install\\LocalAppData\\ru\\CAD-2008\\AppData\\AutoCAD\\;C:\\Acad\\AutoCAD 2008\\support;C:\\Acad\\AutoCAD 2008\\fonts;C:\\Acad\\AutoCAD 2008\\help;C:\\Acad\\AutoCAD 2008\\Express;C:\\Acad\\AutoCAD 2008\\support\\color;"
Выделено жирным "мои пути". В других профилях их нет и программы и настройки недоступны Автокаду.
"Выполнив" этот файл получите новые настройки, причем изменится только переменная ACAD. Причем это будет сделано только для текущего пользователя и не надо спрашивать администратора, т.к. ветка HKEY_CURRENT_USER всегда доступна для записи текущему пользователю Windows.

А "текущий каталог" - очень скользкое понятие в Windows, это всем не обязательно каталог чертежа. Потому и вопросы были сразу.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 29.01.2016, 13:40
#31
trushev


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


Offtop: Ненавижу пятницы. Всегда по пятницам начинается аврал.
trushev вне форума  
 
Автор темы   Непрочитано 01.02.2016, 09:44
#32
trushev


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


Ура! Нашел. Спасибо gomer, http://forum.dwg.ru/showthread.php?t=128781

(strcat (getvar 'dwgprefix) "имя файла")
trushev вне форума  
 
Непрочитано 01.02.2016, 19:40
1 | #33
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от trushev Посмотреть сообщение
Повторюсь с главным вопросом: как в AutoCad 2016 обойти отсутствие в путях поиска по умолчанию текущего каталога?
https://knowledge.autodesk.com/suppo...F9430-htm.html
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 02.02.2016, 10:13
#34
trushev


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


Александр Наумович, весьма польщен Вашим вниманием.
Подвожу итог способов решения проблемы с наименьшими затратами в порядке поступления:
1. В пакете загружающем lisp заменить (load "имя файла") на (load (strcat (getvar 'dwgprefix) "имя файла"))
Не понял почему, но после этого находятся и DCL и вспомогательные текстовые файлы.
2. В строку запуска программы с рабочего стола добавить ключ /s с путем к файлам поддержки Заменяет ранее установленные пути.
3. От Александр Ривилис, установить LEGACYCODESEARCH = 1.

Последний раз редактировалось trushev, 04.02.2016 в 10:11.
trushev вне форума  
 
Непрочитано 02.02.2016, 11:03
#35
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от trushev Посмотреть сообщение
С подачи gomer, в пакете загружающем lisp заменить (load "имя файла") на (load (strcat (getvar 'dwgprefix) "имя файла"))
только не нужно меня тут приплетать... и таким вообще не пользуюсь и никому не рекомендую
gomer вне форума  
 
Автор темы   Непрочитано 04.02.2016, 16:52
#36
trushev


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
И совсем изящно будет если сделать некую программу-стартер, которая будет и профиль создавать, и файл автозагрузки генерировать и удалять все это после выхода.
В предложенном примере аналогичное решение инженерным методом. Никто не мешает скопировать файл пуск.lnk на рабочий стол, нарядить его в любую пиктограмму и обозвать как понравиться.
Командная строка файла пуск.lnk:
"C:\Program Files\Autodesk\AutoCAD 2014\acad.exe" - запуск автокада
"C:\LSP_WIN\VODOPROPUSK\vd.dwg" - загрузка чертежа прототипа
/b "c:\lsp_win\VODOPROPUSK\vd" - активация пакета
Пакет (load "vd") загружает лисп.
По завершению работы автокад закрывается очищая память от себя и прочего хлама.

А вот с кнопкой совсем запутался.
Макрос на кнопку: ^C^C(if (not c:vp_gid) (load ".../appdata/local/vd.lsp"));vp_gid;
Цитата:
Сообщение от Alan Посмотреть сообщение
Совершенно спокойно будет.
Не получается добиться корректной работы. При запуске с кнопки не находит файлы readme.txt (клавиша "Инструкция") и spravka.txt (справочной информации)
Вложения
Тип файла: zip КНОПКИ.zip (27.8 Кб, 25 просмотров)
trushev вне форума  
 
Автор темы   Непрочитано 08.02.2016, 10:33
#37
trushev


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


Цитата:
Сообщение от trushev Посмотреть сообщение
Не получается добиться корректной работы. При запуске с кнопки не находит файлы readme.txt (клавиша "Инструкция") и spravka.txt (справочной информации)
Нашел решение: При открытии файла имя файла должно быть с функцией findfile.
trushev вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Адаптация древних lisp-приложений под AutoCad 2016

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В AutoCAD 2016 некорректно открываются файлы, созданные в AutoCAD 2014 Nadija_arh AutoCAD 4 11.01.2016 22:09
Как добавить префикс к однострочному тексту в AutoCAD 2016 andrey_artphoto AutoCAD 5 27.05.2015 17:11