Функции ввода данных и указания объектов


Эти функции дают возможность пользователю вводить данные в интерактивном режиме. К основным функциям ввода данных и указания объектов относятся следующие:

- (initget [<флаг>] [<строка>]) - задание ключевых слов и ограничений ввода для функций getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword;

- (getkword [запрос]) - ввод ключевого слова;

- (getint [запрос]) - ввод целого числа в диапазоне от -32768 до +32767;

- (getreal [запрос]) - ввод вещественного числа;

- (getdist [<точка1>] [запрос]) - получение расстояния (как вещест-венного числа) с помощью ввода числа (на клавиатуре в текущей форме линейных единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задана точка с помощью аргумента <точка1>, то расстояние можно получить с помощью ввода числа (на клавиатуре) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>;

- (getangle [<точка1>] [запрос]) - получение угла (как вещественного числа в радианах) с помощью ввода числа (на клавиатуре в текущей форме угловых единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задан аргумент <точка1>, то угол можно получить с помощью ввода числа (на клавиатуре в радианах) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>; при вводе угла с помощью числа он принимается с учетом значения системных переменных ANGBASE и ANGDIR; возвращаемое значение учитывает значение ANGBASE и игнорирует значение ANGDIR;

- (getorient [<точка1>] [запрос]) - получение угла как в функции getangle, однако возвращаемое значение не учитывает значений ANGBASE и ANGDIR (т. е. как будто ANGBASE=0, ANGDIR=0);

- (getpoint [<точка1>] [запрос]) - ввод точки с помощью клавиату-ры или мыши; если задан аргумент <точка1>, то при вводе точки с помощью мыши рисуется резиновая нить, начинающаяся в точке, заданной аргументом <точка1>;

- (getcorner <точка1> [запрос]) - ввод точки с помощью клавиатуры или мыши; при вводе точки с помощью мыши рисуется резиновая рамка, начинающаяся в точке, заданной аргументом <точка1>;

- (getstring [<флаг>] [<запрос>]) - ввод строки; если задан аргумент <флаг> и он отличен от nil, то в строке, вводимой пользователем, допускаются пробелы (признаком конца является <Enter>); если аргумент <флаг> отсутствует или задан равным nil, то признаком конца строки является пробел или <Enter>;

- (getvar <имя>) - чтение текущего значения системной переменной с наименованием, заданным аргументом <имя>.

Вызов функции initget должен предшествовать в программе обращению к функциям getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, поскольку устанавливает в этих функциях ограничения на ввод пользователем данных. В частности, initget может сохранять за пользователем возможность нажатия клавиши <Enter> вместо ввода данных (например, для выбора значения по умолчанию), а может и не сохранять. Аргумент <флаг> функции initget - это битовый флаг, который должен быть целым числом (от 0 до 255), являющимся суммой битов с соответствующими каждому из них весовыми значениями (нумеруются по степеням числа 2). Биты описываются в табл. 9.3. Если бит не установлен, то его значение в битовом флаге считается равным нулю.

 

Таблица 9.1 – Значения битов функции initget

 

Бит Назначение
Не разрешает пустой ввод (пустой ввод- это нажатие только клавиши <Enter>)
Не разрешает ввод нуля
Не разрешает ввод отрицательных чисел
Разрешает указание точек за пределами лимитов, несмотря на значение системной переменной LIMCHECK
Данный бит не задействован
Заставляет AutoCAD использовать штриховую линию вместо сплошной для резиновой нити и резиновой рамки; если значение системной переменной POPUPS равно нулю, то AutoCAD игнорирует данный бит
Запрещает ввод третьей координаты для точки в функции getdist
Разрешает произвольный ввод в качестве ключевого слова; преобладает над другими битами и ключевыми словами; в частности, данный бит позволяет игнорировать значение бита 1

 

Примеры использования битового флага:

(initget 1) - не разрешен пустой ввод;

(initget 3) - не разрешены пустой ввод и ввод нуля (3=1+2);

(initget 7) - не разрешены пустой ввод, ввод нуля и ввод отрицательных чисел (7=1+2+4);

Аргумент <строка> функции initget - это строка, ограниченная двойными кавычками с двух сторон, которая задает ключевые слова, являющиеся допустимыми вариантами ввода. В аргументе <строка> различные варианты ключевых слов разделяются одним или большим количеством пробелов, например: "А Б В Г Д". Если пользователю при выборе ключевого слова разрешаются сокращенные варианты, тогда обязательная часть ключевого слова и аргументе <строка> должна быть указана в верхнем регистре, например: "ПЕРесечение". В этом случае допустимыми вариантами ввода являются "ПЕР", "пер", "ПЕРЕ", "пере", "перес", "ПЕРЕСЕЧЕН", "ПЕРЕСЕЧЕНИЕ" (после трех обязательных букв может идти любое количество необязательных букв, вплоть до набора полного ключевого слова; при вводе букв верхний и нижний регистры равноправны); недопустимыми вариантами будут "П", "ПЕ", "п", "пе".

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

(initget "выход") - здесь допустимыми вариантами ввода будут "х", "хо", "ход" или "выход", "вых", "выхо".

Если ключевое слово в аргументе <строка> указано только в верхнем или только в нижнем регистре, то рядом через запятую можно указать сокращенный вариант: "КРАСНЫЙ, КР" - равносильно записи "красный".

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

Листинг 9.9. Пример использования функции getint

(initget 6) (setq numb (getint "Введите номер участка (<1>): "))

В этом примере сначала устанавливаются ограничения на будущий ввод целого числа (не допускаются ноль и отрицательные числа). Допускается пустой ввод. Функция getint выводит на экран запрос "Введите номер участка (<1>) : ". Ее возвращаемым значением будет nil, если пользователь ответит простым нажатием клавиши <Enter>, или введенное пользователем допустимое целое число (например, 17). В случае ввода пользователем недопустимого целого числа (например, 0 или -2) функция getint выведет сообщение об ошибочном значении и будет ожидать допустимого варианта ввода.

В программе, приведенной в листинге 9.9, далее должна быть предусмотрена обработка пустого ввода для того, чтобы в этом случае присвоить переменной numb значение по умолчанию (1):

(if (not numb) (setq numb 1))