Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Краткие теоретические сведения. AutoLISP имеет два вида объектов: атомы и списки





 

ПОДПРОГРАММЫ КАК АТОМЫ

 

AutoLISP имеет два вида объектов: атомы и списки. Каждый объект в AutoLISP - один или другой. Атомы имеют большое количество различных типов данных. Один из этих типов данных - SUBR, или подпрограмма. Подпрограммы - имена для внутренних функции AutoLISP.

 

ФУНКЦИИ, СНАЧАЛА В ФОРМАХ

Когда сложное выражение создается для оценки, оно состоит из списка с подпрограммой (или внутренней функцией) как первым элементом. Такое выражение также известно как форма.

Пример формы:

(setq x 10)

Какова подпрограмма в этом примере? Какую позицию она занимает в списке?

Ниже пример списка который не является формой, то-есть список который должен обрабатываться только как данные и не может оцениваться.

(1.0 2.0 3.0)

Что случиться если AutoLISP попытался оценивать последнее выражение? Почему?

Это ведет нас к важному ограничению, что любой список который может оцениваться (любая форма) должен иметь первым элементом функцию.

 

ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ ФУНКЦИИ

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

Рассмотрим процесс оценки типичной формы которая использует подпрограмму.

(setq x 10)

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

 

Результат в этом случае - значение 10 для выражения, и побочный

эффект - переменная X связывается с 10.

SETQ - подпрограмма, и ее команды были предопределены в AutoLISP; пользователь не может изменять их. Однако, можно создавать полностью новые функции которые выполняют любые команды обработки пожеланию пользователя.

Новые функциональные связывания создаются используя подпрограмму DEFUN, имя которой расшифровывается как DEfine FUNction.

 

КАК ИСПОЛЬЗОВАТЬ DEFUN

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

(Defun <имя функции > <список аргументов / список локальных переменных > <выражение>...)

DEFUN берет два требуемых параметра, и переменное число параметров после первых двух.

 

ПАРАМЕТРЫ К DEFUN

Первый требуемый параметр к DEFUN должен быть имя новой функции которую вы хотите определить. Никогда не используйте имя встроенной функции или символ как <имя функции>, так как это будет делать встроенную функцию недоступной. Используйте новое имя, предпочтительно то которое описывает действия функции. Использование в имени функции шести или меньше символов будет сохранять место в памяти (больше про это в последующих уроках).

В этом примере, первый аргумент DEFUN - слово MYFUN, который становится именем определяемой пользователем функции.

(Defun MYFUN <список аргументов / список локальных переменных >...)

Второй необходимый аргумент DEFUN должен быть список требуемых параметров и(или) локальных переменных. Этот аргумент будет обсуждаться подробно позже в этом уроке. Теперь, достаточно использовать пустой список, то-есть список без требуемых аргументов или локальных переменных.

Предыдущий пример расширим, чтобы включить список требуемых аргументов и (или) локальных переменных.

 

(Defun MYFUN() <выражение>...)

Параметры после списка требуемых параметров - выражения которые нужно оценить когда определяемая пользователем функция выполняется. Они - команды обработки которые будут выполняться когда фун-

кция вызывается.

 

ПРИМЕР ПРОСТОГО ОПРЕДЕЛЕНИЯ ФУНКЦИИ

 

В следующих нескольких примерах выражения будут добавляться к телу MYFUN. Различные наборы выражений будут давать различное значение MYFUN.

В этом примере, команды MYFUN сообщают чтобы были запрошены у пользователя две точки, и затем было отображено расстояние между этими двумя точками. Используется подпрограмма AutoLISP DISTANCE.

DISTANCE берет две точки как параметры, и вычисляет 3-D расстояние между ним.

(defun MYFUN ()

(setq pt1 (getpoint "\nFrom point: "))

(setq pt2 (getpoint pt1 "\nTo point: "))

(distance pt1 pt2)

)

 

Наберите этот пример. AutoLISP будет возвращать имя функции которая была определена; в этом случае, MYFUN. Вызовите MYFUN как Вы

бы вызвали любую подпрограмму.

 

Command: (MYFUN)

From point: <pick>

To point: <pick>

<возвратить расстояние как вещественное число >

 

ЗНАЧЕНИЯ ВОЗВРАЩЕННЫЕ ОПРЕДЕЛЯЕМЫМИ ПОЛЬЗОВАТЕЛЕМ ФУНКЦИЯМИ

 

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

Например, в предыдущем примере значение выражения (myfun) будет значение выражения (distance pt1 pt2).

(Myfun) < ----- форма вызывающая определяемую пользователем функцию

(defun MYFUN ()

(setq pt1 (getpoint "\nFrom point: "))

(setq pt2 (getpoint pt1 "\nTo point: "))

(distance pt1 pt2) < ----- значение последнего выражения

) становится значением формы

 

СОХРАНЕНИЕ ОПРЕДЕЛЕННЫХ ФУНКЦИЙ НА ДИСКЕ

 

Хотя можно создавать определяемые пользователем функции набирая соответствующий коде в командной строке, вероятно что лучшая идея

- использовать текстовый редактор по вашему выбору и записать этот текст в новый файл с расширением.LSP; Затем загрузите файл в AutoCAD функцией AutoLISP APPLOAD.

 

Функция APPLOAD берет в качестве аргумента строку, которая должна

содержать имя.LSP файла для загрузки.

(Appload "<имя файла>")

 

ВЫЗОВ КОМАНДЫ AutoCAD ИЗ AUTOLISP

Очень популярная подпрограмма AutoLISP для определяемых пользователем функций может создавать сокращенные имена для команд AutoCAD, и объединять две или больше команд (или команду и опции) в одиночную команду.

Функция COMMAND вызывает команды AutoCAD непосредственно из AutoLISP. COMMAND берет строковый аргумент который должен быть именем команды AutoCAD и любых ее параметров, которые должны быть переданы в командную строку AutoCAD.

Например, эта форма вызывает команду Line и чертит линию от 1,1 до 5,5. Форма возвращает нуль, потому что функция COMMAND всегда возвращает нуль. Вообще, побочный эффект формы COMMAND еще более интересен чем значение.

Command: (command "LINE" "1,1" "5,5" "")

nil

Нулевой параметр строки в конце списка параметров обрабатывается как возврат каретки командой Line (или любой командой).

Кроме строковых аргументов для опций к командам, COMMAND будет принимать вещественные или целые числа в соответствующих местах, наряду с списками двух или трех вещественных числ как точек.

COMMAND также принимает переменные с соответствующими значениями.

 

Date: 2015-12-12; view: 378; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию