Введение в Автолисп | страница 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. В режиме двухэкранной работы сообщение выводится на оба экрана.