Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:

Visual LISP и секреты адаптации AutoCAD
Купить книгу
Глава из книги "Visual LISP
и секреты адаптации AutoCAD"
Н.Н. Полещука.
На домашнюю страницу автора

ГЛАВА 2

Язык AutoLISP

Язык программирования AutoLISP - это вариант языка LISP, в который добавлены функции доступа к объектам, таблицам и словарям системы AutoCAD. Основой языка LISP является работа со списками, которые могут иметь произвольную длину и включать элементы разной природы (числа, текстовые строки, указатели файлов и т. д.). В то же время в языке доступны обычные арифметические вычисления, логические операции, работа с файлами и т. д. С помощью языка AutoLISP можно писать программы или вводить в командной строке выражения, которые затем вычисляет система AutoCAD. Для чтения и разбора выражений в систему AutoCAD встроен интерпретатор AutoLISP.

В данной главе изучаются основные функции языка AutoLISP и приводятся практические примеры. На базе языка в главах 4 и 5 будет рассмотрено написание файлов меню и программирование диалоговых окон.

Для разработки и отладки программ на AutoLISP удобно пользоваться входящей в систему AutoCAD 2000 интегрированной средой Visual LISP, изучаемой в главе 3. Там же будут рассмотрены дополнительные функции, доступные только после загрузки Visual LISP и повышающие эффективность работы системы AutoCAD.

Вопросы языка AutoLISP, рассматриваемые в данной главе, не являются специфическими для системы AutoCAD 2000. Поэтому предлагаемый материал может быть использован для изучения теми читателями, которые пишут программы на языке AutoLISP в версиях 10-14.

2.1. Интерпретатор AutoLISP

В AutoCAD входит интерпретатор AutoLISP, начинающий работать, если вы в командной строке в ответ на стандартную подсказку Команда: (Command:) введете открывающую скобку (. В этот момент AutoCAD настраивается на прием и вычисление выражения AutoLISP, которое должно иметь форму списка, т. е. начинаться открывающей скобкой и заканчиваться закрывающей, а элементы списка должны отделяться друг от друга пробелами. Например, для получения суммы трех чисел вы можете ввести:

(+   223.75  16.002  89.899)

Как только вы завершите ввод своего выражения нажатием клавиши <Enter>, AutoCAD вычислит указанное выражение и выдаст результат (рис. 2.1): 329.651 (замечу, что десятичная точка в вещественных числах играет роль разделителя между целой и дробной частями).


Рис. 2.1. Использование вычислителя выражений интерпретатора AutoLISP
Замечание
Клавиатурный ввод выражений AutoLISP встречается сравнительно редко. Обычно выражения AutoLISP записываются в текстовый файл с расширением lsp, который затем загружается в AutoCAD с помощью функции load (см. разд. 2.2.4).

2.1.1. Вычисляемые выражения

В приведенном примере для вычисления было предложено выражение, открывающееся и закрывающееся круглыми скобками и состоящее из четырех элементов: первый - имя функции сложения (+), остальные - аргументы функции, т. е. слагаемые (223.75, 16.002 и 89.899). Это иллюстрирует форму вычисляемых выражений языка AutoLISP:

(<функция> [<аргумент1> [<аргумент2> ... [<аргументN>]...]])

Здесь <функция> - это имя функции, <аргумент1>, <аргумент2>, ..., <аргументN> - аргументы функции, разделяемые, по крайней мере, одним пробелом. Квадратные скобки в приведенной форме указывают на возможное отсутствие находящихся между ними аргументов. Количество аргументов зависит от синтаксиса функции. Существуют функции, которые вызываются без аргументов. Алфавитный список функций AutoLISP приведен в приложении 5.

С точки зрения AutoLISP все, что заключено в круглых скобках, является списком, который следует обработать как вычисляемое выражение.

Основное правило AutoLISP - баланс скобок, т. е. количество открывающих скобок должно быть равно количеству закрывающих. Иначе AutoCAD, обнаружив дисбаланс (например, если пользователь забыл ввести конечную скобку), выдаст об этом сообщение (рис. 2.2).


Рис. 2.2. Сообщение о дисбалансе скобок

Для разрешения ситуации, изображенной на рис. 2.2, необходимо ввести закрывающую скобку и нажать клавишу <Enter>. После этого вы получите результат вычисления. В интегрированной среде разработки Visual LISP (см. гл. 3) предусмотрены механизмы проверки скобок в файлах с текстами программ.

В качестве любого аргумента функции может быть введено некоторое вычисляемое выражение, ограниченное скобками, или символ AutoLISP (о символах см. разд. 2.2).

Выражения AutoLISP могут быть как простыми, так и составными, т. е. в них могут в качестве элементов использоваться другие выражения, причем разделяющими знаками в выражениях являются круглые скобки, пробелы и двойные кавычки (двойные кавычки должны ограничивать с двух сторон текстовые константы - о текстовых или строковых константах см. разд. 2.2).
Например:

(-  (+  56.022  78.11)  (+  123.77  78.0))

Здесь - - имя функции (вычитание), которой переданы два аргумента в виде выражений, причем каждое из них является операцией сложения (т. к. в них использована функция +). Сначала интерпретатор AutoLISP вычислит выражения во внутренних скобках (в нашем примере получатся результаты 134.132 и 201.77), а затем подставит эти значения и вычислит выражение (- 134.132 201.77), что должно дать результат -67.638 (отрицательное число).

2.1.2. Функция setq

Интерпретатор AutoLISP вычисляет значение каждого введенного выражения и возвращает его в среду AutoCAD. На рис. 2.1 видно, что возвращено значение 329.651. Возвращаемое значение, в свою очередь, либо может быть передано для дальнейших вычислений в выражение более высокого уровня, как в последнем примере разд. 2.1.1 (аргументы функции верхнего уровня были вычисляемыми выражениями), либо может быть сохранено в переменной (человеку, знакомому с программированием, ясно, что это - именованные участки памяти для хранения данных) с помощью функции присвоения setq, имеющей следующий синтаксис:

(setq <переменная1> <выражение1> [<переменная2> <выражение2> ... [<переменнаяN> <выражениеN>] ... ])

Функция setq может использоваться с любым количеством аргументов, которое должно быть обязательно четным и не менее двух. В качестве аргументов <переменная1>, <переменная2> и т. д. могут использоваться любые символы (имена) AutoLISP, не занятые в наименованиях функций. О символах речь пойдет в разд. 2.2. В качестве аргументов <выражение1>, <выражение2> и т. д. могут использоваться выражения AutoLISP, имена переменных или константы (например, числа).

Функция setq - основное средство для сохранения значений, возвращаемых другими выражениями.
Пример:

(setq myd (- (+ 56.022 78.11) (+ 123.77 78.0)))

Значение выражения, которое вычислялось в разд. 2.1.2, будет сохранено в переменной myd.

В дальнейшем прочитать значение переменной myd можно с помощью операции ! (восклицательный знак). Если в командной строке AutoCAD в ответ на стандартную подсказку Команда: (Command:) ввести !myd, то AutoCAD выдаст текущее значение переменной myd (в нашем примере: 329.651).

2.1.3. Комментарии

В текст программы полезно вставлять комментарии, поясняющие, например, особенности алгоритма. Комментарием считается часть строки, начиная с символа; (точка с запятой), после которого не следует сразу же символ | (вертикальная черта), и кончая последним символом строки. Закомментированной может быть вся строка программы.

Если комментарий нужно вставить в середину строки, тогда началом комментария должны быть символы ;|, а концом комментария - символы |; (причем конец комментария может располагаться на другой строке).

; Закомментирована вся строка
(setq two_pi (+ pi pi))       ; Закомментирован конец строки
(setq md (+ 56.022;| внутренний
 комментарий |;78.11))
(command "_CIRCLE" '(0 0) 50) ; рисование окружности



Copyright © Сайт поддержки пользователей САПР by Victor Tkachenko