- •Оглавление введение
- •Глава 1. Основы работы с системой автокад. Базовый графический редактор
- •1.1. История создания системы Автокад
- •1.2. Интерфейс пользователя Автокада
- •1.3 Команды панели Рисование
- •1.4. Команды панели Редактирование
- •1.4.1. Расчленение объектов
- •1.4.2. Удаление объектов
- •1.4.3. Перемещение набора объектов
- •1.4.4. Копирование набора объектов
- •1.4.5. Поворот набора объектов
- •1.4.6. Рисование подобных объектов
- •1.4.7. Повторение набора объектов
- •1.5. Команды панели Редактирование 2
- •Глава 2. Команды и приемы оформления конструкторско-технологической документации
- •2.1. Методика создания чертежей деталей кузнечно-штамповочных машин с использованием базовых команд
- •2.2. Нанесение текстовых надписей и обозначений с использованием базовых команд
- •2.3. Приемы и команды оформления документации с применением специализированных программ-надстроек
- •2.4. Получение твердых копий разработанной документации
- •Глава 3. Основы работы в трехмерном пространстве
- •3.1. Подходы к проектированию в трехмерном пространстве
- •3.2 Создание твердотельных моделей сборочных единиц кузнечно-штамповочного оборудования базовыми средствами Автокада
- •3.3 Получение реалистичных изображений деталей базовыми средствами Автокада
- •Глава 4. Программирование на autolisp
- •4.1. Классификация языков программирования
- •4.2. Язык Лисп
- •4.3. Вычисления в AutoLisp
- •4.4. Запись команд
- •4.5. Предикаты, логические операторы и условные выражения
- •4.6. Основы параметрического проектирования
- •Заключение
- •Библиографический список
- •Imageframe
- •Imagequality
- •Insertobj
- •Interfere(взаимод)
- •Intersect(пересеки)
- •Vplayer (вслой)
- •Vpoint (т3рения)
- •Vports (вэкран)
- •Xattach
- •Xbind (добавь)
- •Xclip(ссподрежь)
- •Xline(прямая)
- •Xref (ссылка)
- •394026 Воронеж, Московский просп., 14
4.3. Вычисления в AutoLisp
AutoCAD не имеет вычислителя, похожего на всплывающий калькулятор, чтобы выполнить арифметические операции и возвращать соответствующее значение в командную строку AutoCAD, но он имеет язык программирования чтобы вычислять и сохранять значения и передавать их AutoCAD. Комментарий " AutoCAD не имеет встроенный калькулятор " - истина, поскольку это бессмысленно, потому что он имеет взамен весь встроенный язык программирования!
AutoLISP может использоваться в любое время в редакторе рисунка. Он может использоваться в командной строке при запросе размерности, и при любом запросе сгенерированном любой командой AutoCAD.
Синтаксис не такой простой, чтобы овладеть им сразу как у простого калькулятора с 10 клавишами; однако, это еще более мощно. И синтаксис, если он изучен, является простым и непротиворечивым.
Возврат значения в командную строку. Значение выражения AutoLISP передается от AutoLISP к AutoCAD как ответ в командную строку AutoCAD.
Если командная строка активна, значение выражения просто печатается в командной строке. Любой побочный эффект который происходит во время выполнения выражения, типа нового связывания символов, является несоответствующим для приглашения ко вводу команды (пока команда AutoCAD не вызывается в выражении). Например, эта форма (форма являясь любое сложное выражение которое обрабатывается как код программы а не как данные) связывает символ X и результ сложения 4 и 6 а затем передает значение 10 в AutoCAD, который просто печатает результат в командной строке.
Command: ( setq x ( + 4 6 ))
10
Нет никаких требование для связывания символов. Любая форма может оцениваться в приглашении ко вводу команды просто чтобы возвратить расчетное числовое значение.
Например, эта форма возвращает значение деления квадратного корня 50 на вещественное число 9.
Command: ( / ( sqrt 50.0 ) 9.0 )
0.785674
Эта форма возвращает значение умножения результата сложения 2.5 и 6.3 на 24.0.
Command: ( * ( + 2.5 6.3 ) 24.0 )
211.2
Возврат значения команде AutoCAD
Если команда AutoCAD активна, тогда оценка формы AutoLISP возвращает значение в AutoCAD. Значение становится ответом к текущей подсказке команды AutoCAD.
В этом примере, команда ARRAY получает как число элементов массива результат формы AutoLISP которая делит 6.0 на 0.35; другими словами, мы не знаем вначале сколько приходится величин 0.35 на величину 6.0, так что мы просим AutoLISP вычислить это значение для нас и возвратить ответ в AutoCAD. Так как подсказка из ARRAY принимает только целочисленные значения, мы будем использовать AutoLISP функцию ( fix <real> ) чтобы округлить полученное значение к самому близкому целому числу.
Command: ( / 6.0 0.35 )
17.1429
Command: ( fix 17.1429 )
17
Command: ( fix ( / 6.0 0.35 ))
17
Command: LINE
From point: 1,1
to point: 5,5
to point: <return>
Command: ARRAY
Select objects: L
Select objects: <return>
Rectangular or Polar array (R/P): R
Number of rows (---) <1>: 1
Number of columns (|||) <1>: (fix (/ 6.0 0.35))
Distance between columns: 0.35
В этом случае, AutoCAD создает 17 элементов в массиве.
Важным есть указание на то, что форма AutoLISP использовалась в интерактивном режиме, в середине команды AutoCAD, для вычисления значение ( в этом случае, целого числа ) которое впоследствии автоматически предалось команде в этом же месте в качестве ответа на запрос.
В этом примере AutoLISP вычисляет размер радиуса для команды fillet.
Command: FILLET
Polyline/Radius/<Select two lines>: R
Enter fillet radius <1.0>: (/ 28.0 8.0)
Так как оба параметра для (/) - вещественные числа, результат вещественен, и размер радиуса для команды fillet устанавливается в 3.5.
Интерактивное вычисление. Другой метод передавать значения команде AutoCAD состoит в том, чтобы использовать форму AutoLISP которая непосредственно запрашивает пользователя набрать необходимые значения, а затем выполняет некоторые операции над этими значениями, в конечном счете возвращая ответ в AutoCAD. Это вероятно более легко для использования чем для объяснения.
Прежде, чем мы выполним некоторое сложное вычисление с запрошенными у пользователя значениями, мы будем представлять две новых функции AutoLISP: (getdist) и (getpoint).
(getdist) останавливает выполнение формы и позволяет пользователю определять расстояние набрать на клавиатуре значение, или выбрать с помощю мыши две точки; точно такой же механизм используется каждой подсказкой AutoCAD которая запрашивает пользователя указать расстояние.
(getpoint) останавливает форму и позволяет пользователю выбрать точку, используя любой из стандартных методов выбора точки: указать на экране; ввести значение в абсолютных, относительных, или относительных полярных координатах; используя обьектную привязку, координатные фильтры, или спецификацию lastpoint.
GETDIST. Этот пример использует подсказку в функции (getdist), которая запрашивает у пользователя расстояние. Пробуйте использовать эту форму в командной строке и ответить на нее один раз набирая значение, а другой - выбирая две точки на дисплее.
Управляющие символы \n, или наклонная черта влево и нижний регистр n, означают переход на новую строку. Они необходимы для того, что бы подсказка появилась на новой строке в области приглашения ко вводу команды.
Command: ( getdist " \nEnter distance: " )
Enter a distance: <enter a number>
Command: (getdist "\nEnter a distance: ")
Enter a distance: <pick two points>
В обоих случаях, (getdist) возвращает расстояние введенное пользователем как вещественное число.
GETPOINT. Этот пример использует подсказку для функции (getpoint), которая запрашивает у пользователя точку. Пробуйте использовать эту форму введя значение в абсолютных координатах, указав на экране, и используя объектную привязку.
Command: ( getpoint " \nPoint: " )
Point: 1,1
(1.0 1.0 0.0)
AutoLISP возвращает точку как список трех вещественных чисел. 3-D точки возвращаются как список трех вещественных чисел; 2-D точки как список двух вещественных чисел. По умолчанию, все точки выбранные в Версии 10 полностью 3-D, с X, Y, и Z значениями. Первый элемент в списке точки - значение X, второй - значение Y, и третий - значение Z.
Это выражение ( 1.0 1.0 0.0 ) не форма, потому что оно не может оцениваться. Оно не содержит никакой функции в первом элементе списка. Это - пример использование списка в AutoLISP чтобы сохранить данные предпочтительнее чем код программы.
Command: ( getpoint " \nPoint: " )
Point: <pick point>
Command: LINE
From point: 1,1
To point: 5,5
To point: <return>
Command: (getpoint "\nPoint: ")
Point: MID
of <pick line>
(3.0 3.0 0.0)
Необязательные подсказки. Нет никаких жестких правил которые бы сообщали, что Вы должны включать необязательный строковый аргумент в (getdist) или (getpoint) как подсказку для пользователя. Однако, это - хорошая практика если вы делать так. Можете предположить почему?
Пробуйте использовать (getdist) и (getpoint) без необязательного строкового аргумента.
Command: (getdist)
?
Command: (getpoint)
?
Еще больше вычислений. Так как компьютер - по существу калькулятор с памятью, то вычисления требуют чтобы AutoLISP помнил расстояния и точки.
В этом примере, переменная X связывается со списком трех вещес твенных чисел которые формируют координаты 1,1,0.
Command: ( setq x ( getpoint " \nPoint: " ))
Point: 1,1
(1.0 1.0 0.0)
Имеются другой способ связать X и список трех вещественных чисел без того, чтобы использовать функцию (getpoint). Можете Вы не забыли что это? Это функция которая сообщает чтобы AutoLISP брал следующий аргумент в его значении (как данные), скорее чем пробовал оценивать это (как форма )...
В этом примере, выберите произвольную точку где-нибудь на экране с помощью курсора.
Command: ( setq x (getpoint) )
<pick a point>
Затем, начертите линию, начинающуюся в 0,0 и заканчивающий в точке сохраненной в переменной X. Как можно запросить AutoLISP использовать текущее значение переменной?
Command: LINE
From point: 0,0
To point: !x
To point: <return>
Связывание переменных с очень точками просто. Это позволяет пользователю сохранять так много точек сколько необходимых имен в текущем сеансе редактирования чертежа, и обращаться к ним по именам в любое время, когда AutoCAD просит точку.
Command: CIRCLE
3P/2P/TTR/<Center point>: !x
Diameter/<Radius>: 1.0
Command: (setq origin (quote (0.0 0.0 0.0)))
(0.0 0.0 0.0)
Command: MOVE
Select objects: Last
Select objects: <return>
Base point or displacement: !x
Second point of displacement: !origin
Предыдущий пример должен переместить окружность и расположить ее центральную точку в 0,0. Можете ли Вы определить почему?
Вот другой пример команды ARRAY. Здесь AutoLISP будет вычислять расстояние между двумя точками и использовать его затем, чтобы определить сколько двойных элементов можно будет создать.
Сначала мы будем формировать некоторую произвольную геометрическую конструкцию.
Command: LINE
From point: 1.1143,5
To point: 8.9178,5
To point: <return>
Command: CIRCLE
3P/2P/TTR/<Center point>: 1.1143,5
Diameter/<Radius>: 0.5
Теперь, мы будем использовать (getdist) чтобы помочь обеспечить средства для ARRAY. В начале для ARRAY необходимо: в интерактивном режиме вычислить число элементов которые должны появляться в массиве основанном только на расстоянии между каждым элементом и общими расстоянием в массиве! В этом примере, мы будем выделять каждому элемету 0.5 едениц в отдельности.
Command: ARRAY
Select objects: Last
Select objects: <return>
Rectangular or Polar array (R/P): R
Number of rows: 1
Number of columns: (fix (/ (getdist "\nDistance: ") 0.5))
Distance: END
of <pick start point of line>
Second point: END
of <pick end point of line>
Distance between columns: 0.5
Вот другой пример который приспосабливает определенное пользователем число элементов к вычисленному расстоянию.
Command: UNDO
Auto/Back/Control/End/Group/Mark/<number>: 1
Command: ARRAY
Select objects: Last
Select objects: <return>
Rectangular or Polar array (R/P): R
Number of rows: 1
Number of columns: 10
Distance between columns: (/ (getdist) 10)
END
of <pick start point of line>
Second point: END
of <pick end point of line>
Следующие занятие: Запись новых команд AutoCAD
Для этого урока нет никакх вопросов. Пожалуйста экспериментируйте самостоятельно, использование выражения AutoLISP в приглашении ко вводу команды и внутри команд AutoCAD чтобы вычислять и сохранять ответы для AutoCAD.