Использование команд Автокада
Геометрические построения
Из предыдущей главы мы узнали, как средствами Автолиспа выводить данные на текстовый экран и вводить информацию с клавиатуры. Однако главный экран Автокада - графический, на котором происходят создание и модификация чертежа. Главная цель применения языка Автолисп - именно работа с графическим экраном, что позволяет автоматизировать построение изображений. Но для этого нужно узнать, каким образом Автолисп связан с командами Автокада.
Обычно пользователи Автокада, даже достаточно опытные, умеют работать только с использованием верхнего (падающего) или бокового (экранного) меню. Предложение нарисовать чертеж на компьютере без мыши поставит их в тупик. Между тем первые версии Автокада появились еще в эпоху машин типа IBM PC и IBM PC/XT, когда никаких мышей и в помине не было. Как же работать с Автокадом с клавиатуры?
Автокад имеет встроенный набор команд, которые вводятся с клавиатуры в ответ на приглашение "Команда:" и в большинстве запрашивают определенные параметры. Последовательность ввода этих параметров определяется форматом команды.
Набор команд в пределах одной версии Автокада постоянен и одинаков, а меню можно создавать самому, поэтому в разных организациях меню обычно сильно отличаются.
В качестве примера рассмотрим формат команды "ПЛИНИЯ" как наиболее широко используемой в построениях на графическом экране:
|
Что вводим с клавиатуры |
Что это такое мы ввели |
|
|
Команда: ПЛИНИЯ |
Имя команды. С этого начинается выполнение любой команды Автокада |
|
|
От точки: |
Координаты точки в виде: |
|
|
Текущая ширина линии равна 0.00Дуга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>: |
Здесь вводится или следующая точка, или ключевое слово - одно из слов в приводимом списке, разделенных символом "/". Можно вводить не слово целиком, а только ту его часть, которая набрана заглавными буквами |
|
|
Команда: |
Для явного завершения рисования полилинии команду необходимо прервать нажатием клавиш ¬ , § +C , § +Ї или нажатием правой кнопки мыши |
|
Итак, в Автокаде возможен ввод следующих типов параметров команд с клавиатуры:
Большинство команд Автокада могут быть выполнены из программы на Автолиспе при помощи функции COMMAND:
где
t1 - имя вызываемой команды;t2 ... tn
- параметры вызываемой команды.
Чтобы не пытаться создавать принципиально невозможные программы, сразу следует отметить:
Из программы на Автолиспе нельзя вызвать следующие команды: ДТЕКСТ, ЭСКИЗ, ПЕЧАТАЙ, ЧЕРТИ, ПАКЕТ, а также команды, определенные пользователем при помощи (DEFUN C:).
Особенно печально то, что невозможно автоматизировать вывод чертежа на бумагу (команды
ПЕЧАТАЙ и ЧЕРТИ), что делает любые системы автоматизации конструкторского труда, написанные на Автолиспе, несколько неполноценными.
Есть два особых вида выражений, которые могут быть аргументами функции COMMAND:
PAUSE
позволяет пользователю ввести соответствующий параметр вручную;""
(две кавычки) или отсутствие параметров вообще [ ( COMMAND ) ] равносильно прерыванию команды.
Пример: нарисуем из программы на Автолиспе квадрат с левым нижним углом в точке (10,10) и стороной 25мм (рисунок 4.1).
Рисунок 4.1 - Построение квадрата.
Если бы мы пользовались только клавиатурой, то диалог выглядел бы следующим образом:
Команда: ПЛИНИЯ
От точки: 10,10
Текущая ширина линии равна 0.00
ДУга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>:
@10,0ДУга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>:
@0,10ДУга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>:
@-10,0ДУга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>:
Замкни
На Автолиспе это будет выглядеть так:
( COMMAND "ПЛИНИЯ" "10,10" "@10,0" "@0,10" "@-10,0" "ЗАМКНИ" )
Все константы, являющиеся параметрами функции COMMAND, задаются как текстовые строки, даже если они являются числами или координатами точек.
Однако главное свойство функции COMMAND - возможность подстановки в качестве параметров результатов выполнения программ.
Любой параметр функции COMMAND можно заменить на имя переменной или выражение Автолиспа. Данный параметр примет значение, равное значению переменной или результату вычисления выражения.
Ограничение: внутри функции COMMAND нельзя вызывать функции ввода данных (GETREAL, GETSTRING и т.д. )
Как получить средствами Автолиспа текстовую строку, в общем, понятно. Однако возникает естественный вопрос: как представить координату точки?
Координаты точек являются списками из двух или трех вещественных чисел - координат по осям X, Y и Z соответственно.
Таким образом, точка с координатами 10,10 может быть задана как текстовой строкой "10,10", так и списком: ( LIST 10 10 ).
Второй способ позволяет использовать переменные и выражения Автолиспа для указания координат.
Например. если координата Х точки записана в переменной А, а координата
Y равна
, то следует записать:
( LIST A ( / ( * ( + A 20 ) ( + a 20 ) ) 4 ) )
В принципе имеющихся в Автолиспе математических функций достаточно, чтобы выполнять геометрические построения. Однако для удобства язык имеет ряд специальных встроенных функций для вычисления координат точек.
Основная геометрическая функция - POLAR:
где
a - список из двух элементов (координаты точки);angle
- угол в радианах;
dist
- расстояние в текущих единицах измерения.
POLAR
возвращает в виде списка координаты точки, отстоящей от точки a на расстояние dist под углом angle (рисунок 4.2).

Рисунок 4.2 - Функция
POLAR.
Положительное направление отсчета углов - против часовой стрелки (рисунок 4.3).

Рисунок 4.3 - Направления отсчета углов в Автокаде.
Единицы измерения, как и многие другие параметры, определяются значениями системных переменных Автокада.
Системная переменная - ячейка памяти, содержащая определенное значение и имеющая неизменное имя. Значения системных переменных задают различные режимы работы команд Автокада.
Не путайте переменные Автолиспа и системные переменные Автокада - это абсолютно разные вещи!
К системным переменным нельзя обращаться напрямую, как к обычным переменным Автолиспа.
Для доступа к системным переменным в Автолиспе имеются две функции:
( SETVAR "имя" значение )
Функция
GETVAR возвращает значение системной переменной с именем "имя", заданным как текстовая строка.Например, системная переменная "
LASTPOINT" содержит координаты текущей точки. Для их использования в программе следует использовать функцию GETVAR в виде:
( GETVAR "LASTPOINT" )
Если в ходе отрисовки полилинии следующую точку удобнее рассчитать от предыдущей при помощи функции
POLAR, необязательно записывать все промежуточные точки в переменные. Можно использовать функцию GETVAR, например:
( COMMAND "ПЛИНИЯ" ( LIST ( + A 10 ) ( - B 20 ) )
( POLAR ( GETVAR "LASTPOINT" ) 0 40 ) "" )
В приведенном примере координаты начальной точки рассчитываются. Чтобы не записывать эту точку в отдельную переменную (
вопрос нехватки памяти в Автолиспе 10 стоит очень остро), следующая точка, координаты которой рассчитывается при помощи функции POLAR, использует в качестве опорной координаты текущей (т.е. начальной) точки, всегда записываемые в виде списка в системную переменную "LASTPOINT".Функция
SETVAR меняет значение соответствующей системной переменной.
Осторожно!
При геометрических расчетах используются также следующие функции:
( INTERS т1 т2 т3 т4 признак )
возвращает точку пересечения двух отрезков, проходящих через точки
т1 и т2 и т3 и т4 соответственно. Признак показывает, следует ли находить точку пересечения бесконечных прямых проходящих через точки т1 и т2 и т3 и т4 (если признак=NIL) или же только отрезков (если признак№ NIL). Если точка пересечения отсутствует, функция возвращает NIL.Функция
( ANGLE т1 т2 ) возвращает угол в радианах между положительным направлением оси Х и прямой, проходящей через точки т1 и т2.Функция
( DISTANCE т1 т2 ) возвращает расстояние от точки т1 до точки т2 в текущих единицах измерения расстояний.