САПР для инженера: Переменная MODEMACRO в AutoCAD для настройки интерфейса

понедельник, 22 сентября 2014 г.

Переменная MODEMACRO в AutoCAD для настройки интерфейса

Добрый день!
Кастомизация и настройка 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 можно ознакомиться на соответствующей странице.

С уважением, Андрей.

3 комментария:

  1. Добавлю: переменная 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)")

    ОтветитьУдалить
  2. А предыдущий комментарий не прошел?

    ОтветитьУдалить