Всем желаю здравствовать!
В этом посте расскажу как сделать так, чтобы ваши файлы с программами на языке lisp автоматически загружались в каждый вновь открываемый документ (рисунок).
При создании вспомогательных программ (функций) на языке lisp я применяю два правила:
- Одна функция — один файл.
- Имя файла это имя функции с расширением .lsp
Все файлы лежат в одной папке.
***
При запуске системы AutoCAD выполняется чтение и загрузка определенных файлов.
Есть два файла acad.lsp и acaddoc.lsp которые не входят в состав программного обеспечения Autocad, однако при запуске система пытается их найти по путям доступа к вспомогательным файлам, которые задаются в настройках. Как только Autocad находит первый из этих файлов — система загружает его и дальнейший поиск прекращается. Отсутствие этих файлов ошибок не вызывает.
Эти файлы создает пользователь. Они могут включать любые выражения на языке lisp. При загрузке файла весь код сразу исполняется.
Разница между ними в следующем: acad.lsp загружается один раз при запуске системы Autocad в первый открываемый (создаваемый) документ, при создании новых документов файл не загружается, файл acaddoc.lsp загружается в каждый создаваемый (открываемый) документ.
Я использую acaddoc.lsp. С помощью кода я создаю при открытии документа текстовые стили, слои и загружаю файлы с программами.
Ниже приведен код который позволяет загрузить файлы с программами из указанной директории в AutoCAD:
; ***Загрузка файлов пользовательских функций***
(setq dir_path "Укажите полный путь до директории с файлами lsp")
; создаем переменную dir_path содержащую путь до директории с файлами lsp
(setq dir_files (vl-directory-files dir_path nil 1))
; создаем и принимаем в переменную dir_files
; список файлов указанной директории
(setq n (length dir_files) i 0)
; принимаем в переменную n число равное количеству членов списка
;(количесту файлов в директории), присваиваем i значение 0
(while (<= i (1- n))
; в цикле пробегаем по списку, вытаскивая из него имена файлов, склеиваем
; их с путем до директории и загружаем каждый файл по полученному пути.
(load(strcat dir_path "/" (nth i dir_files)))
; загружаем в Autocad файл по полученному пути
(setq i (1+ i))
; увеличиваем i на 1 для получения следующего члена списка
); while (<= i (1- n))
Теперь для загрузки ваших программ в AutoCAD необходимо сделать следующее:
- Создаем пустой файл с именем acaddoc.lsp , открываем его с помощью текстового редактора, копируем в него приведенный код, указываем СВОЙ путь к директории с файлами и сохраняем.
- В настройках автокада нужно указать путь до директории где лежит файл acaddoc.lsp . Для этого:
- ПКМ по холсту, из выпадающего списка выбираем «Праметры…»
- Выбираем вкладку «Файлы», в окне выбираем пункт «Путь доступа к вспомогательным файлам», нажимаем кнопку «Добавить»
- В появившемся снизу пункте указываем путь до директории в которой лежит файл acaddoc.lsp , нажимаем «ОК»
Теперь при открытии любого документа (рисунка) все ваши файлы с программами будут автоматически загружаться в AutoCAD.
«Есть два файла acad.lsp и acaddoc.lsp которые не входят в состав программного обеспечения Autocad, однако при запуске система пытается их найти по путям доступа к вспомогательным файлам, которые задаются в настройках.» Как раз эти файлы входят в состав ПО. Я раньше менял их на свои, в уже созданной развертке Автокада, и при установке пользователям, автоматически всем прописывались нужные лисп-программы.
Ты не проверял свой лисп код? Что будет с остальными лиспами, если на загрузке самого первого вдруг выйдет ошибка?
Коллега, приветствую! Файлы acad.lsp и acaddoc.lsp не входят в состав ПО. Вот что входит в ПО по маске acad*.lsp .

Видимо кто-то их создавал до Вас…
По второму вопросу:
Последовательность загрузки файлов такова: при запуске автокада подтягивается acad.lsp, если он есть. Далее при создании или открытия каждого чертежа подтягивается acaddoc.lsp, если он есть. Т.о. acad.lsp один раз при запуске, acaddoc.lsp при открытии каждого чертежа.
Про ошибки. И acad.lsp, и acaddoc.lsp выполняются до первой ошибки по коду, далее выполнение обрубается. Т.е. весь код до ошибки будет выполнен.