0

所以我需要将一个数组传递给 a global procedure,但像往常一样我必须重新定义它。我知道这是一个菜鸟问题,但是数组可以作为过程传递吗?如果不是,是否可以将其设为全局并插入到程序中。

$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 ;
}
4

2 回答 2

0

proc createControllers(string $name[], int $position)在一个采用数组的自动装配脚本中使用。我在使用 mel 时避免使用 global 术语,因为 maya 很挑剔,并且只要我对脚本进行更改时就使用 rehash 函数;

proc buildRig()
{
    string $rootNode[]=`ls -sl`;
    createControllers($rootNode, 0);    
} 

proc createControllers(string $name[], int $position)

为我工作。在proc createControllers我的$name数组中等于我的$rootNode数组。

希望这有帮助,祝你好运!

于 2011-12-12T06:24:33.440 回答
0

我之前的回答是错误的。

所以要将数组传递给proc你需要将它重新定义为全局变量, string $selectedFace[];它将成为 global string $selectedFace[]; 内部程序。例如:

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:

全局 proc proc_name( *args_here ){ somecode; 返回; }

*参数:

字符串 $str,字符串 $ls_str[],浮动 $scaleX,浮动 $scale[];.. 向量 $vec 等。

global proc hide_items(string $items[]){
    hide $items;
}

使用以前的列表结果$selectedFace

hide_items($selectedFace);

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

于 2013-02-20T12:09:11.873 回答