MAYA MEL 实时更新,如图,如果场景中的物体增加了,怎么让按钮的选择多出增加的物体呢?

问题描述:

MAYA MEL 实时更新,如图,如果场景中的物体增加了,怎么让按钮的选择多出增加的物体呢?

string $window = `window -title "Example 1"`;
//读取场景中的物体,并把它们放进数组中
string $transformInSence[]=`ls -typ transform`;
columnLayout -h 90;
//创建一个有下拉子项按钮
string $transformShow = `optionMenuGrp -label "场景中的物体"`;
menuItem -l "请选择";
//把场景中的物体加入为按钮子项
for($transform in $transformInSence){
menuItem -parent ($transformShow + "|OptionMenu") -label $transform;
}
showWindow $window;
1个回答 分类:综合 2014-10-12

问题解答:

我来补答
你是想 即时更新(比如创建了物体 mel列表也会自动更新)还是 被动更新(比如建立个按钮点一下,列表更新)
再问: 都行的,只要是跟新,我现在在学MEL,很想知道两种怎么实现,你可以两种都告诉我吗?我把我上面的代码贴出来,您给看看~
再答: 您这个字我可不敢当大家都是同行互相学习而已,OK废话少说,我们来理清一下思路 先说说被动更新吧,这个比较好做,大概的思路就是在界面中加个刷新按钮,点击就会把menultemd的列表更新。细一点说是 当点击刷新按钮时,删除menultem控件,然后扫描物体列表并新创建menltem控件。我们需要写三个函数,主要函数,执行刷新的函数和专门放menultem控件的函数。代码如下: proc choose_main()//主函数 { if(`window -ex Mal`){deleteUI Mal;} window -title "Mal" Mal; columnLayout; button -l "刷新" -c "choose_refresh()" ; choose_son();//menultem控件和他的布局columnLayout一起被打包出去到choose_son()中 showWindow Mal; } proc choose_refresh()//刷新函数 { if(`columnLayout -ex Mus`)deleteUI Mus;//如果发现有columnLayout布局就删掉它。ps:如果你单独删menuItem控件是没有效果的,所以我们就删布局。 window -e Mal;//这句和下面的那句的意思是:在Mal窗口中创建新的menuItem控件 choose_son(); } proc choose_son()//menultem控件 { columnLayout -h 90 Mus;//Mus是常量,他等同于 global string $Mus=`columnLayout -h 90`;,常量一般是放在后面的 string $Kl[] = `ls -assemblies`;//扫描大纲的列表 string $transformShow = `optionMenuGrp -label "场景中的物体"`; menuItem -l "请选择"; for($transform in $Kl){ menuItem -parent ($transformShow + "|OptionMenu") -label $transform; } } 现在在说说即时更新,即时并不需要按钮,但它和被动更新差不多,它的思路是在被动更新的基础上:当maya场景中创建物体时,执行刷新函数,这里边最主要的就是如何判断物体的创建,这个就需要另一个东西:【scriptJob】 系统事件(也叫触发事件),他是个mel命令,相关详细资料你可以百度搜“maya 2012 mel 创建界面 使用系统事件和 scriptJob ”这个帖子,也可以查找maya mel帮助在这我就不多说了,这里我们会加一个新的函数 Ml()代码如下: proc choose_main() { global int $fg; $fg = ` 靠,百度的字节不够了,我把剩下的代码用消息给你发过去了 我公司放长假,我在老家用我妈的电脑回答你的问题,她老人家的电脑太古老了,装不了maya,我以上的回答都是我的猜想,没有经过验证,如果有问题给我发消息
 
 
展开全文阅读
剩余:2000
上一页:dc2inr3qec3r2
下一页:这样怎么写