Программирование в среде Visual LISP
Справочная система
Справку по любому термину AutoLISP можно получить в общей справочной системе AutoCAD. Но среда AutoLISP располагает своей справочной службой HELP (рис. 2.4).
В справке три основных раздела, относящихся к программированию на AutoLISP:
- AutoLISP Reference (Справочник по AutoLISP). Здесь собраны все команды и все функции AutoLISP;
- Visual LISP Developer's Guide (Руководство разработчика на Visual LISP). Здесь содержатся все основные алгоритмы с примерами применения языка на практике;
- Visual LISP Tutorial (Учебник по Visual LISP) - хорошее пособие для начинающих пользователей.
Задание 2.4
Найти в справке основные операторы для работы с числами и текстом.
В окне Visual LISP for AutoCAD выберите команду HELP - Visual LISP Help Topics - Содержание - AutoLISP Functions -Operators. В левой части окна откроется список операторов, а в правой части помещены комментарии и примеры (рис. 2.5). Например, об операторе сравнения (= numstr [numstr] ...) сказано, что он применим и к числам и к тексту. Здесь numstr - число или строка. Оператор возвращает значение TRUE, если аргументы или строки равны, иначе возвращает NIL.
Примеры:
(= 4 4.0) returns T, (= 499 499 500) returns nil, (= 20 388) returns nil, (= "me" "me") returns T, (= 2.4 2.4 2.4) returns T, (= "me" "you") returns nil.
Синтаксис AutoLISP
Прежде, чем выполнять задания по составлению практических программ в среде Visual LISP, рассмотрим правила синтаксиса и работу некоторых функций.
Программа представляет собой набор операторных блоков. Каждый блок заключен в круглые скобки. Внутри пары круглых скобок на первом месте стоит оператор (функция), а далее следуют операнды (параметры, аргументы функции). Разделителем элементов являются пробелы.
(ОПЕРАТОР ПАРАМЕТР1 ПАРАМЕТР2 ПАРАМЕТР3 ПАРАМЕТР4) (ФУНКЦИЯ АРГУМЕНТ1 АРГУМЕНТ2 АРГУМЕНТ3 АРГУМЕНТ4)
Рассмотрим для примера арифметические операторы для операций с числами. Арифметические операторы имеют следующие обозначения:
- + сложение;
- - вычитание;
- * умножение;
- / деление.
Наберите в командной строке следующее выражение (sqrt (- (* 5.5 9.5) 3.25)) ↵
Здесь (sqrt num) - функция, возвращающая вещественный корень квадратный из целого или вещественного числа num.
Вначале производится умножение, затем вычитание, затем извлекается корень квадратный. В ответ программа выдаст число 7.0.
В качестве другого примера рассмотрим строковые функции
- STRCAT функция конкатенации, объединяет строки-операнды;
- SUBSTR возвращает часть строки. Первый аргумент задает строку, второй - позицию первого символа, третий - количество символов подстроки.
- STRLEN возвращает количество символов строки, включая пробелы.
Наберите в командной строке такие выражения. Оставьте пробелы после I и Love.
(strcat "I " "Love " "You" ".")↵ (substr "I love you." 3 4) ↵ (strlen "I love you.") ↵
Программа даст ответы: "I Love You.", "love", 11
Приведем еще несколько функций для работы с числами.
Функция | Описание |
---|---|
= | Сравнение на равенство. Возвращает True, если аргументы равны между собой. Иначе возвращает nil. |
/= | Сравнение на неравенство. Возвращает True, если аргументы не равны между собой. Иначе возвращает nil. |
< | Сравнение меньше. Возвращает True, если каждый аргумент численно меньше следующего. Иначе возвращает nil. |
> | Сравнение больше. Возвращает True, если каждый аргумент численно больше следующего. Иначе возвращает nil. |
<= | Сравнение меньше или равно. Возвращает True, если каждый аргумент численно меньше или равен следующему. Иначе возвращает nil. |
>= | Сравнение больше или равно. Возвращает True, если каждый аргумент численно больше или равен следующему. Иначе возвращает nil. |
Полный список функций можно найти в справке AutoLISP в разделе AutoLISP Developer's Guide - Appendxes - AutoLISP Function Synopsis - Basic Functions (рис. 2.6).
Более подробное описание языка AutoLISP приведено в следующей лекции.
Упражнения
Создать программы AutoLISP по приведенным текстам. Изменить параметры. Сохранить файлы в новой папке LISP. Включить папку в маршруты поддержки.
-
Построение домика с крышей по заданным размерам. После построения замкнутого многоугольника запускаем команду зумирования с параметром Extents.
(defun c:domik () (command "_pline" "0,2" "0,0" "2,0" "2,2" "2.5,2" "1,3" "-0.5,2" "0,2" "") (command "_zoom" "_e"))
-
Построение линии длиной 50 от указанной точки вдоль оси Y. Попробуйте дополнить программу: как в предыдущем задании, зумированием растяните изображение на весь экран.
(defun c:line50 (/ pt) ;Creates a line of length 50 relative Y (princ "Please click a point:") (setq pt (getpoint)) (command "_line" pt "@0,50" "") )
-
Построение окружности радиуса 30 с центром в указанной точке. Измените программу. Введите в параметры вторую переменную rad. Значение этой переменной также должно запрашиваться.
(defun c:circle30 (/ pt) ;Creates a circle of radius 30 (princ "Please click a point: ") (setq pt (getpoint)) (command "_circle" pt "30" "") )
-
Построение красной линии между указанными точками
(defun c:redline (/ startpt endpt) (setq startpt (getpoint "Select the redline start point:")) (setq endpt (getpoint "Select the redline end point")) (command "_line" startpt endpt "") (command "_chprop" "_last" "" "_color" "red" "" ) )
-
Последняя команда CHPROP (Изменить свойства) имеет много параметров. Поэтому посмотрите протокол прохождения в AutoCAD этой процедуры:
Command: redline Select the redline start point:Select the redline end point_line Specify first point: Specify next point or [Undo]: Specify next point or [Undo]: Command: _chprop Select objects: _last 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: _color New color [Truecolor/COlorbook] <BYLAYER>: red Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: nil
-
Запустите отдельно команду CHPROP, чтобы закрасить линию желтым цветом. Программа подсказывает, по какой форме задать цвет Truecolor: Red,Green, Blue:. Поэтому желтый цвет нужно задать как 255,255,0.Протокол операций будет выглядеть следующим образом:
Command: chprop Select objects: 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: c New color [Truecolor/COlorbook] <BYLAYER>: t Red,Green,Blue: 255,255,0 Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: *Cancel*
-
В задании 2.3 была создана процедура построения гантели с двумя сферами. Дополните процедуру дополнительными построениями, так чтобы получилась фигура, изображенная на рис. 2.7.
Ключевые термины
IDE - Integrated Development Environment - интегрированная среда разработки, часть пользовательского интерфейса.
Visual Lisp - среда AutoCAD для программирования на языке Auto Lisp.
Маршрут поиска файлов поддержки - список адресов файлов, в которых программа производит поиск заданных процедур.
Краткие итоги
Хотя выражения AutoLisp могут вводиться непосредственно в командную строку, удобно представлять их в виде кода процедуры, которую можно хранить в файле. Процедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp.
Вопросы
- Как открыть Visual LISP Editor?
- Какие окна и панели инструментов имеет Visual LISP Editor?
- Какие элементы процедуры заключаются в круглые скобки?
- Как отделяются комментарии?
- Как загружаются файлы Auto LISP в программу AutoCAD?
- Как добавить файл в список маршрутов поиска файлов поддержки?