Смекни!
smekni.com

АвтоЛИСП - реализация языка программирования (стр. 3 из 10)

Используйте ваш текстовый редактор для добавления указанной строчки в GP.LSP, затем запустите АвтоКАД и загрузите программу.

С добавлением функции C:PATH, мы добавили команду PATH в АвтоКАД. Вы можете проверить команду, осуществив следующий ввод:

Команда: PATH

Начальная точка дорожки: 2,2

Конечная точка дорожки: 9,8

Половина ширины дорожки: 2

Радиус плиты: .2

Расстояние между плитами: .1

3.6 Замораживание

Так как наша команда PATH выполняется, все команды, которые она представляет в АвтоКАД, будут передаваться в область команд/подсказок и все выбранные ею точки будут отмечаться на экране маленькими черточками (метками). Раз командная функция налажена, для появления вводных команд АвтоЛИСПа точно похожих на команды АвтоКАДа, этот ввод может быть отменен.

Применение функции GETVAR необходимо, чтобы получить текущие значения режимов АвтоКАДА BLIPMODE и CMDECHO. Они сохраняются через SETQ в SBLIP и SCMDE. Затем мы применяем функцию SETVAR для того, чтобы установить обе эти переменные АвтоКАДа в нулевое положение; этим делая недействительными метки и переданные команды. Обратите внимание, что мы установили эти переменные в нулевое положение после получения ввода от пользователя через GPUSER. Мы хотим, чтобы метки остались для подтверждения ввода пользователя.

После того, как мы закончили черчение дорожки, мы используем функцию SETVAR для восстановления первоначального значения этих переменных.

Сохраните файл, запустите АвтоКАД и попробуйте сейчас команду PATH. Испробуйте ее со всех сторон, определяя различные виды ввода как при помощи поинтера, так и клавиатуры.

3.7 Резюме

За короткий период времени вы ввели новую команду в АвтоКАД. Во многих системах КАД вам понадобится следующее: доступ к исходному коду системы КАД, квалификация программиста и большой запас знаний для проделывания операций, подобно этой. Открытая архитектура АвтоКАДа и АвтоЛИСПа предоставляет вам возможности, которые большинство продавцов систем КАД приберегают для себя.

Вы можете применять этот пример как исходную ступень к мастерству в АвтоЛИСПе. Вы можете начать с модифицирования и расширения команды PATH, создание которой вы сейчас завершили. Попробуйте начертить квадратные и шестиугольные плиты. Для более полной ориентации, создайте новую команду, которая принимает центральную точку и площадь, и рисует квадрат определенной площади, заполненный плитами. Вы можете просмотреть только что записанные функции в тесной связи с оставшимися главами этого руководства. Здесь мы дали очень краткое описание работы и возможностей функций. АвтоЛИСП содержит много возможностей, опробовав которые и ближе познакомившись с ними, вы сможете полнее их использовать.

Поскольку вы запустили АвтоЛИСП в работу, вы перешли на новый уровень совершенства в АвтоКАДе. По мере использования АвтоЛИСПа для автоматизации изготовления чертежей и конструкторских задач, вы освободите себя от различных деталей и сможете полностью посвятить себя проектированию. В "лице" АвтоЛИСПа вы приобрели неутомимого помощника, который будет служить вам десятилетия.

Глава 4

Функции АвтоЛИСПа

АвтоЛИСП снабжен многочисленными предопределенными функциями. Каждая функция вызывается путем задания ее имени (верхний или нижний регистр) как первого элемента списка, с параметрами (если такие существуют) как последующими элементами списка.

В этой главе вы найдете алфавитный список основных базовых функций АвтоЛИСПа. Для удобства пользования функции сгруппированы в предметном указателе в конце справочника. Вы обнаружите, что многие функции стандартные, их можно обнаружить в каждой реализации языка программирования ЛИСП. Другие же функции уникальны для интерактивных графических программных средств, обеспечиваемых АвтоКАДом. В последующих главах описываются некоторые функции с улучшенными свойствами.

4.1 (+ <number> <number>...)

Эта функция вводит сумму всех <чисел>. Она может применяться с действительными и целыми числами. Если <числа> - целые числа, результат будет выражен целыми числами; если же одно из чисел - действительное, целые числа переходят в действительные и результат будет выражен действительным числом.

Например:

(+1 2) вводит 3

(+1 2 3 4.5) вводит 10.500000

(+1 2 3 4.0) вводит 10.000000

4.2 (- < number > <number >...)

Эта функция вычитает второе <число> из первого и вводит разницу. Если задано более двух <чисел>, из первого числа вычитается сумма от второго до последнего элемента и вводится конечный результат. Если задано только одно <число>, вводится результат вычитания его из нуля. Эта функция может применяться с действительнвми и целыми числами, со стандартными правилами перехода.

Например:

(-50 40) вводит 10

(-50 40.0 2) вводит 8.000000

(-50 40.0 2.5) вводит 7.500000

(-8) вводит -8

4.3 (*<number> <number>...)

Эта функция вводит произведение всех <чисел>. Она может применяться с действительными и целыми числами со стандартными правилами перехода.

Например:

(* 2 3) вводит 6

(* 2 3 4.0) вводит 8.000000

(* 3 -4.5) вводит -13.500000

4.4 (/ <number> <number>...)

Эта функция делит первое <число> на второе и вводит частное. Если задано более двух <чисел>, первое <число> делится на произведение второго и всех последующих чисел и вводится конечное частное.

Примеры:

(/100 2) вводит 50

(/100 2.0) вводит 50.000000

(/100 20 2.0) вводит 2.500000

(/100.0 20 2) вводит 2.500000

(/100 20 2) вводит 2

(/135 360) вводит 0

(/135 360.0) вводит 0.375000

4.5 (=<number> <number>...)

Это относительная функция "равно чему-либо". Она вводит T, если все определенные <числа> равны в числовом отношении, во всех других случаях вводится ноль. Эта функция также действительна для строчек.

Примеры:

(=4 4.0) вводит T

(=20 388) вводит nil

(=2.4 2.4 2.4) вводит T

(=499 499 500) вводит nil

(="me" "me") вводит T

(="me" "you") вводит nil

4.6 (/= <num1> <num2>)

Это относительная функция "не равно чему-либо". Она вводит T, если <число 1> не равно <числу 2>, в противном случае вводится nil. Если задано более двух параметров, функция не определяется. Например:

(/=10 20) вводит T

(/=5.43 5.43) вводит nil

(/=5.43 5.44) вводит T

4.7 (< <number> <number>...)

Это относительная функция "менее, чем". Она вводит T, если первое <число> меньше второго, и nil если наоборот. Если задано более двух <чисел>, T вводится в том случае, если каждые из чисел меньше, чем <число> справа от него. Например:

(< 10 20) вводит T

(< 4 4) вводит nil

(< 357 33.2) вводит nil

(< 2 3 88) вводит T

(< 2 3 4 4) вводит nil

4.8 (<= <number> <number>...)

Это относительная функция "менее или равно". Она вводит T, если первое <число> менее или равно второму и nil в других случаях. Если задано более двух <чисел>, T вводится в том случае, если каждое число меньше или равно <числу>, стоящему справа от него. Например:

(<= 10 20) вводит T

(<= 4 4) вводит T

(<= 357 33.2) вводит nil

(<= 2 9 9) вводит T

(<= 2 9 4 5) вводит nil

4.9 (> <number> <number>...)

Это относительная функция "больше, чем" . Она вводит T, если первое <число> больше, чем второе и nil, если наоборот. Если задано больше двух <чисел>, T вводится при условии, что каждое число больше стоящего справа. Например:

(> 120 17) вводит T

(> 57 57) вводит nil

(> 3.5 1792) вводит nil

(> 77 4 2) вводит T

(> 77 4 4) вводит nil

4.10 (>= <number> <number>...)

Это относительная функция "больше или равно". Она вводит T, если первое <число> больше или равно второму, и nil в противном случае. Если задано больше двух <чисел>, T вводится при условии, что каждое число больше или равно <числу> справа от него. Например:

(>= 120 17) вводит T

(>= 57 57) вводит T

(>= 3.5 1792) вводит nil

(>= 77 4 4) вводит T

(>= 77 4 9) вводит nil

4.11 (- <number>)

Эта функция вводит подразрядный НЕТ (NOT) (чье-то дополнение) <чисел>. <Число> должно быть целым. Например:

(-3) вводит -4

(-100) вводит -101

(- -4) вводит 3

4.12 (1+ <number>)

Эта функция вводит <число>, увеличенное на единицу (приращенное). <Число> может быть действительным или целым. Например:

(1+ 5) вводит 6

(1+ -17.5) вводит -16.500000

4.13 (1- <number>)

Эта функция вводит <число>, уменьшенное на единицу (декрементированное). <Число> может быть действительным или целым. Например:

(1- 5) вводит 4

(1- -17.5) вводит -18.500000

4.14 (abs <number>)

Эта функция вводит абсолютное значение <числа>. <Число> может быть действительным или целым. Например:

(abs 100) вводит 100

(abs -100) вводит 100

(abs -99.25) вводит 99.250000

4.15 (and <expr>...)

Эта функция вводит логическое И (AND) списка выражений. Она вводит ноль, если любое из выражений вычисляется к нулю, в противном случае она вводит T. Например, заданы следующие назначения:

(setq a 103)

(setq b nil)

(setq c "string")

тогда:

(and 1.4 a c) вводит T

(and 1.4 a b c) вводит nil

4.16 (angle <pt1> <pt2>)

Эта функция вводит угол (в радианах) между 2D точками <pt1> и <pt2>, когда 2D точка - перечень двух действительных чисел. Например:

(angle '(1.0 1.0) '(1.0 4.0)) вводит 1.570796

(angle '(5.0 1.33) '(2.4 1.33)) вводит 3.141593

4.17 (angtos <angle> [<mode> [<precision>]])

Эта функция берет <угол> (действительный, в радианах) и вводит его отредактирован-ным в виде строки. Параметр <mode>/<режим> - целое число; следующим образом он диктует тип выполняемого редактирования:

Режим ANGTOS Формат Редактирования

------------ ---------------------

0 Градусы

1 Градусы/минуты/секунды

2 Грады

3 Радианы

4 Топографические единицы

Параметр <precision>/<точность> - целое число, которое выбирает желаемое количество десятичных знаков точности. <режим> и <точность> соответствуют системе переменых AUNITS и AUPREC АвтоКАДа. Если вы пропускаете параметры, будут применяться текущие установки AUNITS и AUPREC.