Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
274
Добавлен:
29.05.2015
Размер:
3.15 Mб
Скачать

Настройка строки состояния

С помощью переменной MODEMACRO данные можно отобразить в строке состояния.

Системная переменная MODEMACRO

В строке состояния отображаются важные информационные сведения; они служат дополнением к основному диалогу с пользователем. Системная переменная MODEMACRO управляет отображением пользовательской информации в строке состояния. Вычисленное значение системной переменной MODEMACRO выводится слева в поле строки состояния, которая расположена в нижней части окна AutoCAD®. Начальным значением переменной является пустая строка; это значение устанавливается при запуске AutoCAD. Переменная не сохраняется нигде — ни в чертеже, ни в файле настройки.

Количество символов, которое может быть отображено в строке состояния, ограничено лишь размером окна AutoCAD и возможностями используемого монитора. Если значение переменной MODEMACRO имеет достаточно большую длину, все остальные элементы строки состояния смещаются вправо. В принципе, они могут даже скрываться за пределами экрана.

С помощью переменной MODEMACRO можно отобразить в строке состояния большинство данных, воспринимаемых программой AutoCAD. Использование этой переменной таит в себе богатые возможности для конфигурирования строки состояния в соответствии с нуждами пользователя.

Значение переменной MODEMACRO задается пользователем. Ей можно присвоить любое строковое значение. Максимальная длина строки - 4095 символов. Для задания значения переменной MODEMACRO можно воспользоваться командой УСТПЕРЕМ или ввести modemacro в командной строке. Модификация значения MODEMACRO, выполняемая вручную, удобна для экспериментов с различными форматами строки состояния; однако, при этом можно ввести не более 255 символов.

Если MODEMACRO присвоена пустая строка (для этого пользователь должен ввести точку в ответ на запрос значения), AutoCAD отображает стандартную строку состояния.

Присвоение значений MODEMACRO

Для отображения пользовательской информации в строке состояния можно использовать обычные текстовые строки и функции языка DIESEL.

Значение переменной MODEMACRO определяет, что должно отображаться в строке состояния. Простейший пример переменной MODEMACRO представляет собой постоянное текстовое значение, однако, в этом случае результативность переменной

176 | Глава 5 DIESEL

минимальна. Например, чтобы в строке состояния выводилось название фирмы, которой принадлежит экземпляр программы, можно сделать так:

Команда: modemacro

Новое значение MODEMACRO, или . если нет <"">: Greg's Bank and Grill

В этом случае MODEMACRO всегда отображает один и тот же текст; строка состояния не содержит никаких данных об изменениях внутреннего состояния AutoCAD. Информация обновляется только при следующей модификации

MODEMACRO.

Для того чтобы в строке состояния отображались какие-либо текущие параметры AutoCAD, нужно включить в нее макровыражения на языке DIESEL. Макровыражения записываются в следующем формате:

$(функция, арг1, арг2, ...)

Здесь функция это имя DIESEL-функции (аналогичное имени функции AutoLISP), а арг1, арг2 и т.д. ее аргументы, интерпретируемые в соответствии с определением функции. В отличие от функций AutoLISP, макровыражения DIESEL оперируют только одним типом данных - строками. Макросы, которые работают с числами, выражают их в виде строк, преобразуя по мере необходимости.

Описание функций языка DIESEL можно найти в разделе “USERS1-5 Каталог функций языка DIESEL” на стр.183.

Создадим более содержательную строку состояния, например, с информацией об имени текущего текстового стиля:

Команда: modemacro

Новое значение MODEMACRO, или . если нет <"">: Стиль: $(getvar, textstyle)

Стиль: это текстовая строка, которая будет отображаться в строке состояния.

$(getvar,textstyle) DIESEL-функция (getvar) с аргументом, который извлекает имя текущего текстового стиля из системной переменной TEXTSTYLE.

ПРИМЕЧАНИЕ В тексте некоторых примеров выражения MODEMACRO перенесены на следующую строку из-за своей большой длины. При их вводе, однако, никаких переносов делать не следует.

Чтобы получить значение какой-либо системной переменной, нужно воспользоваться функцией $(getvar, имя_переменной ). Текущее значение переменной при этом заменяет то, которое отображалось ранее. При смене текстового стиля инициируется пересчет MODEMACRO. В результате имя нового текущего стиля появляется в строке состояния.

Выражения могут быть вложенными и достаточно сложными. Рассмотрим еще один пример. Пусть в строке состояния требуется отобразить текущий интервал и угол

Настройка строки состояния | 177

(в градусах) шаговой привязки. Преобразование угла из радиан в градусы и отсечение дробной части может быть осуществлено с помощью вложенных выражений.

Команда: modemacro

Новое значение MODEMACRO, или . если нет <"">: Шаг: $(getvar, snapunit) $(fix,$(*,$(getvar,snapang),$(/,180,3.14159)))

Другой вариант — отображение значений в текущих линейных и угловых форматах единиц.

Команда: modemacro

Новое значение MODEMACRO, или . если нет <"">: Шаг: $(rtos,$(index,0, $(getvar,snapunit))),$(rtos,$(index,1,$(getvar,snapunit))) $(angtos, $(getvar,snapang))

$(getvar,snapang)) DIESEL передает все введенные данные непосредственно на выход, пока не встретит знак доллара ($) или строку в кавычках. Строки в кавычках можно использовать для подавления вычисления последовательности символов, которые без кавычек интерпретировались бы как DIESEL-функции. Если требуется использовать кавычки внутри таких строк, нужно повторять их дважды. В следующем примере текущим слоем является LAYOUT, а MODEMACRO иллюстрирует, как происходит получение значения переменной CLAYER:

Команда: modemacro

Новое значение MODEMACRO, или . если нет <"">:?"$(getvar,clayer)=

"""$(getvar,clayer)""""

В строке состояния выводится:

$(getvar,clayer)="LAYOUT"

Присвоение значений MODEMACRO в

AutoLISP

Приведенные здесь образцы процедур можно скопировать в файл формата ASCII, который должен загружаться функцией AutoLISP load.

В следующей команде, написанной на AutoLISP, определяется выражение для MODEMACRO, которое несет в себе ту же информацию, что и стандартная строка состояния. Так как в AutoLISP нет возможности переносить строки, для объединения отдельных выражений в одну строку MODEMACRO используется функция AutoLISP strcat.

(defun C:ACADMODE ( ) (setvar "modemacro" (strcat

"Слой $(substr,$(getvar,clayer),1,8)" "$(if,$(getvar,orthomode), Орто)" "$(if,$(getvar,snapmode), Шаг)" "$(if,$(getvar,tabmode), Планшет)" "$(if,$(=,$(getvar,tilemode),0)," "$(if,$(=,$(getvar,cvport),1), P)"

178 | Глава 5 DIESEL

")"

)

)

)

Эту AutoLISP-процедуру можно записать в файл с именем acadmode.lsp. При его загрузке будет создаваться строка состояния, являющаяся аналогом стандартной строки. Данный пример не является особо полезным применением возможностей MODEMACRO; он включен в руководство лишь в иллюстративных целях.

В следующем образце файла acad.lsp используется функция S::STARTUP для присвоения переменной MODEMACRO значения, определяемого в файле mode1.lsp.

;;;Образец файла acad.lsp, использующий S::STARTUP для загрузки

;;;файла MODE1.LSP, где определяется строка для MODEMACRO (defun S::STARTUP ( )

(load "mode1") (princ)

)

;;;Далее могут определяться и загружаться другие ;;; AutoLISP-файлы

;;;загружены здесь

Если загружен файл AutoLISP (mode1.lsp), системная переменная MODEMACRO используется для определения содержимого строки состояния, в которой отображается приведенная далее последовательность. L: первые восемь символов имени слоя, имя чертежа и часть пути, а также первая буква имени каждого текущего режима. Независимо от длины имени слоя, положение имени чертежа остается неизменным.

;;; MODE1.LSP

;;;

(setvar "modemacro" (strcat

"L:$(substr,$(getvar,clayer),1,30)"

"$(substr, ,1,$(-,30,$(strlen,$(getvar,clayer)))) " ;; ^^^^^^^^ Здесь записано 8 пробелов

"<.." "$(if,$(eq,$(getvar,dwgname),UNNAMED),UNNAMED," "$(substr,$(getvar,dwgname)," "$(if,$(>,$(strlen,$(getvar,dwgprefix)),29)," "$(-,$(strlen,$(getvar,dwgprefix)),29),1"

")," "$(strlen,$(getvar,dwgname))" ")"

")"

">"

"$(if,$(getvar,orthomode), O, )"

"$(if,$(getvar,snapmode), S, )"

"$(if,$(getvar,tabmode), T, )" "$(if,$(and,"

"$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"

)

)

Настройка строки состояния | 179

Соседние файлы в папке Справочные материалы