- •Утверждено
- •Программирование на языке AutoLisp
- •1. Переменные языка AutoLisp
- •1.1 Системные переменные пакета AutoCad
- •1.2 Переменные языка AutoLisp определенные пользователем
- •2. Типы данных языка AutoLisp
- •3. Функции присвоения
- •4.2 Работа со строками, функции преобразования, проверки типов данных.
- •4.3 Логические функции Автолиспа.
- •5. Работа со списками
- •6. Использование функции get для ввода данных.
- •7. Работа с геометрическими описаниями объектов
- •8. Условное ветвление программ
- •9. Организация циклов
- •10. Вызов команд Автокада из программы на языке AutoLisp
- •11. Управление отображением
- •12. Вывод данных в командную строку
- •13. Файловый ввод - вывод
- •14. Определение функции
- •15. Отладка программы.
- •16. Доступ к примитивам и средствам Автокада
- •Функции AutoLisp Математические функции
- •Логические функции Автолиспа.
- •Работа со списками
- •Использование функции get для ввода данных.
- •Работа с геометрическими описаниями объектов
- •Условное ветвление программ
- •Организация циклов
- •Вызов команд Автокада из программы на языке AutoLisp
- •Управление отображением
- •Вывод данных в командную строку
- •Файловый ввод - вывод
- •Доступ к примитивам и средствам Автокада
- •Insert (block)
- •Vertex (pline)
2. Типы данных языка AutoLisp
С понятием переменной в программировании тесно связано понятие типа переменной. Типом переменной определяются операции, которые можно производить над переменными. Например, для чисел действительного типа определены операции сложения, умножения и деления, в то время как для строк определены другие операции - конкатенация, извлечение подстроки и пр. (можно одно число поделить на другое, но нельзя поделить строку на другую строку).
Как и любой другой язык программирования, AutoLISP при работе с переменной должен знать, к какому типу данных она относится. Однако, как мы убедимся позднее, в данном случае, работа с типами переменных очень проста. Перечислим сначала основные типы данных, которые есть в любом языке программирования, в том числе и в языке AtoLISP:
• строковые переменные
• целые переменные
• действительные переменные
Строковые переменные могут содержать в себе различные текстовые константы) т.е. совокупности букв (и символов), заключенных в кавычки, например "Введите число 12.80:". Кавычки говорят, что данную совокупность символов следует рассматривать как текстовую константу. Если системная переменная является строковой, то это значит, что в ней может храниться только строковая константа (строковая константа может конечно, с общепринятой точки зрения являться числом, например "56.88", однако AutoLISP не понимает что это число, и работает с такой константой просто как с группой символов).
Целые переменные - это положительные или отрицательные целые числа (без дробей и десятичной точки). Для определения того, включен какой-то режим или нет, Автокад часто использует значения 0 и 1, например если режим ORTHO (ОРТО) включен, то системная переменная ORTHOMODE установлена в единицу. Заметим, что целые числа представляются в памяти машины двумя байтами и не поэтому могут выходить за диапазон (-32 768, 32 767).
Действительные переменные - это положительные или отрицательные числа с десятичной точкой. В отличие от многих других языков программирования язык AutoLISP не разрешает начинать или заканчивать число десятичной точкой. Это связано с существованием специфического типа данных - точечной пары, разделителем которой является точка. Поэтому, если значение меньше единицы, вы должны явно указать 0 перед десятичной точкой (0.123), иначе AutoLISP воспримет ошибку (error: invalid dotted pair - ошибка: неверная точечная пара)). В качестве примеров действительных системных переменных можно указать переменные FILLETRAD, LTSCALE и AREA. Диапазон представления действительных чисел зависит от типа вашего компьютера и в любом случае достаточно велик. Правильно записанными действительными числами являются числа 2.12, 3.11592 -9722.12 и 1.23544Е+17.
Кроме этих простейших типов в языке AutoLISP определены более сложные типы данных. Перечислим их без подробного рассмотрения.
Дескрипторы файлов - переменные, в которых хранится описание открытого файла: аналогичны дескрипторам файлов в других языках программирования.
Символы - переменные, в которых хранятся не значения, а ссылки на другие переменные. Символы часто используются при программировании, однако работа с ними непроста и требует определенных навыков. Этот тип данных можно сравнить с указателями в других языках программирования. Подобно тому как в Паскале или Си при помощи указателей можно организовывать ссылки любого уровня вложенности, в языке AutoLISP символ может ссылаться не на переменную, а на символ, который, в свою очередь, ссылается на символ, и т.д.
Встроенные функции - переменные, посредством которых осуществляется обращение к стандартной библиотеке функций языка AutoLISP. В них хранятся внутренние адреса стандартных функций AutoLISP.
Имена примитивов текущего чертежа п. AutoCAD - переменные, в которых хранится уникальный индекс, взаимно однозначно соответствующий примитивам текущего чертежа.
AutoCAD, как и любая система САПР, работает не с растровым представлением изображения, а с его геометрическим описанием. Каждый примитив, создаваемый в чертеже п. AutoCAD, заносится в графическую базу данных (ГБД), в которой хранится вся информация о примитивах чертежа (как геометрическая, так и специальная, характерная для Автокада). Каждому примитиву присваивается имя (индекс), по которому можно получить всю информацию о примитиве. Имя примитива - это просто уникальное восьмизначное шестнадцатеричное число (например, "6000001А"). Однако для того чтобы обратиться к графической базе данных, нужно работать пе с числом, а именно с типом данных "имя примитива", иначе доступ к ГБД будет невозможен. Этот тип данных введен в язык AutoLISP для связи с графическим редактором п. AutoCAD. Существует еще несколько подобных типов, которые мы не будем рассматривать подробно (в качестве примера можно привести типы "набор примитивов"' и "таблица диспетчера страниц"').
Данные выше определения типов данных, исчерпывают почти все, что есть по этому вопросу в AutoLISP. Остается только определить самый важный тип данных AutoLISP - список.
С точки зрения AutoLISP все перечисленные типы данных являются простыми, т.е. переменные принадлежащие к одному из перечисленных выше типов, не могут быть расчленены на составные части. Введем важное определение которое понадобится нам позднее:
Переменные любого из простых типов называются атомами.
Примеры атомов: 8, 12.5, “SAPR_TM”
Списком называется набор разделенных пробелами атомов или списков
заключенный в круглые скобки.
Например: (1324 22.4 tet) - список из трех элементов, первые два – целое и действи-тельное числа, tet - переменная с присвоенным значением к моменту объявления списка в программе. (12.5 7 (“Иван Грозный” “Student”) (2.4 5.55 1213)) – список состоя-щий из 4 элементов, два из которых в свою очередь являются списками.
Переменные которые не могут быть расчленены на составные части называются АТОМАМИ.