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

В тех случаях, когда программируемой операции предшествуют некоторые предварительные выкладки, внутри функции if используется функция progn, позволяющая совершить последовательно несколько операций и подчиняющаяся формату (progn [выражение]...).

4.3. Использование ключевых слов

Ключевые слова в Автолиспе обычно используются для указания пути при ветвлении программ или подтверждения сделанного выбора. Осуществляются эти операции функцией getkword, записываемой в формате

(getkword [запрос])

и обязательно сопровождаемой функцией initget.

(initget [биты] [строка]). Функция устанавливает ключевые слова и режимы, в которых работают функции группы getxxx, кроме getstring и getvar. В практике часто используется конструкция:

(initget 1 “Yes No”).

Режимы работы функций определяются битовыми значениями, которые накладывают определенные ограничения на ввод данных. В частности, использованный в примере бит 1 запрещает пустой ввод, бит 2 - ввод нулевого значения, бит 4 - ввод отрицательных чисел.

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

• подобно тому, как это осуществляется при вводе в командную строку опций Автокада, часть ключевого слова записывается прописными буквами, которые и используются в качестве аббревиатуры, а остальная часть - строчными буквами (например: “LType”, “eXit”, “toP”);

• ключевое слово записывается прописными буквами, а сразу следом за ним через запятую записывается аббревиатура (например: “LTYPE,LT” ). Некоторое неудобство этого способа заключается в том, что аббревиатура обязательно должна включать первую букву слова. Поэтому запись “EXIT,X” не будет восприниматься.

Если ключевые слова записаны целиком прописными или строчными буквами, они должны вводиться полностью.

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

(initget (+ 1 2 4))

(setq lenline

(getreal "\nВведите длину отрезка:_”)

).

Битовые значения представлены арифметической функцией (+ 12 4) только с целью наглядности. Обычно битовые значения, если они используются (например, в описываемой в разделе 6.6 системной переменной OSMODE), сразу представляются их суммой. В рассматриваемом случае это должно выглядеть так:

(initget 7).

Более подробно принципы использования функции initget освещены в [1, 3, 4].

Возвращаясь к примеру, описанному в разд. 4.1, организуем запрос, нужно ли перемещать набор в новое положение.

(initget “Yes No”)

(setq x (getkword “\nПepeмecтить набор? (Yes or No): <N>"))

(if (= x “Yes”)

(command “move” ss “” pt1 pause)

)

В этом примере немаловажно следующее обстоятельство. В функции initget опущен аргумент биты, следовательно на ввод не накладываются никакие ограничения. Это дает возможность установить выбор по умолчанию, которое в данном случае представляет собой отказ от перемещения набора. Поэтому пустой ввод, т.е. нажатие клавиши Enter, вызывает именно эту реакцию. Ввод же литер “Y”, “у” или слов “Yes”, “yes” организует базовую точку набора pt1, после чего программа будет ожидать указание нового положения базовой точки.

4.4. Вычерчивание болта

Ранее уже говорилось о том, что оформление стандартных элементов чертежей (узлов, деталей и т.п.) в виде блоков приводит к разрастанию графической базы данных до немыслимых размеров. Целесообразнее написать программу, которая обрисовывала бы часто используемые детали в соответствии с заданными параметрами. Рассмотрим структуру такой программы на примере вычерчивания болта (рис. 1).