Приклад програми lisp, autocad

У цьому уроці ми розглянемо, як з програми LISP управляти діалоговим вікном.

Як приклад ми будемо використовувати діалогове вікно створене в попередньому уроці: «Діалогове вікно».

І відразу почнемо з програмного коду, який управляє діалоговим вікном.

Приклад програми lisp, autocad

Мал. 1. «Програмний код управління діалоговим вікном.»

Управління діалоговим вікном з LISP програми відбувається в кілька етапів:

Завантаження файлу діалогового вікна

Спочатку необхідно завантажити DCL-файл, який містить потрібний діалог.

Якщо діалогове вікно завантажиться, то дана функція поверне порядковий номер завантаженого DCL-файлу в даному сеансі роботи з системою AutoCAD.

За допомогою оператора присвоєння setq запам'ятовуємо цей номер в змінної dcl_id.

Якщо діалогове вікно не завантажиться, то функція поверне негативне ціле число.

Якщо ім'я файлу в аргументі вказано без повного шляху, то система AutoCAD намагається знайти файл в папках підтримки, де знаходяться допоміжні файли.

Додаємо шлях доступу до допоміжних файлів.

Щоб не писати повний шлях до нашого діалогового вікна, давайте додамо шлях до нашої папці «D: \ MyLisp» в шляху доступу до допоміжних файлів AutoCAD. Зробимо з неї папку підтримки.

Для цього клацаємо по «Кнопці додатки» і в вікні, по кнопці «Параметри». Див. Рис. 2.

Приклад програми lisp, autocad

Мал. 2. Кнопка додатки

Відкриється вікно «Налаштування». Див. Рис 3.

Приклад програми lisp, autocad

Мал. 3. «Додавання шляху доступу до допоміжних файлів»

У ньому переходимо на вкладку «Файли».

Клацаємо на [+] напроти пункту «Шлях доступу до допоміжних файлів».

Далі натискаємо на кнопку «Додати». Потім на кнопку «Огляд ...». Відкриється вікно «Огляд папок».

Знаходимо папку «D: \ MyLisp» і натискаємо ОК.

В шляхах доступу до допоміжних файлів з'явиться новий рядок «D: \ MyLisp».

Приклад програми lisp, autocad

Мал. 3. «Шлях доступу до допоміжних файлів»

Натискаємо ОК. Тепер AutoCAD знає, де шукати наш файл і замість повного шляху до нього, досить написати тільки його ім'я.

Відкрити діалогове вікно і перевірка існування діалогу.

Функція відкриваємо діалогове вікно і повертає T (True), якщо діалог з таким ім'ям у цьому файлі є.

І повертає nil якщо діалог не знайдений.

Давайте для кращого розуміння в рядку

замінимо функцію (new_dialog «mp_paral» dcl_id) повертається значенням Т.

Вийде (if (not T) (exit)) - якщо не Т вийти. Іншими словами, якщо діалогове вікно не відкрилося завершити виконання програми.

Якщо все пройшло вдало, діалогове вікно відкриється в робочому вікні AutoCAD. Див. Рис. 5.

Приклад програми lisp, autocad

Мал. 5. Діалогове вікно DCL

LISP програма встане на паузу і буде очікувати дії користувача.

Вводимо значення в поля «Довжина», «Ширина», «Висота» і натискаємо на одну з двох кнопок. (ОК або Скасувати). AutoCAD повернеться в LISP програму.

Опис дій при натисканні кнопок і закриття діалогового вікна.

Для опис дій, які виконати програма при натисканні на кнопки використовується функція action_tile. У загальному вигляді вона виглядає так:

Таким чином такий вираз

Про користувальницької функції (raz_paral) ми поговоримо нижче.

Функція (done_dialog 1) - закриває діалогове вікно і передає числове значення, яке можна буде прочитати функцією (start_dialog)

У наступній сходинці

(Start_dialog) зчитує з яким числовим значенням було закрито діалогове вікно

Setq - привласнює це значення змінної ddi.

Вивантаження файлу діалогового вікна

Функція (unload_dialog dcl_id) - вивантажує діалогове вікно з порядковим номером dcl_id.

Функція defun.

Для створення функцій користувача призначена функція defun. У загальному вигляді вона виглядає так:

Користувацька функція (raz_paral) (розміри паралелепіпеда).

Програмний код створює функцію (raz_paral) показаний, на Рис. 6.

Мал. 6. «Користувацька функція raz_paral»

Функція (get_tile «eb_Dl«) - зчитує в діалоговому вікні вміст поля з кодом eb_Dl. Повертає рядкове значення (якщо в поле стояло 100. то повертається «100»).

Для того, щоб перетворити рядок в ціле число використовують функцію (atoi <строка>)

Таким чином, рядок

Зчитує вміст з поля «Довжина» (код поля eb_Dl), перетворює його в ціле число і привласнює його (за допомогою функції setq) змінної Dl.

Зчитує вміст з поля «Ширина» та запам'ятовує його в змінної Sh.

Зчитує вміст з поля «Висота» і запам'ятовує його в змінної Hi.

Функція (raz_paral) - не містить аргументів і тимчасових робочих змінних. Якщо змінні Dl, Sh, Hi вказати в якості робітників, то після закінчення виконання функції значення змінних будуть стерті з оперативної пам'яті. А нам потрібно, щоб після закінчення функції (raz_paral) ці змінні зберегли свої значення.

Після того, як функція створена, її можна викликати в будь-якому місці програми набравши (raz_paral).

Користувацька функція (mp_kub Dl Sh Hi).

Давайте, перетворимо програму, створену в уроці «Приклад простої програми LISP» в призначену для користувача функцію. Див. Рис. 7.

Приклад програми lisp, autocad

Мал. 7. «Користувацька функція mp_kub»

Для цього видаляємо «з:»

Додаємо аргументи Dl Hi Sh.

І розставляємо аргументи в програмі замість числа 200. як це показано на Рис.7.

В результаті у нас вийде призначена для користувача функція, показана на Рис. 8.

Приклад програми lisp, autocad

Мал. 7. «Користувацька функція mp_kub»

Після виконання функції mp_kub значення змінних р1 р2 р3 р4 р5 Р6 р7 р8 нам не потрібні. І щоб вони не зберігалися в оперативній пам'яті, додаємо їх в якості тимчасових робочих змінних.

Для того, щоб викликати цю функцію потрібно набрати

Загальна програма LISP з діалоговим вікном.

Загальна програма LISP з діалоговим вікном буде виглядати як на Рис. 9.

Приклад програми lisp, autocad

Мал. 9. »Загальна програма»

Програмний код програми mp_paral:

Завантажити діалогове вікно Mp_paral.dcl (Розмір файлу: 392 bytes)

Завантажити програму Mp_paral.lsp (Розмір файлу: 781 bytes)

Створює функцію користувача з ім'ям «mp_paral».

Префікс «з:» означає, що цю функцію можна буде використовувати як стандартну команду AutoCAD.

Досить ввести ім'я в командний рядок AutoCADа.

(/ Dcl_id nub Dl Sh Hi) - тимчасові робочі змінні, які використовуються в програмі.

Далі, йде створення користувальницької функції mp_kub (розглянуто вище).

Потім, створення користувальницької функції raz_paral (розглянуто вище).

Після цього програма здійснює управління діалоговим вікном (розглянуто вище).

Якщо змінна ddi = 1 виконати функцію (mp_kub Dl Sh Hi)

Мінлива ddi = 1. якщо користувач, в діалоговому вікні, натиснув на кнопку «ОК».

Якщо користувач натиснув на кнопку «Скасування», змінна ddi = 0 і функція (mp_kub Dl Sh Hi) виконана не буде.

Функція (princ) здійснює тихий вихід.

Остання «)» - означає закінчення функції mp_paral.

Завантаження та запуск програми mp_paral.

Для того, щоб перевірити роботу програми:

Створюємо новий файл Рис. 10.

Приклад програми lisp, autocad

Мал. 10. «Створення нового файлу»

Набираємо в ньому текст програми або копіюємо з сайту.

Зберігаємо файл в папці «D: / MyLisp» під ім'ям «mp_paral».

Далі завантажуємо програму і переходимо в AutoCAD. Див. Рис. 11

Приклад програми lisp, autocad

Мал. 11. «Завантаження програми»

У командному рядку вводимо mp_paral і натискаємо . Див. Рис. 12.

Приклад програми lisp, autocad

Мал. 12. «Командний рядок»

Відкриється діалогове вікно «Паралелепіпед». Див. Рис 13.

Приклад програми lisp, autocad

Мал. 13. «Діалогове вікно»

У ньому заповнюємо поля «Довжина», «Ширина», «Висота» і натискаємо на кнопку ОК.

У командному рядку з'явиться повідомлення: «Вкажіть базову точку:». Клацніть в будь-якої точки робочого вікна AutoCAD і він намалює Паралелепіпед. Див. Рис. 14.

Приклад програми lisp, autocad

Мал. 14. «Паралелепіпед»

Таким чином, в цій статті ми розглянули приклад створення програми LISP c діалогового вікна.

  • Як управляти діалоговим вікном з програми LISP.
  • Як додавати шлях доступу до допоміжних файлів AutoCAD.
  • Як створювати і використовувати призначені для користувача функції.

чи все у вас вийшло ?;

чи важко було виконати цей урок ?;

де у вас виникли труднощі?

Якщо ви хочете отримувати новини з мого сайту. Оформляйте підписку.

До нових зустрічей.

Схожі статті