(initget
(initget 1 “Yes No”).
Режимы работы функций определяются битовыми значениями, которые накладывают определенные ограничения на ввод данных. В частности, использованный в примере бит 1 запрещает пустой ввод, бит 2 - ввод нулевого значения, бит 4 - ввод отрицательных чисел.
Аргумент строка содержит ключевые слова, подчиняющиеся определенным правилам. Каждое ключевое слово должно отделяться от других одним или несколькими пробелами, из доступных символов содержать только буквы, цифры и дефис, при ответах на запрос можно использовать аббревиатуры, если ключевые слова записаны одним из двух следующих способов:
• подобно тому, как это осуществляется при вводе в командную строку опций Автокада, часть ключевого слова записывается прописными буквами, которые и используются в качестве аббревиатуры, а остальная часть - строчными буквами (например: “LType”, “eXit”, “toP”);
• ключевое слово записывается прописными буквами, а сразу следом за ним через запятую записывается аббревиатура (например:
Если ключевые слова записаны целиком прописными или строчными буквами, они должны вводиться полностью.
Функция 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):
(if (= x “Yes”)
(command “move” ss “” pt1 pause)
)
В этом примере немаловажно следующее обстоятельство. В функции initget опущен аргумент
4.4. Вычерчивание болта
Ранее уже говорилось о том, что оформление стандартных элементов чертежей (узлов, деталей и т.п.) в виде блоков приводит к разрастанию графической базы данных до немыслимых размеров. Целесообразнее написать программу, которая обрисовывала бы часто используемые детали в соответствии с заданными параметрами. Рассмотрим структуру такой программы на примере вычерчивания болта (рис. 1).
Основными параметрами болта являются: наружный
Рис. 1. Условное изображение болта. Обозначения точек соответствуют идентификаторам, принятым в программе
;;; ===============================================
(defun C:BOLT ()
;;; Ввод параметров болта
(setq p5 (getpoint “Insertion point:_"))
(setq dia (getdist “\nInput diameter:_”))
(setq l1 (getdist “\nInput length of bolt:_"))
(setq I2 (getdist “\nInput length of screw:_"))
;;; Угловые точки головки болта
(setq p6 (polar p5 (/ pi 2.0) dia))
(setq p7 (polar p6 pi (* dia 0.7)))
(setq p8 (polar p7 (+ pi (/ pi 2.0)) (* 2.0 dia)))
(setq p9 (polar p8 0.0 (* dia 0.7)))
;;; Концевые точки ребер головки
(setq p1 (polar p8 (/ pi 2.0) (* dia 0.5)))
(setq p4 (polar p1 (/ pi 2.0) dia))
;;; Угловые точки стержня болта
(setq p2 (polar p1 0.0 (+ l1 (* dia 0.7))))