Введение в Автолисп | страница 17



Функции getangle и getorient требуют ввода величины угла. Разница заключается в том, что getorient запрашивает угол, измеряемый от положительного направления оси X, getangle - от направления некоторой определенной базовой линии. При этом направление отсчета определяется значением системной переменной Автокада ANGDIR.

В примере использованы две из перечисленных функций. Первая запрашивает точку вставки блока, вторая - некоторое расстояние (в данном случае - длину резьбы на теле болта):


(setq pt1 (getpoint “\nУкажите точку вставки:_ “)),

(setq I2 (getdist “\nУкажите длину резьбы:_ “)).


К семейству getxxx относятся еще две функции: getvar и getenv, но они не являются средством общения с пользователем. Первая, уже использованная ранее, служит для извлечения из Автокада числовых, а вторая - строковых системных переменных.

Все перечисленные функции позволяют осуществить ввод данных на любом этапе работы программы, но они не могут быть использованы при выполнении команды Автокада, т.е. не могут быть включены в команду. Например, если определен некоторый набор примитивов ss, выбрана базовая точка набора pt1, а сам набор необходимо перенести в другую точку, указываемую оператором, нельзя использовать конструкцию


(command “move” ss “” pt1

(getpoint “\nPoint of displacement:_ ")

),


поскольку функция getpoint расположена внутри функции command. Автолисп ее не поймет и прекратит выполнение программы.

Для прерывания команды Автокада Автолисп использует описанный ранее внутренний идентификатор pause. Правильным для описываемой ситуации является формат:


(command “move” ss “” pt1 pause).


4.2. Условное ветвление программ

Ветвление программ по заданному условию свойственно всем языкам программирования. Например, в Фортране оператор условного перехода может выглядеть подобно следующему:


IF (условие) GO TO метка,


или в Паскале:


if условие then процедура1 else процедура2.


Аналогичные операции могут быть выполнены и в Автолиспе. Для условного ветвления программ Автолисп предлагает две функции: cond (основная) и if.

(cond (условие1 операция1 ...) ...). Функция воспринимает любое число списков как аргументы. Просматривая по очереди первые элементы списков, отыскивает первый, отличный от nil и выполняет операцию. Пример использования этой функции представлен в программе plw.lsp, описываемой несколько ниже.

(if условие операция [альтернативная операция]). Эта функция оценивает условие, и если оно не nil