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

Запись выражений с отступами от начала строки улучшает понимание текста программы (в частности, DIESEL-строк и файлов AutoLISP).

Выражения DIESEL в макросах

Эти выражения могут возвращать строковые значения (текстовые строки) в ответ на стандартные команды AutoCAD, процедуры AutoLISP и ObjectARX®, а также другие макросы. Они также могут возвращать строковые значения в меню, что часто используется для изменения вида и содержимого имен пунктов.

С помощью этой строки можно переключаться из пространства листа в пространство модели и обратно (если для переменной TILEMODE установлено значение 0). Выражение вычисляется прозрачно. Если пропустить специальный символ ^P, который переключает переменную MENUECHO, выражение DIESEL будет отображать в командной строке только вызванную команду.

При использовании DIESEL-выражений в пунктах меню требуется соблюдать формат "$раздел=подменю", где раздел - буква M, а подменю - требуемое DIESEL-выражение. Зачастую макросы меню проще реализовать на языке AutoLISP.

В следующих примерах показаны два аналогичных по назначению пункта меню, в одном из которых использован DIESEL, а в другом AutoLISP.

DIESEL-выражение в пункте меню:

^C^C^P$M=$(if,$(=,$(getvar,cvport),1),mspace,pspace)

AutoLISP-выражение в пункте меню:

^C^C^P(if (= (getvar "cvport") 1)(command "mspace")+ (command "pspace"))(princ) ^P

Оба пункта меню позволяют переключаться из пространства листа в пространство модели и обратно (если TILEMODE равна 0), но выражение DIESEL короче и вычисляется прозрачно, не требуя вызова функции AutoLISP princ. Если в обоих случаях пропустить специальный символ ^P, который переключает переменную MENUECHO, выражение DIESEL будет отображать в командной строке только вызванную команду, а выражение AutoLISP всю строку выражения.

Так как значение, возвращаемое выражением DIESEL, является текстовой строкой, его можно использовать в ответах на запросы функций AutoLISP get xxx. Это позволяет вычислять в пунктах меню режимы текущего чертежа и возвращать соответствующие значения в AutoLISP-процедуры.

Приведенный в примере ниже фрагмент меню включен в текущее меню.

Приведенная в примере ниже AutoLISP-процедура загружена в память.

Фрагмент НПИ включается в текущий файл настройки.

180 | Глава 5 DIESEL

Ширина и высота вставляемых обозначений составляет одну единицу.

Значение переменной DIMSCALE установлено равным масштабу чертежа (т.е. при вычерчивании в масштабе 1 мм = 10 см масштаб равен 100, а при 1 мм = 2 м масштаб равен 2000).

Если загрузить и выполнить приведенный пример процедуры AutoLISP, AutoCAD вставит символ заданного размера в указанную точку. Символы будут выведены на печать с нужным размером (при условии вычерчивания в масштабе, указанном в переменной DIMSCALE).

Процедура на AutoLISP выглядит так:

(defun C:SYMIN ( ) (setq sym (getstring

"\nВведите имя символа: ") ; Запрос имени символа

)

(menucmd "s=symsize") ; Переключение экранного меню

;на подменю symsize (setq

siz (getreal

"\nВыберите размер символа: ") ; Запрос размера символа p1 (getpoint

"\nТочка вставки: ") ; Запрос точки вставки

)

(command "insert" ; Команда ВСТАВИТЬ sym ; с указанными

p1 siz siz 0) ; параметрами

(menucmd "s=") ; Возврат к предыдущему

;экранному меню

(princ) ; Тихий выход

)

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

Выражения DIESEL, приведенные ниже, умножают указанное пользователем значение на текущее значение переменной DIMSCALE и возвращают полученный масштабный коэффициент.

Этого невозможно достичь с помощью аналогичных кодов AutoLISP, поскольку, как правило, возвращаемые ими значения не воспринимаются в качестве ответов на запросы функций get xxx (например, функции getreal в предыдущем примере).

$M=$(*,$(getvar,dimscale),0.375) $M=$(*,$(getvar,dimscale),0.5) $M=$(*,$(getvar,dimscale),0.625)

Выражения DIESEL в макросах | 181

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

Пусть текущим слоем чертежа является BASE, а в качестве метки используется следующее выражение DIESEL.

$(eval,"Текущий слой: " $(getvar,clayer))

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

Текущий слой: BASE

Такой же способ можно использовать для интерактивной модификации имен пунктов раскрывающихся меню. Процедура, написанная на AutoLISP, может, например, присвоить текст с нужным именем одной из переменных USERS1-5, а DIESEL-макрос извлечь его и подставить в меню.

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

Если есть опасность того, что сгенерированные с помощью DIESEL пункты меню будут иметь избыточную длину, проблему можно решить с помощью описанного ниже подхода. Здесь в пункте меню отображаются первые 10 символов текущего значения системной переменной USERS3 (USERS1-5).

$(eval,"Текущее значение: " $(getvar,users3))+

$(if, $(eq,$(getvar,users3),""), 10 пробелов )^C^Cusers3

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

В следующем примере одно и то же DIESEL-выражение применено и в имени пункта меню, и в его макросе. Таким образом можно, например, ввести в чертеж текущие значения даты и времени.

$(edtime,$(getvar,date),DDD", "Д М ГГГГ)^C^Ctext +

\\\ $M=$(edtime,$(getvar,date),DDD", "Д М ГГГГ);

Макросы на языке DIESEL можно использовать также для установки пометки на пунктах меню и для перевода их в недоступное состояние. Ниже приведен пример

182 | Глава 5 DIESEL

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