Auto CAD

Создание функций AutoLISP: RTD и DTR


Прежде чем мы рассмотрим код, необходимый для решения проблемы, давайте проясним одно из важных понятий AutoLISP. Есть два различных вида функций. Те, которые вы писали до сих пор, работают как команды AutoCAD. Без префикса С: в начале имени функция не работает как команда AutoCAD, но ее можно использовать как функцию AutoLISP. Это инструмент с большими возможностями: вы можете описывать собственные команды AutoCAD, но вы также можете создавать собственные функции AutoLISP. Вот это возможности! Давайте разрешим конфликт между градусами и радианами с одной или двумя новыми функциями AutoLISP.

Код, показанный в листинге 8.8, вы найдете практически в каждой книге, посвященной AutoLISP, потому что каждый программист в определенный момент сталкивается с проблемой радиан и градусов. Обратите внимание, эти новые функции имеют два отличия от тех программ, которые вы писали: у них нет С: перед именем функции, и в скобках после имени функции находится один аргумент вместо имен локальных переменных, rtd конвертирует радианы в градусы, a dtr конвертирует градусы в радианы.

AutoLISP, вы бы сказали: "умножить 180 на результат деления радиан на число к". Поскольку функция всегда пишется первой, код AutoLISP выглядит так: ( 180 (/ г pi)), где г = радианы. Поскольку вы пишете эти две функции для выполнения преобразований, то перед использованием вы должны их загрузить. Вы можете вручную загружать их каждый раз, когда они вам понадобятся, но есть способы автоматически загружать программы на AutoLISP так, чтобы они всегда были доступны. Функции из этого примера я бы поместил в файл acaddoc.lsp, о котором расскажу далее в этой главе.

Чтобы было понятнее, большинство программ в этой главе представлены в виде отдельных LSP-файлов. Также можно поместить множество программ AutoLISP в единый LSP-файл. Каждая программа начинается и заканчивается функцией DEEIJN.

Две функции, конвертирующие значения углов, можно выполнять из командной строки AutoCAD, используя тот же формат, что и в программе: (rtd 2) преобразует 2 радиана в градусы и возвращает 114.592; (dtr 30) преобразует 30° в радианы и возвращает 0.523599.

В листинге показано, как будет выглядеть программа rc.lsp, если вы используете функцию rtd для того, чтобы конвертировать радианы в градусы. Функция rtd должна быть загружена предварительно.

Комментарии закрыты