Тема: LISP. Общее. Загрузка файла. Вызовы функций
Здесь: https://www.caduser.ru/forum/topic19684.html возник вопрос о загрузке функций. Все нижесказанное не претендует на оригинальность и не является истиной в последней инстанции. Маленькое уточнение - работает на ура.
Немаленькое уточнение - идеи слизаны с "САПР на базе..."
Итак, начнем.
Для начала создадим папку, в которой будут храниться наши функции и программы - например, c:\adds.lsp. Дальше копия FAQ:
Запускаем AutoCAD, _options -> Files -> Support files search -> Добавить эту папку.
Каждый код, который публикуется здесь, сохраняется в отдельном файле. Например, опубликована функция (что уж ходить далеко за примером, kpblc-extlen - см. ссылку выше). Выделили код, как описано в FAQ, сохранили под именем kpblc-extlen.lsp в папке c:\adds.lsp.
Примечание: желательно сохранять функцию в файле с таким же именем, т.е. для функции (func_deg2rad) использовать имя "func_deg2rad.lsp".
Для примера сделаем еще одну функцию, но с запросом в ком.строке значения удлинения линии - kpblc-extlen-with-quest:
(defun kpblc-extlen-with-quest(/ qu_pluslen) (setq qu_pluslen (getreal "\nВведите значение удлинения : ")) (kpblc-extlen qu-pluslen) );_defun
и сохраняем его в файле kpblc-extlen-with-quest.lsp
В той же папке делаем лисп примерно следующего вида:
(defun load-apps( / app_list app_counter) (vl-load-com) (setq app_list (list "kpblc-extlen" "kpblc-extlen-with-quest" ) );_setq (foreach app_counter app_list (load app_counter) );_foreach (if (not *kpblc-activedoc*) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) );_if );_defun
Этот файл можно постоянно наращивать, добавляя (или удаляя) строки из списка app_list. Для макросов меню делаем следующее:
^C^C(if (not *kpblc-activedoc*) (load "load-apps"));function_name;
При условии изменения списка app_list можно просто перегрузить этот лисп-файл, и новые функции станут доступны для использования.
В случае работы одновременно с несколькими документами лисп можно перегружать с использованием команды
(vl-load-all "load-apps")
Лично я использую функцию (load ...), т.к. подавляющее большинство функций я пишу без префикса "с:". Если постоянно используется префикс "с:" в объявлениях функций, можно использовать (autoload ...)
Надеюсь, никого не обидел.