присваивает а значение 50, b - значение 500.
(while
В качестве примера организации цикла рассмотрим программу сохранения системных переменных, которая часто используется в прикладных программах (например в файле
(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 | Отсутствие привязки | 32 | Intersection |
1 | Endpoint | 64 | Insertion |
2 | Midpoint | 128 | Perpendicular |
4 | Centre | 256 | Tangent |
8 | Node (узел) | 512 | Nearest |
16 | Quadrant | 1024 | Quick |
2048 | Apparent Intersection | ||
В версию Автокад 2000 включены дополнительно две опции: | |||
4096 | Extension | 8192 | Parallel |
Ранее уже отмечалось, что на время работы программы целесообразно устанавливать в 0 системную переменную CMDECHO и устанавливать в 1 переменную BLIPMODE, если оператор при ручной работе использует маркеры.
6.7. Программное редактирование наборов