Излагаются основы Автолиспа - языка программирования графических объектов, служащего основным языком программирования в среде AutoCAD. Рассматриваются вопросы, связанные с синтаксисом языка, типами используемых данных, математическими вычислениями, описанием графических объектов и их наборов, работой с базой данных чертежа и внешними файлами.
Для студентов, изучающих основы автоматизированного конструирования и проектирования на базе пакетов AutoCAD. Пособие может быть полезно проектировщикам, делающим первые шаги в области программирования графических изображений.
ПРЕДИСЛОВИЕ
В процессе выполнения графических работ конструктор обычно импортирует в чертеж некоторое множество групп примитивов, объединенных в блоки, внешние ссылки и т.п. Чаще всего они представляют собой стандартные и нормализованные детали и узлы.
В то же время использование блоков для импортирования в чертеж, например, изображений стандартных болтов требует создания в качестве отдельного блока чертежа каждого типоразмера болта, что влечет за собой разрастание графической базы данных до неприемлемых размеров и усложняет технику ее использования. Поэтому конструкторская практика послужила поводом для разработки пакетов приложений, позволяющих, с одной стороны, выполнять некоторые типовые расчеты, с другой - осуществлять автоматический перенос результатов расчета в чертеж. Такие пакеты могут как встраиваться в Автокад (например, AutoCAD Мар), так и опираться на собственную графическую среду (например, программный продукт КОМПАС, разработанный АО ACKOH).
Одновременно Автокад предоставляет конструктору широкие возможности программного воспроизведения графических объектов и создания на этой основе персональных пакетов прикладных программ, непосредственно связанных с конкретной областью деятельности конструктора.
Основной средой программирования в Автокаде служит функциональный язык Автолисп (AutoLISP), в основу которого положен язык программирования LISP, разработанный в 1961 году. Возможности программной поддержки Автокада чрезвычайно широки как в части автоматизации процесса создания чертежа, так и в части управления интерфейсом среды.
В настоящем пособии рассматриваются вопросы, связанные лишь с первой задачей, что же касается управления интерфейсом, то с описанием этих методов можно подробно ознакомиться, привлекая соответствующую литературу [1, 3, 5].
1. ОБЩИЕ СВЕДЕНИЯ
Современный Автолисп является мощным функциональным языком, позволяющим работать с глубоко структурированными программными объектами. В отличие от операторных языков программирования, таких как Фортран, Паскаль и т.п., основой Автолиспа являются не операторы, а встроенные или внешние функции.
Автолисп хорошо взаимодействует с базами числовых и графических данных. В качестве числовых баз данных могут использоваться продукты многих СУБД (например, dBASE), таблицы, файлы результатов, полученные в результате выполнения других программ. Последнее обстоятельство очень важно, поскольку позволяет связать с Автолиспом любые операторные программы, достаточно лишь создать выходные файлы этих программ в формате, поддающемся чтению средствами Автолиспа. Что касается графических баз данных, то, рассматривая чертеж как такую базу, пользователь может извлекать из нее отдельные примитивы и их наборы и осуществлять над ними программным путем любые операции, доступные Автолиспу. Кроме того, возможно создание программ, которые, руководствуясь введенными параметрами, способны вычерчивать сколь угодно сложные графические объекты. Несколько подобных программ (разумеется, достаточно простых) описаны в настоящем пособии.
С целью облегчения ориентирования в тексте пособия служебные слова, выполняющие различные функции, выделяются разными шрифтами. В табл. 1 приведены гарнитуры шрифтов, используемые в дальнейшем для выделения отдельных элементов программ. Эти гарнитуры используются только в тексте пособия, полные тексты программ на Автолиспе и отдельные извлечения из них, используемые в качестве примеров, выполняются гарнитурой Arial.
Если Автолисп подключен к Автокаду, любая функция Автолиспа, введенная в командную строку, обрабатывается, а результат обработки возвращается в поле сообщений. Это очень удобно как при отладке программ, так и при проверке правильности записи функций. Если во время сеанса активизирована программа, написанная с ошибками, Автолисп прекращает ее обработку, сообщает об ошибке и производит обратную трассировку программы, указывая то место, где она совершена.
1.1. Типы данных в Автолиспе
Автолисп может оперировать следующими типами данных:
• Идентификаторы (Symbols) или переменные (Variables)
• Целые числа (Integers)
• Вещественные числа (Real numbers)
• Строки (Strings)
1.2. Лексические соглашения
Ввод данных в Автолиспе может осуществляться различными способами: с клавиатуры в строку запроса, непосредственным указанием точек на экране, чтением файла ASCII или строковой переменной. В любых случаях должны, выдерживаться следующие соглашения.
• Имена переменных могут содержать любые символы, за исключением (, ) - левой и правой скобок, . - точки, ' - апострофа, “ - кавычек, ; - точки с запятой.
• Следующие символы заканчивают имя переменной или цифровую константу: (, ), ‘, ; ,
space
(cимвoл пpoбeлa),
end of file
(символ конца файла).
• Выражение может занимать несколько строк.
• Множество пробелов между символами эквивалентно одному пробелу. Пустые строки не обрабатываются Автолиспом, но иногда их целесообразно вставлять для облегчения чтения программ. Табуляция рассматривается Автолиспом как пробел.
1.3. Выражения и переменные Автолиспа
Основной структурной единицей Автолиспа является
выражение
. Любое выражение открывается круглой скобкой, состоит из имени функции и списка аргументов, каждый из которых сам может быть выражением, и закрывается парной правой скобкой. В связи с тем, что выражения могут занимать несколько строк, принято их зрительно структурировать, вписывая закрывающую выражение скобку в тот же столбец, что и открывающую. Такая система записи облегчает чтение программ и уменьшает количество ошибок. Аргументы в выражениях разделяются пробелами.
Автолисп не обладает отладчиком программ, но ему свойственна другая полезная особенность. Если выражение Автолиспа ввести в командную строку Автокада, Автолисп обрабатывает его и возвращает его значение. Это позволяет производить отладку программ, поскольку неадекватная реакция среды сразу указывает на ошибку.
При вводе некорректного выражения Автолисп может выдать указание
n>
, где
n
указывает количество незакрытых левых скобок. Довольно частой ошибкой является пропуск правых кавычек (“) в текстовых строках. При этом правые скобки интерпретируются как кавычки, и простой ввод дополнительных скобок не исправляет положения. В таких случаях следует прекратить вычисления командой отказа
Ctrl+С
в DOS или
Esc
в Windows и заново ввести выражение.
Обработанное интерпретатором Автолиспа выражение может быть далее использовано окружающими выражениями. Если такого окружения нет, Автолисп передает значение выражения Автокаду.
В распространяемый с 1999 года пакет AutoCAD 2000 в качестве составной части включен пакет Visual LISP, обладающий отладчиком программ. Возможности работы в среде Visual LISP описаны в публикации [1].
1.4. Основная функция присвоения в Автолиспе
Любой язык программирования, встречая некоторую именованную переменную, сопоставляет ей ее значение. Это значение в операторных языках обычно вычисляется и присваивается переменной с помощью оператора присвоения. Особенностью Автолиспа является то, что в переменной может храниться не только вычисленное значение, но и целое выражение. Этот язык содержит в своем составе функцию
quote
, позволяющую сохранить выражение без его оценки. Формат функции:
(quote выражение),
например: