Казалось бы, можно было то же действие описать, используя только 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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.