Ввод элементов пользовательского интерфейса

Свитки

Свитки составляют саму основу любого пользовательского интерфейса, формируемого средствами MAXScript. Прежде чем создавать какие-либо другие эле­менты пользовательского интерфейса, в том числе флажки и счетчики, необходи­мо сформировать хотя бы один свиток, в котором они будут находиться. Под термином "свиток" в MAXScript подразумевается любой свиток, известный вам из пользовательского интерфейса 3dsMax, например панелей команд или диалого­вых окон. Но, если требуется, свиток может быть отображен средствами MAXScript, как отдельное диалоговое окно.

Правда, создать специальный свиток средствами MAXScript и заполнить его элементами пользовательского интерфейса не составляет большого труда. Для создания свитка используется следующая конструкция:


Построение пользовательских интерфейсов

rollout <переменная> "Имя свитка"

(

<Элементы пользовательского интерфейса, в том числе флажки, кнопки н счетчнки>

)

В переменной хранится внутреннее имя свитка, используемое в сценарии для обращения к свитку. А строка "Имя свитка" определяет название, появляющееся в заголовке свитка.

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

Для начала в следующем упражнении будет создан самый простой свиток.

1. Откройте новое окно редактора MAXScript Editor и введите следующий фрагмент кода:

rollout a "Something New"

(

spinner b "Enter a value:"

button c "Click Me"

)

В этом коде определяется свиток, обозначенный как "Something New" (Нечто новое). Переменная a содержит внутреннюю ссылку на свиток, которую можно использовать в остальных частях сценария для обращения к данному свитку.

Команды spinner и button создают соответственно счетчик и кнопку с метками, указанными в кавычках. А переменные b и c содержат внутренние ссылки на счетчик и кнопку.

2. Выполните созданный сценарий.

При этом ничего особенного не произойдет, поскольку в данном сценарии было задано лишь местоположение и внешний вид свитка.

3. Введите в конце сценария следующую строку кода:

createDialog a 200 50

4. Вычислите код сценария.

5. Свиток появится в виде диалогового окна Something New шириной 200 и высотой 50 единиц. Он содержит два элемента пользовательского интерфейса: счетчик и кнопку.

По команде createDialog создается новое перемещаемое диалоговое окно с использованием команд создания свитка. В связи с тем, что a — это внутреннее имя свитка, команда createDialog a обращается к определению свитка, сделанному ранее в данном сценарии.

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


Глава 2

Для ввода обработчиков событий в сценарий выполните следующее упражнение

1. Закройте диалоговое окно Something New. Введите в окне редактора MAXScript Editor следующий код после строки с определением счетчика:

on c pressed do

(

d = b.value

sphere pos:[d,0,0]

)

Вычислите код сценария. Диалоговое окно появится, как и прежде.

2. Измените значение в счетчике и щелкните на кнопке. После каждого такого щелчка создается сфера, расположенная по оси X так, как указано в счетчике. Рассмотрим более подробно, каким образом действует обработчик событий для кнопки c, указанный в строке кода on c pressed do. В этой строке сценарию предписывается выполнить код в круглых скобках, когда осуществляется щелчок на кнопке c.

Счетчик хранится в переменной B. А значение, введенное в его поле, может быть получено с помощью свойства .value данной переменной. Следовательно, b.value — это значение, введенное в поле счетчика B.

3. После щелчка на кнопке c значение из счетчика присваивается в сценарии переменной d, а затем создается сфера, располагаемая по оси X так, как указано в счетчике.

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

1. Закройте диалоговое окно Something New.

2. Выделите весь исходный код сценария в окне редактора MAXScript Editor, нажав комбинацию клавиш <Ctrl+A>.

3. Перетащите выделенный текст на пустой участок между двумя кнопками на основной панели инструментов. Как только курсор примет вид стрелки со знаком "плюс", отпустите кнопку мыши.

На основной панели инструментов появится новая кнопка. Кнопки сценариев похожи на миниатюрные окна MAXScript Editor или MAXScript Listener.

4. Щелкните на новой кнопке.

Откроется диалоговое окно Something New, в котором можно создать сферу описанным выше образом.

5. Закройте диалоговое окно Something New.

6. Щелкните правой кнопкой мыши на кнопке New и выберите команду Edit Macro Script (Править макросценарий).

Откроется новое окно редактора сценариев с новым вариантом создаваемого вами сценария. В начале этого сценария введен ряд строк для его преоб


Построение пользовательских интерфейсов

разования в макросценарий. Этот новый вариант сценария сохранен в фай­ле DragAndDrop-Macro#.mcr, где # — порядковый номер текущей версии сценария.

Примечание. Создание нового варианта сценария не оказывает никакого влияния на его исходный вариант, который по-прежнему находится в собственном окне редактора MAXScript Editor.

7. Закройте окно редактора MAXScript Editor с новым вариантом сценария, который был перенесен на основную панель инструментов.

Созданный в данном упражнении сценарий является общим. Его нетрудно преобразовать в утилиту, изменив лишь несколько строк кода.

Для преобразования сценария в утилиту выполните следующее упражнение.

1. Закройте диалоговое окно Something New.

2. Замените слово rollout словом utility в первой строке кода сценария.

3. Удалите последнюю строку кода с командой createDialog отображения перемещаемого диалогового окна.

4. Вычислите код сценария.

5. Выберите кнопку MAXScript на панели Utilities. Затем выберите вариант Something New из раскрывающегося списка Utilities в свитке MAXScript.

На панели Utilities появится свиток Something New, в котором можно воспользоваться счетчиком и кнопкой таким же образом, как и ранее в перемещаемом диалоговом окне.

Ранее в этой главе было показано, каким образом элементы пользовательского интерфейса вводятся в свиток. Существует еще немало средств для ввода меток, флажков, кнопок-переключателей и других элементов интерфейса. При этом можно контролировать расположение элементов интерфейса справа, слева либо по центру диалогового окна или в единственной строке свитка. Ниже перечислены наиболее часто используемые элементы пользовательского интерфейса в том виде, в каком они называются и применяются в сценариях MAXScript.

• Label (Метка) — статический элемент управления, предназначенный для отображения текста. Пользователь не может изменить текст метки, однако это можно сделать в сценарии.

 


Глава 2

• Checkbox (Флажок) — элемент, который может быть включен или выклю­чен пользователем.

 

 


• Button (Кнопка) — элемент, который утапливается при нажатии и приподнимается обратно при отпускании.

 

 


• Checkbutton (Фиксирующая кнопка) — элемент, который утапливается
при первоначальном нажатии и приподнимается при повторном нажатии.

 

 


• Pickbutton (Кнопка выбора) — элемент выбора объектов на сцене.

 

 

 


• Spinner (Счетчик) — элемент, предназначенный для ввода числового значения в свитке. Он состоит из поля ввода и стрелок. У счетчика имеются
два параметра: диапазон значений и устанавливаемое по умолчанию значение.

 

 


• Radiobuttons (Кнопки-переключатели) — ряд переключателей в свитке. Одновременно можно выбрать лишь один из них.

 

 

 

Listbox (Списковое окно) — список элементов, предоставляемых пользователю на выбор. Пользователь может прокручивать список для выбора нужного элемента из списка.

 

 

 


Combobox (Комбинированное окно) — комбинация списка выбора и поля редактирования текста. Список всегда отображается в свитке полностью, хотя длинные списки могут быть снабжены полосами прокрутки. В расположенном вверху поле редактирования отображается выделенный в данный момент элемент списка.

 

 


Построение пользовательских интерфейсов

• Slider (Ползунковый регулятор) — альтернативный счетчику элемент. Пользователь перемещает ползунок в ту или иную сторону. У ползунково- го регулятора те же самые параметры: диапазон значений и устанавливаемое по умолчанию значение.

 

 

 


• Edittext (Поле редактирования текста) — текстовое поле, в котором пользователь вводит и редактирует текст.

 

 

 

Глава 2

• Dropdownlist (Раскрывающийся список) — аналогичен комбинированному окну, но в данном случае список раскрывается, когда пользователь щелкает на кнопке со стрелкой вниз. Следует имть в виду, что текст в раскрывающемся списке не вводится.

 

 


• Colorpicker (Селектор цвета) — элемент, предназначенный для отображения диалогового окна ColorSelector (Селектор цвета). В свитке он представлен образцом цвета. Пользователь может щелкнуть на образце цвета, чтобы открыть диалоговое окно ColorSelector.

 

 


• Progressbar (Индикатор вьшолнения) ~ элемент, предназначенный для отображения хода действия или выполнения процесса.

 

 


• Mapbutton (Кнопка карты) и Materialbutton (Кнопка материала) — элементы, предназначенные для отображения карт и материалов в диалоговом окне Material/MapBrowser.

• Bitmap (Растр) — элемент, предназначенный для отображения растрового изображения в свитке.

Для каждого элемента интерфейса, указываемого в выражении свитка, создается соответствующий объект со своими свойствами. Доступ к этим свойствам осуществляется по имени данного элемента интерфейса. Имеются свойства, которые являются общими для всех элементов интерфейса (например, свойство положения), а также свойства, характерные только для элемента конкретного типа.

При создании в 3dsMaxэлементы интерфейса размещаются на панели со стандартными параметрами расположения. Если требуется другая схема их рас­положения, конструктору каждого такого элемента можно передать ряд следующих параметров.


Построение пользовательских интерфейсов

 

• align — указывается следующим образом: #left, #right или #center. Знак "решетки" должен быть указан обязательно. Данный параметр определяет выравнивание элемента интерфейса по левому краю, по правому краю или же по центру.

• pos — определяет положение элемента интерфейса в конкретной точке с координатами x и y, указываемыми в пикселях. Значение этого параметра указывается с помощью типа данных Point2 ([x, y]). Такое положение элемента интерфейса определяется относительно левого верхнего угла свитка.

• width — задает ширину элемента интерфейса в пикселях.

• height — задает высоту элемента интерфейса в пикселях. Для спискового и комбинированного окон, высота задается в зависимости от числа элементов в списке. Так, для отображения N элементов в списковом окне его высоту следует задать равной N. А для отображения N элементов в комбинированном окне его высоту следует задать равной N+2.

• offset — задает смещение относительно устанавливаемого по умолчанию положения элемента интерфейса. В качестве единиц изменения используются пиксели, а в качестве типа данных — Point2.

• across — задает положение элементов интерфейса по горизонтали, а не по вертикали. Применяется к элементу и следующим за ним (N - 1) элементам, где N — число, указываемое после слова across. Этот параметр более подробно рассматривается в следующем разделе.

Как правило, лучше сначала предоставить 3dsMax возможность расположить элементы интерфейса с помощью устанавливаемых по умолчанию параметров, а затем внести необходимые коррективы в расположение элементов. Текстовые метки должны быть краткими, чтобы они не выходили за край свитка, а элементы интерфейса не должны перекрываться.