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

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

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

Программирование диалоговых окон с помощью языка Dialog Control Language

551

;;Программа AutoLISP для диалогового окна Drawing Aids ;;Файловое имя диалогового окна — dwgaids.dcl

;

(defun c:dwgaids (/ dcl_id snapmode xsnap ysnap orgsnapunit gridmode gridsnap xgrid ygrid orggridunit) (setq dcl_id (load_dialog "dwgaids.dcl"))

(new_dialog "dwgaids" dcl_id)

;;Получение текущих значений переменных snapmode и snapunit ;;и присвоение этих значений элементам диалогового окна (setq snapmode (getvar "snapmode"))

(if (= 1 snapmode) (set_tile "snapon" "1") (set_tile "snapon" "0")

)

(setq orgsnapunit (getvar "snapunit") (setq xsnap (car orgsnapunit))

(setq ysnap (cadr orgsnapunit)) (set_tile "xsnap" (rtos xsnap)) (set_tile "ysnap" (rtos ysnap))

;

;;Получение текущих значений переменных gridmode и gridunit ;;и присвоение этих значений элементам диалогового окна (setq gridmode (getvar "gridmode"))

(if (= 1 grid mode) (set_tile "gridon" "1") (set_tile "gridon" "0"))

(setq orggridunit (getvar "gridunit") (setq xgrid (car orggridunit))

(setq ygrid (cadr orggridunit)) (set_tile "xgrid" (rtos xgrid)) (set_tile "ygrid" (rtos ygrid))

;;Считывание значений, присвоенных элементам диалогового окна ;;и изменение значений соответствующих переменных AutoCAD (defun setvars ()

(setq xsnap (atof (get_tile "xsnap"))) (setq ysnap (atof (get_tile "ysnap"))) (setvar "snapunit" (list xsnap ysnap)) (if (= "1" (get_tile "snapon"))

(setvar "snapmode" 1) (setvar "snapmode" 0))

(setq xgrid (atof (get_tile "xgrid"))) (setq ygrid (atof (get_tile "ygrid"))) (setvar "gridunit" (list xgrid ygrid)) (if (= "1" (get_tile "gridon"))

(progn

(setvar "gridmode" 1) (setvar "gridmode" 0))

(setvar "gridmode" 0)

)

(action_tile "accept" "(setvars) (done_dialog)") (start_dialog)

(princ)

)

552

Глава 15

Ползунки и изображения

Ползунки

Формат в DCL: slider

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

Изображения

Формат в DCL: image

Изображение является предопределенным элементом управления, который предназначен для отображения графической информации. Например, в диалоговых окнах этот элемент обычно используется для отображения перекрестья курсора, типов линий и текстовых шрифтов. Элемент image представляет собой прямоугольное окно, содержащее различные векторные изображения.

Атрибуты min_value, max_value, small_ increment и big_increment

Атрибуты min_value и max_value

Формат в DCL: min_value или max_value

Примеры

min_value =2 max_value = 15

Предопределенные атрибуты min_value и max_value используются для определения минимального и максимального значений, возвращаемых ползунком (т.е. элементом slider). Как показано в приведенном примере, минимальное значение равно 2, а максимальное — 15. Если эти атрибуты не будут заданы, элемент slider автоматически примет стандартные значения. По умолчанию атрибуту min_value присваивается значение 0, а атрибуту max_value — 10 000.

Программирование диалоговых окон с помощью языка Dialog Control Language 553

Атрибуты small_increment и big_increment

Формат в DCL: small_increment или big_increment

Примеры

small_increment = 1 big_increment = 10

Значения, назначенные атрибутам small_increment и big_increment, определяют величину, на которую изменяется линейная координата ползунка при каждом щелчке на кнопке управления. Например, если величина шага равна 1, значения, возвращаемые ползунком, будут иметь приращение 1. Если значения атрибутов не определены, элемент slider автоматически примет значения, заданные по умолчанию. Значение, присваиваемое по умолчанию атрибуту small_increment, равно одной сотой (1/100) шкалы ползунка, а значение по умолчанию, назначаемое атрибуту big_increment, составляет одну десятую (1/10) этой шкалы.

Атрибуты aspect_ratio и color

Атрибут aspect_ratio

Формат в DCL: aspect_ratio

Пример

aspect_ratio = 1

Преопределенный атрибут aspect _ ratio обыч-

но используется с каким-нибудь изображением. Под

соотношением геометрических размеров понима-

ется отношение ширины изображения к его высоте

(ширина/высота). Чтобы определить размер окна

изображения, необходимо назначить целое значе-

ние атрибутам ширины и высоты данного элемента. Для этого можно также определить

значение одного из атрибутов (ширины или высоты), а затем присвоить целое или ве-

щественное значение атрибуту aspect_ratio. Например, если атрибуту высоты было

присвоено значение 5, а форматное соотношение (т.е. значение атрибута aspect_ratio)

составляет 0,5, то ширина окна изображения будет равна 2,5 (ширина = высота × формат-

ное соотношение). В этом случае определять атрибут ширины не обязательно.

Атрибут color

Формат в DCL: color

Пример

color = 2

Атрибут цвета является предопределен-

ным параметром, который используется с

окном изображения для определения цвета

фона. Целое число, назначаемое атрибуту

цвета, определяет цветовой индекс AutoCAD.

В ранее приведенном примере фон имеет желтый цвет (номер цвета 2). Цвет векторного

изображения, нарисованного во внутренней части окна, определяется числовым значе-

нием, назначенным атрибуту vector_image.

554

Глава 15

Пример 7

Напишите программу DCL для диалогового окна, с помощью которого вы сможете изменять размер прицела перекрестья курсора (рис. 15.15).

Рис. 15.15. Диалоговое окно для примера 7

Диалоговое окно, показанное на рис. 15.16, содержит два столбца и две строки. В первом столбце находятся два элемента: метка (Min ... Max) и линейка ползунка. Во втором столбце имеется только один элемент — окно изображения. Во второй строке расположены кнопки OK и Cancel. Как показано на рис. 15.16, диалоговое окно содержит также метку заголовка (Aperture Size) и метку строки (Select Aperture).

Рис. 15.16. Структура диалогового окна, описанного в примере 7

Ниже представлен листинг файла DCL для примера 7. Номера строк не являются

частью программного кода, а используются только для ссылок.

aprtsize : dialog {

1

label = "Aperture Size";

2

: boxed_row {

3

label = "Select Aperture";

4

: column {

5

fixed_width = true;

6

: text {

7

label = "Min Max";

8

alignment = centered;

9

}

10

: slider {

11

Программирование диалоговых окон с помощью языка Dialog Control Language

555

key = "aperture_slider";

12

min_value = 2;

13

max_value = 17;

14

width = 15;

15

height = 1;

16

big_increment = 1;

17

fixed_width = true;

18

fixed_height = true;

19

}

20

}

21

: image {

22

key = "aperture_image";

23

aspect_ratio = 1;

24

width = 5;

25

color = 2;

26

}

27

}

28

ok_cancel;

29

}

30

Пояснения

Строки 11 и 12

: slider {

key = "aperture_slider";

Выражение, содержащееся в первой строке (: slider), является началом определения ползунка (элемента slider). Ползунок представляет собой активный предопределенный элемент управления, состоящий из небольшого индикатора, линейки ползунка и кнопок со стрелками. Во второй строке (key = "aperture_slider") элементу slider присваивается имя aperture_slider.

Строки 13 и 14

min_value = 2; max_value = 17;

В первой строке содержится предопределенный атрибут min_value, определяющий минимальное значение числа, возвращаемого элементом slider. В свою очередь, предопределенный атрибут max_value определяет максимальное значение числа, возвращаемого этим элементом. Как показано в этом примере, минимальное значение числа равно 2, а максимальное — 17.

Строки 15–17

width = 15; height = 1; big_increment = 1;

Первые две строки определяют ширину и высоту элемента slider. Третья строка (big_increment = 1;) определяет величину шага, с которым будет выполняться перемещение индикатора по линейке ползунка.

556

Глава 15

Строки 22 и 23

: image {

key = "aperture_image";

Выражение, содержащееся в первой строке (: image), является началом определения окна изображения. Во второй строке элементу изображения присваивается имя

aperture_image.

Строки 24–26

aspect_ratio = 1; width = 5;

color = 2;

В первой строке (aspect_ratio = 1;) определяется отношение ширины окна изображения к его высоте. Во второй строке (width = 5) определяется ширина окна изображения. Поскольку форматное соотношение равно 1, то высота окна также будет равна 5 (ширина/высота = форматное соотношение). В третьей строке (color = 2) фону окна изображения назначается цвет номер 2 (желтый).

Функции AutoLISP

Функции dimx_tile и dimy_tile

Функция AutoLISP dimx_tile используется для определения величины проекции окна изображения на ось X (x_aperture), а функция dimy_tile позволяет получить величину проекции окна на ось Y (y_aperture). В приведенных примерах выражение "aperture_image" является именем окна изображения, присвоенному этому элементу с помощью атрибута key (key = "aperture_image").

Формат: (dimx_tile tilename) или (dimy_tile tilename)

Примеры

(dimx_tile "aperture_image") (dimy_tile "aperture_image")

Функция vector_image

Функция AutoLISP vector_image используется для вычерчивания вектора (направленной линии) в активном окне изображения. Вектор образуется при соединении точек, определенных в функции vector_image. В следующих примерах программа AutoCAD построит линию от точки 1,1 до точки 3,3 и закрасит ее красным цветом (цвет номер 1).

Формат: (vector_image x1 y1 x2 y2 цвет)

Пример

(vector_image 1 1 3 3 1)

Здесь

1 1 — координаты X и Y первой точки;

3 3 — координаты X и Y второй точки;

1 — цветовой индекс AutoCAD.

 

 

Программирование диалоговых окон с помощью языка Dialog Control Language

557

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Функция fill_image

Функция AutoLISP fill_image заполняет прямоугольный контур, находящийся в активном окне изображения, цветом, определенным в этой функции. В приведенном примере активное окно будет заполнено желтым цветом (цветом номер 2). Границы закрашиваемого прямоугольника определены координатами противоположных вершин — первой (x1 y1) и второй (x2 y2) точек.

Формат: (fill_image x1 y1 x2 y2 цвет)

Пример

(fill_image 0 0 x_aperture y_aperture)

Функция start_image

Функция AutoLISP start_image используется для запуска изображения, имя которого указано в этой функции. В следующем примере имя изображения "aperture_image" было присвоено этому элементу с помощью атрибута key (key = "aperture_image").

Формат: (start_image)

Пример

(start_image "aperture_image")

Функция end_image

Функция AutoLISP end_image используется для завершения работы активного изображения, имя которого определено в функции end_image. Имя элемента изображения, описанного в следующем примере, —"aperture_image".

Формат: (end_image)

Пример

(end_image "aperture_image")

558

Глава 15

Функция $value

Функция $value является выражением действия AutoLISP, используемым для получения строкового значения, которое было присвоено тому или другому элементу диалогового окна (например, флаговой кнопке или текстовому окну). Как показано в примере 8, функция $value извлекает текущее значение активного элемента, а функция setq назначает полученное значение переменной aprt_size.

Формат: $value

Пример

(setq aprt_size $value)

Пример 8

Напишите программу AutoLISP, которая загрузит и выведет на экран диалоговое окно, описанное в примере 7 (см. рис. 15.15), и обеспечит выполнение всех его функций. Блок-схема программы и внешний вид загруженного диалогового окна показаны на рис. 15.17 и 15.18.

Рис. 15.17. Блок-схема программы для примера 8

Ниже приведен листинг программы AutoLISP для примера 8. Номера строк не явля-

ются частью программного кода, а используются только в качестве ссылок.

;;APRTSIZE.LSP, программа AutoLISP для диалогового окна

1

;;Aperture Size. Имя файла DCL — APRTSIZE.DCL.

2

;

3

(defun c:aprtsize ()

4

(setq dcl_id (load_dialog "aprtsize"))

5

(new_dialog "aprtsize" dcl_id)

6

;

7

;Получение значения системной переменной "aperture",

8

;вычисление значений X и Y векторного изображения

9

;и вычерчивание вектора в окне изображения.

10

Программирование диалоговых окон с помощью языка Dialog Control Language

559

(setq aprt_size (getvar "aperture"))

11

(if (> aprt_size 15)

12

(setq aprt_size 15)

13

)

14

(setq x_aperture (dimx_tile "aperture_image"))

15

(setq y_aperture (dimy_tile "aperture_image"))

16

(set_tile "aperture_slider" (itoa aprt_size))

17

(setq x1 (- (/ x_aperture 2) aprt_size"))

18

(setq x2 (+ (/ x_aperture 2) aprt_size"))

19

(setq y1 (- (/ y_aperture 2) aprt_size"))

20

(setq y2 (+ (/ y_aperture 2) aprt_size"))

21

(start_image "aperture_image")

22

(fill_image 0 0 x_aperture y_aperture)

23

(vector_image x1 y1 x2 y1 1)

24

(vector_image x2 y1 x2 y2 1)

25

(vector_image x2 y2 x1 y2 1)

26

(vector_image x1 y2 x1 y1 1)

27

(end_image)

28

(action_tile "aperture_slider"

29

"(draw_size (setq aprt_size (atoi $value)))")

30

(action_tile "accept" "(do_setvars)(done_dialog)")

31

(start_dialog)

32

(princ)

33

)

34

;Присвоение значения "aperture" переменной aprt_size

35

(defun do_setvars ()

36

(setvar "aperture" aprt_size)

37

)

38

;

39

;Вычисление координат X и Y векторного изображения

40

;и вычерчивание перекрестья курсора в окне изображения.

41

(defun draw_size (aprt_size)

42

(setq x1 (- (/ x_aperture 2) aprt_size"))

43

(setq x2 (+ (/ x_aperture 2) aprt_size"))

44

(setq y1 (- (/ y_aperture 2) aprt_size"))

45

(setq y2 (+ (/ y_aperture 2) aprt_size"))

46

(start_image "aperture_image")

47

(fill_image 0 0 x_aperture y_aperture)

48

(vector_image x1 y1 x2 y1 1)

49

(vector_image x2 y1 x2 y2 1)

50

(vector_image x2 y2 x1 y2 1)

51

(vector_image x1 y2 x1 y1 1)

52

(end_image)

53

)

54

Пояснения

Строки 11–13

(setq aprt_size (getvar "aperture")) (if (> aprt_size 15)

(setq aprt_size 15)

)

560

Глава 15

Рис. 15.18. Окно AutoCAD с диалоговым окном, описанным в примере 8

При выполнении первой строки функция AutoLISP getvar извлекает значение системной переменной aperture, а функция setq присваивает полученное значение переменной aprt_size. Выражение, содержащееся во второй строке (if (> aprt_size 15), проверяет, не является ли значение переменной aprt_size больше 15. Если это так, выполняется третья строка (setq aprt_size 15), которая присваивает переменной aprt_size значение 15. Для того чтобы можно было отобразить векторное изображение в окне изображения, значение системной переменной aperture должно быть меньше или равно 15, так как в этом примере максимальный размер окна равен 15.

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