将数组传递给全局过程

时间:2011-12-12 03:39:04

标签: procedure maya mel

所以我需要将一个数组传递给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 ;
}

2 个答案:

答案 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);

哎呀......我忘了玛雅不能隐藏面孔xD