Языка программирования высокого уровня autolisp
Программирование на языке AutoLISP
Переменные
Создать переменные pt1, pt2 координат двух точек и с их помощью построить отрезок. Создать строковую переменную color с обозначением цвета «Red» и закрасить отрезок.
Приведем протокол операций выполнения этого задания.
По применимости в процедурах переменные разделяются на два типа: локальные и глобальные. Локальные объявляются после косой черты. Они могут принимать определенные значения только во время выполнения той процедуры, в которой они объявлены. После завершения процедуры ячейки памяти, занимаемые этими переменными, освобождаются.
Глобальные переменные доступны всем функциям AutoLISP, которые загружены в чертеж. Их значения доступны в проекте и после завершения той программы, в которой они объявлены. Любая переменная, которая специально не объявлена локальной, является глобальной. В глобальной переменной можно хранить константы, промежуточные значения вычислений, результирующие данные. Однако трудно уследить, какое значение ей присвоено в данной функции и не изменено ли оно другой функцией. Поэтому следует избегать введения глобальных переменных. Рекомендуется имена глобальных переменных отмечать справа и слева звездочками: *Global1* и документировать их.
Создать и протестировать локальные и глобальные переменные.
Переменные характеризуются временем жизни и областью видимости. Локальные переменные определяются внутри функции путем задания слеша с пробелом перед ними. Время жизни локальной переменной совпадает с временем выполнения процедуры. Область видимости локальной переменной ограничена только процедурой (функцией), в которой она задана. Вне этой процедуры текущие значения локальной переменной недоступны.
При объявлении глобальных переменных слеш не ставится. Время жизни глобальной переменной совпадает с временем открытия чертежа. Областью ее видимости является весь проект.
Работа с системными переменными
Для работы с системными переменными в среде AutoLISP используются операторы SETVAR и GETVAR.
Работа в среде AutoLISP с системными переменными
Создайте новый чертеж. Откройте редактор Visul LISP. Откройте новый файл и наберите в нем следующие процедуры:
Процедура работает следующим образом.
После составления процедуры выполните следующие действия:
Функции AutoLISP
Определение функции всегда начинается с оператора DEFUN. При этом можно выделить три типа функций:
Создание файла инициализации
Пусть вы хотите увидеть рамку с приветствием на экране при открытии каждого чертежа. Создадим процедуру и сохраним ее в файле AutoCAD 2010\Support\acaddoc.lsp:
Откройте новый чертеж. Возможно, что придется выполнить отладку размеров текста и рамки для него. Легче изменить размеры рамки, оставив текущий стиль текста без изменений. Попробуйте также поэкспериментировать с цветом.
В среде AutoLISP можно создавать функции с аргументами. Аргумент передает свое значение функции. Функция использует значение аргумента в процессе отработки операций. Аргументы располагают в круглых скобках до косой черты (слеша). Если у функции нет локальных переменных, то слеш не ставится. Пример объявления функции с одним аргументом приведен в задании 4.3: (defun chred (selected_object) …
Функцию с аргументом можно вызвать и выполнить с помощью оператора вызова функции. В операторе задается имя функции и фактические переменные, которые заменяют в теле функции формальные аргументы. В задании 4.3 формальным аргументом является переменная selected_object. Фактическим параметром, передаваемым функции chred в качестве аргумента является переменная selected. При каждом обращении к функцииchred из какой-либо процедуры необходимо задавать значение аргумента. В качестве аргумента можно использовать:
Вернемся к заданию 4.3 и опишем работу функций.
В первой строке определена функция chred и ее аргумент selected_object.
Прорабатывая свой код, функция chred применяет команду chprop для изменения цвета объекта на красный.
Функции условия, циклы и работа со списками
Синтаксис условной функции имеет стандартный вид:
Значение Если_False можно опустить. Тогда интерпретатор исполнит выражение Если_True, когда условное выражение истинно. Если же условное выражение ложно, то управление перейдет к следующей функции.
Работа с функцией IF
Префикс \n аналогичен функции terpri: каждое новое приглашение будет выводиться с новой строки. Выполните действия и оцените результат:
Функции цикла обеспечивают выполнение определенных функций несколько раз подряд. При использовании циклической функции WHILE количество повторов неопределенно. Цикл выполняется, пока истинно условное выражение. Иначе управление передается следующей функции:
Счетчиком является переменная counter. В начале процедуры функция cycle присваивает счетчику counter значение, равное 1. Затем операторwhile печатает слова Number Counter и увеличивает значение счетчика на единицу. Условием работы оператора while является то, что значение счетчика меньше 6.
В результате программа выдаст следующий список:
Если необходимо объединить несколько операторов в один блок, то используется функция PROGN. Все, что включено в конструкцию PROGN, рассматривается интерпретатором как один оператор.
Стандартной операцией во всех языках является извлечение из списка одного или нескольких элементов. Основные функции AutoLISP извлечения из списка приведены в таблице:
Функция | Результат | Описание |
---|---|---|
CAR | 1.2 | Возвращает первый элемент списка |
CDR | (3.4 5.6) | Возвращает все элементы списка, кроме первого |
CADR | 3.4 | Возвращает второй элемент списка |
CADDR | 5.6 | Возвращает третий элемент списка |
NTH | Возвращает произвольный элемент списка |
При запуске этой процедуры функция возвращает значение нулевого члена списка.
Оформление процедуры
При создании процедуры особое внимание следует обращать на обработку ошибок и комментарии. Например, в предыдущем задании требовалось выделить текстовый объект. Если пользователь выделил не текст, то должно быть выдано сообщение: «Выделите текст». Чаще всего такие проверки осуществляют с помощью оператора IF. Для выполнения оператора IF требуется проверка логического выражения на истинность. Если пользователь не выделит объект нужного типа, то логическое выражение примет значение nil. В эту часть условного оператора и нужно поместить сообщение об ошибке.
Процедура должна начинаться с заголовка-комментария. Здесь должно быть описание функционального назначения процедуры, дата составления, особенности применения. Это поможет другим пользователям Вашей процедуры сразу оценить возможности ее применения в своих задачах. Кроме того, как правило, через несколько месяцев и составителю трудно вспомнить все те мелкие задачи, на которые сегодня потрачено немало труда. Поэтому комментарии желательно помещать и в тело процедуры. Не надо жалеть времени на комментарии.
Среда AutoLISP поддерживает несколько типов комментариев, различающихся по их выравниванию относительно левого края рабочей области.
Отладка кода
Специальное окно Visual LISP Console заменяет пользователю в среде Visual LISP командную строку системы AutoCAD. С консоли вводят выражения на языке AutoLISP, загружают и выполняют функции. На консоль выводятся сообщения Visual LISP и AutoCAD.
При отладке программы удобно следить за значениями выбранных глобальных переменных. Для этого используются пункты Inspect, Symbol Service, Watch Window. Вызов соответствующих диалоговых окон показывает текущие значения выбранных переменных или выражений.
Ключевое слово | Требуемый тип данных |
---|---|
consp | Точечная пара |
FILE | Дескриптор файла |
fixnump | Целое |
lentityp | Имя примитива |
listp | Список |
lselsetp | Набор |
numberp | Число (целое или вещественное) |
safearrayp | Безопасный массив |
stringp | Строка |
symbol | Символ |
Variantp | Вариант |
VLA-OBJECT | VLA-объект |
VL-Reactor | VLR-объект (реактор) |
Отладка (debugging) является необходимым этапом создания программы. В процессе отладки нужно найти и устранить ошибки. Visual LISPпредоставляет свои средства отладки.
Для начала загрузите функцию, заведомо содержащую ошибку. Введите ее в редактор Visual LISP и загрузите.
Проверим работу отладчика. Введите в окне Console выражение (Error-Prone-Code) ↵ Visual LISP возвратит сообщение об ошибке: ; error: bad argument type: stringp 1
Получив сообщение, щелкните на кнопке Last Break (последнее прерывание). Вы перейдете в строку кода, которая содержит ошибку.
В новом чертеже в редакторе Visual LISP введите следующий код:
Загрузите содержимое активного окна.
В окне Console введите (add-3-numbers 1 2 3) ↵ Среда вернет 6.
Щелкните на кнопке Last Break панели инструментов Debug. Вы автоматически перейдете в строку, где найдена ошибка. Чтобы продолжить работу в режиме Break on Error щелкните на кнопке Reset панели инструментов Debug.
Чтобы установить точку прерывания, установите курсор справа от закрывающей скобки и нажмите клавишу F9. Строка будет отмечена красной меткой. После разметки необходимо повторно загрузить код, чтобы сообщить Visual LISP об их появлении. Код программы будет выполняться до первой точки прерывания.
При разметке программы становятся доступны кнопки панели Debug. Три первые кнопки этой панели предоставляют три разных способа перемещения в пределах кода:
Эта процедура создает вертикальный список чисел. Функция Foreach осуществляет переход от одного элемента списка к другому.
Интерпретатор возвратит Вам сообщение об ошибке. Щелкните по кнопке Last Break, чтобы перейти к строке кода, содержащей ошибку.
Ключевые термины
Краткие итоги
Процедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp. Структурными единицами процедуры являются функции, переменные и константы. Отладку процедуры удобно проводить в консоли среды Visual LISP.
Ссылки по теме
Помощь |
Задать вопрос | |
программы | |
обучение | |
экзамены | |
компьютеры | |
ICQ-консультанты | |
Skype-консультанты | |
Общая справка | |
Как оформить заказ | |
Тарифы доставки | |
Способы оплаты | |
Прайс-лист | |
Карта сайта | |
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО. На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. Программирование на языке AutoLISPПеременныеСоздать переменные pt1, pt2 координат двух точек и с их помощью построить отрезок. Создать строковую переменную color с обозначением цвета «Red» и закрасить отрезок. Приведем протокол операций выполнения этого задания. По применимости в процедурах переменные разделяются на два типа: локальные и глобальные. Локальные объявляются после косой черты. Они могут принимать определенные значения только во время выполнения той процедуры, в которой они объявлены. После завершения процедуры ячейки памяти, занимаемые этими переменными, освобождаются. Глобальные переменные доступны всем функциям AutoLISP, которые загружены в чертеж. Их значения доступны в проекте и после завершения той программы, в которой они объявлены. Любая переменная, которая специально не объявлена локальной, является глобальной. В глобальной переменной можно хранить константы, промежуточные значения вычислений, результирующие данные. Однако трудно уследить, какое значение ей присвоено в данной функции и не изменено ли оно другой функцией. Поэтому следует избегать введения глобальных переменных. Рекомендуется имена глобальных переменных отмечать справа и слева звездочками: *Global1* и документировать их. Создать и протестировать локальные и глобальные переменные. Переменные характеризуются временем жизни и областью видимости. Локальные переменные определяются внутри функции путем задания слеша с пробелом перед ними. Время жизни локальной переменной совпадает с временем выполнения процедуры. Область видимости локальной переменной ограничена только процедурой (функцией), в которой она задана. Вне этой процедуры текущие значения локальной переменной недоступны. При объявлении глобальных переменных слеш не ставится. Время жизни глобальной переменной совпадает с временем открытия чертежа. Областью ее видимости является весь проект. Работа с системными переменнымиДля работы с системными переменными в среде AutoLISP используются операторы SETVAR и GETVAR. Работа в среде AutoLISP с системными переменными Создайте новый чертеж. Откройте редактор Visul LISP. Откройте новый файл и наберите в нем следующие процедуры: Процедура работает следующим образом. После составления процедуры выполните следующие действия: Функции AutoLISPОпределение функции всегда начинается с оператора DEFUN. При этом можно выделить три типа функций: Создание файла инициализации Пусть вы хотите увидеть рамку с приветствием на экране при открытии каждого чертежа. Создадим процедуру и сохраним ее в файле AutoCAD 2010\Support\acaddoc.lsp: Откройте новый чертеж. Возможно, что придется выполнить отладку размеров текста и рамки для него. Легче изменить размеры рамки, оставив текущий стиль текста без изменений. Попробуйте также поэкспериментировать с цветом. В среде AutoLISP можно создавать функции с аргументами. Аргумент передает свое значение функции. Функция использует значение аргумента в процессе отработки операций. Аргументы располагают в круглых скобках до косой черты (слеша). Если у функции нет локальных переменных, то слеш не ставится. Пример объявления функции с одним аргументом приведен в задании 4.3: (defun chred (selected_object) … Функцию с аргументом можно вызвать и выполнить с помощью оператора вызова функции. В операторе задается имя функции и фактические переменные, которые заменяют в теле функции формальные аргументы. В задании 4.3 формальным аргументом является переменная selected_object. Фактическим параметром, передаваемым функции chred в качестве аргумента является переменная selected. При каждом обращении к функцииchred из какой-либо процедуры необходимо задавать значение аргумента. В качестве аргумента можно использовать: Вернемся к заданию 4.3 и опишем работу функций. В первой строке определена функция chred и ее аргумент selected_object. Прорабатывая свой код, функция chred применяет команду chprop для изменения цвета объекта на красный. Функции условия, циклы и работа со спискамиСинтаксис условной функции имеет стандартный вид: Значение Если_False можно опустить. Тогда интерпретатор исполнит выражение Если_True, когда условное выражение истинно. Если же условное выражение ложно, то управление перейдет к следующей функции. Работа с функцией IF Префикс \n аналогичен функции terpri: каждое новое приглашение будет выводиться с новой строки. Выполните действия и оцените результат: Функции цикла обеспечивают выполнение определенных функций несколько раз подряд. При использовании циклической функции WHILE количество повторов неопределенно. Цикл выполняется, пока истинно условное выражение. Иначе управление передается следующей функции: Счетчиком является переменная counter. В начале процедуры функция cycle присваивает счетчику counter значение, равное 1. Затем операторwhile печатает слова Number Counter и увеличивает значение счетчика на единицу. Условием работы оператора while является то, что значение счетчика меньше 6. В результате программа выдаст следующий список: Если необходимо объединить несколько операторов в один блок, то используется функция PROGN. Все, что включено в конструкцию PROGN, рассматривается интерпретатором как один оператор. Стандартной операцией во всех языках является извлечение из списка одного или нескольких элементов. Основные функции AutoLISP извлечения из списка приведены в таблице:
При запуске этой процедуры функция возвращает значение нулевого члена списка. Оформление процедурыПри создании процедуры особое внимание следует обращать на обработку ошибок и комментарии. Например, в предыдущем задании требовалось выделить текстовый объект. Если пользователь выделил не текст, то должно быть выдано сообщение: «Выделите текст». Чаще всего такие проверки осуществляют с помощью оператора IF. Для выполнения оператора IF требуется проверка логического выражения на истинность. Если пользователь не выделит объект нужного типа, то логическое выражение примет значение nil. В эту часть условного оператора и нужно поместить сообщение об ошибке. Процедура должна начинаться с заголовка-комментария. Здесь должно быть описание функционального назначения процедуры, дата составления, особенности применения. Это поможет другим пользователям Вашей процедуры сразу оценить возможности ее применения в своих задачах. Кроме того, как правило, через несколько месяцев и составителю трудно вспомнить все те мелкие задачи, на которые сегодня потрачено немало труда. Поэтому комментарии желательно помещать и в тело процедуры. Не надо жалеть времени на комментарии. Среда AutoLISP поддерживает несколько типов комментариев, различающихся по их выравниванию относительно левого края рабочей области. Отладка кодаСпециальное окно Visual LISP Console заменяет пользователю в среде Visual LISP командную строку системы AutoCAD. С консоли вводят выражения на языке AutoLISP, загружают и выполняют функции. На консоль выводятся сообщения Visual LISP и AutoCAD. При отладке программы удобно следить за значениями выбранных глобальных переменных. Для этого используются пункты Inspect, Symbol Service, Watch Window. Вызов соответствующих диалоговых окон показывает текущие значения выбранных переменных или выражений.
Отладка (debugging) является необходимым этапом создания программы. В процессе отладки нужно найти и устранить ошибки. Visual LISPпредоставляет свои средства отладки. Для начала загрузите функцию, заведомо содержащую ошибку. Введите ее в редактор Visual LISP и загрузите. Проверим работу отладчика. Введите в окне Console выражение (Error-Prone-Code) ↵ Visual LISP возвратит сообщение об ошибке: ; error: bad argument type: stringp 1 Получив сообщение, щелкните на кнопке Last Break (последнее прерывание). Вы перейдете в строку кода, которая содержит ошибку. В новом чертеже в редакторе Visual LISP введите следующий код: Загрузите содержимое активного окна. В окне Console введите (add-3-numbers 1 2 3) ↵ Среда вернет 6. Щелкните на кнопке Last Break панели инструментов Debug. Вы автоматически перейдете в строку, где найдена ошибка. Чтобы продолжить работу в режиме Break on Error щелкните на кнопке Reset панели инструментов Debug. Чтобы установить точку прерывания, установите курсор справа от закрывающей скобки и нажмите клавишу F9. Строка будет отмечена красной меткой. После разметки необходимо повторно загрузить код, чтобы сообщить Visual LISP об их появлении. Код программы будет выполняться до первой точки прерывания. При разметке программы становятся доступны кнопки панели Debug. Три первые кнопки этой панели предоставляют три разных способа перемещения в пределах кода: Эта процедура создает вертикальный список чисел. Функция Foreach осуществляет переход от одного элемента списка к другому. Интерпретатор возвратит Вам сообщение об ошибке. Щелкните по кнопке Last Break, чтобы перейти к строке кода, содержащей ошибку. Ключевые терминыКраткие итогиПроцедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp. Структурными единицами процедуры являются функции, переменные и константы. Отладку процедуры удобно проводить в консоли среды Visual LISP.
|