Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
DIESEL: язык строковых выражений |
571 |
набранных различными шрифтами, строка состояния позволит вам отобразить имя текущего текстового стиля (TEXTSTYLE) и высоту используемого шрифта (TEXTSIZE). Иногда во время работы с трехмерными чертежами возникает необходимость контролировать направление взгляда на текущем видовом экране (VIEWDIR). Чтобы упростить эту задачу, можете отобразить координаты камеры в строке состояния. Таким образом, характер информации, отображаемой в этой строке, зависит от требований, предъявляемых к определенному чертежу. AutoCAD дает возможность настроить строку состояния и вывести информацию, касающуюся данного проекта.
Макровыражения, написанные на языке DIESEL
Чтобы присвоить системной переменной MODEMACRO определенное значение, можно также использовать макровыражения, написанные на языке DIESEL. Макровыражения DIESEL похожи на функции AutoLISP, но имеют некоторые отличия. Например, имя чертежа можно получить с помощью оператора AutoLISP (getvar dwgname). В языке DIESEL для выполнения подобной операции используется макровыражение $(getvar,dwgname). Тем не менее, это выражение, в отличие от соответствующей функции AutoLISP, возвращает только строковые значения. Макровыражение DIESEL имеет следующий формат:
$(имя_функции, аргумент1, аргумент2, ...)
Пример
$(getvar,dwgname)
В этом примере getvar — имя строковой функции DIESEL, а dwgname — ее аргумент. Использование пробелов, разделяющих различные элементы макровыражений DIESEL, не допускается. Например, нельзя ставить пробел между знаком доллара ($) и открывающей круглой скобкой, или между запятой и аргументом dwgname. Все макровыражения должны начинаться со знака доллара ($).
Следующий пример иллюстрирует использование макровыражения DIESEL для определения строки состояния и назначения системной переменной MODEMACRO соответствующего значения.
Пример 1
Используя команду MODEMACRO, переопределите строку состояния и выведите на экран следующую информацию:
•имя проекта (Cust-Acad);
•имя чертежа (DEMO);
•имя текущего слоя (OBJ).
Обратите внимание, что в этом примере проект называется Cust-Acad, чертеж имеет имя DEMO, а текущий слой — имя OBJ.
Прежде чем ввести команду MODEMACRO, нужно определить способ получения требуемой информации из базы данных чертежа. Например, имя чертежа (Cust-Acad) представляет собой определяемое пользователем имя, которое позволяет узнать название текущего проекта. Однако название проекта не сохраняется в базе данных чертежа. Для получения имени чертежа обычно используется строковая функция getvar, записанная следующим образом: $(getvar,dwgname). С помощью функции getvar можно также
572 |
Глава 16 |
получить имя текущего слоя — $(getvar,clayer). Определив способ извлечения нужной информации, создайте новую строку состояния, изменив значение системной переменной MODEMACRO. В нашем примере для определения требуемой строки состояния будет использоваться следующее выражение DIESEL:
Command: MODEMACRO
Enter new value for MODEMACRO, or . for none <"">: Cust-Acad
N:$(GETVAR,dwgname)L:$(GETVAR,clayer)
Пояснения
Cust-Acad
Cust-Acad — имя проекта, которое вы хотите отобразить в строке состояния.
N:$(GETVAR,dwgname)
В нашем примере N: — аббревиатура, используемая для обозначения имени чертежа. Функция getvar извлекает имя чертежа, содержащееся в системной переменной dwgname, и отображает его в строке состояния, рядом с выражением N:.
L:$(GETVAR,clayer)
В этой строке L: — аббревиатура, используемая для обозначения имени слоя. Функция getvar извлекает имя текущего слоя, сохраненное в системной переменной dwgname, и отображает его в строке состояния.
Новая строка состояния показана на рис. 16.2.
Имя проекта Имя чертежа
Имя слоя
Рис. 16.2. Строка состояния, определенная в примере 1
Пример 2
Используя команду MODEMACRO, переопределите строку состояния таким образом, чтобы отобразить следующую информацию (рис. 16.3):
•имя текущего текстового стиля;
•размер шрифта;
•общее затраченное пользователем время, выраженное в минутах.
В этом примере для обозначения текстового стиля, размера шрифта и общего затраченного времени используются аббревиатуры TSTYLE:, TSIZE: и ETM: соответственно.
Command: MODEMACRO
Enter new value for MODEMACRO, or . for none <"">:
TSTYLE:$(GETVAR,TEXTSTYLE) TSIZE:$(GETVAR,TEXTSIZE) ETM: $(FIX,$(*,60,$(*,24,$(GETVAR,TDUSRTIMER))))
DIESEL: язык строковых выражений |
573 |
Пояснения
TSTYLE:$(GETVAR,TEXTSTYLE)
Функция getvar извлекает имя текущего текстового стиля, содержащееся в системной переменной TEXTSTYLE, и отображает его в строке состояния, рядом с выражением
TSTYLE:.
TSIZE:$(GETVAR,TEXTSIZE)
Функция getvar извлекает текущий размер текста, который хранится в системной переменной TEXTSIZE, и отображает его в строке состояния, рядом с выражением
TSIZE:.
Текущий текстовый стиль
Размер шрифта
Затраченное пользователем время (в минутах)
Рис. 16.3. Строка состояния, определенная в примере 2
ETM:$(FIX,$(*,60,$(*,24,$(GETVAR,TDUSRTIMER))))
Функция getvar извлекает общее затраченное пользователем время из системной переменной TDUSRTIMER. Полученное значение имеет следующий формат:
<Количество дней>.<Дробная часть>
Пример
0,03206400 (время в днях)
Чтобы выразить это время в минутах, вначале преобразуйте его в часы, умножив значение, извлеченное из системной переменной TDUSRTIMER, на 24 (количество часов в сутках). Затем выразите это время в минутах, умножив результат произведения на 60 (количество минут в одном часе). Для того чтобы получить количество минут в виде целого числа без дробной части, преобразуйте полученное значение в целое число, используя для этого строковую функцию FIX.
Пример
Предположим, что значение, возвращенное системной переменной TDUSRTIMER, равно 0,03206400. Это — затраченное пользователем время, выраженное в днях. Выразите это время в минутах, выполнив следующие вычисления, а затем преобразуйте полученный результат в целое число.
•0,03206400 дней × 24 = 0,769536 часов;
•0,769536 часов × 60 = 46,17216 минут;
•целая часть числа 46,17216 = 46.
DIESEL: язык строковых выражений |
575 |
Строка 4
"TSTYLE:$(gertvar,textstyle)"
Эта строка представляет собой выражение DIESEL, содержащее строковую функцию gertvar, которая получает значение системной переменной textstyle и заменяет выражение $(gertvar,textstyle) именем текущего текстового стиля. Например, при использовании текстового стиля STANDARD эта строка возвратит выражение “TSTYLE: STANDARD”. Данное выражение заключено в кавычки и поэтому является строкой.
Строки 6 и 7
"ETM:$(fix,#(*,60,$(*,24, $(getvar,tdusrtimer))))"
Выражение, содержащееся в этих двух строках, возвращает ETM: и количество времени, выраженное в минутах. Выражение fix — строковая функция DIESEL, используемая для преобразования вещественного числа в целое.
Чтобы загрузить программу AutoLISP (файл etm.lsp), используйте следующие команды. В этом примере файловое имя программы совпадает с именем функции (ЕТМ).
Command: (load "ETM")
ETM
Command: ETM
Использование выражений DIESEL в различных меню
Можно также определить выражение DIESEL в экранном, планшетном, выпадающем или кнопочном меню. В этом случае при выборе элемента меню системная переменная MODEMACRO автоматически получает определенное значение, а в окне программы отображается новая строка состояния. Следующий пример иллюстрирует использование выражения DIESEL в экранном меню.
Пример 4
Напишите определение экранного меню, содержащего несколько макросов DIESEL, используемых для отображения следующей информации в строке состояния (рис. 16.4).
Макрос_1 |
Макрос_2 |
Макрос_3 |
Имя проекта |
Ширина полилинии |
Dimtad (вертикальность текста отно- |
|
|
сительно размерной линии) |
Имя чертежа |
Радиус сопряжения |
Dimtix (размещение размерных чи- |
|
|
сел между выносными линиями) |
Имя текущего слоя |
Величина смещения |
Dimscale (глобальный масштабный |
|
|
коэффициент) |
|
|
|
Ниже представлен листинг файла экранного меню, содержащего определение трех макросов DIESEL. Чтобы загрузить меню, введите в командную строку команду MENU, а затем — имя соответствующего файла. При выборе первого элемента меню (DIESEL1) в левом нижнем углу экрана отобразится новая строка состояния.
576 |
Глава 16 |
***MENUGROUP=MENU1
***POP1
[*DIESEL*] [DIESEL1:]^C^CMODEMACRO;$M=CustAcad,N:$(GETVAR,DWGNAME),+ L:$(GETVAR,CLAYER); [DIESEL2:]^C^CMODEMACRO;$M=PLWID:$(GETVAR,PLINEWID),+ FRAD:$(GETVAR,FILLETRAD),OFFSET:$(GETVAR,OFFSETDIST),+ LTSCLAE:$(GETVAR,LTSCALE); [DIESEL3:]^C^CMODEMACRO;$M=DTAD:S(GETVAR,DIMTAD),+ DTIX:$(GETVAR,DIMTIX),DSCALE:$(GETVAR,DIMSCALE);
Рис. 16.4. Строка состояния для примера 4
Системная переменная MACROTRACE
MACROTRACE — системная переменная AutoCAD, которая обычно используется для отладки выражений DIESEL. По умолчанию значение этой переменной равно 0 (Off). Включение средств отладки происходит путем присваивания системной переменной MACROTRACE значения 1 (On). При этом системная переменная MACROTRACE вычисляет все имеющиеся выражения DIESEL и отображает полученные результаты в области командной строки. Например, если во время одного сеанса определяется несколько различных выражений DIESEL, они будут вычислены одновременно и в командной строке появятся соответствующие сообщения.
DIESEL: язык строковых выражений |
579 |
Эта функция (=) проверяет равенство указанных чисел. Если эти числа равны, заданное условие выполняется и функция возвращает значение 1. Если же условие не выполняется, функция возвращает значение 0.
Примеры
$(=,5,5) |
возвращает 1 |
$(=,5,4.9) |
возвращает 0 |
$(=,5,-5) |
возвращает 0 |
Функция “не равно”
Формат: $(!=,число1,число2)
Эта функция (!=) проверяет неравенство двух чисел. Если числа неравны, заданное условие выполняется и функция возвращает значение 1. В противном случае функция возвращает значение 0.
Примеры
$(!=,50,4) |
возвращает 1 |
$(!=,50,50) |
возвращает 0 |
$(!=,50,-50) |
возвращает 1 |
Функция “меньше”
Формат: $(<,число1,число2)
Эта функция (<) сравнивает два заданных числа. Если первое число (число1) меньше, чем второе (число2), т.е. указанное условие выполняется, функция возвращает значение 1. В противном случае функция возвращает значение 0.
Примеры
$(<,3,5) |
возвращает 1 |
$(<,5,3) |
возвращает 1 |
$(<,3,0.5) |
возвращает 1 |
Функция “меньше или равно”
Формат: $(<=,число1,число2)
Эта функция (<=) сравнивает два заданных числа. Если первое число (число1) меньше или равно второму (число2), функция возвращает значение 1. Если это условие не выполняется, функция возвращает значение 0.
Примеры
$(<=,10,15) |
возвращает 1 |
$(<=,19,10) |
возвращает 0 |
$(<=,-2.0,0) |
возвращает 1 |
Функция “больше”
Формат: $(>,число1,число2)
Эта функция (>) сравнивает два числа и если первое число (число1) больше второго (число2), функция возвращает значение 1. Если это условие не выполняется, функция возвращает значение 0.
Примеры
$(>,15,10) |
возвращает 1 |
$(>=,20,30) |
возвращает 0 |
580 Глава 16
Функция “больше или равно”
Формат: $(>=,число1,число2)
Эта функция (>=) сравнивает два числа и если первое число (число1) больше или равно второму (число2), она возвращает значение 1. Если это условие не выполняется, функция возвращает значение 0.
Примеры
$(>=,78,50) |
возвращает 1 |
$(>=,78,88) |
возвращает 0 |
Функция eq
Формат: $(eq,значение1,значение2)
Эта функция (eq) сравнивает два строковых выражения и, если они равны, возвращает значение 1. Если это условие не выполняется, функция возвращает значение 0.
Примеры
$(eq,5,5) |
возвращает 1 |
$(eq,yes,yes) |
возвращает 1 |
$(eq,yes,no) |
возвращает 0 |
Функция angtos
Формат: $(angtos,угол [,режим,точность])
Функция angtos возвращает угол, выраженный в радианах, в строковом формате. Формат строки определяется единицами измерения и точностью отображения данных.
Примеры
$(angtos,0.588003,0,4) |
возвращает 33.6901 |
$(angtos,-1.5708,1,2) |
возвращает 270d0' |
Примечание
В программе AutoCAD используются следующие единицы измерения:
Режим функции angtos |
Единицы измерения |
0 |
Десятичные градусы |
1 |
Градусы/минуты/секунды |
2 |
Грады |
3 |
Радианы |
4 |
Топографические единицы |
Точность (precision) — целое число, определяющее количество десятичных знаков. Этот параметр соответствует значению системной переменной AUPREC. Минимальное значение параметра precision равно 0, максимальное — 4.
Функция eval
Формат: $(eval,строка)
Функция eval передает строку в блок вычислений DIESEL, а затем возвращает значение, полученное после вычисления строкового выражения, и отображает его в строке состояния.
Примеры
$(eval,welcome) |
возвращает welcome |
$(eval,$(getvar,dimscale)) |
возвращает значение, присвоенное переменной dimscale |
