- •Основы сапр
- •Лекция 1 Пути повышения качества и производительности проектирования на основе использования эвм
- •Правила оформления блок – схем алгоритмов
- •Лекция 2 сапр как объект проектирования
- •Состав и структура сапр
- •Лекция 4
- •3D – моделирование в машиностроении
- •AutoCad – единая платформа для проектирования
- •Как сейчас устроен AutoCad?
- •Как сегодня работают в среде AutoCad?
- •Инженерная графика
- •Трехмерное моделирование
- •Визуализация проектных решений
- •Лекция 6 Трехмерные построения
- •Координаты в трехмерном пространстве
- •Уровень и высота
- •Системы координат
- •Настройка вида
- •Трехмерные полилинии
- •Лекция 8 Тонирование
- •Лекция 9 Области
- •Лекция 10 Разрезы и сечения
- •Редактирование тел
- •Лекция 12 Создание приложений для программных пакетов
- •Visual lisp
- •Переменные языка AutoLisp
- •Переменные языка AutoLisp определенные пользователем
- •Лекция 13 Типы данных языка AutoLisp
- •Обзор функций языка AutoLisp
- •Математические функции
- •Лекция 14 Использование функции get для ввода данных.
- •Условное ветвление программ
- •Организация циклов
- •Вызов команд Автокада из программы на языке AutoLisp
- •Лекция 15 Вывод данных в командную строку
- •Файловый ввод - вывод
- •Определение функции
- •Лекция 16 Доступ к примитивам и средствам Автокада
- •Лекция 17 Требования, предъявляемые к техническому обеспечению
- •Режимы работы технических средств сапр
Лекция 15 Вывод данных в командную строку
Для вывода данных в командную строку используются функции PRIN1, PRINC, PRINT и PROMPT.
(рrin1 выражение дескриптор_файла)
Выражение выводится на экран и возвращается в AutoLISP. Если указан дескриптор файла (понятие “дескриптор файла” дано в гл. 11) и файл открыт для записи, то запись идет сразу на два устройства: на экран и в файл. Печатается только указанное выраже-ние: перехода на новую строку не осуществляются, и никакие пробелы не печатаются.
(princ выражение дескриптор_файла)
То же, что PRIN1, но управляющие символы не расшифровываются, а выводятся на экран.
(print выражение дескриптор_файла)
То же. что prin1, но перед печатью осуществляется переход на новую строку.
(prompt строка_символов)
Выводит сообщение (строку_символов) в командную строку и возвращает nil.
(terpri)
Печатает новую строку на экране и возвращает nil. Особенно удобно использовать её в макроопределениях меню Автокада. Для ввода/вывода файлов не применяется (для вывода строки в файл используйте PRINT или PRINC).
Файловый ввод - вывод
Работая с AutoCAD, рано или поздно возникнет необходимость записать ту или иную информацию в файл или принять ее оттуда. Рассмотрим функции работы с файлами.
(open имя файла режим)
Эта функция открывает файл. Возвращается дескриптор файла. Функции ввода - вывода работают не с именами файлов, а с дескрипторами файлов, определяющими не только собственно файл, но и режим доступа к нему. "Открыть файл" - значит подготовить дескриптор файла к использованию его функциями ввода - вывода языка AutoLisp. Поэтому возвращаемое функцией OPEN значение дескриптора файла должно присваиваться некоторой символьной переменной
Например: (setq dv (open "file.txt" "r"))
Здесь переменная dv- дескриптор файла file.ext, открытого для чтения. Флаг чтения или записи - это, как и имя файла, строковая константа, состоящая из одной буквы, которая должна быть набрана на нижнем регистре. Допустимые значения флага чтения/записи приводятся в таблице.
Режим OPEN |
Описание |
R |
Открыть файл для чтения. Если файл с указанным именем не существует, возвращается nil. |
W |
Открыть файл для записи. Если файл с указанным именем не существует, создается и открывается новый файл. Если такой файл уже существует, то хранящиеся в нем данные будут утеряны. |
А |
Открывает файл для добавления данных. Если файл с ука-занным именем не существует, создается и открывается новый файл. Если файл уже существует, то новые данные будут записаны после старых. |
Если файл не находится, не в одном из каталогов установленных переменными п. ACAD в файле загрузки acad.bat то имя файла должно включать в себя путь - имена подкаталогов, при этом для их разделения необходимо печатать не одну , а две косые черты: "\\".
Например: (setq rw (open “d:\\acad_tm\\sapr_tm\\sap.txt” “r”)
Определение функции
Следует отметить, что любая программа на Автолиспе является функцией определён-ной пользователем функцией. Служебное слово DEFUN (DEfine FUNction - определить функцию) определяет функцию посредством создания структурированного списка операторов программы. Определенная таким образом функция создает свою собственную замкнутую область переменных.
При задании функции и в тексте программы, должно быть одинаковое число закрывающихся и открывающихся скобок.
Пример задания функции.
С помощью текстового в файл exp.lsp (расширение .lsp - обязательно) запишем текст программы из одной функции - explane (в файле может быть и несколько функций.)
(defun explane ()
(setq p1 (getpoint “\Enter first point”))
(setq p2 (getpoint “\Enter second point”))
(command “line” p1 p2 “”)
)
После создания или редактирования текста программы необходимо выполнить ее инициализацию, для чего с командной строке вводим: (load “имя файла содержащего Lisp программу без расширения .lsp”) и нажимаем кл. ENTER. Например: (load “exp”). При успешной инициализации функции, в командной строке появиться имя функции - explane (если в файле несколько функций то имя последней). Если в тексте программы допущена ошибка то инициализация будет прервана с сообщением в командной строке - *Cancel*.
Для выполнения программы в командной строке набираем: (explane) и нажимаем кл. ENTER. Далее последует запрос ввода первой (Enter first point) и второй (Enter second point) точек по которым будет построен отрезок прямой.
С командной строки можно просмотреть значение всех глобальных переменных - например: !р1. Если мы хотим объявить действующие переменные как локальные (в этом случае команда ! к ним не применима) то их необхо-димо записать в скобках после имени функции.
Например: (defun explane (/ p1 p2)
Программа может содержать несколько функций, связь между которыми может осуществляться с помощью глобальных переменных.
Все что записано в строке программного файла после символа ; (точка с запятой) является комментариями и компилятором языка AutoLisp не обрабатывается. Например в текстовом файле exp1.lsp записаны функции:
(defun explane1 (/ p1 p2 p3 p4)
(setq p1 (getpoint “\Enter first point line1”))
(setq p2 (getpoint “\Enter second point line1”))
(setq p3 (getpoint “\Enter first point line2”))
(setq p4 (getpoint “\Enter second point line2”))
(setq c_p (inters p1 p2 p3 p4)) ; с_р - точка пересечения двух отрезков,
) ; глобальная переменная
(defun explane2 (/ p1 p2)
(setq p1 (getpoint “\Enter first point line_R”))
(setq p2 (getpoint “\Enter second point line_R”))
(setq r (distance p1 p2)) ; r - радиус окружности
(command “circle” c_p r)
)
(defun explane_all ()
(explane1)
(explane2)
)
Инициализируем функции - (load “exp1”) - в командной строке остается имя последней по тексту проинициализированной функции explane_all. Выполнение функции (explane_all), будет проходить в следующей последовательности.
Функция explane1 задается с локальными переменными р1..р4 и глобальной с_р, определяющей точку пересечения отрезков прямых. Функция explape2 задается с локальными переменными р1..р4, далее определяется радиус r, как расстояние между двумя точками и строится окружность с центром точке с_р.
Отладка программы.
Если в тексте программы допущена ошибка то ее инициализация (load ...) будет прерва-на с сообщением в командной строке - *Cancel*. Как правило это указывает на неравен-ство количеств открывающих и закрывающих скобок () или кавычек “ “. Следует внимательно просмотреть программу и если ошибка не обнаружена то исключать строчки ее текста из компиляции проставляя символ ; (точка с запятой) в начале строки.
Если компиляция программы прошла успешно (в командной строке появилось имя функции) однако выполнение программы прерывается, то следует обнаружить место где это происходит. В этом случае можно также воспользоваться принципом исключением строчек текста программы с помощью символа ; (точка с запятой).
На этапе отладки программы не следует объявлять переменные как локальные тогда их последовательно можно просмотреть с командной строки (например: ! c_p или ! col) определяя тем самым место ошибки (т.е где прерывается присвоение значений переменным) в программе.
Наиболее универсальным средством обнаружения ошибок является простановка в тексте программы функций (alert сообщение). Данная функция приостанавливает выполнение программы, выводит в диалоговое сообщение и ждет нажатие пользователем кл. Enter или OK.
Например: (defun val()
- - - - - - - - - - - - -
- - - - - - - - - - - - - (alert ”Stop1”)
- - - - - - - - - - - - -
- - - - - - - - - - - - - (alert “Stop2”)
- - - - - - - - - - - - -
)
Если выполнение программы дойдет до второй строки, то последует сообщение Stop1, если до четвертой Stop2 и т.д.
(exit)
Данная функция немедленно прекращает выполнение программы.
Например: (defun cr_l()
(setq rad nil)
(setq rad (getdist"Enter value radius > 10\n"))
(if (< rad 10) (progn (princ "Error rad<10") (exit)))
(setq c_p (getpoint"Enter center point\n"))
(command "circle" c_p (- rad 10))
)
Если введенное пользователем значение rad меньше 10 то в командную строку выводится сообщение “Error rad<10” и выполнение программы прерывается.