У цьому уроці ми розглянемо, як з програми LISP управляти діалоговим вікном.
Як приклад ми будемо використовувати діалогове вікно створене в попередньому уроці: «Діалогове вікно».
І відразу почнемо з програмного коду, який управляє діалоговим вікном.
Мал. 1. «Програмний код управління діалоговим вікном.»
Управління діалоговим вікном з LISP програми відбувається в кілька етапів:
Завантаження файлу діалогового вікна
Спочатку необхідно завантажити DCL-файл, який містить потрібний діалог.
Якщо діалогове вікно завантажиться, то дана функція поверне порядковий номер завантаженого DCL-файлу в даному сеансі роботи з системою AutoCAD.
За допомогою оператора присвоєння setq запам'ятовуємо цей номер в змінної dcl_id.
Якщо діалогове вікно не завантажиться, то функція поверне негативне ціле число.
Якщо ім'я файлу в аргументі вказано без повного шляху, то система AutoCAD намагається знайти файл в папках підтримки, де знаходяться допоміжні файли.
Додаємо шлях доступу до допоміжних файлів.
Щоб не писати повний шлях до нашого діалогового вікна, давайте додамо шлях до нашої папці «D: \ MyLisp» в шляху доступу до допоміжних файлів AutoCAD. Зробимо з неї папку підтримки.
Для цього клацаємо по «Кнопці додатки» і в вікні, по кнопці «Параметри». Див. Рис. 2.
Мал. 2. Кнопка додатки
Відкриється вікно «Налаштування». Див. Рис 3.
Мал. 3. «Додавання шляху доступу до допоміжних файлів»
У ньому переходимо на вкладку «Файли».
Клацаємо на [+] напроти пункту «Шлях доступу до допоміжних файлів».
Далі натискаємо на кнопку «Додати». Потім на кнопку «Огляд ...». Відкриється вікно «Огляд папок».
Знаходимо папку «D: \ MyLisp» і натискаємо ОК.
В шляхах доступу до допоміжних файлів з'явиться новий рядок «D: \ MyLisp».
Мал. 3. «Шлях доступу до допоміжних файлів»
Натискаємо ОК. Тепер AutoCAD знає, де шукати наш файл і замість повного шляху до нього, досить написати тільки його ім'я.
Відкрити діалогове вікно і перевірка існування діалогу.
Функція відкриваємо діалогове вікно і повертає T (True), якщо діалог з таким ім'ям у цьому файлі є.
І повертає nil якщо діалог не знайдений.
Давайте для кращого розуміння в рядку
замінимо функцію (new_dialog «mp_paral» dcl_id) повертається значенням Т.
Вийде (if (not T) (exit)) - якщо не Т вийти. Іншими словами, якщо діалогове вікно не відкрилося завершити виконання програми.
Якщо все пройшло вдало, діалогове вікно відкриється в робочому вікні AutoCAD. Див. Рис. 5.
Мал. 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.
Мал. 7. «Користувацька функція mp_kub»
Для цього видаляємо «з:»
Додаємо аргументи Dl Hi Sh.
І розставляємо аргументи в програмі замість числа 200. як це показано на Рис.7.
В результаті у нас вийде призначена для користувача функція, показана на Рис. 8.
Мал. 7. «Користувацька функція mp_kub»
Після виконання функції mp_kub значення змінних р1 р2 р3 р4 р5 Р6 р7 р8 нам не потрібні. І щоб вони не зберігалися в оперативній пам'яті, додаємо їх в якості тимчасових робочих змінних.
Для того, щоб викликати цю функцію потрібно набрати
Загальна програма LISP з діалоговим вікном.
Загальна програма LISP з діалоговим вікном буде виглядати як на Рис. 9.
Мал. 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.
Мал. 10. «Створення нового файлу»
Набираємо в ньому текст програми або копіюємо з сайту.
Зберігаємо файл в папці «D: / MyLisp» під ім'ям «mp_paral».
Далі завантажуємо програму і переходимо в AutoCAD. Див. Рис. 11
Мал. 11. «Завантаження програми»
У командному рядку вводимо mp_paral і натискаємо
Мал. 12. «Командний рядок»
Відкриється діалогове вікно «Паралелепіпед». Див. Рис 13.
Мал. 13. «Діалогове вікно»
У ньому заповнюємо поля «Довжина», «Ширина», «Висота» і натискаємо на кнопку ОК.
У командному рядку з'явиться повідомлення: «Вкажіть базову точку:». Клацніть в будь-якої точки робочого вікна AutoCAD і він намалює Паралелепіпед. Див. Рис. 14.
Мал. 14. «Паралелепіпед»
Таким чином, в цій статті ми розглянули приклад створення програми LISP c діалогового вікна.
- Як управляти діалоговим вікном з програми LISP.
- Як додавати шлях доступу до допоміжних файлів AutoCAD.
- Як створювати і використовувати призначені для користувача функції.
чи все у вас вийшло ?;
чи важко було виконати цей урок ?;
де у вас виникли труднощі?
Якщо ви хочете отримувати новини з мого сайту. Оформляйте підписку.
До нових зустрічей.