Автозавантаження і виконання процедур autolisp

Завантажте процедури AutoLISP при запуску програми і виконуйте команди або функції під час роботи з кресленням.

Програми на основі AutoCAD автоматично завантажують вміст трьох визначених користувачем файлів, acad.lsp. acaddoc.lsp і файлу MNL, пов'язаних з поточним файлом адаптації.

За замовчуванням завантаження файлу acad.lsp проводиться один раз на початку нового сеансу програми, в той час як завантаження файлу acaddoc.lsp проводиться для кожного документа (або креслення). Це дозволяє зв'язати завантаження файлу acad.lsp з запуском програми, а завантаження файлу acaddoc.lsp з відкриттям документа (або креслення). Описаний спосіб завантаження можна змінити, модифікувавши значення системної змінної ACADLSPASDOC.

Якщо в одному з цих файлів визначена спеціальна функція S :: STARTUP. вона автоматично виповнюється відразу ж після ініціалізації креслення. Крім того, перелік додатків для автоматичного завантаження можна вибрати за допомогою параметра ЗАГПРІЛ. В останньому випадку редагування файлів не потрібно.

Файли автозавантаження acad.lsp і acaddoc.lsp не поставляються з програмними продуктами на основі AutoCAD. При необхідності користувач повинен створити їх самостійно.

Автозавантажувач команд

При завантаженні файлу AutoLISP визначення команд у файлі займають певний об'єм пам'яті навіть в тому випадку, якщо команди не використовуються. Функція autoload мови AutoLISP дозволяє зробити команду доступною без завантаження її коду в пам'ять. Додавання таких висловлювань в файл acaddoc.lsp викликає автоматичне завантаження команд команда1, команда2 і КОМАНДА3 з файлу cmds.lsp і команди НОВАЯКОМ з файлу newcmd.lsp.

При першому введенні в командному рядку імені автоматично завантаженої команди 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 будуть завантажуватися при кожному запуску програми.

файл 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 будуть завантажуватися щоразу при відкритті нового документа.

Адаптація файлів MNL і меню AutoLISP

Під час завантаження файлу адаптації (CUI / CUIx) програма виконує пошук файлу MNL з таким же ім'ям. При виявленні потрібного файлу здійснюється його завантаження в пам'ять. Даний механізм дозволяє забезпечити завантаження функцій AutoLISP, необхідних для роботи елементів інтерфейсу користувача.

Наприклад, файл адаптації acad.cuix виконує пошук файлу acad.mnl. який може визначити різні функції AutoLISP, використовувані елементами призначеного для користувача інтерфейсу в файлі адаптації. MNL-файл завантажується після файлу acaddoc.lsp.

Прим. Якщо файл адаптації завантажується за допомогою функції command на мові AutoLISP, яка має формат (command "меню" "нове меню"). то відповідний файл MNL завантажується тільки після запуску всієї процедури AutoLISP.

В даному прикладі для видачі повідомлення використана функція 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 задаються нові опису команд ШТРИХ і ВСТРШТРІХ. Після завершення ініціалізації креслення викликається функція S :: STARTUP. яка відключає стандартне опис команди ШТРИХ.

Прим. Для того щоб функція S :: STARTUP не переважають функції з таким же ім'ям з інших файлів, її слід визначити за допомогою функції defun-q. а не defun.

Так як функція з ім'ям S :: STARTUP може бути визначена в різних файлах (acad.lsp. Acaddoc.lsp. Файлах MNL або будь-яких інших файлах AutoLISP), то певну раніше функцію S :: STARTUP можна перевизначити.

У наступному прикладі наводиться спосіб визначення даної функції, що дозволяє уникнути подібних ситуацій.

. автоматично виконувана функція.

В результаті такого визначення код попередньої завантаженої функції S :: STARTUP додається до коду нової функції S :: STARTUP. Цей спосіб визначення можна використовувати незалежно від існуючої раніше функції S :: STARTUP.

Поняття, пов'язані з даними

Схожі статті