Лабораторная работа №5.
Тема: Встроенные функции языка. Дополнительные функции. Их применение.
Цель: Изучить назначение и формат используемых встроенных функций, дополнительных функций для выполнения прикладных задач САПР.
Ход работы.
1. Запустить AutoCAD одним из возможных способов. Загрузить Visual LISP.
2. Ознакомиться с встроенными функциями языка AutoLISP.
По назначению все встроенные функции языка AutoLISP условно можно разделить на следующие:
• ввода данных различного типа;
• манипулирования с данными;
• работы с числовыми данными;
• управления процессом вычисления (выполнения) функций;
• проверки выполнения условий;
• вывода данных различного типа;
• доступа к примитивам и средствам AutoCAD;
• особые.
Пользователь может переопределять или модифицировать функции, расширять и создавать свои собственные.
Ниже будет рассмотрен синтаксис основных встроенных функций языка AutoLISP, которые могут быть использованы в процессе разработки пользователем собственных функций.
2.1. Функции для ввода данных различного типа.
(PROMPT <«Поясняющее сообщение «>) – обеспечивает ввод сообщения;
Например:
(PROMPT «ВВЕДИТЕ ОСНОВНЫЕ ДАННЫЕ ЗАДАЧИ «)
ВВЕДИТЕ ОСНОВНЫЕ ДАННЫЕ ЗАДАЧИ ; результат
(GETINT <«Поясняющее сообщение «>) — ввод целого числа;
Например:
(GETINT «\n ВВЕДИТЕ ЧИСЛО ЭТАПОВ РЕШЕНИЯ:»)
ВВЕДИТЕ ЧИСЛО ЭТАПОВ РЕШЕНИЯ:3 ; ввод целого числа 3
(GETREAL <«Поясняющее сообщение «>) — ввод действительного числа;
Например:
(GETREAL «\n ПРОДОЛЖИТЕЛЬНОСТЬ ОПЕРАЦИИ «)
ПРОДОЛЖИТЕЛЬНОСТЬ ОПЕРАЦИИ 15.5 ; ввод действительного числа
(GETSTRING [<СR>][<«Поясняющее сообщение «>]) — ожидание ввода строки с пробелами, если есть <CR>, иначе ввод строки до 1-го пробела;
Например:
(GETSTRING «\n ВВЕДИТЕ ФАМИЛИЮ: «) ;вызов функции
ВВЕДИТЕ ФАМИЛИЮ: КУДРЯВЦЕВ ; ввод фамилии на запрос
(GETDIST [<Т1>][<«Поясняющее сообщение «>]) — ожидание ввода точки T2, если есть T1, тогда расстояние R = T2 — T1, иначе вводится расстояние R — действительное или целое число;
Например:
(GETDIST ‘(1.0 1.0) «\n ВВЕДИТЕ ВТОРУЮ ТОЧКУ «)
ВВЕДИТЕ ВТОРУЮ ТОЧКУ 7,7 ;ввод координат второй точки (7,7)
8.48528 ; результат — расстояние от точки (1,1) до (7,7)
Примечание! Точки задаются списком из двух координат по X и Y, например, точке T1 может соответствовать список ‘(Ю.О 15.0);
(GETANGLE [<Т1>][<«Поясняющее сообщение «>]) — ожидание ввода точки T2, если есть T1, тогда угол равен углу между отрезком [T1 T2] и осью X, иначе вводится значение угла в радианах;
Например:
(GETANGLE ‘(1.0 1.0) «\n УГОЛ НАКЛОНА ЛИНИИ «) ; вызов
УГОЛ НАКЛОНА ЛИНИИ 5,3 ; ввод координат
; второй точки
0.463648 ; результат — угол
; наклона линии (в радианах)
(GETPOINT [<Т1>][<«Поясняющее сообщение «>]) — ожидание ввода списка значений координат X и Y точки, если нет T1, иначе рисует «резиновую» линию от T1 до положения курсора;
Например:
(GETPOINT «ВВЕДИТЕ БАЗОВУЮ ТОЧКУ ВТ «) ; вызов функции
ВВЕДИТЕ БАЗОВУЮ ТОЧКУ ВТ 6,9 ; ввод точки на запрос
(GETCORNER <Т1>[<«Поясняющее сообщение «>]) — изображение «резинового» прямоугольника от точки T1 до расположения курсора;
Например:
(GETCORNER P1 «ВВЕДИТЕ ДИАГОНАЛЬНУЮ ТОЧКУ P2») ; вызов функции
ВВЕДИТЕ БАЗОВУЮ ТОЧКУ P2 ; прорисовка прямоугольника,
;диагональ которого соединяет точки P1 и P2
(GETKWORD [<«Поясняющее сообщение «>]) — ожидание ввода ключевого слова, описанного функцией (INITGET…);
(INITGET [<Сумма чисел>][<«ключевые слова…»>]) — установка режима ввода данных. Сумма чисел реализует несколько режимов.
Здесь числа выбираются из следующего ряда:
1 — запрещен пустой ввод;
2 — запрещен ввод нуля;
4 — запрещен ввод отрицательных чисел;
8 — пределы координат не контролируются;
16 — ввод трехмерных точек;
32 — используется пунктир для изображения «резиновых» линии или прямоугольника;
64 — игнорируется координата Z трехмерной точки
(только в GETDIST AutoCAD 11-й и 12-й версий);
128 — возвращает произвольный код с клавиатуры;
ключевые слова — определение списка ключевых слов через пробел;
Например:
(INITGET 1 «ДА НЕТ») ; вызов функции (пустой ввод запрещен)
(GETKWORD «ИЗМЕНИТЬ РЕЖИМ РАБОТЫ ? (ДА НЕТ) «)
ИЗМЕНИТЬ РЕЖИМ РАБОТЫ ? (ДА НЕТ) ДА ; ввод ключа
(READ-LINE) — ожидание ввода строки с клавиатуры;
Например:
(READ-LINE) ; вызов функции
ВНИМАТЕЛЬНО РАССТАВЛЯЙТЕ СКОБКИ ; ввод текста с клавиатуры
(READ-CHAR) — ожидание ввода символа с клавиатуры для преобразования его в числовой код ASCII;
Например:
(READ-CHAR) ; вызов функции
А ; ввод символа
65 ; результат выполнения — код ASCII.
(READ-LINE <F1>) — ввод записи из файла <F1>;
Например:
(READ-LINE (OPEN «C:\\CM\\CMl.TXT» «r»))
Примечание! При выполнении данной команды требуется наличие данного файла на диске
(READ-CHAR <F1>) — ввод символа из записи файла <F1>. Файл <F1> предварительно должен быть открыт. Это делается следующим образом:
(SETQF1 (OPEN»C:\\KUDR\\FILE.DAT» «r»))
Первая запись в кавычках — местоположение файла в каталоге, вторая -режим чтения (read). Кроме этого, могут быть режимы «w» (write -записи),»а» (add — добавления).
После открытия файла и использования его необходимо закрыть:
(CLOSE F1) ; закрытие файла <F1>
2.2. Функции для манипулирования с данными
(SETQ <переменная> <выражение>) — присвоение переменной значения выражения (атом, список, функция,…);
Например:
(SETQ А 10 ; присвоение переменной А значения 10
В «ABS» ; присвоение В текстовой константы «ABS»
С (COS 0.6)) ; присвоение С значения (COS 0.6))
Или
(SETQ А 10 В «ABS» С (COS 0.6) ) ; вызов функции
(SET <‘символ> <выражение>) — присвоение символу с апострофом значения выражения (атом, список, функция, …);
Например:
(SET ‘A 10) ; присваивает символу ‘A значение 10
10 ; результат
(CAR <список>) — возвращение первого элемента списка;
Например:
(CAR ‘ (В С D E F)) ; вызов функции
В ; результат — первый элемент списка
(CDR <список>) — возвращение списка без первого элемента;
Например:
(CDR ‘ (В С D E F) ) ; вызов функции
(С D E F) ; результат — список без первого элемента
(CAAR <список>) — эквивалентно (CAR (CAR <список>));
(CDAR <список>) — эквивалентно (CDR (CAR <список>));
(CADR <список>) — эквивалентно (CAR (CDR <список>));
(CDDR <список>) — эквивалентно (CDR (CDR <список>));
(CADAR <список>) — эквивалентно (CAR (CDR (CAR <список>)));
(CADDR <список>) — эквивалентно (CAR (CDR (CDR <список>))) и т. д. вплоть до четырех уровней вложенности;
(CONS <элемент><список>) – возвращает список, в котором к прежнему списку добавлен новый элемент (в начало списка). Другой вариант:
(CONS <элемент><элемент>) – формирвание точечной пары из двух элементов;
Например:
(CONS 5 ‘ (1 2 3 4)) ; добавление элемента
‘ (1 2 3 4 5) ; результат
(CONS 8 “O”) ; создание точечной пары
(8 . “O”) ; результат
(LAST <список>) — возвращение последнего элемента списка;
Например:
(LAST ‘ (В С D E F)) ; вызов функции
F ; результат — последний элемент списка
(LIST <элемент> <элемент>…) — создание списка из элементов;
Например:
(LIST ‘A ‘B ‘C ‘D ‘E) ; вызов функции
(А В С D E) ; результат — список элементов
(APPEND <список>…) — соединение нескольких списков в один;
Например:
(APPEND ‘ (А В) ‘ (С D E) ) ; вызов функции
(А В С D E) ; результат — один общий список
(REVERSE <список>) — изменение порядка элементов на обратный;
(REVERSE ‘(А В С D E F) ) ; вызов функции
(F E D С В А) ; результат выполнения
(ASSOC <ключ> <список>) — поиск элемента в списке по ключу;
Например:
(SETQ LA (LIST ‘(1 А) ‘(2 В) ‘(3 С) ) ) ; вызов функции
(ASSOC 2 LA) ; вызов функции
(2 В) ;подсписок с заданным ключом
(SUBST <новый элемент> <старый элемент> <список>) — замена в списке старого элемента на новый;
Например:
(SETQ LB ‘ (А В С D E) ) ; вызов функции
(SUBST ‘Z ‘B LB) ; вызов функции
(A Z С D E) ; список с замененным элементом
(MEMBER <элемент N> <список>) — выделение списка с элемента N;
Например:
(MEMBER ‘D ‘ (А В С D E F) ) ; вызов функции
(D E F) ; результат выполнения
(NTH <число N> <список>) — выделение (N +l) — гo элемента списка, так как счет элементов в списке начинается с N = 0;
Например:
(NTH 3 ‘ (А В С D) ) ; вызов функции
D ; выделен 4-й элемент списка
(FIX <действ. число>) — преобразование действительного числа в целое;
Например:
(FIX 5.4) ; вызов функции
5 ; результат выполнения — целое число
(FLOAT <целое число>) — преобразование целого числа в действительное;
Например:
(FLOAT 5) ; вызов функции
5. 0 ; результат выполнения — ; действительное число
(ANGTOS <угол в радианах> [<представление>][<точность>]) — преобразование угла в радианах в текстовую строку;
Например:
(ANGTOS 0.685) ; вызов функции
«39.248» ; угол в градусах как текстовая
; константа
(CHR <число>) — преобразование числа в символьный код ASCII;
Например:
(CHR 77) ; вызов функции
«M» ; результат — символьный код ASCII числа 77
(ASCII <«символ»>) — значение символа в числовом коде ASCII;
Например:
(ASCII «G») ; вызов функции
71 ; результат — числовой код ASCII символа G
(ATOF <«число»>) — преобразование числовой текстовой константы в действительное число;
Например:
(ATOF «55.2») ; вызов функции
55.20000 ; результат выполнения
(ATOI <«число»>) — преобразование числовой текстовой константы в целое число;
Например:
(ATOI «34») ; вызов функции
34 ; результат выполнения
(ITOA <целое число>) — преобразование целого числа в числовую текстовую константу;
Например:
(ITOA 19) ; вызов функции
«19» ; результат выполнения
(RTOS <действительное число>)[<режим>][<точность>]) — преобразование действительного числа в текстовую константу.
Например:
(RTOS 34.5 1 4) преобразует 34,5 в «3.4500E+01» — научный режим
(RTOS 34.5 2 4) преобразует 34,5 в «34.5000» — десятичный режим
(RTOS 34.5 3 4) преобразует 34,5 в «2′-10.5000″» — технический режим
(RTOS 34.5 4 4) преобразует 34,5 в «2’-10 l/2″» — архитектурный режим
(RTOS 34.5 5 4) преобразует 34,5 в «34 l/2″» — дробный режим
(STRLEN <«строка»>) — определение числа символов в строке;
Например:
(STRLEN «AutoLISP») ; вызов функции
8 ; результат — число символов в строке
(STRCAT <«строка 1»> <«строка 2»>…) — соединение строк;
Например:
(STRCAT «Auto» «CAD») ; вызов функции
«AutoCAD» ; результат соединения строк
(SUBSTR <«строка»> <начало> [<длина>]) — выделение части строки подстроки (начало — номер символа, длина — число символов);
Например:
(SUBSTR «AutoCAD» 5) ; вызов функции
«CAD» ; результат — выделена часть текста
(LENGTH <список>) — определение длины списка;
Например:
(LENGTH ‘ (А В С D E F) ) ; вызов функции
6 ; результат — число элементов
2.3. Функции для работы с числовыми данными и выражениями
(+ <N1> <N2> <N3>…) — сложение чисел N1, N2, N3,…;
Например:
(+ 12.3 45 3.6 1) ; вызов функции
61.9 ; результат сложения нескольких чисел
(- <N1> <N2> <N3>…) — вычитание из числа N1 чисел N2, N3,…;
Например:
(- 50.5 45.1 3 2.3) ; вызов функции
0.1 ; результат вычитания нескольких чисел
(* <N1> <N2> <N3>…) — перемножение чисел N1, N2, N3,…;
Например:
(* 3.3 4 5 2) ; вызов функции
132.0 ; результат умножения нескольких чисел
(/ <N1> <N2> <N3>…) – деление числа N1 на N2, N3,…;
Например:
(/ 70 5.5 2) ; вызов функции
6.36364 ; результат деления
(ABS <N1>) — определение абсолютного значения числа N1;
Например:
(ABS -55.4) ; вызов функции
55.4 ; результат определения абсолютного числа
(1+ <N1>) — добавление к числу N1 единицы;
Например:
(1+ 15) ; вызов функции
16 ; результат выполнения
(1- <N1>) — вычитание из числа N1 единицы;
Например:
(1- 43) ; вызов функции
42 ; результат выполнения
(SIN <угол в радианах>) — вычисление синуса угла в радианах;
Например:
(SIN 0.54) ; вызов функции
0.514136 ; результат вычисления синуса
(COS <угол в радианах>) — вычисление косинуса угла в радианах;
Например:
(COS 1.4) ; вызов функции
0.169967 ; результат вычисления косинуса
(ATAN <N>) — определение угла в радианах (арктангенс);
Например:
(ATAN 45) ; вызов функции
1.54858 ; результат вычисления арктангенса
(EXP <N>) — определение величины экспоненты;
Например:
(EXP 2) ; вызов функции
7.38906 ; результат вычисления экспоненты
(EXPT <N1> <N2>) — определение показательной функции;
Например:
(ЕХРТ 6.5 2.3) ; вызов функции
74.08 ; результат вычисления
(LOG <N>) — определение величины натурального логарифма;
Например:
(LOG 68.7) ; вызов функции
4.22975 ; результат вычисления
(MAX <N1> <N2>…) — поиск максимального числа из всех;
Например:
(МАХ 3 9 5.5 4.5) ; вызов функции
9.0 ; результат — максимальное число из всех
(MIN <N1> <N2>…) — поиск минимального числа из всех;
Например:
(MIN 5 4.1 2.2 7) ; вызов функции
2 .2 ; результат — минимальное число из всех
(REM <N1> <N2>) — определение остатка от деления N1 на N2;
Например:
(REM 54 10) ; вызов функции
4 ; результат — остаток от деления
(GCD <N1> <N2>) — определение наибольшего общего делителя;
Например:
(GCD 12 27) ; вызов функции
3 ; результат — наибольший общий делитель
(ANGLE <T1> <T2>) — определение угла в радианах между прямой, проходящей через T1 и T2, и осью X;
Например:
(ANGLE ‘(2.0 3.0) ‘(8.0 9.0))
0.785398 ; результат вычисления — угол в радианах
(DISTANCE <T1> <T2>) — расстояние между точками T1 и T2;
Например:
(DISTANCE ‘(8.0 3.0) ‘(2.0 6.0)) ;вызов функции
6.7082 ;результат — расстояние между
;точками T1 и T2
(INTERS <T1> <T2> <T3> <T4> [<ON>]) — определение точки пересечения двух отрезков, проходящих соответственно через точки T1, T2 и T3, T4. Если <ON> нет, то точка пересечения должна быть в пределах обоих отрезков, иначе отрезки воспринимаются как бесконечные прямые;
Например:
(INTERS ‘(1 1) ‘ (5 5) ‘ (1 5) ‘(5 1)) ; вызов функции
(3.0 3.0) ; результат — точка
; пересечения отрезков
(POLAR <T1> <U> <R>) — определение точки T2 путем перемещения из точки <T1> под углом <U> в радианах на расстояние <R>;
Например:
(POLAR ‘ (1 1) (/ PI 4) 4) ; вызов функции
(3.82843 3.82843) ; результат — координаты точки
Практическое задание.
1. Изучить действие рассмотренных в работе функций на аналогичных примерах с другими параметрами.
2. Создать программу по заданию, установленному индивидуально преподавателем.