Render.ru

Mel. Управление элементами окна.

Александр Ильин 131446

Пользователь сайта
Рейтинг
2
#1
Добрый день. При написании GUI на Mel возникла следующая проблема: Я хочу чтобы при нажатии на кнопку из внешней процедуры изменялись элементы окна - к примеру в scrollfield появлялся некий текст. Ниже привожу текст скрипта для создания окна. Интересует следующее, можно ли изменять элементы в окне из внешней процедуры? Нужно ли каждый раз убивать и заново рисовать окно при каждом таком изменении?

global proc WindowGUI()
{
if (`window -exists WindowGUI`) deleteUI WindowGUI;

window -t "Window GUI Form" -widthHeight 300 300 -rtf true -sizeable false WindowGUI; //инициализация окна
string $form = `formLayout`;
string $BackgroundImage = ` picture -width 300 -height 300 -image "Background.png"`; // Фоновая картинка, 300х300
string $SelectionScrollField = `scrollField -wordWrap false -w 200 -h 200 -cl -enable false -editable false`; // поле для текста
string $Button_ShowText = `button -label "Show text on Form" -w 160 -h 25 -command ShowTextOnForm Button_ShowText`; // Кнопка, запускает процедуру ShowTextOnForm
formLayout -edit
-attachForm $SelectionScrollField "top" 50
-attachForm $SelectionScrollField "left" 50 // размещаем панель на форме

-attachForm $Button_ShowText "top" 260
-attachForm $Button_ShowText "left" 70 // размещаем кнопку на форме
$form;

showWindow WindowGUI;
}

global proc ShowTextOnForm()
{
//?! Как управлять окном WindowGUI из этой процедуры

}

WindowGUI;
 

iNOD

Активный участник
Рейтинг
18
#2
Воть:

Код:
global proc WindowGUI()
{
if (`window -exists WindowGUI`) deleteUI WindowGUI;

window -t "Window GUI Form" -widthHeight 300 300 -rtf true -sizeable false WindowGUI; //инициализация окна
string $form = `formLayout`;
string $BackgroundImage = ` picture -width 300 -height 300 -image "Background.png"`; // Фоновая картинка, 300х300
string $SelectionScrollField = `scrollField -wordWrap 1 -nl 10 -w 200 -h 200 -cl -enable false -editable false qwe`; // поле для текста
string $Button_ShowText = `button -label "Show text on Form" -w 160 -h 25 -command ShowTextOnForm Button_ShowText`; // Кнопка, запускает процедуру ShowTextOnForm
formLayout -edit
-attachForm $SelectionScrollField "top" 50
-attachForm $SelectionScrollField "left" 50 // размещаем панель на форме

-attachForm $Button_ShowText "top" 260
-attachForm $Button_ShowText "left" 70 // размещаем кнопку на форме
$form;

showWindow WindowGUI;
}

global proc ShowTextOnForm()
{

string $a = "aasdasdasd";
//?! Как управлять окном WindowGUI из этой процедуры
scrollField -e -it $a qwe;

}

WindowGUI;
 

Александр Ильин 131446

Пользователь сайта
Рейтинг
2
#3
Спасибо, помогло.
Я так понимаю, что проблема у меня была в том, что я не задал имя для ScrollField в окне? И так можно обращаться к любому элементу по его имени если процедура создания окна глобальная?

Тогда вопрос посложнее. У меня на форме есть кнопки, которые выделяют определенный объект в сцене по его имени. Мне нужна обратная связь, чтобы когда я выделял объект соответствующие кнопки на форме меняли иконку. Я так понимаю, что для этого нужна некая процедура которая запускается через ScriptJob при открытии сцены и постоянно проверяет что за объекты выделены и если они соотв. списку то менять иконку на кнопках. Возможно ли это сделать, и если да, то как лучше это оформить?
 
Рейтинг
47
#4
Товарищи, прошу прощения за столь примитивный вопрос, но может кто-то подгонит рабочий код.
Хочу, что бы окно Оутлайнера открывалась как вкладка слева.

Я понимаю, что есть такой пресет. Но мне хочется, что бы окно в виде панели слева, было при любом пресете. Я находил код в хелпе, но так с ним и не разобрался.

Сейчас использую довольно извращенную технику. Открываю Туул Сеттинг, и по верх него, пристраиваю Оутлайнер.

Код:
if ( `window -exists outlinerPanel1Window` )
{ 
deleteUI -window outlinerPanel1Window;
toolPropertyWindow -inMainWindow true;
toggleUIComponentVisibility ("Tool Settings");
}
else 
{
tearOffPanel "Outliner" "outlinerPanel" false;
toolPropertyWindow -inMainWindow true;
}
 

Александр Иванов

Активный участник
Рейтинг
7
#6
Ой, здесь оба вопрошающих - Александры! =) Мой ответ Александру Чернеге. Получится что-то наподобие Channel Box - с возможностью "прилеплять" к левому и правому краю основного окна. Редактируя флаг allowedArea команды dockControl, можно научить окошко прилепляться также к верху и низу окна. Если положишь скрипт файликом в папку scripts и импортнёшь его в userSetup.mel (с помощью командыpython("import название файла")) - то у тебя майка так прям с ним открываться и будет сразу. Насчёт мела я некомпетентен, поэтому первому Александру наврятле помогу. Единственное - скрипт джоб я бы делал не на запуск программы, а на открытие твоего окошка. Потому что пока оно не открыто скрипт джоб будет в холостую работать.
 
Сверху