Функции пользователя
В AutoLISP нет программ – есть функции. Программа состоит из функций и сама является функцией.
Пользователь может создавать свои функции и применять их параллельно со встроенными. Не рекомендуется в качестве имен своих функций брать зарезервированные имена, т. к. это приведет к некорректной работе отдельных команд системы AutoCAD. Для того чтобы получить полный перечень зарезервированных символов AutoLISP, можно воспользоваться функцией atoms-family, имеющей следующий синтаксис:
(atoms-family <форма> [<список>])
Если аргумент <список>, который содержит строковые имена символов, проверяемых на резервирование, задан, то функция возвращает имена тех символов, которые отнесены в данной версии системы AutoCAD к резервированным; если аргумент <список> не задан, то функция возвращает полный список зарезервированных символов (основу этого списка составляют имена функций); аргумент <форма> может принимать значения 0 или 1, он влияет на форму возвращаемого списка (при 0 в список помещаются символы, при 1 - строки).
Пример:
(acad_strisort (atoms-family l)) - возвратит список зарезервированных символов, который будет тут же с помощью функции acad_strlsort отсортирован по алфавиту.
Для создания функций пользователя предназначена специальная функция defun:
(defun <имя> ([<аргументы>] [/ <переменные>]) <выражения>) ≈ описывает тело функции, ее аргументы и локальные переменные (т. е. переменные, которые не являются глобальными и имеют действие только в теле самой функции; вне тела функции эти символы не определены); возвращаемым значением функции является результат последнего вычисленного выражения ее тела.
Пример:
(defun oursum (al а2 а3 / s)
(setq s (+ a1 а2))
(- s a3)
) ; конец тела функции
Здесь определена функция с именем oursum. У функции три аргумента: a1, а2 и аЗ ≈ вместо них AutoLISP подставит значения, с которыми эта функция будет вызвана. Переменная s используется для временного хранения результата операции суммирования. В теле функции всего два выражения: первое вычисляет сумму a1 и а2 и сохраняет ее в переменной s, а второе вычисляет разность между s и а3. Вычисленная разность является значением последнего выражения в теле функции, поэтому является и возвращаемым значением функции oursum. Как аргументы al, а2 и а3, так и переменная s являются локальными переменными, т. е. их значения не доступны вне тела функции. Для того чтобы функцией oursum можно было воспользоваться в текущем рисунке AutoCAD, ее необходимо предварительно сохранить в текстовом файле с расширением lsp (например, ourfunctions.lsp) и затем загрузить этот файл с помощью функции load:
(load "ourfunctions.lsp")
Имя загружаемого файла с расширением lsp может содержать и путь. При отсутствии такого пути AutoCAD ищет файл в путях доступа к файлам поддержки, заданных в настройке. После того, как файл, содержащий тело функции oursum, загружен, можно обратиться к функции в любом месте программы, задав значения ее трех аргументов, например:
(setq newvall (oursum 55.02 0.933 -2.64))
Разумеется, при обращении к функции oursum в качестве аргументов могут быть использованы любые выражения, результатами вычисления которых будут значения необходимого типа (в данном примере – это три вещественных числа).
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
1 Романычева, Э.Т. Инженерная и компьютерная графика / Романычева Э.Т., Соколова Т.Ю., Шандурина Г.Ф. . – 2-е изд., перераб. – М. : ДМК Пресс, 2001. – 592 с. : ил. – ISBN 5-94074-051-0.
2 Ткачев Д. AutoCAD 2002: Самоучитель.- СПб: Питер, К. : БХВ, 2003. – 416 с. : ил. – ISBN 5-318-00788-0.
3 Ткачев Д.А. AutoCAD 2004: Самоучитель. - СПб: Питер, 2005. – 432 с. : ил.
4 Хрящев В. Моделирование и создание чертежей в системе AutoCAD / В. Хрящев, Г. Шипова.: СПб. БХВ – Питербург, 2004. – 224 с.
Навчальне видання
Комп'ютерна графіка
Конспект лекцій
для студентів спеціальності 6.050101
«Інформаційні технології проектування»
очної і заочної форм навчання
Укладачі САВИЦЬКИЙ Василь Васильович
Редактор
Підп. до друку . Формат 60х80 1/16.
Папір офсетний. Ум. друк. арк. . Обл.-вид. арк.
Тираж 50 прим. Зам №
Видавець і виготівник
«Донбаська державна машинобудівна академія»
84313, м. Краматорськ, вул. Шкадінова, 72.
Свідоцтво про внесення суб’єкта видавничої справи
до Державного реєстру
серія ДК № 1633 від 24.12.2003 р.