Выбрать главу

(inters точка1 точка2 точка3 точка4 [условие]). Функция анализирует параметры двух линий и возвращает точку их пересечения или nil, если таковая отсутствует. Если дополнительный аргумент условие присутствует и имеет значение nil, точка пересечения возвращается, даже если она находится вне одного или обоих отрезков. Если же аргумент условие опущен или не равен nil, точка пересечения должна находиться внутри отрезков, в противном случае возвращается nil.

Пусть определены точки:

(setq a '(1.0 1.0) b '(5.0 5.0))

(setq с ‘(6.0 1.0) d ‘(6.0 2.0)),

тогда

(inters a b с d) возвращает nil,

(inters a b с d T) возвращает nil,

(inters a b с d nil) возвращает (6.0 6.0).

(polar точка1 угол расстояние). Функция определяет положение точки, находящейся на указанном расстоянии от точки точка1 под углом угол к оси X текущей системы координат и возвращает ее координаты.

Функция polar очень часто используется в структуре программ, так как она позволяет указывать положение точек в относительных координатах, привязывая каждую последующую точку к предыдущей. Примером такого использования может служить программа format, описываемая ниже.

3. ВЗАИМОДЕЙСТВИЕ АВТОЛИСПА С АВТОКАДОМ

3.1. Вызов команд Автокада в Автолисп

Вызов команд Автокада Автолисп осуществляет с помощью функции command. Необходимо помнить, что эта функция не имеет ничего общего с командами Автокада, которые входят в эту функцию в качестве аргументов. Количество аргументов функции не ограничивается, они могут представлять собой строки, списки, числа, но во всех случаях их тип должен соответствовать типу, ожидаемому Автокадом. Введение пустой строки (“”) соответствует нажатию на клавишу Space или Enter, например:

(command “line” pt1 pt2 “”).

Здесь Автолисп передает Автокаду команду line для проведения отрезка прямой из точки pt1 к точке pt2. Пустая строка завершает ввод параметров. При организации строки параметров следует обратить внимание на то, что она практически описывает символами действия оператора, вводящего параметры с клавиатуры или с помощью мыши. Действительно, при ручном вводе последовательность действия оператора выглядела бы следующим образом:

Command: _line

From point: pt1

To point: pt2

To point: Enter

Команды Автокада, вызываемые функцией command, не отражаются на экране, если системная переменная CMDECHO установлена в ноль. Если необходим ввод данных с клавиатуры или с помощью мыши, нужно либо осуществлять эту операцию до использования функции command, либо организовать паузу внутри команды (см. разд. 4.1).

3.2. Создание новой функции

Создавая новую внешнюю функцию, программист должен сообщить Автолиспу, что предлагаемая ему структура является именно функцией, которую Автолиспу предстоит обработать по той же технологии, по которой он обрабатывает встроенные функции. В составе Автолиспа имеется встроенная функция, определяющая внешнюю структуру как функцию. Такая функция записывается в формате:

(defun имя ([аргументы]/[локальные переменные])),

например:

(defun my_prog (a b / temp)).

Здесь функция my_prog содержит два аргумента (a, b) и одну локальную переменную (temp). Пара круглых скобок после имени функции обязательна, даже если аргументы отсутствуют.

Переходя к изложению техники программирования на Автолиспе, автор считает необходимым еще раз подчеркнуть, что настоящее пособие не является справочником по функциям языка. Описываемые функции сгруппированы по назначению лишь частично и лишь в той степени, которая необходима для понимания рассматриваемых программ. Детальное изучение языка требует привлечения дополнительных материалов (например [1, 2]).

3.3. Создание новой команды Автокада