将数组传递到全局过程

发布于 2024-12-20 14:47:51 字数 898 浏览 0 评论 0原文

因此,我需要将数组传递到全局过程中,但像往常一样,我必须重新定义它。我知道这有点菜鸟问题,但是数组可以作为过程传递吗?如果没有,是否可以将其设为全局并插入到过程中。

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

我传入此字符串,但仍然收到此错误:

错误:调用 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 ;
}

So I need to pass an array into a global procedure, but as usual I have to redefine it. I know this is a bit of a noobie question, but can array be passed into as procedure? If not, could it be made global and inserted into a procedure.

$selectedFace = `ls -selection` ;

global proc crTestScripts($selectedFace) {
    print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}

or

$selectedFace = `ls -selection` ;
global array? $selectedFace ;

global proc crTestScripts() {
    global array? $selectedFace ;
    print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}

I'm passing in this string and I still get this error:

Error: Wrong number of arguments on call to applyCurrentType

Here is a sample of the code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁吢 2024-12-27 14:47:51

我在采用数组的自动装备脚本中使用了 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 数组。

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

I used proc createControllers(string $name[], int $position) in an auto rig script which is taking an array. I stay away from using the terms global when using mel since maya is picky and just use the rehash function whenever I make changes to my script;

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

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

Worked for me. In the proc createControllers my $name array is equal to my $rootNode array.

Hope this Helps, good luck!

双手揣兜 2024-12-27 14:47:51

我之前的回答是错误的。

因此,要将数组传递到过程中,您需要将其重新定义为全局变量,
string $selectedFace[]; 将变为
全局字符串$selectedFace[];
内部程序。例如:

string $selectedFace[] = filterExpand("-sm", 34, `ls-selection`);

global proc crTestScripts(){

    global string $selectedFace[];
    print $selectedFace;
}

crTestScripts();
// 结果:body_skinPrx_finalSkin.f[103]

filterExpand 有两个好处,它可以展平数组 ls -fl,并且可以使用多个过滤器 -sm 34 -sm 31

或者,我认为最好的方法...(我不喜欢全局变量)
只需对圆括号中的参数使用变量声明的正常语法即可:

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

参数:

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

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

使用先前的列表结果 $selectedFace

hide_items($selectedFace);哎呀

...我忘记了 Maya 无法隐藏面孔 xD

my previous answer was wrong.

so to pass array into proc u need redefine it as global variable,
string $selectedFace[]; will become
global string $selectedFace[];
inside procedure. 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 gives two benefits, it flattens array ls -fl, and u can use multiple filters -sm 34 -sm 31

or, i think best way... (i don't like global vars)
simply use normal syntax of variable declaration for args in round brackets:

global proc proc_name( *args_here ){ somecode; return; }

*args:

string $str, string $ls_str[], float $scaleX, float $scale[];.. vector $vec etc.

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

using previous list result $selectedFace:

hide_items($selectedFace);

oops... i forgot maya can't hide faces xD

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文