Пользовательский интерфейс системы AutoCAD. Адаптация существующих меню, создание новых меню, изменение функций элементов, страница 18

Казалось бы, можно было то же действие описать, используя только AutoLISP:

(setvar "MODEMACRO" (strcat "Текущийцвет: " (getvar   "CECOLOR")))

Однако  разница  заключается   в  том,   что   второе   выражение   (без   языка  DIESEL) имеет одноразовое действие, а первое будет давать результат при каждом изменении текущего цвета рисунка (проверьте!).

Аналогичным образом ваше приложение может помочь отслеживанию в строке режимов некоторых важных сведений (например, номера проекта, номера чертежа и т. д.). Для передачи информации могут быть использованы системные переменные USERS1, USERS2, USERS3, USERS4, USERS5, значения которых сохраняются в рисунке (в отличие от значения системной переменной MODEMACRO, которая очищается при закрытии рисунка).

47. Сообщения об ошибках

Интерпретатор языка DIESEL может выдавать сообщения об ошибках, которые сведены ниже.

Сообщение                                  Описание

       $?           Синтаксическая ошибка (например, нарушен баланс скобок)             

 $(<фун>,??) Неверно количество аргументов функции <фун>         

 $(<фун>)??  Неверно имя функции

 $ (++)    Длина результирующей строки превысила допустимое значение

48. Использование в меню

Язык DIESEL полезен для формирования переменных наименований пунктов меню, а также для изменения состояния пункта меню (отметки или гашения).

В листинге 4.3 уже были даны примеры выражений DIESEL в наименованиях пунктов падающего меню раздела РОРЗ. С помощью DIESEL перед наименованиями пунктов вставлялись или не вставлялись символы «!.», наличие которых является признаком отметки пункта.

В листинге 4.12 приведен пример использования DIESEL в макросах меню (заодно исправим ошибку в стандартном меню).

Листинг 4.12. Фрагмент раздела TOOLBARS (меню TB_REFERENCE)                                                                          файла «acad.mnu»    

ID_Xclipfram   [__Button ("Контур подрезки внешней  ссылки", ICON_16_XCLIPFRAME, ICON_16_XCLIPFRAME) ] $М=$(if, $ (eq, $ (getvar,xclipframe),1),^C^C_xclipframe   _0,^C^C_xclipframe _1)    

Здесь текст макроса, описывающего действие кнопки  панели  инструментов Ссылки (Reference), состоит из одного выражения, которое начинается с комбинации символов $м, что означает использование выражения на языке DIESEL.

В выражении $(if,$ (eq,$ (getvar,xclipframe) ,1) ,^C^C__xclipframe _0,^С^С_  xclipframe __ 1) анализируется значение системной переменной XCLIPFRAME, которая управляет видимостью контуров подрезки внешних ссылок и блоков. Если значение переменной равно 1, то возвращается строка _xclipfгаmе _о, а если равно 0 — то строка _xclipframe _1 (используемая здесь   команда   _xclipframe   изменяет   значение   системной   переменной XCLIPFRAME). Поэтому с помощью выражения система AutoCAD пытается изменить значение системной переменной XCLIPFRAME на _0 или _1. Ошибка заключалась в том, что перед цифрами 0 и 1 символ подчеркивания не требуется (вы можете в своей версии ее исправить).

49. DIESEL и AutoLISP                                                 

Выражения языка DIESEL иногда могут быть полезными и в программах, написанных на языке AutoLISP. Во-первых,   в  языке   DIESEL  есть  функции,   отсутствующие  в  AutoLISP (edtime, linelen). Во-вторых, функция menucmdможет использовать Выражения DIESEL. Кроме того, иногда выражения DIESEL оказываются короче, чем соответствующие выражения AutoLISP, что может быть привлекательным при использовании первых в макросах.

50. MNL-файлы                                                                      

Одновременно с загрузкой файла шаблона меню или тройки файлов меню система AutoCAD пытается загрузить также MNL-файл с таким же именем, что и у файлов меню. Например, при загрузке файла «acad.mnu» (или файлов «acad.mnc», «acad.mns», «acad.mnr») загружается файл «acad.mnl», который является файлом   на языке  AutoLISP.   В  листинге  4.13   приведен  фрагмент  файла «acad.mnl» русской версии системы AutoCAD 2000.