所以我需要将一个数组传递给global procedure
,但是像往常一样我必须重新定义它。我知道这是一个noobie问题,但是数组可以作为程序传递吗?如果没有,可以将其设置为全局并插入到过程中。
$selectedFace = `ls -selection` ;
global proc crTestScripts($selectedFace) {
print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}
或
$selectedFace = `ls -selection` ;
global array? $selectedFace ;
global proc crTestScripts() {
global array? $selectedFace ;
print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}
我正在传递此字符串,但我仍然收到此错误:
Error: Wrong number of arguments on call to applyCurrentType
以下是代码示例:
string $selectedFace[] = `ls -sl` ;
global proc applyCurrentType (string $selectedFace[]) {
print("Apply Current Type button clicked\n") ;
global int $applyCurrentType ;
$applyCurrentType = 1 ;
select -cl ;
select $selectedFace ;
crTestScripts ;
}
答案 0 :(得分:0)
我在使用数组的自动装配脚本中使用了proc createControllers(string $name[], int $position)
。我在使用mel时远离使用全局术语,因为maya很挑剔,只要我对脚本进行更改就使用rehash函数;
proc buildRig()
{
string $rootNode[]=`ls -sl`;
createControllers($rootNode, 0);
}
proc createControllers(string $name[], int $position)
为我工作。在proc createControllers
我的$name
数组等于我的$rootNode
数组。
希望这有帮助,祝你好运!
答案 1 :(得分:0)
我之前的回答是错的。
所以要将数组传递给proc你需要将它重新定义为全局变量,
string $selectedFace[];
将成为。{
global string $selectedFace[];
内部程序。 e.g:
string $selectedFace[] = filterExpand("-sm", 34, `ls-selection`);
global proc crTestScripts(){
global string $selectedFace[];
print $selectedFace;
}
crTestScripts();
// result: body_skinPrx_finalSkin.f[103]
filterExpand有两个好处,它可以展平数组ls -fl
,你可以使用多个过滤器-sm 34 -sm 31
或者,我认为最好的方式...... (我不喜欢全球大战) 只需在圆括号中使用args变量声明的常规语法:
global proc proc_name(* args_here){somecode;返回; }
* ARGS:
string $ str,string $ ls_str [],float $ scaleX,float $ scale []; .. vector $ vec etc。
global proc hide_items(string $items[]){
hide $items;
}
使用以前的列表结果$selectedFace
:
hide_items($selectedFace);