Группы пользователей Autodesk

Назначение действий элементам окна


Создание проекта и добавление элементов интерфейса

 

Создание проекта и добавление элементов интерфейса 
 

Назначение действий элементам окна



В файле DCL описывается только статическая внешняя форма диалогового окна. Теперь свяжем это описание с кодом AutoLISP, «оживляющим» окно. Используем для этого функцию action_tile, как показано в следующем фрагменте:

;; Assign actions (the functions to be invoked) to dialog buttons

(action_tile

"gp_lw"

"(setq plineStyle \"Light\")"

)

(action_tile

"gp_hw"

"(setq plineStyle \"Pline\")"

)

(action_tile

"gp_actx"

"(setq objectCreateMethod \"ActiveX\")"

)

(action_tile

"gp_emake"

"(setq objectCreateMethod \"Entmake\")"

)

(action_tile

"gp_cmd"

"(setq objectCreateMethod \"Command\")"

)

(action_tile "cancel" "(done_dialog) (setq UserClick nil)")

(action_tile

"accept"

(strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))"

"(setq tileSpace (atof (get_tile \"gp_spac\")))"

"(done_dialog) (setq UserClick T))"

)

)

Обратим внимание на кавычки вокруг кода AutoLISP. Функция AutoLISP action_tile сообщает элементу окна строку в кавычках, которую элемент должен будет вернуть при его выборе. Строка (все, что находится внутри кавычек) бездействует до тех пор, пока пользователь не выберет элемент окна. Именно тогда элемент окна передает строку в AutoCAD, где строка преобразуется в рабочий код AutoLISP и выполняется.

Например, рассмотрим следующее выражение action_tile, которое связано с положением переключателя для компактной полилинии:

(action_tile

"gp_lw"

"(setq plineStyle \"Light\")"

)

Код присваивает положению переключателя строку «(setq plineStyle \"Light\")». Когда пользователь переводит переключатель в данное положение, строка передается в AutoCAD и преобразуется непосредственно в следующее выражение AutoLISP:


(setq plineStyle "Light")

Рассмотрим еще один фрагмент кода. Следующее выражение action_tile присвоено кнопке «OK»:

(action_tile

"accept"

(strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))"

"(setq tileSpace (atof (get_tile \"gp_spac\")))"

"(done_dialog) (setq UserClick T))"

)

При нажатии кнопки "OK" длинная строка, назначенная кнопке, передается в AutoCAD и преобразуется в следующий код на AutoLISP:

(progn

(setq tileRad (atof (get_tile "gp_trad")))

(setq tileSpace (atof (get_tile "gp_spac")))

(done_dialog)

(setq UserClick T)

)

Код выполняет несколько действий. Он извлекает текущие значения элементов диалогового окна с ключевыми значениями gp_trad (радиус плитки) и gp_spac(расстояние между плитками). Затем с помощью функции atof строка чисел преобразуется в вещественное число. Функция done_dialog прерывает работу диалогового окна, и переменной UserClick присваивается значение T (истина).

Кнопкам диалогового окна назначены действия. Следующий этап заставить их работать.

 


Содержание раздела