Автозагрузка и выполнение процедур AutoLISP
Загрузите процедуры AutoLISP при запуске программы и выполняйте команды или функции во время работы с чертежом.
Программы на основе AutoCAD автоматически загружают содержимое трех определяемых пользователем файлов, acad.lsp, acaddoc.lsp и файла MNL, связанных с текущим файлом адаптации.
По умолчанию загрузка файла acad.lsp производится один раз в начале нового сеанса программы, в то время как загрузка файла acaddoc.lsp производится для каждого документа (или чертежа). Это позволяет связать загрузку файла acad.lsp с запуском приложения, а загрузку файла acaddoc.lsp с открытием документа (или чертежа). Описанный способ загрузки можно изменить, модифицировав значение системной переменной ACADLSPASDOC.
Если в одном из этих файлов определена специальная функция S::STARTUP , она автоматически исполняется сразу же после инициализации чертежа. Кроме того, перечень приложений для автоматической загрузки можно выбрать с помощью параметра ЗАГПРИЛ. В последнем случае редактирование файлов не требуется.
Файлы автозагрузки acad.lsp и acaddoc.lsp не поставляются с программными продуктами на основе AutoCAD. При необходимости пользователь должен создать их самостоятельно.
Прим.: Начиная с продуктов на базе AutoCAD 2014, пользовательские приложения должны работать в безопасном режиме; в этом случае системной переменной SECURELOAD установлено значение 1 или 2. В безопасном режиме работа программы будет ограничена загрузкой и выполнением файлов, содержащих код из доверенных источников. Пути к доверенным источникам определяются системной переменной TRUSTEDPATHS.
Автозагрузчик команд
При загрузке файла AutoLISP определения команд в файле занимают определенный объем памяти даже в том случае, если команды не используются. Функция autoload языка AutoLISP позволяет сделать команду доступной без загрузки ее кода в память. Добавление следующих выражений в файл acaddoc.lsp вызывает автоматическую загрузку команд КОМАНДА1, КОМАНДА2 и КОМАНДА3 из файла cmds.lsp и команды НОВАЯКОМ из файла newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
При первом вводе в командной строке имени автоматически загруженной команды AutoLISP загружает полное определение этой команды из соответствующего файла. В AutoLISP также имеется функция autoarxload для приложений ObjectARX.
Прим.: Если существует несколько файлов автозагрузки AutoLISP с одинаковыми именами, загружается тот из них, который имеет наиболее поздний штемпель даты и времени. То же самое происходит при загрузке файлов с расширениями LSP, если не указано полное имя файла (с расширением).
Файл ACAD.LSP
Пользователь может создать файл acad.lsp для регулярного использования программ на AutoLISP. При запуске AutoCAD производится поиск файла поддержки acad.lsp. Если файл acad.lsp найден, он загружается в память.
Это связано с тем, что файл acad.lsp предназначен для автозагрузки специальных приложений. Поэтому все переменные и функции, определенные в файле acad.lsp, доступны только для самого первого чертежа. Если требуется, чтобы некоторые процедуры были доступны для всех открываемых документов, их следует поместить в файл acaddoc.lsp.
Режимом загрузки файлов acad.lsp и acaddoc.lsp можно управлять с помощью системной переменной ACADLSPASDOC. Если для системной переменной ACADLSPASDOC задано значение 0 (значение по умолчанию), файл acad.lsp загружается только один раз: при запуске приложения. Если она равна 1, файл acad.lsp загружается при создании нового чертежа или открытии существующего файла чертежа.
В файле acad.lsp может размещаться код AutoLISP одной или нескольких процедур или только последовательность вызовов функции load . Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Если следующий код сохранить как файл acad.lsp, файлы mysessionapp1.lsp, databasesynch.lsp и drawingmanager.lsp будут загружаться при каждом запуске программы.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Прим.: Не изменяйте зарезервированный файл acad.lsp. В программе Autodesk имеется файл acad.lsp, который содержит функции на языке AutoLISP, описанные специально для этой версии. Данный файл загружается в память непосредственно перед загрузкой файла acad.lsp. обозначает версию программы на основе AutoCAD. Например, acad2022.lsp является файлом, загруженным программами на основе AutoCAD 2022 .
Файл ACADDOC.LSP
Файл acaddoc.lsp предназначен для выполнения инициализации каждого документа (чертежа). Этот файл удобно использовать для автоматической загрузки библиотек AutoLISP-процедур при создании нового чертежа или открытии имеющегося.
Каждый раз при открытии чертежа программа AutoCAD производит поиск файла acaddoc.lsp по библиотечному пути. При обнаружении такого файла производится его загрузка в память. Файл acaddoc.lsp всегда загружается вместе с каждым чертежом независимо от значения ACADLSPASDOC.
В большинстве случаев пользователю достаточно иметь один файл acaddoc.lsp для всех AutoLISP-процедур, работающих непосредственно с документами. Программа выполняет поиск файла acaddoc.lsp в порядке, заданном в стандартных библиотечных путях. Поэтому при работе с различными типами чертежей в каждой папке с чертежами можно хранить свой файл acaddoc.lsp для загрузки требуемого набора процедур AutoLISP.
В файле acaddoc.lsp может храниться код для одной или нескольких процедур или серии запросов функции load . Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Если приведенный ниже код сохранить как файл acaddoc.lsp, файлы mydocumentapp1.lsp, build.lspи counter.lsp будут загружаться каждый раз при открытии нового документа.
(load "mydocumentapp1") (load "build") (load "counter")
Прим.: Не изменяйте зарезервированный файл acaddoc.lsp. В программе Autodesk имеется файл acaddoc.lsp, который содержит функции на языке AutoLISP, написанные специально для этой версии. Данный файл загружается в память непосредственно перед загрузкой файла acaddoc.lsp. Параметр обозначает версию программы на основе AutoCAD. Например, acaddoc2022.lsp является файлом, загруженным программами на основе AutoCAD 2022 .
Адаптация файлов MNL и меню AutoLISP
Во время загрузки файла адаптации (CUI/CUIx) программа выполняет поиск файла MNL с таким же именем. При обнаружении нужного файла производится его загрузка в память. Данный механизм позволяет обеспечить загрузку функций AutoLISP, необходимых для работы элементов интерфейса пользователя.
Например, файл адаптации acad.cuix выполняет поиск файла acad.mnl, который может определить различные функции AutoLISP, используемые элементами пользовательского интерфейса в файле адаптации. MNL-файл загружается после файла acaddoc.lsp.
Прим.: Если файл адаптации загружается с помощью функции command на языке AutoLISP, которая имеет формат (command «меню» «новое меню») , то соответствующий файл MNL загружается только после запуска всей процедуры AutoLISP.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
В данном примере для выдачи сообщения использована функция princ . При первом обращении к функции princ в командной строке отображается следующий текст:
Утилиты «новое меню»… загружены.
Второй вызов princ используется для завершения функции AutoLISP. Без второго вызова princ сообщение в командной строке появится дважды. Как уже упоминалось ранее, можно использовать аргумент при_ошибке при вызове функции load для повышения надежности процедур.
Функция S::STARTUP: выполнение после завершения инициализации чертежа
Для выполнения операций по настройке после инициализации чертежа можно написать функцию S::STARTUP.
Все автоматически загружаемые файлы LISP (acad.lsp, acaddoc.lsp и MNL) размещаются в памяти до завершения полной инициализации чертежа. Обычно это не создает проблем, за исключением тех случаев, когда используется функция command ; надежная работоспособность данной функции возможна только после завершения инициализации чертежа.
Если функция S::STARTUP , определенная пользователем, содержится в файлах acad.lsp, acaddoc.lsp или MNL, то она выполняется при каждом создании нового чертежа или открытии имеющегося. Таким образом, для выполнения операций по настройке можно создать функцию S::STARTUP и поместить ее в автоматически загружаемый файл AutoLISP.
Пусть, например, требуется переопределить стандартную команду ШТРИХ таким образом, чтобы при вводе ее имени вызывалась команда КШТРИХ и выдавалось соответствующее сообщение. Для этого в файл acaddoc.lsp нужно добавить следующий код:
(defun C:HATCH ( ) (alert "Using the BHATCH command!") (princ "\nEnter OLDHATCH to get to real HATCH command.\n") (command "BHATCH") (princ) ) (defun C:OLDHATCH ( ) (command ".HATCH") (princ) ) (defun-q S::STARTUP ( ) (command "undefine" "hatch") (princ "\nRedefined HATCH to BHATCH!\n") )
Перед завершением инициализации чертежа с помощью функции defun задаются новые описания команд ШТРИХ и ВСТРШТРИХ. После завершения инициализации чертежа вызывается функция S::STARTUP , которая отключает стандартное описание команды ШТРИХ.
Прим.: Для того чтобы функция S::STARTUP не переопределяла функции с таким же именем из других файлов, ее следует определить с помощью функции defun-q , а не defun .
Так как функция с именем S::STARTUP может быть определена в различных файлах (acad.lsp, acaddoc.lsp, файлах MNL или любых других файлах AutoLISP), то определенную ранее функцию S::STARTUP можно переопределить.
В следующем примере приводится способ определения данной функции, позволяющий избежать подобных ситуаций.
(defun-q MYSTARTUP ( )
. автоматически выполняемая функция .
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
В результате такого определения код предыдущей загруженной функции S::STARTUP добавляется к коду новой функции S::STARTUP . Этот способ определения можно использовать независимо от ранее существовавшей функции S::STARTUP .
На уровень выше: Приложения AutoLISP
Понятия, связанные с данным
- Приложения AutoLISP
- Загрузка приложений AutoLISP
- Предотвращение ошибок AutoLISP при выполнении файлов автозагрузки
- Установка и удаление приложений подключаемого модуля
- Поддерживаемые интерфейсы программирования
Как установить Лисп для Автокада
Вы нашли полезный для себя код на Лиспе который делает различные штуки и хотите его использовать. Как заставить его работать? Можно выделить 3 шага.
1. Сохранение программного кода на своем компьютере.
2. Загрузка файла в AutoCAD.
3. Запуск приложения (Лиспа).
Примечание: AutoLISP программы могут быть запущены только на полной версии Автокада, они не работают под AutoCAD LT. (исключая случаи загрузки дополнительных приложений типа LT Extender и ему подобных, которые специально разработаны для запуска lisp и (или) arx приложений в среде AutoCAD LT.)
Сохранение программного кода lisp на своем компьютере
Если код выложен на сайте, а не отдельным файлом, делаем так, с помощью курсора выделяем этот код и копируем его, нажав правую кнопку мыши и выбрав пункт Копировать (или Ctrl+C).
Запускаем «Блокнот» и вставляем наш код с помощью меню Правка → Вставить (или Ctrl+V). Получим примерно такое:
И сохраняем файл. Файл можно назвать, как вам нравится, но расширение у него должно быть .LSP. Правильнее (но не обязательно) будет назвать файл так же, как названа команда в найденном Вами коде. Команде всегда предшествует префикс C: после слова defun. В примере выше видно, что команду назвали OFF2, соответственно файл называем off2.lsp. Таким образом, мы можем избежать беспорядка, т.к. будем знать, что в файле off2.lsp находится команда OFF2.
Иногда в коде представлено несколько функций. Необходимо найти «главную». Такая функция либо имеет префикс С: либо сам автор кода уточняет как использовать. В случае нескольких «главных» имя файла не имеет никакой разницы.
Загрузка lisp файла в Автокад
Файл сохранили или скачали уже готовый и запускаем Автокад. Выбираем Сервис → AutoLISP → Приложения. ( Tools → AutoLISP → Load ) или набираем в командной строке _appload.
Мы должны увидеть диалоговое окно как представлено ниже:
И по порядку делаем так:
1. Перейдите к папке, куда Вы сохранили lisp файл.
2. Выберите файл, который Вы хотите загрузить из списка.
3. Нажмите кнопку Загрузить. (Если все прошло удачно, Вы должны увидеть надпись «off2.lsp успешно загружено»)
4. Нажмите кнопку Закрыть для завершения команды.
Или еще проще загрузить lisp файл путем перетаскивания (drag-and-drop) иконки файла в графическое окно открытого документа Автокада.
Немного теории об установке лисп
В описании практически любого кода есть такая строка где написано (defun … и потом после нее чего-то там еще. Так вот то, что там написано и есть имя функции.
Если первыми символами являются C: то функция готова к вызову из командной строки. Если такого нет, то вызывать функцию надо, заключая ее имя в круглые скобки.
Т.е. если написано (defun c:test то в командной строке набираем test , а если (defun test то пишем все тоже самое в скобочках (test) все просто!
Запуск lisp программы
Как только lisp файл загружен, вызываем команду из командной строки. Команда вызывается по ее имени. В нашем примере необходимо набрать в командной строке OFF2.
Организация библиотеки лисп файлов
Каждый раз набирать _appload для загрузки того или иного приложения не дело, да и файлов этих со временем накопится, проще будет организация свою библиотеку. Для начала условимся, что все наши файлы будем складывать в одну папку. Например, D:\MyLisp. Пропишем эту папку в путях доступа Автокада. Для этого выбираем Сервис → Настройка ( Tools → Options ) или набираем в командной строке _options. Переходим на закладку Файлы (Files) и раскрываем список Путь доступа к вспомогательным файлам (Support File Search Path).
Мы должны увидеть диалоговое окно, как представлено ниже:
Используйте следующую последовательность, чтобы прописать папку в путях доступа:
1. Нажмите кнопку Добавить.
2. Нажмите кнопку Обзор и выберите целевую папку (в нашем случае, D:\MyLisp).
3. Путь к папке должен появиться в диалоговом окне.
4. Нажмите кнопку OK для завершения команды.
Теперь наша папка прописана в путях доступа Автокада. Что это нам дает? Мы можем загружать наши файлы не указывая конкретного пути, а только имя файла.
Мы можем набрать в командной строке (load «») для загрузки необходимого кода, например (load «off2»). Заметьте, что добавлять расширение .lsp не обязательно, хотя и не запрещается.
А самое главное — это позволит нам создать панели с кнопками для загрузки той или иной программы. Кнопка будет иметь следующее содержание:
В нашем случае: ^C^C(if (null C:OFF2)(load «off2»));OFF2;
Вместо текста мы должны будем подставлять имя нужной нам команды, а вместо текста имя того файла, в котором эта команда сохранена. Помните, что файл должен иметь расширение .lsp.
Полезно. Как создать свою кнопку и вывести на свою панель команд читаем здесь.
Автозагрузка файлов Lisp в Автокаде
В предыдущей статье мы разобрались как загрузить lisp файл в Автокад и организовать свою библиотеку lisp файлов, но возникают ситуации когда есть необходимость загружать свои lisp файлы при открытии чертежа.
Добавить лисп в автозагрузку
Это возникает например когда вы ходите, чтоб при открытии чертежа, загружался лисп который создал бы определенный набор слоев. то нужно добавить необходимые файлы в список автозагрузки.
Запускаем Автокад и выбираем Сервис → AutoLISP → Приложения. ( Tools → AutoLISP → Load ) или набираем в командной строке _appload.
В открывшемся диалоговом окне жмем на кнопку Приложения рядом с изображение портфеля.
В следующем диалоговом окне жмем на кнопку Добавить и указываем на необходимые файлы.
Они должны появиться в списке приложений.
Теперь перечисленные файлы будут загружаться каждый раз при открытии чертежа.
Важно понимать, что (по крайней мере в полной версии AutoCAD) загрузка приложений, помещенных в Автозагрузку (Startup Suite), как правило, выполняется во все профили и сессии AutoCAD’a.
Кроме того, есть еще один момент. Если существует 2 или более файлов, в которых описаны функции с одинаковыми именами, выполняться будет та, которая загрузилась последней. Поскольку предсказать, в какой последовательности будет выполняться загрузка приложений, невозможно, подобных ситуаций следует избегать.
Интересно. Как печатать чертежи в AutoCAD читайте тут.
Как подгрузить Лисп в Автокад
Мы рассматривали LISP-приложения для AutoCAD. Теперь давайте разберёмся, как внедрить LISP в работу.
Для Автокада доступны приложения со следующим расширением файла: *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas. Рассмотрим на примере ЛИСПа, который позволяет выравнивать текст относительно указанной точки по оси X или Y (скачать файл «Выравнивание текста .lsp»).
ПРИМЕЧАНИЕ: Если вы скачиваете LISP-приложение в архиве, обязательно разархивируйте его. Это необходимо, чтобы сам файл перед загрузкой хранился на вашем компьютере.
Как установить файл *.lsp в Автокад?
1. Перейдите во вкладку «Управление». На панели «Приложения» выберите команду «Загрузить приложение». Воспользуйтесь командной строй в Автокаде и введите «_appload».
2. Откроется диалоговое окно «Загрузка/выгрузка приложений». Найдите подходящий файл с расширением *.lsp или др.
ПРИМЕЧАНИЕ: Чтобы файл загружался каждый раз при запуске Автокада, в разделе «Автозагрузка» укажите путь к этому скрипту (кнопка «Добавить»). Иначе вы выполните одноразовую загрузку, которая не сохранится при закрытии программы.
3. После проделанных действий нажмите кнопку «Загрузить».
4. Когда внизу этого диалогового окна появится сообщение об успешной загрузке, можно тестировать установленное приложение. Нажмите кнопку «Закрыть».
Как запустить команду приложения lisp?
В AutoCAD lisp-команды посмотреть нельзя. Следует отталкиваться от исходного файла, который был загружен в программу.
Файл скрипта можно открыть через обычный «Блокнот». В верхней части этого текстового документа разработчики оставляют необходимую информацию для работы. В том числе название команды, которая будет запускать ЛИСП. В данном примере это «z-text-align», поэтому в командную строку нужно вводить именно такой запрос для вызова инструмента.
ПРИМЕЧАНИЕ: Если автор не оставил подсказку с названием команды, то вы можете её найти в коде. Она будет находиться в строчке «defun c: z-text-align», как показано на рис. 4.
Далее следуйте указаниям командной строки и пошагово выполняйте запросы установленного скрипта.
Как подгрузить lisp в Автокад LT?
Как установить лисп в Автокад — понятно. Но как его загрузить в схожие программы, например, Автокад Electrical/Mechanical?
К сожалению, приложения, написанные на AutoLISP, работают только на полной версии программы AutoCAD. Поэтому такие скрипты нельзя внедрить в AutoCAD LT или др. версии.
Исключением могут являться специализированные приложения типа LT Extender и подобные ему, которые были разработаны с целью запуска файлов *.lsp или *.arx непосредственно в среде Автокад LT.
Освойте профессию проектировщика
Научитесь быстрому черчению, освоите прикладное 3D, автоматизируете создание ведомостей и спецификаций.