Размещено на сайте пользователей САПР, здесь вы также можете скачать документацию по Автокад и Автолисп, а так же бесплатные Лисп программы для Автокад

ГЛАВА 4

Использование команд Автокада

Геометрические построения

 

Из предыдущей главы мы узнали, как средствами Автолиспа выводить данные на текстовый экран и вводить информацию с клавиатуры. Однако главный экран Автокада - графический, на котором происходят создание и модификация чертежа. Главная цель применения языка Автолисп - именно работа с графическим экраном, что позволяет автоматизировать построение изображений. Но для этого нужно узнать, каким образом Автолисп связан с командами Автокада.

Обычно пользователи Автокада, даже достаточно опытные, умеют работать только с использованием верхнего (падающего) или бокового (экранного) меню. Предложение нарисовать чертеж на компьютере без мыши поставит их в тупик. Между тем первые версии Автокада появились еще в эпоху машин типа IBM PC и IBM PC/XT, когда никаких мышей и в помине не было. Как же работать с Автокадом с клавиатуры?

Автокад имеет встроенный набор команд, которые вводятся с клавиатуры в ответ на приглашение "Команда:" и в большинстве запрашивают определенные параметры. Последовательность ввода этих параметров определяется форматом команды.

Набор команд в пределах одной версии Автокада постоянен и одинаков, а меню можно создавать самому, поэтому в разных организациях меню обычно сильно отличаются.

В качестве примера рассмотрим формат команды "ПЛИНИЯ" как наиболее широко используемой в построениях на графическом экране:

 

Что вводим с клавиатуры

Что это такое мы ввели

Команда: ПЛИНИЯ

Имя команды. С этого начинается выполнение любой команды Автокада

От точки:

Координаты точки в виде:

  1. x,y например, 100,250 - абсолютные координаты точки;
  2. @dx, dy например, @-10,45 - приращения по осям координат от текущей точки;
  3. @r<a например, @10<90 - перемещение от текущей точки под углом a на расстояние r.

Текущая ширина линии равна 0.00

Дуга/Замкни/Полуширина/ДЛина/ОТМени/Ширина/<Конечная точка сегмента>:

Здесь вводится или следующая точка, или ключевое слово - одно из слов в приводимом списке, разделенных символом "/". Можно вводить не слово целиком, а только ту его часть, которая набрана заглавными буквами

Команда:

Для явного завершения рисования полилинии команду необходимо прервать нажатием клавиш ¬ , § +C , § +Ї или нажатием правой кнопки мыши

 

Итак, в Автокаде возможен ввод следующих типов параметров команд с клавиатуры:

  1. Текстовые строки (например, название команды или имя файла);
  2. Координаты точек;
  3. Выбор объекта;
  4. Численные значения (например, номер цвета);
  5. Ключевые слова;
  6. Прерывание выполнения команды.

 

Большинство команд Автокада могут быть выполнены из программы на Автолиспе при помощи функции COMMAND:

 

( COMMAND t1 t2 .. tn )

 

где 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:

 

( POLAR a angle dist )

 

где a - список из двух элементов (координаты точки);

angle - угол в радианах;

dist - расстояние в текущих единицах измерения.

 

POLAR возвращает в виде списка координаты точки, отстоящей от точки a на расстояние dist под углом angle (рисунок 4.2).

 

Рисунок 4.2 - Функция POLAR.

 

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

 

Рисунок 4.3 - Направления отсчета углов в Автокаде.

 

Единицы измерения, как и многие другие параметры, определяются значениями системных переменных Автокада.

Системная переменная - ячейка памяти, содержащая определенное значение и имеющая неизменное имя. Значения системных переменных задают различные режимы работы команд Автокада.

Не путайте переменные Автолиспа и системные переменные Автокада - это абсолютно разные вещи!

К системным переменным нельзя обращаться напрямую, как к обычным переменным Автолиспа.

Для доступа к системным переменным в Автолиспе имеются две функции:

 

( GETVAR "имя" )

( SETVAR "имя" значение )

 

Функция GETVAR возвращает значение системной переменной с именем "имя", заданным как текстовая строка.

Например, системная переменная "LASTPOINT" содержит координаты текущей точки. Для их использования в программе следует использовать функцию GETVAR в виде:

 

( GETVAR "LASTPOINT" )

 

Если в ходе отрисовки полилинии следующую точку удобнее рассчитать от предыдущей при помощи функции POLAR, необязательно записывать все промежуточные точки в переменные. Можно использовать функцию GETVAR, например:

( COMMAND "ПЛИНИЯ" ( LIST ( + A 10 ) ( - B 20 ) )

( POLAR ( GETVAR "LASTPOINT" ) 0 40 ) "" )

 

В приведенном примере координаты начальной точки рассчитываются. Чтобы не записывать эту точку в отдельную переменную (вопрос нехватки памяти в Автолиспе 10 стоит очень остро), следующая точка, координаты которой рассчитывается при помощи функции POLAR, использует в качестве опорной координаты текущей (т.е. начальной) точки, всегда записываемые в виде списка в системную переменную "LASTPOINT".

Функция SETVAR меняет значение соответствующей системной переменной.

Осторожно!

  1. Хорошенько подумайте, прежде чем менять значение системной переменной. Эти значения записываются в файл чертежа;
  2. Часть системных переменных (например, переменная, содержащая номер версии Автокада) доступна только для чтения и их значения нельзя изменить.

При геометрических расчетах используются также следующие функции:

 

( 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 в текущих единицах измерения расстояний.

 


Тесты к главе 4

 

Содержание

Список функций

Тесты

Предметный указатель