Выбрать главу

Автолисп содержит ряд функций, объединенных общей структурой getxxx, вызывающих паузу в работе программ и ожидающих ввода запрашиваемых данных. Эти функции перечислены в табл. З.

Tаблица 3. Функции запроса данных

Имя функции Характер запрашиваемой информации
getint Целое число из командной строки
getreal Вещественное число из командной строки
getstring Строковая константа из командной строки
getpoint Координаты точки из командной строки или прямым указанием точки на экране
getcorner Координаты одного из противолежащих углов окна или секущей рамки из командной строки или прямым указанием на экране
getdist Целое или вещественное число, определяющее необходимое расстояние, из командной строки или прямым указанием отрезка на экране
getangle Величина угла из командной строки или указанием трех точек на экране
getorient To же
getkword Альтернативный выбор по ключевому слову

Функции getint, getreal и getstring требуют ввода в командную строку параметра соответствующего типа.

Функции 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, выполняет операцию, в противном случае выполняет альтернативную операцию. Если альтернативная операция опущена или условие есть nil, функция возвращает nil.