Введение в Автолисп | страница 38
(setq svar_old (getvar “cmdecho”))
(setvar “cmdecho” 0)
;;; загрузка штрих-пунктирной линии
(if (tblsearch "ltype" "Acad_ISO04w100")
(princ)
(command "linetype" "load"
"Acad_ISO04w100" "acadiso.lin" "" "")
)
;;; сохранение текущего слоя
(setq lay_old (getvar "clayer"))
;;; создание нового слоя в чертеже
(command "layer" "new" "cam"
"c" "magenta" "cam"
"I" "Acad_ISO04w100" "cam"
"s" "cam" "")
;;; вызов файла и чтение первой строки
(setq get_F (getstring "Введите имя файла:"))
(setq file1 (open (strcat get_F) "r"))
(setq t1 (pnt))
;;; организация цикла счета строк файла
(setq k 0)
(while (read-line file1)
(setq k (+ k 1))
)
(close file1)
;;; чтение файла и обрисовка профиля
(setq file1 (open get_F “г”))
(repeat (- k 1)
(setq t2 (pnt))
(otr)
(setq t1 t2)
)
(close file1)
(command “layer” “s” lay_old)
(setvar “cmdecho” svar_old)
(princ)
)
Разумеется, в текст программы должны быть включены функции, описанные в этом параграфе (имеются в виду функции pnt и otr).
Приведенный пример представляет собой фрагмент программы, используемой для автоматической обрисовки центрового профиля кулачка. Дополнительно реальная программа выполняет операции объединения сегментов полилинии, генерирования типа линии, размещения изображения профиля в нужном месте чертежа и поворота изображения на заданный угол. To обстоятельство, что профиль очерчивается отрезками прямых, не играет существенной роли, так как при малом шаге счета (он в реальной программе принят равным одному угловому градусу, а может быть установлен сколь угодно малым) визуально профиль не отличается от такового, построенного с помощью сплайна.
И последнее замечание. Приведенный фрагмент содержит два цикла: while и repeat. Это сделано лишь для иллюстрации принципов их построения. В реальной программе достаточно одного цикла while.
8. ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ
8.1. Вывод сообщений
Ранее рассматривались принципы организации запросов для ввода оператором информации во время работы программы. Иногда бывает необходимо записать в файл необходимые данные, вывести на экран запрос или сообщение, не связанные с функциями getxxx, и т.п. Автолисп содержит четыре функции, отвечающие этим требованиям: prompt, print, prin1 и princ.
(prompt строка). Функция выводит строку в поле сообщений экрана и возвращает nil. В режиме двухэкранной работы сообщение выводится на оба экрана.