Введение в Автолисп | страница 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