Цель лекции: приобрести навыки работы с интегрированной средой разработки и составить простые процедуры.
Файл с текстовым кодом можно создавать в блокноте. Однако пользователям предлагается специальный удобный интерфейс - IDE (Integrated . Интегрированная среда разработки предназначена для создания кода, отладки его и тестирования программы . Запуск среды производится по команде Tools - . Можно также набрать в командной строке команду Vlide. Окно Visual LISP показано на рис. 2.1.
(рис 2.1) Окно среды Visual LISP
В строке заголовка приведен адрес открытого файла в окне AutoCAD. Ниже строки меню расположены панели инструментов:
Standard;Search;Debug;View;Tools.В рабочей области размещены три окна:
AutoLisp с расширением .LSP, открытый по команде File - Open File;Visual LISP Console;Trace.В среде заголовка файла отображается пиктограмма в виде чистого листа бумаги. Если в файл внесены изменения, то к пиктограмме добавляется изображение карандаша.
Выполните команду File - New File. В окне введите текст процедуры, который приведен ниже:
(defun c:line10 (/ pt) ; Creates a line of length 10 relative X (princ "Please click a point: ") (setq pt (getpoint)) (command "_line" pt "@10,0" "") )
Хотя текст здесь разбит на строки, это сделано только для наглядности. Все тело процедуры и каждый оператор в отдельности заключены в круглые скобки. Количество открывающих и закрывающих скобок должно быть одинаковым. Позиция закрывающей скобки несущественна. Если имеются встроенные скобки, то интерпретатор обрабатывает в первую очередь выражение во внутренних скобках. Результат этой обработки используется далее для обработки выражения во внешних скобках.
Любой текст после точки с запятой считается комментарием. Слова "Creates a line of length 10 relative X" интерпретатором не обрабатываются. Эти слова пишут, чтобы облегчить понимание процедуры читающими их людьми.
Первая строка начинается со слова - определение функции. Далее идет имя функции с:line10. Можно было бы написать просто line10. Но тогда для запуска процедуры в AutoCAD нужно набирать в командной строке (line10), т.е. это имя в скобках. Задание имени процедуры с префиксом с: позволяет вызывать ее как простую команду путем набора имени line10.
Последним элементом в первой строке является выражение (/pt). pt - это переменная (от слова point). Так как перед именем переменной стоит слеш (прямая косая черта), то это локальная переменная. Она хранит какое-то значение, которое используется только в данной процедуре. Чтобы эта переменная была доступной и в других процедурах, надо сделать ее глобальной. Для этого нужно записать ее определение без слеша - (pt) . При задании нескольких переменных они перечисляются через пробел. Если переменные не задаются, то круглые скобки оставляют пустыми.
Вторая строка выводит в командной строке текст Please click a point: (Пожалуйста, укажите точку:. В командную строку выводится текст в кавычках, стоящий после оператора princ.
В третьей строке вначале выполняется команда getpoint, заключенная во внутренних скобках. Можно перевести это как "получить координаты точки, заданной пользователем". При этом пользователь вправе воспользоваться любым методом задания координат: набрать числа в командной строке, щелкнуть в нужном месте экрана или использовать объектную привязку. В любом случае программа считывает заданные координаты. Говорят, что функция getpoint "возвращает свое значение".
Следующей выполняется команда в наружной паре скобок: setq pt (getpoint) . Оператор setq присваивает переменной pt значение, возвращаемое функцией getpoint. Например, мы щелкнули в точке с координатами 5,10. Тогда переменная pt примет значение 5,10.
В четвертой строке процедуры стоит выражение command "_line" pt "@10,0" "". Функция command просто отправляет на выполнение любую следующую команду AutoCAD, заключенную в кавычки. В данном случае это команда построения отрезка line. Напоминаем, что нижнее подчеркивание вводится для команд на английском языке только в локализованных (русских) версиях.
При выполнении этой команды вначале запрашиваются координаты первой точки. Затем запрашиваются координаты второй точки. В соответствии с этими запросами после имени команды записаны параметры команды. На запрос Specify first point: берется значение переменной pt. На запрос Specify next point or [Undo]: берется значение @10,0 . Напомним, что знак @ означает задание относительных координат.
Четвертая строка заканчивается пустыми кавычками. Это эквивалентно нажатию клавиши ENTER, т.е. приводит к окончанию операции.
Таким образом, программирование в среде сводится к заданию всех параметров команды в том порядке, какой наблюдается при черчении в AutoCAD делает запрос о выборе параметра команды или о значении параметра. Ответ он находит в процедуре .
Редактор Visual LISP автоматически раскрашивает набранный текст в зависимости от элемента синтаксиса:
Для форматирования кода процедуры можно нажать кнопку Format Edit Window панели инструментов Tools или запустить команду Tools - Format Code in Editor. Если вы хотите форматировать только выделенный фрагмент процедуры, то нужно щелкнуть по кнопке Format Selection.
Типичные ошибки в синтаксисе (несоответствие скобок, неверное употребление функций и пр.) можно обнаружить, щелкнув по кнопке Check Edit Window (Check Selection) . Результаты проверки отобразятся в окне Build Output.
При необходимости можно преобразовать выделенный операторный блок программы в комментарий нажатием кнопки Comment Block. Такая операция часто применяется при настройке программы.
Для выполнения процедуры в AutoCAD выполните следующие действия:
AutoCAD щелчком по кнопке Load active edit window;Console введите выражения (c:line10↵) - откроется окно AutoCAD с приглашением: Command: 'VLIDE Please click a point: ;Visual LISP;\AutoCAD 2007\Support как Line10.lsp.Задание 2.1
Зумировать чертеж, растянув отрезок на весь экран
В .окне Visual LISP добавьте к файлу Line10.lsp команду (command "_zoom" "e" "")
Далее выполните следующие действия:
Load edit active window ";AutoCAD щелчком по кнопке "Activate AutoCAD";Line10↵;Visual LISP и сохраните файл;Visual LISP.Чтобы использовать в данном чертеже AutoCAD процедуру , необходимо ее в этот чертеж загрузить. Это можно сделать либо в среде , либо непосредственно в пространстве AutoCAD.
В среде нужно открыть файл по команде File - Open File. Для его загрузки, как описано выше, нужно выполнить команду Tools - Load Text in Editor.
В среде AutoCAD загрузить процедуру можно двумя способами. По первому способу для загрузки процедуры Line10.lsp нужно в командной строке набрать (load "line10")↵. Имя без расширения заключается в кавычки. Круглые скобки показывают . В ответ будет выдано имя функции. Протокол командной строки будет выглядеть следующим образом:
Command: (load "line10") C:LINE10 Command:
Чтобы запустить загруженную процедуру, наберите в командной строке имя функции как простую команду: line10. В ответ на приглашение укажите точку. В протоколе операции будут отображены таким образом:
Command: line10 Please click a point: _line Specify first point: Specify next point or [Undo]: @10,0 Specify next point or [Undo]: Command: nil
После запуска команды (load "line10") программа ищет файл Line10.lsp во всех каталогах (папках) поддержки. Маршруты поиска файлов поддержки можно просмотреть в диалоговом окне, открываемом по команде Tools - Options - Files (рис.2.2):
(рис 2.2) Списки маршрутов поиска файлов поддержки
Маршруты поиска файлов поддержки можно редактировать: удалять, добавлять, изменять порядок списка. Рекомендуется создать отдельную папку LISP для файлов .lsp и ввести ее адрес в список маршрутов.
Для совместного использования функций в нескольких открытых чертежах вместо команды (load "ИМЯ ФАЙЛА") нужно применить команду (vl-load-all "ИМЯ ФАЙЛА"). Это эквивалентно помещению процедуры в файл acaddoc.lsp.
Второй способ загрузки процедуры состоит в использовании команды Tools -Load Application. Можно просто набрать в командной строке AppLoad. После запуска команды активизируется диалоговое окно Load/Unload Application (рис. 2.3). Для облегчения поиска нужно указать тип файлов lsp.
(рис 2.3) Диалоговое окно Load/Unload Application
Задание 2.2
Загрузка файла процедуры в чертеж
Откройте Блокнот и наберите в нем следующий текст:
;;; Coздание окружности радиусом 30 мм (defun c:circle30 (/ pt) ;Creates a circle of radius 30 (princ "Please click a center: ") (setq pt (getpoint)) (command "_circle" pt "30") (command "zoom" "extents") )
Circle30.lsp в папке AutoCAD 2010\Support.load "Circle30")↵Circle30.lsp в среде Visual LISP. Измените его так, чтобы с его помощью можно было бы построить прямоугольник. Обе точки должны задаваться пользователем.Закрасьте контур прямоугольника красным цветом по команде ChProp. Сравните свой текст процедуры с таким вариантом:
(defun c:RecRed (/ startpt endpt) (setq startpt (getpoint "Specify the start point:")) (setq endpt (getpoint "Specify the end point")) (command "_rectang" startpt endpt) (command "_chprop" "_last" "" "_color" "t" "255,0,0" "") (command "zoom" "extents" "") )
Задание 2.3
Процедуры для трехмерного пространства
Откройте новый чертеж. В среде Visual LISP создайте две процедуры для построения трехмерных объектов. В конце команды ставится "" (Enter) .
;;;Параллелепипед с параметрами: ;;;координаты начальной точки 0,0,0; ;;;габариты 15,10,5; ;;;цвет red. (defun c:box1 (); определили функцию (command "_box" "0,0,0" "_L" "15" "10" "5" ""); построили box (command "_chprop" "_last" "" "_color" "_blue" ""); закрасили цветом blue (command "_view" "_seiso" ""); установили юго-восточный вид (command "_zoom" "_extents" "" ); растянули изображение на весь экран ) ;;;Гантель с параметрами: ;;;длина цилиндра Solid 30; ;;;центры сфер - центры оснований цилиндра; ;;;радиусы сфер 2,5. (defun c:Gantel(); определили функцию (command "_cylinder" "0,0,0" "2.5" "30" ""); построили цилиндр (command "_sphere" "0,0,0" "10" ""); построили первую сферу (command "_sphere" "0,0,30" "10" ""); построили вторую сферу (command "union" "all" "" ""); объединили в одно тело все три фигуры (command "_view" "_seiso" ""); установили юго-восточный вид (command "_chprop" "last" "" "_color" "t" "255,0,0" "" ""); закрасили красным (command "_zoom" "extents" ""); растянули изображение на весь экран )
Проанализируйте эти процедуры. Запустите в модели AutoCAD команды chprop, view, union, zoom. Рассмотрите параметры этих команд. Установите рабочее пространство 3DModeling. Запустите процедуры. В процедуре Gantel фигура закрашивается красным. Исправьте процедуру так, чтобы закрашивался весь объект. Измените число изолиний на нуль по команде isolines. В процедуре с:box1 введите визуальный стиль . Закрасьте box цветом cyan.
Попробуйте построить box и gantel вручную, набирая команды в командной строке. Предварительно для каждой фигуры создайте новый слой. Обратите особое внимание на параметры команд, которые предлагаются для выбора.
Справку по любому термину можно получить в общей справочной системе AutoCAD. Но среда располагает своей справочной службой HELP (рис. 2.4).
(рис 2.4) Диалоговое окно справки AutoLISP
В справке три основных раздела, относящихся к программированию на :
AutoLISP Reference (Справочник по AutoLISP ). Здесь собраны все команды и все функции AutoLISP ;Visual LISP Developer's Guide (Руководство разработчика на Visual LISP). Здесь содержатся все основные алгоритмы с примерами применения языка на практике;Visual LISP Tutorial (Учебник по Visual LISP) - хорошее пособие для начинающих пользователей.Задание 2.4
Найти в справке основные операторы для работы с числами и текстом.
В окне Visual LISP for AutoCAD выберите команду HELP - Visual LISP Help Topics - Содержание - . В левой части окна откроется список операторов, а в правой части помещены комментарии и примеры (рис. 2.5). Например, об операторе сравнения (= numstr [numstr] ...) сказано, что он применим и к числам и к тексту. Здесь numstr - число или строка. Оператор возвращает значение TRUE, если аргументы или строки равны, иначе возвращает NIL.
Примеры:
(= 4 4.0) returns T, (= 499 499 500) returns nil, (= 20 388) returns nil, (= "me" "me") returns T, (= 2.4 2.4 2.4) returns T, (= "me" "you") returns nil.
(рис 2.5) Диалоговое окно справочной системы
Прежде, чем выполнять задания по составлению практических программ в среде Visual LISP, рассмотрим правила синтаксиса и работу некоторых функций.
Программа представляет собой набор операторных блоков. Каждый блок заключен в круглые скобки. Внутри пары круглых скобок на первом месте стоит оператор (функция), а далее следуют операнды (параметры, аргументы функции). Разделителем элементов являются пробелы.
(ОПЕРАТОР ПАРАМЕТР1 ПАРАМЕТР2 ПАРАМЕТР3 ПАРАМЕТР4) (ФУНКЦИЯ АРГУМЕНТ1 АРГУМЕНТ2 АРГУМЕНТ3 АРГУМЕНТ4)
Рассмотрим для примера арифметические операторы для операций с числами. Арифметические операторы имеют следующие обозначения:
+ сложение;- вычитание;* умножение;/ деление.Наберите в командной строке следующее выражение (sqrt (- (* 5.5 9.5) 3.25)) ↵
Здесь (sqrt num) - функция, возвращающая вещественный корень квадратный из целого или вещественного числа num.
Вначале производится умножение, затем вычитание, затем извлекается корень квадратный. В ответ программа выдаст число 7.0.
В качестве другого примера рассмотрим
STRCAT функция конкатенации, объединяет строки-операнды;SUBSTR возвращает часть строки. Первый аргумент задает строку, второй - позицию первого символа, третий - количество символов подстроки.STRLEN возвращает количество символов строки, включая пробелы.Наберите в командной строке такие выражения. Оставьте пробелы после I и Love.
(strcat "I " "Love " "You" ".")↵ (substr "I love you." 3 4) ↵ (strlen "I love you.") ↵
Программа даст ответы: "I Love You.", "love", 11
Приведем еще несколько функций для работы с числами.
| Функция | Описание |
|---|---|
= |
Сравнение на равенство. Возвращает True, если аргументы равны между собой. Иначе возвращает nil. |
/= |
Сравнение на неравенство. Возвращает True, если аргументы не равны между собой. Иначе возвращает nil. |
< |
Сравнение меньше. Возвращает True, если каждый аргумент численно меньше следующего. Иначе возвращает nil. |
> |
Сравнение больше. Возвращает True, если каждый аргумент численно больше следующего. Иначе возвращает nil. |
<= |
Сравнение меньше или равно. Возвращает True, если каждый аргумент численно меньше или равен следующему. Иначе возвращает nil. |
>= |
Сравнение больше или равно. Возвращает True, если каждый аргумент численно больше или равен следующему. Иначе возвращает nil. |
Полный список функций можно найти в справке в разделе (рис. 2.6).
(рис 2.6) Список базовых функций в справочной системе Auto Lisp
Более подробное описание языка приведено в следующей лекции.
Создать программы по приведенным текстам. Изменить параметры. Сохранить файлы в новой папке LISP. Включить папку в маршруты поддержки.
Построение домика с крышей по заданным размерам. После построения замкнутого многоугольника запускаем команду зумирования с параметром Extents.
(defun c:domik ()
(command "_pline" "0,2" "0,0" "2,0" "2,2" "2.5,2" "1,3" "-0.5,2" "0,2" "")
(command "_zoom" "_e"))
Построение линии длиной 50 от указанной точки вдоль оси Y. Попробуйте дополнить программу: как в предыдущем задании, зумированием растяните изображение на весь экран.
(defun c:line50 (/ pt) ;Creates a line of length 50 relative Y (princ "Please click a point:") (setq pt (getpoint)) (command "_line" pt "@0,50" "") )
Построение окружности радиуса 30 с центром в указанной точке. Измените программу. Введите в параметры вторую переменную rad. Значение этой переменной также должно запрашиваться.
(defun c:circle30 (/ pt) ;Creates a circle of radius 30 (princ "Please click a point: ") (setq pt (getpoint)) (command "_circle" pt "30" "") )
Построение красной линии между указанными точками
(defun c:redline (/ startpt endpt) (setq startpt (getpoint "Select the redline start point:")) (setq endpt (getpoint "Select the redline end point")) (command "_line" startpt endpt "") (command "_chprop" "_last" "" "_color" "red" "" ) )
Последняя команда CHPROP (Изменить свойства) имеет много параметров. Поэтому посмотрите протокол прохождения в AutoCAD этой процедуры:
Command: redline Select the redline start point:Select the redline end point_line Specify first point: Specify next point or [Undo]: Specify next point or [Undo]: Command: _chprop Select objects: _last 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: _color New color [Truecolor/COlorbook] <BYLAYER>: red Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: nil
Запустите отдельно команду CHPROP, чтобы закрасить линию желтым цветом. Программа подсказывает, по какой форме задать цвет Truecolor: Red,Green, Blue:. Поэтому желтый цвет нужно задать как 255,255,0.Протокол операций будет выглядеть следующим образом:
Command: chprop Select objects: 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: c New color [Truecolor/COlorbook] <BYLAYER>: t Red,Green,Blue: 255,255,0 Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: *Cancel*
В задании 2.3 была создана процедура построения гантели с двумя сферами. Дополните процедуру дополнительными построениями, так чтобы получилась фигура, изображенная на рис. 2.7.
(рис 2.7) Рисунок для построения
IDE - Integrated - интегрированная среда разработки, часть пользовательского интерфейса.
Visual Lisp - среда AutoCAD для программирования на языке Auto Lisp.
Маршрут поиска файлов поддержки - список адресов файлов, в которых программа производит поиск заданных процедур.
Хотя выражения могут вводиться непосредственно в командную строку, удобно представлять их в виде кода процедуры, которую можно хранить в файле. Процедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp.
Visual LISP Editor?Visual LISP Editor?Auto LISP в программу AutoCAD?Цель лекции: приобрести навыки работы с интегрированной средой разработки и составить простые процедуры.
Файл с текстовым кодом можно создавать в блокноте. Однако пользователям предлагается специальный удобный интерфейс - IDE (Integrated . Интегрированная среда разработки предназначена для создания кода, отладки его и тестирования программы . Запуск среды производится по команде Tools - . Можно также набрать в командной строке команду Vlide. Окно Visual LISP показано на рис. 2.1.
(рис 2.1) Окно среды Visual LISP
В строке заголовка приведен адрес открытого файла в окне AutoCAD. Ниже строки меню расположены панели инструментов:
Standard;Search;Debug;View;Tools.В рабочей области размещены три окна:
AutoLisp с расширением .LSP, открытый по команде File - Open File;Visual LISP Console;Trace.В среде заголовка файла отображается пиктограмма в виде чистого листа бумаги. Если в файл внесены изменения, то к пиктограмме добавляется изображение карандаша.
Выполните команду File - New File. В окне введите текст процедуры, который приведен ниже:
(defun c:line10 (/ pt) ; Creates a line of length 10 relative X (princ "Please click a point: ") (setq pt (getpoint)) (command "_line" pt "@10,0" "") )
Хотя текст здесь разбит на строки, это сделано только для наглядности. Все тело процедуры и каждый оператор в отдельности заключены в круглые скобки. Количество открывающих и закрывающих скобок должно быть одинаковым. Позиция закрывающей скобки несущественна. Если имеются встроенные скобки, то интерпретатор обрабатывает в первую очередь выражение во внутренних скобках. Результат этой обработки используется далее для обработки выражения во внешних скобках.
Любой текст после точки с запятой считается комментарием. Слова "Creates a line of length 10 relative X" интерпретатором не обрабатываются. Эти слова пишут, чтобы облегчить понимание процедуры читающими их людьми.
Первая строка начинается со слова - определение функции. Далее идет имя функции с:line10. Можно было бы написать просто line10. Но тогда для запуска процедуры в AutoCAD нужно набирать в командной строке (line10), т.е. это имя в скобках. Задание имени процедуры с префиксом с: позволяет вызывать ее как простую команду путем набора имени line10.
Последним элементом в первой строке является выражение (/pt). pt - это переменная (от слова point). Так как перед именем переменной стоит слеш (прямая косая черта), то это локальная переменная. Она хранит какое-то значение, которое используется только в данной процедуре. Чтобы эта переменная была доступной и в других процедурах, надо сделать ее глобальной. Для этого нужно записать ее определение без слеша - (pt) . При задании нескольких переменных они перечисляются через пробел. Если переменные не задаются, то круглые скобки оставляют пустыми.
Вторая строка выводит в командной строке текст Please click a point: (Пожалуйста, укажите точку:. В командную строку выводится текст в кавычках, стоящий после оператора princ.
В третьей строке вначале выполняется команда getpoint, заключенная во внутренних скобках. Можно перевести это как "получить координаты точки, заданной пользователем". При этом пользователь вправе воспользоваться любым методом задания координат: набрать числа в командной строке, щелкнуть в нужном месте экрана или использовать объектную привязку. В любом случае программа считывает заданные координаты. Говорят, что функция getpoint "возвращает свое значение".
Следующей выполняется команда в наружной паре скобок: setq pt (getpoint) . Оператор setq присваивает переменной pt значение, возвращаемое функцией getpoint. Например, мы щелкнули в точке с координатами 5,10. Тогда переменная pt примет значение 5,10.
В четвертой строке процедуры стоит выражение command "_line" pt "@10,0" "". Функция command просто отправляет на выполнение любую следующую команду AutoCAD, заключенную в кавычки. В данном случае это команда построения отрезка line. Напоминаем, что нижнее подчеркивание вводится для команд на английском языке только в локализованных (русских) версиях.
При выполнении этой команды вначале запрашиваются координаты первой точки. Затем запрашиваются координаты второй точки. В соответствии с этими запросами после имени команды записаны параметры команды. На запрос Specify first point: берется значение переменной pt. На запрос Specify next point or [Undo]: берется значение @10,0 . Напомним, что знак @ означает задание относительных координат.
Четвертая строка заканчивается пустыми кавычками. Это эквивалентно нажатию клавиши ENTER, т.е. приводит к окончанию операции.
Таким образом, программирование в среде сводится к заданию всех параметров команды в том порядке, какой наблюдается при черчении в AutoCAD делает запрос о выборе параметра команды или о значении параметра. Ответ он находит в процедуре .
Редактор Visual LISP автоматически раскрашивает набранный текст в зависимости от элемента синтаксиса:
Для форматирования кода процедуры можно нажать кнопку Format Edit Window панели инструментов Tools или запустить команду Tools - Format Code in Editor. Если вы хотите форматировать только выделенный фрагмент процедуры, то нужно щелкнуть по кнопке Format Selection.
Типичные ошибки в синтаксисе (несоответствие скобок, неверное употребление функций и пр.) можно обнаружить, щелкнув по кнопке Check Edit Window (Check Selection) . Результаты проверки отобразятся в окне Build Output.
При необходимости можно преобразовать выделенный операторный блок программы в комментарий нажатием кнопки Comment Block. Такая операция часто применяется при настройке программы.
Для выполнения процедуры в AutoCAD выполните следующие действия:
AutoCAD щелчком по кнопке Load active edit window;Console введите выражения (c:line10↵) - откроется окно AutoCAD с приглашением: Command: 'VLIDE Please click a point: ;Visual LISP;\AutoCAD 2007\Support как Line10.lsp.Задание 2.1
Зумировать чертеж, растянув отрезок на весь экран
В .окне Visual LISP добавьте к файлу Line10.lsp команду (command "_zoom" "e" "")
Далее выполните следующие действия:
Load edit active window ";AutoCAD щелчком по кнопке "Activate AutoCAD";Line10↵;Visual LISP и сохраните файл;Visual LISP.Чтобы использовать в данном чертеже AutoCAD процедуру , необходимо ее в этот чертеж загрузить. Это можно сделать либо в среде , либо непосредственно в пространстве AutoCAD.
В среде нужно открыть файл по команде File - Open File. Для его загрузки, как описано выше, нужно выполнить команду Tools - Load Text in Editor.
В среде AutoCAD загрузить процедуру можно двумя способами. По первому способу для загрузки процедуры Line10.lsp нужно в командной строке набрать (load "line10")↵. Имя без расширения заключается в кавычки. Круглые скобки показывают . В ответ будет выдано имя функции. Протокол командной строки будет выглядеть следующим образом:
Command: (load "line10") C:LINE10 Command:
Чтобы запустить загруженную процедуру, наберите в командной строке имя функции как простую команду: line10. В ответ на приглашение укажите точку. В протоколе операции будут отображены таким образом:
Command: line10 Please click a point: _line Specify first point: Specify next point or [Undo]: @10,0 Specify next point or [Undo]: Command: nil
После запуска команды (load "line10") программа ищет файл Line10.lsp во всех каталогах (папках) поддержки. Маршруты поиска файлов поддержки можно просмотреть в диалоговом окне, открываемом по команде Tools - Options - Files (рис.2.2):
(рис 2.2) Списки маршрутов поиска файлов поддержки
Маршруты поиска файлов поддержки можно редактировать: удалять, добавлять, изменять порядок списка. Рекомендуется создать отдельную папку LISP для файлов .lsp и ввести ее адрес в список маршрутов.
Для совместного использования функций в нескольких открытых чертежах вместо команды (load "ИМЯ ФАЙЛА") нужно применить команду (vl-load-all "ИМЯ ФАЙЛА"). Это эквивалентно помещению процедуры в файл acaddoc.lsp.
Второй способ загрузки процедуры состоит в использовании команды Tools -Load Application. Можно просто набрать в командной строке AppLoad. После запуска команды активизируется диалоговое окно Load/Unload Application (рис. 2.3). Для облегчения поиска нужно указать тип файлов lsp.
(рис 2.3) Диалоговое окно Load/Unload Application
Задание 2.2
Загрузка файла процедуры в чертеж
Откройте Блокнот и наберите в нем следующий текст:
;;; Coздание окружности радиусом 30 мм (defun c:circle30 (/ pt) ;Creates a circle of radius 30 (princ "Please click a center: ") (setq pt (getpoint)) (command "_circle" pt "30") (command "zoom" "extents") )
Circle30.lsp в папке AutoCAD 2010\Support.load "Circle30")↵Circle30.lsp в среде Visual LISP. Измените его так, чтобы с его помощью можно было бы построить прямоугольник. Обе точки должны задаваться пользователем.Закрасьте контур прямоугольника красным цветом по команде ChProp. Сравните свой текст процедуры с таким вариантом:
(defun c:RecRed (/ startpt endpt) (setq startpt (getpoint "Specify the start point:")) (setq endpt (getpoint "Specify the end point")) (command "_rectang" startpt endpt) (command "_chprop" "_last" "" "_color" "t" "255,0,0" "") (command "zoom" "extents" "") )
Задание 2.3
Процедуры для трехмерного пространства
Откройте новый чертеж. В среде Visual LISP создайте две процедуры для построения трехмерных объектов. В конце команды ставится "" (Enter) .
;;;Параллелепипед с параметрами: ;;;координаты начальной точки 0,0,0; ;;;габариты 15,10,5; ;;;цвет red. (defun c:box1 (); определили функцию (command "_box" "0,0,0" "_L" "15" "10" "5" ""); построили box (command "_chprop" "_last" "" "_color" "_blue" ""); закрасили цветом blue (command "_view" "_seiso" ""); установили юго-восточный вид (command "_zoom" "_extents" "" ); растянули изображение на весь экран ) ;;;Гантель с параметрами: ;;;длина цилиндра Solid 30; ;;;центры сфер - центры оснований цилиндра; ;;;радиусы сфер 2,5. (defun c:Gantel(); определили функцию (command "_cylinder" "0,0,0" "2.5" "30" ""); построили цилиндр (command "_sphere" "0,0,0" "10" ""); построили первую сферу (command "_sphere" "0,0,30" "10" ""); построили вторую сферу (command "union" "all" "" ""); объединили в одно тело все три фигуры (command "_view" "_seiso" ""); установили юго-восточный вид (command "_chprop" "last" "" "_color" "t" "255,0,0" "" ""); закрасили красным (command "_zoom" "extents" ""); растянули изображение на весь экран )
Проанализируйте эти процедуры. Запустите в модели AutoCAD команды chprop, view, union, zoom. Рассмотрите параметры этих команд. Установите рабочее пространство 3DModeling. Запустите процедуры. В процедуре Gantel фигура закрашивается красным. Исправьте процедуру так, чтобы закрашивался весь объект. Измените число изолиний на нуль по команде isolines. В процедуре с:box1 введите визуальный стиль . Закрасьте box цветом cyan.
Попробуйте построить box и gantel вручную, набирая команды в командной строке. Предварительно для каждой фигуры создайте новый слой. Обратите особое внимание на параметры команд, которые предлагаются для выбора.
Справку по любому термину можно получить в общей справочной системе AutoCAD. Но среда располагает своей справочной службой HELP (рис. 2.4).
(рис 2.4) Диалоговое окно справки AutoLISP
В справке три основных раздела, относящихся к программированию на :
AutoLISP Reference (Справочник по AutoLISP ). Здесь собраны все команды и все функции AutoLISP ;Visual LISP Developer's Guide (Руководство разработчика на Visual LISP). Здесь содержатся все основные алгоритмы с примерами применения языка на практике;Visual LISP Tutorial (Учебник по Visual LISP) - хорошее пособие для начинающих пользователей.Задание 2.4
Найти в справке основные операторы для работы с числами и текстом.
В окне Visual LISP for AutoCAD выберите команду HELP - Visual LISP Help Topics - Содержание - . В левой части окна откроется список операторов, а в правой части помещены комментарии и примеры (рис. 2.5). Например, об операторе сравнения (= numstr [numstr] ...) сказано, что он применим и к числам и к тексту. Здесь numstr - число или строка. Оператор возвращает значение TRUE, если аргументы или строки равны, иначе возвращает NIL.
Примеры:
(= 4 4.0) returns T, (= 499 499 500) returns nil, (= 20 388) returns nil, (= "me" "me") returns T, (= 2.4 2.4 2.4) returns T, (= "me" "you") returns nil.
(рис 2.5) Диалоговое окно справочной системы
Прежде, чем выполнять задания по составлению практических программ в среде Visual LISP, рассмотрим правила синтаксиса и работу некоторых функций.
Программа представляет собой набор операторных блоков. Каждый блок заключен в круглые скобки. Внутри пары круглых скобок на первом месте стоит оператор (функция), а далее следуют операнды (параметры, аргументы функции). Разделителем элементов являются пробелы.
(ОПЕРАТОР ПАРАМЕТР1 ПАРАМЕТР2 ПАРАМЕТР3 ПАРАМЕТР4) (ФУНКЦИЯ АРГУМЕНТ1 АРГУМЕНТ2 АРГУМЕНТ3 АРГУМЕНТ4)
Рассмотрим для примера арифметические операторы для операций с числами. Арифметические операторы имеют следующие обозначения:
+ сложение;- вычитание;* умножение;/ деление.Наберите в командной строке следующее выражение (sqrt (- (* 5.5 9.5) 3.25)) ↵
Здесь (sqrt num) - функция, возвращающая вещественный корень квадратный из целого или вещественного числа num.
Вначале производится умножение, затем вычитание, затем извлекается корень квадратный. В ответ программа выдаст число 7.0.
В качестве другого примера рассмотрим
STRCAT функция конкатенации, объединяет строки-операнды;SUBSTR возвращает часть строки. Первый аргумент задает строку, второй - позицию первого символа, третий - количество символов подстроки.STRLEN возвращает количество символов строки, включая пробелы.Наберите в командной строке такие выражения. Оставьте пробелы после I и Love.
(strcat "I " "Love " "You" ".")↵ (substr "I love you." 3 4) ↵ (strlen "I love you.") ↵
Программа даст ответы: "I Love You.", "love", 11
Приведем еще несколько функций для работы с числами.
| Функция | Описание |
|---|---|
= |
Сравнение на равенство. Возвращает True, если аргументы равны между собой. Иначе возвращает nil. |
/= |
Сравнение на неравенство. Возвращает True, если аргументы не равны между собой. Иначе возвращает nil. |
< |
Сравнение меньше. Возвращает True, если каждый аргумент численно меньше следующего. Иначе возвращает nil. |
> |
Сравнение больше. Возвращает True, если каждый аргумент численно больше следующего. Иначе возвращает nil. |
<= |
Сравнение меньше или равно. Возвращает True, если каждый аргумент численно меньше или равен следующему. Иначе возвращает nil. |
>= |
Сравнение больше или равно. Возвращает True, если каждый аргумент численно больше или равен следующему. Иначе возвращает nil. |
Полный список функций можно найти в справке в разделе (рис. 2.6).
(рис 2.6) Список базовых функций в справочной системе Auto Lisp
Более подробное описание языка приведено в следующей лекции.
Создать программы по приведенным текстам. Изменить параметры. Сохранить файлы в новой папке LISP. Включить папку в маршруты поддержки.
Построение домика с крышей по заданным размерам. После построения замкнутого многоугольника запускаем команду зумирования с параметром Extents.
(defun c:domik ()
(command "_pline" "0,2" "0,0" "2,0" "2,2" "2.5,2" "1,3" "-0.5,2" "0,2" "")
(command "_zoom" "_e"))
Построение линии длиной 50 от указанной точки вдоль оси Y. Попробуйте дополнить программу: как в предыдущем задании, зумированием растяните изображение на весь экран.
(defun c:line50 (/ pt) ;Creates a line of length 50 relative Y (princ "Please click a point:") (setq pt (getpoint)) (command "_line" pt "@0,50" "") )
Построение окружности радиуса 30 с центром в указанной точке. Измените программу. Введите в параметры вторую переменную rad. Значение этой переменной также должно запрашиваться.
(defun c:circle30 (/ pt) ;Creates a circle of radius 30 (princ "Please click a point: ") (setq pt (getpoint)) (command "_circle" pt "30" "") )
Построение красной линии между указанными точками
(defun c:redline (/ startpt endpt) (setq startpt (getpoint "Select the redline start point:")) (setq endpt (getpoint "Select the redline end point")) (command "_line" startpt endpt "") (command "_chprop" "_last" "" "_color" "red" "" ) )
Последняя команда CHPROP (Изменить свойства) имеет много параметров. Поэтому посмотрите протокол прохождения в AutoCAD этой процедуры:
Command: redline Select the redline start point:Select the redline end point_line Specify first point: Specify next point or [Undo]: Specify next point or [Undo]: Command: _chprop Select objects: _last 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: _color New color [Truecolor/COlorbook] <BYLAYER>: red Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: nil
Запустите отдельно команду CHPROP, чтобы закрасить линию желтым цветом. Программа подсказывает, по какой форме задать цвет Truecolor: Red,Green, Blue:. Поэтому желтый цвет нужно задать как 255,255,0.Протокол операций будет выглядеть следующим образом:
Command: chprop Select objects: 1 found Select objects: Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: c New color [Truecolor/COlorbook] <BYLAYER>: t Red,Green,Blue: 255,255,0 Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: Command: *Cancel*
В задании 2.3 была создана процедура построения гантели с двумя сферами. Дополните процедуру дополнительными построениями, так чтобы получилась фигура, изображенная на рис. 2.7.
(рис 2.7) Рисунок для построения
IDE - Integrated - интегрированная среда разработки, часть пользовательского интерфейса.
Visual Lisp - среда AutoCAD для программирования на языке Auto Lisp.
Маршрут поиска файлов поддержки - список адресов файлов, в которых программа производит поиск заданных процедур.
Хотя выражения могут вводиться непосредственно в командную строку, удобно представлять их в виде кода процедуры, которую можно хранить в файле. Процедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp.
Visual LISP Editor?Visual LISP Editor?Auto LISP в программу AutoCAD?Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.