АвтоЛИСП - реализация языка программирования
(append '((a)(b)) '((c)(d)) введет ((A)(B)(C)(D))
APPEND требует,чтобы ее параметры были в виде списков.
4.19 (apply )
Выполняет функцию, определенную / с
параметрами, заданными в /. Например:
(apply ' + '(1 2 3)) вводит 6
(apply 'stract' ("a" "b" "c")) вводит "abc"
APPLY работает как со встроенными (subrs), так и с определенными
пользователем (эти создаются как с помощью DEFUN, так и LAMBDA) функциями.
4.20 (ascii )
Эта функция вводит переход первого символа в ее знаковый
код ASCII (целые числа). Это то же, что и функция ASC в языке БЕЙСИК.
Например:
(ascii "A") вводит 65
(ascii "a") вводит 97
(ascii "BIG") вводит 66
4.21 (assoc )
Эта функция ищет список ассоциаций для единицы ()
как ключевого элемента и вводит содержимое . Если не
найден как ключ в , ASSOC вводит ноль. Например, предположим, что
список "al" определен как:
((name box) (width 3) (size 4.7263) (depth 5))
тогда:
(assoc 'size al) вводит (SIZE 4.7263)
(assoc 'weight al) вводит nil
Список ассоциаций часто используется для запоминания данных, которые
могут выбираться как "ключ". Это похоже на матрицы и структуры в других
языках программирования. Функция SUBST, описанная далее в этой главе,
обеспечивает удобные способы отмены значений, ассоциируемые с одним ключем
в перечне ассоциаций.
4.22 (atan [])
Если не задается, ATAN вводит арктангенс в радианах.
может быть отрицательным, диапазон вводимых углов от -pt до +pt
радиан. Например:
(atan 0.5) вводит 0.463647
(atan 1.0) вводит 0.785398
(atan -1.0) вводит -0.785398
(angtos (atan -1.0) 0 4) вводит "-45.0000"
Если заданы оба параметра ( и ), вводится арктангенс
/ в радианах. Если - ноль, вводится угол в плюс или
минус 1.570796 радиан (90 или -90 градусов) в зависимости от знака .
Например:
(atan 2.0 3.0) вводит 0.588002
(angtos (atan 2.0 3.0) 0 4) вводит "33.6901"
(atan 2.0 -3.0) вводит 2.553590
(angtos (atan 2.0 -3.0) 0 4) вводит "146.3099"
(atan -2.0 3.0) вводит -0.588002
(atan -2.0 -3.0) вводит -2.553590
(atan 1.0 0.0) вводит 1.570796
(angtos (atan 1.0 0.0) 0 4) вводит "90.0000
(atan -0.5 0.0) вводит -1.570796
(angtos (atan -0.5 0.0) 0 2) вводит "-90.00"
4.23 (atof )
Эта функция вводит преобразование строчки в действительные числа.
Например:
(atof "97.1") вводит 97.100000
(atof "3") вводит 3.000000
4.24 (atoi )
Эта функция вводит преобразование строки в целое число.
(atoi "97") вводит 97
(atoi "3") вводит 3
(atoi "3.9) вводит 3
4.25 (atom )
Эта функция вводит ноль, если - список, в противном случае
вводится T. Данные, поступающие не в виде строчек, проходят как atom.
Например, даны выражения:
(setq a '(x y z))
(setq b 'a)
тогда:
(atom 'a) вводит T
(atom a) вводит nil
(atom 'b) вводит T
(atom b) вводит T
(atom '(a b c)) вводит nil
Некоторые варианты ЛИСПа различаются в своих интерпретациях ATOMа,
так что поупражняйтесь в применении кода преобразования.
4.26 (Boole ...)
Это основная подразрядная булевая функция. - целое число от 0
до 15, представляющая одну из 16 возможных булевых функций на двух
переменных. Последовательные параметры в виде целых чисел подразрядно
(логически) скомбинированы, основываясь на этих функциях и истинностной
таблице:
Int1 Int2 Func bit
---------------------
0 0 8
0 1 4
1 0 2
1 1 1
Каждый бит имеет пару соответствующего бита ,
выбирая один горизонтальный ряд истинностной таблицы. Бит результата или
ноль, или 1, в зависимости от установки бита , соответствующего
этому ряду истиностной таблицы. Если соответствующий бит задан в ,
бит результата 1, в противном случае бит результата - 0.
Некоторые значения для эквивалентны стандартным булевым
операциям AND, OR, XOR и NOT. Они представлены ниже:
Функция Операция Бит результата 1,если...
-------------------------------------------------------
1 AND оба входных бита - 1
6 XOR только один из двух входных битов - 1
7 OR любой или оба из входных битов
8 NOT оба входных бита - 0 (чье-то
дополнение)
Например:
(Boole 1 12 5)
определяет логическое AND для значений 12 и 5. Результат 4. Аналогично:
(Boole 6 6 5)
определяет логическое XOR для значений 6 и 5,в результате - 3.
Вы можете применять другие значения для выполнения других
булевых операций, для которых эти имена не являются стандартными.
Например, если - 4 , биты результата заданы, если заданы
соответствующие биты в , но не в . Таким образом:
(Boole 4 3 14)
введет 12.
4.27 (boundp )
Эта функция вводит T, если имеет значение, близкое к нему (не
взирая на контекст). Если же нет значения, близкого к (или если оно
близко к нулю), вводится ноль. Например, заданы назначения:
(setq a 2)
(setq b nil)
тогда:
(boundp 'a) вводит T
(doundp 'b) вводит nil
4.28 caar, cadr, cddr, cadar, etc.
АвтоЛИСП обеспечивает связь CAR и CDR до четырех уровней вглубь.
Например, задано назначение:
(setq x '((a b) c d))
тогда:
(caar x ) эквивалентно (car (car x)) вводит A
(cdar x) эквивалентно (cdr (car x)) вводит (B)
(cadar x) эквивалентно (car (cdr (car x))) вводит B
(cadr x) эквивалентно (car (cdr x)) вводит С
(cddr x) эквивалентно (сdr (сdr x)) вводит (D)
(caddr x) эквивалентно (car (cdr (cdr x))) вводит D
В АвтоЛИСПе CADR частично применяется для получения координаты Y для
точек 2D и 3D ( второй элемент в списке из двух или трех действительных
чисел). Аналогично, CADDR может применяться для определения координаты Z
для точки 3D. Например:
(setq pt2 '(5.2 1.0 (2D точка)
(setq pt3 '(5.2 1.0 3.0) (3D точка)
тогда:
(car pt2) вводит 5.200000
(cadr pt2) вводит 1.000000
(caddr pt2) вводит nil
(car pt3) вводит 5.200000
(cadr pt3) вводит 1.000000
(caddr pt3) вводит 3.000000
4.29 (car )
Эта функция вводит первый элемент . Если
пустой, вводится ноль. Например:
(car '(a b c)) вводит A
(car '((a b) c)) вводит (A B)
(car '()) вводит nil
4.30 (cdr )
Эта функция вводит весь , кроме его первого элемента. Если
пустой, вводится ноль. Например:
(cdr '(a b c)) вводит (B C)
(cdr '((a b) c)) вводит (C)
(cdr '()) вводит nil
Когда параметры - разделенные точкой пары (см. ниже CONS),
CDR вводит второй элемент без включения его в список. Например:
(cdr '(a . b) вводит B
(cdr '(1 . "Text") вводит "Text"
4.31 (chr )
Эта функция вводит переход целых чисел, представленных в знаковом
коде ASCII, в однознаковую строку (аналогично функции CHRS в языке БЕЙСИК).
Например:
(chr 65) вводит "A"
(chr 66) вводит "B"
(chr 97) вводит "a"
4.32 (close )
Эта функция закрывает файл и вводит ноль. - дескриптор
файла (оприсатель), полученный из функции OPEN. После CLOSE дескриптор
файла не изменяется, но становится недействительным. Например,
представьте, что Х - действительный открытый дескриптор файла,
(close x )
закроет предполагаемый файл и введет ноль.
4.33 (command ...)
Эта функция выполняет команду АвтоКАДа в пределах АвтоЛИСПа и
всегда вводит ноль. Параметры, представляющие команды АвтоКАДа, и их
подкоманды, каждый параметр высчитывается в АвтоКАД в качестве ответа на
последующие подсказки. Имена команд и опции запускаются в виде строчек,
точки 2D как списки из двух действительных чисел и 3D точки как
списки из трех действительных чисел. Имена команд узнаются АвтоКАДом
только при выходе подсказки "Command". Например:
(setq pt1 '(1.45 3.23))
(setq pt2 (getpoint "Enter a point: "))
(command "line" pt1 pt2)
(command "")
Предполагая, что подсказка АвтоКАДа "Command" не выполняется,
указанная выше последовательность выражений устанавливает значение для
точки "pt1", выдает подсказку для точки "pt2" и выполняет команду
АвтоКАДа LINE с двумя точками как данными ввода. Параметрами COMMAND могут
быть строчки, действительные и целые числа или точки, как предусматри-
вается последовательностью подсказки для выполнения команды АвтоКАДа.
Нулевая строчка ("") эквивалентна печатанью пробела на клавиатуре. Вызов
COMMAND без параметров эквивалентен печатанию CTR C на клавиатуре; это
отменит большинство команд АвтоКАДа.
Команды, выполняемые из функции COMMAND, не отражаются на экране,
если система переменных АвтоКАДа CMDECHO (выбранная из SETVAR или GETVAR)
установлена на нуле. Функция COMMAND - основной метод выбора команд
АвтоКАДа из АвтоЛИСПа.
Вводимые функции пользователя
"GETxxx" (GETANGLE, GETSTRING, GETINT, GETPOINT) не могут применяться
внутри функции. Попытка проделать это, приведет в результате к
появлению сообщения:
"ошибка:забракованная АвтоКАДом функция" и выполнение функции
прекращается. Если ввод пользователя необходим, заранее задайте функции
GETxxx, как указано выше, или поместите их между удачными вызовами функции
COMMAND.
Если команда АвтоКАДа выполняется и строка,состоящая из единичного
мертвого хода ("/"), просчитывается как один из параметров функции COMMAND,
эта функция приостановит прямой ввод пользователя (или смещение). Это
идентично механизму паузы мертвого хода, которым снабжены меню. Однако,
поскольку мертвый ход является специальным контрольным знаком в ЛИСПе,
требуется два символа мертвого хода для того, чтобы получить один в
текстовой строке.
Если вы выдаете промежуточные команды в то время, когда функция
COMMAND приостановлена, она и остается приостановленной. Тем не менее, вы
можете выполнять команду ZOOM или PAN во время паузы функции COMMAND. Пауза
сохраняется до тех пор, пока АвтоКАД получает действительный ввод и в
работе нет никаких промежуточных команд.
Например:
(command "circle" "5,5" "r" "\\" "line" "5,5" "7,5" "")
начинает команду CIRCLE, устанавливает центральную точку 5,5 и затем-пауза,
позволяющая смещать радиус окружности на экране. Когда вы укажете
необходимые точки (или напечатаете необходимый радиус), функция
продолжает работу, рисуя линию от 5,5 до 7,5.
Меню ввода не отменяется паузой АвтоЛИСПа. Если элемент меню
активен когда функция COMMAND находится в паузе для ввода, это
требование ввода может быть удовлетворено при помощи меню. Если вы хотите
отменить и элементы меню, вы должны ввести мертвый ход в элемент
меню. Когда обнаружен действительный ввод, будут продолжаться как функция
COMMAND, так и элемент меню.
4.34 (cond ( ...)
Эта функция принимает в качестве параметров любое количество
списков. Она вычисляет первый элемент каждого списка (в установленной
последовательности) пока один из этих элементов введет значение, отличное
от нуля. Затем она вычисляет те выражения, которые следуют за тестом, и
вводит значение последнего выражения в подсписке. Если в подсписке только
одно выражение (например, пропущен ),вводится значение выражения
. COND - исходная условная функция в АвтоЛИСПе.
Например,в этом случае COND используется для выполнения расчетов
абсолютного значения:
(cond (minusp a) (-a))
(t a)
)
Если для "а" было установлено значение -10, будет введено 10. Как
показано, COND может применяться как функция типа "case". Общепринято
использовать T как последнее (по умолчанию) выражение. Далее,
другой пример. Задана ответная строка пользователя в виде символа "s", эта
функция проверяет ответ и вводит 1, если он "Y" или "y" и 0, если он "N"
или "n", в остальных случаях -nil (нуль).
(cond (( = s "Y") 1)
(( = s "y") 1)
(( = s "N") 0)
(( = s "n") 0)
( t nil)
)
4.35 (cons )
Это основной список КОНСтруктора. Он берет элемент () и список (), и вводит дополнение этого элемента в начало
списка. Например:
(cons 'a '(b c d)) вводит (A B C D)
(cons '(a) '(b c d)) вводит ((A) B C D)
Обратите внимание, что первый элемент может быть атомом в списке.
CONS также допускает атом на место параметра в , создающего
структуру, известную как dotted pair (точечная пара). Когда на экран
выдается точечная пара, АвтоЛИСП печатает период или точку между первым и
вторым элементом пары. Точечные пары занимают меньше места в памяти, чем
обычные списки; функция CDR может применяться для ввода второго атома.
Таким образом:
(cons 'a 'b) вводит ( A . B)
(car (cons 'a 'b)) вводит A
(cdr (cons 'a 'b)) вводит B
4.36 (cons )
Эта функция вводит косинус , где выражен в радианах.
Например:
(cos 0.0 ) вводит 1.000000
(cos pi ) вводит -1.000000
4.37 (defun ...)
DEFUN определяет функцию под именем (обратите внимание, что
имя функции автоматически взято в угловые скобки, так что она не должна
заключаться пользователем в скобки). За именем функции следует список
параметров (возможно пустой), за ним косая черта не обязательна, и имена
одного или более локальных символов для функции. Последний параметр (если
таковой имеется) и первый локальный символ должны быть отделены косой
чертой или хотя бы одним пробелом.
Если не объявляются ни параметры, ни локальные символы, после имени
функции должны быть пустые круглые скобки. Например:
(defun myfunc (x y)...) (функция принимает 2 параметра)
(defun myfunc (/a b)...) (функция имеет 2 локальных символа)
(defun myfunc (x/temp)...) (один параметр и один локальный
символ)
(defun myfunc ()...) (нет параметров и локальных символов)
Следующие за списком параметров и локальных символов одно или
несколько выражений вычисляются при выполнении функции.
Сама функция DEFUN вводит имя определенной функции. Если вызвана
определенная таким образом функция, ее параметры будут вычислены и
ограничены (подогнаны) параметрами символов. Локальные символы могут
применяться в функции без изменения их связи на внешних уровнях. После
вычисления результата последнего выражения, функция будет введена. Все
предыдущие выражения в функции имеют побочный эффект. Сама функция DEFUN
вводит имя определенной функции. Например:
(defun add (x y)
(+ x y)
)
(add 10 5) вводит 15
(add -7 . 4) вводит 2,60000
и
(defun dots ( x y/temp)
(setq temp (strcat x "..."))
(strcat temp y)
)
(dots "a" "b" ) вводит "а...b"
(dots "from" "to") вводит "from...to"
Никогда не применяйте имя встроенной функции или символа в качестве
, поскольку это сделает встроенную функцию недоступной.
4.37.1. Функции библиотек и автоматическая загрузка
Определения функций могут храниться в файле и загружаться при помощи
функции LOAD АвтоЛИСПа (эта функция описана дальше в этой главе). Если
существует файл "acad.lsp", АвтоЛИСП будет загружать его автоматически
каждый раз при введении графического редактора АвтоКАДа; вы можете
применять эту функцию для создания библиотеки полезных функций и для
создания гарантии присутствия этой библиотеки.
4.37.2. Функции С:ххх - дополнение команд АвтоКАДа
Вы можете ввести дополнительные команды в АвтоКАД, применяя функцию
DEFUN для определения функций, вводящих в работу эти команды. Для того,
чтобы применяться как команды АвтоКАДа, эти функции должны придерживаться
следующих правил:
1. Функция должна иметь имя следующей формы: "С:ХХХ", где все буквы
- верхнего регистра. Часть имени "С" должна присутствовать всегда, часть
"ХХХ" может быть именем команды по вашему выбору, при условии, что
она не дублирует никаких команд АвтоКАДа, встроенных или внешних.
2. Функция должна быть определена с нулевым списком параметров (но
локальные символы могут присутствовать).
Например, функция: нарисовать квадрат при помощи Полилиний
определяет следующее:
(defun C:PSQUARE ('pt1 pt2 pt3 pt4 len)
(setq pt1 (getpoint "Lower left corner:"))
(setq len (getdist pt1 "Length of one side:"))
(setq pt2 (polar pt1 0.0 len))
(setq pt3 (polar pt2 ('PI 2.0) len))
(setq pt4 (polar pt3 PI len))
(Command "PLINE" pt1 pt2 pt3 pt4 "C")
)
Функции, определенные таким образом, могут быть вызваны просто
введением части "ХХХ" имени функции, при появлении подсказки АвтоКАДа
"Command:". Если "ХХХ" - неизвестная команда, АвтоКАД попытается вызвать
функцию АвтоЛИСПа "С:ХХХ" без параметров. Например, при функции C:PSQUARE
диалог будет следующим:
Сommand: PSQUARE
Lower left corner: (enter a point)
Нижний левый угол: (введите точку)
Length of one side: (enter a distance)
Длина стороны: (введите размер)
Затем функция вызовет команду АвтоКАДа PLINE и введет в ее
подсказки: нарисовать желаемый квадрат. Добавление таким образом команды
в АвтоКАД - очень мощное свойство АвтоЛИСПа. Однажды определенная,
новая команда может использовать все свойства, предоставляемые
АвтоЛИСПом. Фактическое применение новой команды не требует окружения
имени команды параметрами, так что эта введенная АвтоЛИСПом команда,
применяется также, как и любая другая команда АвтоКАДа.
4.38.(distance )
Эта функция вводит расстояние между 2D точками и , где
2D точка - список из двух действительных чисел.
Например:
(distance '(1.0 2.5) '(7.7 2.5)) вводит 6.700000
(distance '(1.0 2.5) '(3.0 4.0)) вводит 2.828427
4.39. (eq )
Эта функция определяет, идентичны ли и , то есть,
они фактически граничат с одним и тем же объектом (например,SETQ). EQ
вводит T, если два выражения идентичны, в противном случае вводится ноль.
Обычно она применяется для определения фактической идентичности двух
списков. Например, даны следующие назначения:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
тогда:
(eq f1 f2) вводит ноль (f1 и f2 - не один и тот же
список!)
(eq f3 f2) вводит T (f3 и f2 - абсолютно одинаковые
списки!)
См. также функцию EQUAL.
4.40 (equal )
Эта функция определяет, равны ли и , т.е. вычисляются
ли они к одному предмету. Например, заданы следующие назначения:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
тогда:
(equal f1 f2) вводит T (f1 и f2 вычисляются к одному и тому
же)
(equal f3 f2) вводит Т (f2 и f3 абсолютно одинаковые списки)
Обратите внимание, что в то время, как два списка равны, они могут
быть неидентичны, атомы, когда они равны, они всегда идентичны. И,
наконец, если любые два списка или атомы идентичны, они всегда равны.
4.41.(eval )
Вводит результат вычисленных (выражений), где - любое
выражение ЛИСПа. Например, заданы назначения:
(setq a 123)
(setq b 'a)
тогда:
(eval 4.0) вводит 4.000000
(eval (abs - 10 )) вводит 10
(eval a) вводит 123
(eval b) вводит 123
4.42.(exp )
Эта функция вводит е, возведенное в степень (обычный
антилогарифм (antilog)). Она вводит действительные числа. Например,
(exp 1.0) вводит 2.718282
(exp 2.2) вводит 9.025013
(exp -0.4) вводит 0.670320
4.43. (expt )
Эта функция вводит , возведенную в определенную .
Если оба параметра целые числа, результат будет целым числом. В противном
случае, результат будет действительным числом. Примеры:
(expt 2 4) вводит 16
(expt 3.0 2.0) вводит 9.000000
4.44. (fix )
Эта функция вводит преобразование в действительное число.
может быть как целым, так и действительным. Если оно
действительное, оно усекается до ближайшего целого числа путем
отбрасывания десятичной части. Например:
(fix 3) вводит 3
(fix 3.7) вводит 3.000000
4.45.(float )
Эта функция вводит преобразование в действительное число.
может быть как целым, так и действительным. Например:
(float 3) вводит 3.000000
(float 3.7) вводит 3.700000
4.46.(foreach )
Эта функция проходит через , присваивая каждому
элементу и вычисляет каждое .
Любое количество может быть определено. FOREACH вводит
результат вычисления последнего . Например:
(foreach n'(a b c)(print n))
эквивалентно
(print a)
(print b)
(print c)
кроме того FOREACH вводит результат только последнего вычисленного
выражения.
4.47.(gcd )
Эта функция вводит наибольший общий знаменатель и .
и должны быть целыми. Например:
(gcd 81 57) вводит 3
(gcd 12 20) вводит 4
4.48.(getangle [][]
Для пользователя эта функция приостанавливает ввод угла.
- произвольная строка, которая появляется на экране в качестве подсказки,
а - произвольная базовая точка 2D. Вы можете определить угол,
напечатав цифру в текущем формате единиц угла АвтоКАДа. Отметьте, что хотя
текущий формат единиц угла может быть выражен в градусах, градах и т.д.,
эта функция всегда вводит угол в радианах.
Вы можете также "показать" АвтоЛИСПу угол, отмечая точками два 2D
расположения на экране графики. АвтоКАД рисует линию резиновой нити от
первой точки до позиции текущего перекрестия, что поможет вам при
визуализировании угла.
Необязательный параметр функции GETANGLE (если он определен)
предполагается быть первой из этих двух точек, позволяя вам "показать"
АвтоЛИСПу" угол, отмечая еще одну точку. Вызов GETANGLE демонстрирует
следующее:
(setq ang (getangle))
(setq ang (getangle '(1.0 3.5))
(setq ang (getangle "Which way?")
(setq ang (getangle '(1.0 3.5)"Which way?")
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETANGLE. Попытка сделать это приведет к сообщению "Can't
reenter Autolisp" (Не могу повторно ввести АвтоЛИСП"). См. также
GETORIENT и INITGET.
4.49. (getcorner [])
Функция GETCORNER вводит точку так же, как и GETPOINT. Однако,
GETCORNER требует параметр точки и чертит прямоугольник из
точки по мере перемещения пользователем пересечения на экране.
Для детального ознакомления см. GETPOINT и INITGET. В качестве ответа на
требование GETCORNER, вы не можете ввести другое выражение ЛИСПа.
4.50.(getdist [][])
Для пользователя эта функция приостанавливает ввод расстояния.
- произвольная строка, которая появляется на экране в качестве
подсказки, а - произвольная базовая точка. Вы можете определить
расстояние, напечатав цифру в текущем формате единиц расстояния АвтоКАДа.
Отметьте, что хотя текущий формат единиц расстояния может быть выражен в
футах, дюймах (архитектурный), эта функция всегда вводит расстояние в
действительных числах.
Вы можете "показать" АвтоЛИСПу расстояние, отметив точками два
расположения на графическом экране. АвтоКАД рисует линию резиновой нити от
первой точки до позиции текущего перекрестия, что поможет вам при
визуализировании расстояния. Необязательный параметр функции GETDIST
(если он определен) предполагается быть первой из этих двух точек,
позволяя вам "показать" АвтоЛИСПу расстояние, отмечая еще одну точку.
Следующие примеры иллюстрируют применение GETDIST.
(setq dist (getdist))
(setq dist (getdist '(1.0 3.5))
(setq dist (getdist "How far?")
(setq dist (getdist '(1.0 3.5)"How far?")
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETDIST. См. также INITGET.
4.51.(getint[])
Для пользователя эта функция приостанавливает ввод целых чисел и
возвращает это целое число. - произвольная строка, которая
появляется на экране в качестве подсказки.
Например:
(setq num (getint))
(setq num (getint "Enter a number:")) (Введите
число)
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETINT. См. также INITGET.
4.52.(getkword [])
Функция GETKWORD требует от пользователя ключевого слова. Перед
вызовом GETKWORD, устанавливается список действительных ключевых слов,
применяя функцию INITGET (описанную ниже). GETWORD вводит ключевое
слово, выравнивая в строку ввод пользователя. АвтоКАД повторит попытку,
если ввод не соответствует одному из этих ключевых слов. Пустой (нулевой)
ввод введет нуль (если это допустимо). Нуль также вводится, если создана
строка ключевых слов. Например:
(initgent 1 "Yes Nо")
(setq x (getkword "Are you sure? (Yes or No)"))
подскажет пользователю и установит символ Х как для "Yes", так и для
"No", в зависимости от ответа пользователя. Если подсказка не
соответствует ни одному из ключевых слов, или если пользователь
отвечает нулем, АвтоКАД попросит пользователя повторить процедуру.
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETKWORD. См. также INITGET.
4.53.(getorient [][])
В АвтоЛИСПе углы всегда представлены в радианах, с направлением в
ноль-радиан вправо ( восток) и углом, увеличивающимся в направлении против
часовой стрелки. Таким образом, будут иметь место некоторые
преобразования, если пользователь выберет различные нуль-градусные базы
или различные направления для увеличения угла посредством команды INITS
или систем переменных ANGBASE и ANGDIR.
GETORIENT похож на функцию GETANGLE, но находится под влиянием
нуль-градусной базы и направления для увеличения угла совсем по-другому,
чем GETANGLE. GETANGLE должна применяться в том случае, когда вам
необходима величина вращения (относительный угол), тогда как GETORIENT
должна применяться для получения ориентации (абсолютный угол).
Представьте, что команда АвтоКАДа INITS применялась для выбора нуль-
градусной базы 90 градусов (север) и направления для увеличения угла - по
часовой стрелке. В таблице показано, что введут функции GETANGLE и
GETORIENT (в радианах) для репрезентивного ввода переменных пользователем
(в градусах).
|Input (degrees) |GETANGLE |GETORIENT |
|0 |0.000000 |1.570796 |
|90 |1.570796 |3.141593 |
|180 |3.141593 |4.712389 |
|90 (-90 270?) | 4.712389 |0.000000 |
Как показано в таблице, GETANGLE принимает на обработку направление
увеличения угла, но игнорирует ноль-градусную базу. Таким образом, вы
можете применять GETANGLE для получения величины вращения при
вводе/вставке блока, так как ввод нуль-градуса всегда введет ноль
радиан. С другой стороны, GETORIENT принимает на обработку как ноль-
градусную базу, так и направление увеличения угла. Таким образом, вы
должны применять GETORIENT для получения таких углов, как угол базовой
линии для Элемента Текста. Например, для заданных выше установок UNITS,
ориентация базовой линии для нормальной горизонтальной линии текста будет
90 градусов.
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETORIENT. См. также GETANGLE и INITGET.
4.54. (getpoint [] [])
Для пользователя эта функция приостанавливает ввод точки. -
необязательная базовая точка, а - произвольная строка, которая
появляется на экране в качестве подсказки. Вы можете определить точку
поинтером или напечатав координату в текущем формате единиц. Если
присутствует параметр необязательной базовой точки , АвтоКАД чертит
линию резиновой нити от этой точки до позиции текущего перекрестия.
Например:
(setq p (getpoint))
(setq p (getpoint "Where?")) "Где?"
(setq p (getpoint '(1.5 2.0) "Second point:")
Обычно GETPOINT вводит точку 2D (список из двух действительных
чисел). Применяя функцию INITGET для установки контрольной отметки
"точка.3D", вы можете заставить GETPOINT ввести точку 3D (список из
трех действительных чисел).
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETPOINT. См. также GETCORNER и INITGET.
4.55.(getreal [])
Для пользователя эта функция приостанавливает ввод действительного
числа и возвращает это действительное число. - произвольная
строка, которая появляется на экране в качестве подсказки. Например:
(setq val (getreal)
(setq val (getreal "фактор шкалы:")
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETREAL. См. также INITGET.
4.56.(getstring [][])
Для пользователя эта функция приостанавливает ввод строки и вводит
эту строку. Если задан и он не равен нулю, вводимая строка может
содержать пробелы (и должна поэтому быть завершена нажатием RETURN). В
других случаях ввод строки завершается пробелом или RETURN.
- произвольная строка, появляющаяся на экране в качестве
подсказки. Например:
(setq s (getstring))
(setq s (getstring "What's your first name?"))
(setq s (getstring T "What's your full name?"))
Если ввод пользователя должен быть одной из нескольких опций
(ключевых слов), вместо GETSTRING может применяться описанная ранее
функция GETKWORD.
Вы не можете ввести другое выражение ЛИСПа в качестве ответа на
требование GETSTRING.
4.57.(getvar )
Эта функция отыскивает значения системных переменных АвтоКАДа. Имя
переменной дожно быть заключено в двойные кавычки "". Например,
предположим, что самый последний из определенных нами радиус округления был
0.25 единиц:
(getvar "FILLETRAD") введет 0.250000
Список текущих системных переменных АвтоКАДа можно найти в
приложениях А книги пользователя АвтоКАДа. См. также функцию SETVAR.
4.58.(graphscr)
Функция GRAPHSCR переключается с текстового экрана на графический
в одно-экранных системах (типа функциональной клавиши "Flip screen" в
АвтоКАДе). GRAPHSCR всегда вводит ноль. См. также функцию TEXTSCR.
4.59.(if )
Эта функция условно вычисляет выражения. Если не ноль,
тогда она вычисляет , в противном случае она вычисляет
. Последнее выражение () - необязательное. IF вводит
значение выбранного выражения; если пропущено, а
равно нулю, IF вводит ноль. Например:
(if (=1 3)"Yes!!" "No") вводит "No"
(if (=2 (+1 1)) "Yes!!") вводит "Yes!!"
(if (=2 (+3 4)) "Yes!!") вводит nil
4.60.(initget [][])
Эта функция создает различные опции для дальнейшего
Страницы: 1, 2, 3
|