Выбрать главу

После окончания всех операций, предусмотренных программой, восстановить системные переменные можно пользовательской функцией 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. Программное редактирование наборов

Чертеж, выведенный на бумагу, содержит объекты, изображаемые линиями различной ширины. До появления 15-й версии Автокада они обычно выполнялись на экране монитора линиями нулевой ширины, а требуемое значение ширины устанавливалось при настройке печатающего устройства. Автокад 2000 снял эту проблему, добавив новую системную переменную - LINEWEIGHT, управляющую шириной линии. Но и в более ранних версиях иногда удобно уже в чертеже задавать необходимую ширину линий, особенно если объекты расположены в одном слое. Автокад в этой ситуации позволяет использовать примитивы, обладающие шириной линии, например, полилинии, полосы, кольца. Однако часто бывает удобнее выполнить чертеж в линиях нулевой толщины, а впоследствии отредактировать нужные примитивы. Автокад предоставляет возможность осуществить это, применив команду Pedit, но подобную обработку, во-первых, воспринимают не все примитивы, во-вторых, она трудоемка и требует особой сосредоточенности в связи с необходимостью постоянно отслеживать информацию в поле сообщений.

Ниже приводится фрагмент программы, осуществляющей одновременное преобразование в примитивы, обладающие шириной, некоторого набора отмеченных примитивов, включающего линии, полилинии, дуги и окружности. Программа использовалась в версиях 11...14, может быть небесполезной и в версии AutoCAD 2000.

(defun MODES (a)

    (setq MLST '())

        (repeat (length a)

            (setq MLST (append MLST (list (list (car a) (getvar (сar a))))))

            (setq a (cdr a))

    ) ; Конец repeat

) ; Конец MODES

(defun MODER ()

    (repeat (length MLST)

        (setvar (caar MLST) (cadar MLST))

        (setq MLST (cdr MLST))

    )

)

(defun C:PLW (/ sset pl_w n type_e)

    (modes ‘(“BLIPMODE” “CMDECHO”))