Читаем Введение в Автолисп полностью

присваивает а значение 50, b - значение 500.

(while условие выражение ...). Функция оценивает условие, и если оно не nil, выполняет выражение. Процесс продолжается до тех пор, пока условие не примет значения nil. Функция возвращает значение последнего выражения.

В качестве примера организации цикла рассмотрим программу сохранения системных переменных, которая часто используется в прикладных программах (например в файле attredef.lsp; находящемся в папке support пакета AutoCAD).

(defun MODES (а)

    (setq MLST '())

    (repeat (length а)

        (setq MLST (append MLST

            (list (list (саг а) (getvar (car a))) )) )

        (setq a (cdr a))

    )

)

Каждая системная, переменная обладает именем и значением, т.е. представляет собой список из двух элементов. Первая строка программы описывает пользовательскую функцию MODES, включающую один аргумент, по содержанию имеющий определенное сходство с формальным параметром в подпрограмме Фортрана. Автолисп позволяет использовать параметр для подстановки как атомов, так и списков. В данном случае будет использован список системных переменных. Вторая строка создает пустой список MLST. Третья - открывает цикл, в котором количество повторов операции соответствует длине аргумента а, т.е. числу сохраняемых переменных. Далее в первом цикле выполняются следующие операции (для удобства чтения одна из подстрок выделена полужирным шрифтом):

(car а) - извлекается первая системная переменная из списка а сохраняемых переменных;

(getvar (car a)) - извлекается значение первой системной переменной;

(list (car a) (getvar (car а))) - формирует подсписок, состоящий из имени переменной и ее значения;

(list (list (car a) (getvar (car а))) ) - формирует список из подсписков переменных и их значений (в первом цикле список состоит из одного подсписка);

(append MLST (list (...))) - сформированный список присоединяется к пустому списку MLST;

(setq MLST (append MLST (list (...)))) - результат предыдущего действия идентифицируется со списком MLST, который теперь не пуст, а содержит имя системной переменной и ее значение;

(setq a (cdr a)) - из списка переменных исключается обработанная переменная.

Во втором цикле все операции повторяются, но присоединение второй переменной и ее значения происходит уже не к пустому списку, а к списку, хранящему имя и значение первой переменной.

Теперь достаточно из основной программы вызвать функцию MODES с перечисленными в качестве аргументов именами сохраняемых системных переменных, и все они вместе с их значениями будут сохранены в списке MLST:

(modes '(sysvar1 sysvar2 sysvar3 ...)).

После окончания всех операций, предусмотренных программой, восстановить системные переменные можно пользовательской функцией moder. Эта функция работает аналогично функции modes и дополнительных пояснений, вероятно, не требует. Следует лишь обратить внимание на то, что обрабатываемым является список MLST, уже существующий в программе. Программа выглядит следующим образом:

(defun MODER ()

    (repeat (length MLST)

        (setvar (caar MLST) (cadar MLST))

        (setq MLST (cdr MLST))

    )

)

Обе функции можно использовать без изменения при составлении любых программ на Автолиспе.

При сохранении и изменении конфигурации целесообразно обратить внимание на системную переменную OSMODE (Object Snap Mode - режим объектной привязки). Не исключены ситуации, когда объектная привязка главенствует над указанием точки и примитив строится не из указанной точки, а из точки, определенной автоматической объектной привязкой. Поэтому автоматическую привязку целесообразно отключить, установив переменную OSMODE в ноль, или изменить ее значение в нужную сторону. Значение этой переменной устанавливается в соответствии с таблицей 5.

Tаблица 6. Битовые числа опций объектной привязки

Битовое числоЗначение опцииБитовое числоЗначение опции
0Отсутствие привязки32Intersection
1Endpoint64Insertion
2Midpoint128Perpendicular
4Centre256Tangent
8Node (узел)512Nearest
16Quadrant1024Quick
2048Apparent Intersection
В версию Автокад 2000 включены дополнительно две опции:
4096Extension8192Parallel

Ранее уже отмечалось, что на время работы программы целесообразно устанавливать в 0 системную переменную CMDECHO и устанавливать в 1 переменную BLIPMODE, если оператор при ручной работе использует маркеры.

<p>6.7. Программное редактирование наборов</p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных