Добрый день!
Кастомизация и настройка AutoCAD под нужды и желания пользователей - тема бесконечная и благодатная.
Сегодня посмотрим на системную переменную MODEMACRO, которая позволяет отобразить настраиваемый текст в строке состояния AutoCAD.
Содержанием текстовой строки можно управлять - это может быть просто текстовая строка, а может и макровыражение на языке DIESEL, в таком случае можно вывести, например, имя текущего чертежа, время и дату, текущий профиль, масштаб и пр.
Ограничение на длину строки - 240 символов, более длинные строки будут обрезаны.
Как задать простую текстовую строку? Достаточно ввести в командную строку MODEMACRO Текстовая строка, например MODEMACRO Привет, пользователь!
Результат тут же отобразится в строке состояния
В этом случае будет отображаться один и тот же текст, информацию можно обновить только задав новое значение переменной MODEMACRO.
Если нужно динамически менять содержание отображаемой строки, то нужно включить в нее макровыражение на языке DIESEL.
Макровыражения записываются в следующем формате
$(Имя_функции, Аргумент1, Аргумент2, ...)
Более подробно о языке DIESEL можно найти в официальной справке AutoCAD.
Для примера приведу несколько вариантов макровыражений, которые полезны по-моему мнению:
- Отображение текущего пользователя $(getvar, loginname)
- Отображение текущего текстового стиля Стиль: $(getvar, textstyle)
- Отображение текущего профиля пользователя $(getvar, cprofile)
- Отображение текущего размерного стиля $(getvar,dimscale)
- Отображение текущего слоя $(getvar,clayer)
Переменная MODEMACRO может содержать несколько выражений, например
- Текст: Стиль=$(getvar, textstyle), Высота=$(getvar,textsize) мм
Строку можно формировать обычными средствами языка - складывать строки, вычитать и пр.
Есть одна особенность - значение переменной нигде не сохраняется, т.е. если вы поменяете значение, то оно будет сброшено при следующем запуске. Если вы хотите, чтобы значение сохранялось, то нужно добавить соответствующий код в файл ACAD.LSP, который выполняется при запуске AutoCAD:
(SETVAR "modemacro"
("$(Имя_функции, Аргумент1, Аргумент2, ...)")
С остальными приемами работы в AutoCAD можно ознакомиться на соответствующей странице.
С уважением, Андрей.
Добавлю: переменная TEXTSIZE может не иметь никакого отношения к текущей высоте, установленной в текстовом стиле.
ОтветитьУдалитьЕще момент: (SETVAR "modemacro" ("$(Имя_функции, Аргумент1, Аргумент2, ...)") у меня не сработала. Тестовая функция:
(defun test (value1 value2)
(strcat (vl-princ-to-string value1)
" + "
(vl-princ-to-string value2)
" = "
(vl-princ-to-string (+ value1 value2))
) ;_ end of strcat
) ;_ end of defun
Выполняю
(setvar "modemacro" "$(test,1,2)")
На выходе получается $(TEST)??
Возможно, дело в том, что DIESEL фактически не умеет вызывать лисп-функции и не может обращаться к лисп-переменным, в том числе и глобальным. Теоретически, как мне кажется, намного проще будет "загнать" результат выполнения в переменную типа USERS# (от 1 до 5) и в MODEMACRO вводить значение (setvar "modemacro" "$(getvar,users1)")
А предыдущий комментарий не прошел?
ОтветитьУдалитьАлексей, все прошло. Пытаюсь переварить.
Удалить