Построение простых графических примитивов



Любая команда графического редактора ACAD может быть включена в программу на AutoLISP, что позволяет строить изображения из программы автоматически или с участием пользователя. Это делается с помощью функции COMMAND, имеющей вид

(COMMAND “< имя команды >” [ < аргумент >...])

Здесь <имя команды > − имя требуемой команды, определенной в данной версии ACAD. Функция COMMAND является очень важной функцией, которая имитирует ввод пользователя в командной строке AutoCAD с клавиатуры. [5]

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

Слово PAUSE в качестве аргумента обозначает переключение в режим графического диалога, т.е. после чтения PAUSE команда ожидает одного аргумента (опцию, точку и др.) с клавиатуры, от «мыши» и т.д., в точности так, как если бы команда выполнялась просто в ACAD.

Перечислим дополнительные сведения о функции COMMAND:

в одной функции может вызываться не одна команда, а последовательность команд;

(COMMAND “”) соответствует вводу пробела с клавиатуры;

(COMMAND) равносильно нажатию клавиши CTRL/C.

Примеры:

(COMMAND “LINE” “1,1” “10,10” “”)

; Эта функция строит линию по точкам 1,1 и 10,10

(COMMAND “CIRCLE” “2P” “10,10” “20,20”)

; Строится окружность по точкам на концах диаметра

(COMMAND “CIRCLE” “10,10” PAUSE “LINE” “10,10” “10,5”)

; Строится прямоугольник

(COMMAND “ LINE ” “0,0” “210,0” “210,297” “0,297” “ CLOSE ”) .

В последнем примере строится окружность с центром в точке 10,10 и с радиусом, задаваемым пользователем, затем строится ломаная линия: две первые точки ее задаются из программы, а для задания последующих точек предполагаются действия пользователя, как при выполнении команды LINE в ACAD. [5]

Любую из этих функций можно набрать в ответ на приглашение ACAD, и соответствующая команда будет выполнена.

Обратим внимание на то, как вводятся координаты точки в функции COMMAND: координаты X и Y отделяются запятой, и все эти записи заключаются в кавычки:

(COMMAND “CIRCLE” PC R).

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

Если при выполнении функции какой-либо аргумент представлен переменной, то этой переменной должно быть ранее присвоено значение (число, строка текста, список и др.). Основное средство для присвоения значений переменных − функция SETQ:

(SETQ < переменная1 >< выражение1 > [<переменная2> <выражение2>]...).

Функция действует следующим образом: выполняются действия, задаваемые выражением 1, и результат, возвращаемый этим выражением, становится текущим значением переменной 1. Если имеются другие «пары», то с ними функция поступает аналогично. Функция SETQ возвращает значение последнего выражения.

Функция SETQ может использоваться с любым количеством аргументов, которое должно быть обязательно четным и не менее двух. Функция SETQ ‒ основное средство для сохранения значений, возвращаемых другими выражениями. [5]

Для хранения данных пользователь может вводить свои символы (переменные), не совпадающие по написанию с зарезервированными (предопределенными) или ранее занятыми. Создание новых переменных осуществляется с помощью функции SETQ, например:

(SETQ r 1 15.33 s 24 9) .

Здесь вводятся переменные r 1 и s 24, получающие соответственно, значения 15.33 (вещественное) и 9 (целое). При этом к той части оперативной памяти, которая отведена для текущего рисунка, добавляются участки, занимаемые переменными. Если переменной присвоить значение NIL, то такая переменная из памяти удаляется, и ее место освобождается для других операций LISP. Переменные могут использоваться в любых выражениях. [5]

Примеры:

(SETQ А 10.0) ; записывает 10 в А

(SETQ В (+ 123)) ; записывает в В результат сложения 1, 2 и 3, т.е. 6

(SETQ A 1 В 2 С 3) ; записывает 1 в А, 2 в В, 3 в С, возвращает значение 3

(SETQ D (SETQ А 1 В 2 С 3)) ; записывает 3 в D.

Любую из этих функций можно набрать на клавиатуре в ответ на приглашение ACAD.

Для ввода значений переменных пользователем служат функции типа GET. К ним относятся: GETINT − ввод целого числа; GETREAL − ввод вещественного числа; GETSTRING − ввод строки текста; GETPOINT − ввод точки; GETDIST − ввод расстояния; GETANGLE − ввод угла и некоторые другие функции.

Работу функций GETINT, GETREAL, GETSTRING рассмотрим на примере функции GETINT, которая в общем виде выглядит так:

(GETINT [ < подсказка > ]).

Эта функция создает паузу в выполнении программы и ожидает, пока пользователь введет с клавиатуры целое число. Функция возвращает введенное число. Необязательный аргумент < подсказка > − это текстовая константа. Если этот аргумент присутствует, то во время паузы на экране будет высвечиваться текст подсказки.

Рассмотрим пример работы с функцией GETINT.

Пример:

( SETQ NUM (GETINT “Введите номер детали <1>: ”)) .

Здесь функция GETINT выводит на экран запрос “Введите номер детали <1>: ”. Ее возвращаемым значением будет NIL, если пользователь ответит простым нажатием клавиши < Enter >, или введенное пользователем допустимое целое число (например, 21). В случае ввода пользователем недопустимого целого числа (например, -5) функция GETINT выдаст сообщение об ошибочном значении и будет ожидать допустимого варианта ввода. [5]

Аналогично записываются и действуют функции GETREAL и GETSTRING.

Запишем правило для функции GETPOINT:

(GETPOINT [< точка >] [< подсказка >]).

Функция создает паузу и ожидает ввода точки. Точка может быть введена путем указания на экране или путем набора ее координат на клавиатуре в виде X, Y. Функция возвращает координаты точки (в виде списка). Аргумент < подсказка > имеет тот же смысл, что и для функций GETINT. Если задан аргумент < точка >, то при перемещении курсора на экране будет отображаться «резиновая линия» от данной «опорной» точки до текущего положения курсора.

Функция (GETDIST [< точка >][< подсказка >]) создает паузу и ожидает ввода расстояния. Расстояние может быть указано тремя способами: как действительное число с клавиатуры; путем указания двух точек (будет определено расстояние между точками); путем указания второй точки при наличии аргумента < точка >. В двух последних случаях между первой точкой и текущим положением курсора рисуется «резиновая линия». Функция возвращает действительное число, равное введенному расстоянию. Нетрудно видеть, что первый способ задания расстояния для пользователя (и для программы) будет эквивалентен действию функции GETREAL.

Аналогично записывается и действует функция GETANGLE, которая возвращает угол (в радианах) между прямой, заданной двумя точками, и осью X.

Рассмотрим программу, текст которой приведен ниже.

Программа 2. Построение окружности.

(DEFUN OKR; Имя описываемой функции

(SETQ PC (GETPOI NT “\nВведите центр:”))

(SETQ R (GETDIST PC “\nВведите радиус:”))

(COMMAND “CIRCLE” PC R))

Такую программу можно записать на диск, затем в любое время вызвать с диска и запустить на выполнение, набрав (OKR) в ответ на приглашение ACAD. Для вывода информации на экран можно использовать функции ( PRIN ( C , T )) в различных модификациях. [2-5]

 

ПЛАН ОТЧЕТА

1. Титульный лист.

2. Цель работы.

3. Задание.

4. Описание программы.

 


Дата добавления: 2019-09-13; просмотров: 218; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!