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

Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г

.pdf
Скачиваний:
182
Добавлен:
09.04.2015
Размер:
9.06 Mб
Скачать

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.

574

Глава 16

Использование переменной MODEMACRO с функциями AutoLISP

Иногда выражения DIESEL могут иметь довольно большую длину (в качестве иллюстрации можно привести примеры 1 или 2). Ввод подобного выражения с клавиатуры не только отнимает немало времени, но и повышает вероятность появления ошибки. Кроме этого, если используется несколько различных строк состояния, то для перехода к новой строке вам приходится каждый раз набирать соответствующее выражение DIESEL. Подобное занятие трудоемко и довольно утомительно.

Чтобы упростить изменение отображаемой строки состояния, попробуйте написать макровыражение DIESEL, используя функции AutoLISP. Это упростит загрузку написанной программы и поможет избежать ошибок, которые могут быть допущены при наборе выражений DIESEL. Следующий пример иллюстрирует использование языка AutoLISP для написания выражения DIESEL, с помощью которого вы сможете присвоить новое значение системной переменной MODEMACRO.

Пример 3

Напишите программу AutoLISP, которая позволит вам переопределить значение, присвоенное системной переменной MODEMACRO, и отобразить следующую информацию в строке состояния:

имя текущего текстового стиля;

размер шрифта;

общее затраченное пользователем время, выраженное в минутах.

В этом примере для обозначения стиля текста, размера шрифта и времени, затраченного пользователем, используются аббревиатуры TSTYLE:, TSIZE: и ETM: соответственно.

Ниже приведен листинг программы AutoLISP для примера 3. Файловое имя этой программы — etm.lsp. Номера строк не являются частью программного кода, а используются только для ссылок.

(defun c:etm()

1

(setvar "MODEMACRO"

2

(strcat

3

"TSTYLE:$(gertvar,textstyle)"

4

"TSIZE:$(getvar,textsize)"

5

"ETM:$(fix,#(*,60,$(*,24,

6

$(getvar,tdusrtimer))))

7

)

8

)

9

)

10

Пояснения

Строка 3

(strcat

Функция AutoLISP strcat связывает строковые значения, определенные в строках 4–7, и возвращает одну общую строку, которая представляет собой выражение DIESEL, используемое командой MODEMACRO.

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: язык строковых выражений

577

Пример

Command: MACROTRACE

Enter new value for MODEMACRO, or . for none <"">: $(getvar,dwgname),$(getvar clayer)

Обратите внимание, что в этом выражении пропущена запятая между getvar и clayer. При включении средств отладки, т.е. при присвоении системной переменной MACROTRACE значения 1, в области командной строки появится следующее сообщение:

Eval: $(GETVAR,DWGNAME)

====>UNNAMED

Eval: $(GETVAR,CLAYER) Err: $(GETVAR,CLAYER)??

Полученное сообщение позволяет определить характер и местоположение допущенной ошибки. Как показано в этом примере, при вычислении первой части выражения DIESEL возвращается имя чертежа (unnamed), а попытка вычисления второй части приводит к получению сообщения об ошибке. Это указывает на наличие ошибки во второй части выражения DIESEL. Чтобы определить характер и причину допущенной ошибки, воспользуйтесь следующей таблицей.

Сообщение об ошибке

Описание

$?

Синтаксическая ошибка

$?(func,??)

Аргумент, не подходящий для данной функции

$(func)??

Неизвестная функция

$(++)

Выходная строка имеет слишком большую длину

Строковые функции DIESEL

Функции DIESEL, так же как и функции AutoLISP, могут использоваться для выполнения математических операций, извлечения нужных данных из базы данных чертежа и отображения полученных значений в строке состояния в предварительно определенной последовательности. Например, с помощью этих функций можно складывать, вычитать, умножать или делить различные числа. Можно также получить значения некоторых системных переменных, а затем отобразить их в строке состояния. Максимальное количество параметров, которые могут содержаться в выражении DIESEL, равно 10. В это число входят также имена функций. Перед вами несколько примеров наиболее частого применения строковых функций DIESEL.

Функция “сложение”

Формат: $(+,число1,число2,число3,...)

Эта функция (+) вычисляет сумму чисел, находящихся справа от знака “плюс” (+). Слагаемые могут быть целыми или вещественными.

Примеры

$(+,2,5)

возвращает 7

$(+,2,5,50.75)

возвращает 57.75

Примечание

Чтобы проверить правильность вычислений, можно присвоить выражение DIESEL системной переменной MODEMACRO.

578

Глава 16

Command: MODEMACRO

Enter new value for MODEMACRO, or . for none <"">: $(+,2,5)

Программа AutoCAD возвратит значение 7, которое будет отображено в строке состояния. Необходимо отметить, что значения, возвращаемые строковыми функциями DIESEL, также являются строковыми.

Функция “вычитание”

Формат: $(-,число1,число2,число3,...)

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

Примеры

$(-,28,14)

возвращает 14

$(-,25,7,11.5)

возвращает 6.5

Функция “умножение”

Формат: $(*,число1,число2,число3,...)

Эта функция (*) вычисляет произведение чисел, находящихся справа от знака “звездочка”.

Примеры

$(*,2,5)

возвращает 10

$(*,2,5,3.0)

возвращает 30

$(*,2,5,3.25)

возвращает 32.5

Функция “деление”

Формат: $(/,число1,число2,число3,...)

Эта функция (/) делит первое число на второе. Если функция содержит три и больше аргументов, первое число делится на произведение второго и всех последующих чисел.

Примеры

$(/,3,2)

возвращает 1.5

$(/,3.0,2,)

возвращает 1.5

$(/,200,5,4)

возвращает 10

$(/,200.0,5.5)

возвращает 36.36363636

$(/,200,-5)

возвращает –40

$(/,-200,-5.0)

возвращает 40

Реляционные операторы

В макровыражениях DIESEL иногда используются функции, проверяющие выполнение тех или иных условий. Если функция возвращает значение “true” (“истина”), выполняется одна операция; если возвращается значение “false” (“ложь”), выполняется другая операция. В следующих разделах вы познакомитесь с реляционными операторами, используемыми в выражениях DIESEL.

Функция “равно”

Формат: $(=,число1,число2)

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

Соседние файлы в папке Книги_AutoCad_2