Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD / Основы САПР / Лекц_Основы_САПР.doc
Скачиваний:
2353
Добавлен:
05.03.2016
Размер:
2.06 Mб
Скачать

Лекция 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” и выполнение программы прерывается.

Соседние файлы в папке Основы САПР