如何在MEL脚本中获取根节点?

时间:2014-03-17 14:36:57

标签: while-loop maya mel

我遇到过现有的代码,但我认为必须有更好的方法。因此,我需要在Autodesk Maya中获得网格节点中的最高级别。

// List all mesh objects
string $nodess[] = `ls -type mesh` ;

// Replace existing items on active list with this
select -r $nodess[0] ;   

int $i = 1 ;

while ($i < 30) {
    // Pick up the tree 30 times
    pickWalk -d up ;
    $i++ ;
}

// List all selected objects
string $rootNode[] = `ls -sl` ;

// Clear selection
select -cl ;

string $myroot = $rootNode[0] ;

3 个答案:

答案 0 :(得分:2)

获取root,只需对长名称进行字符串拆分:

global proc string get_root(string $node)
{
    string $longname[] = ls("-l", $node);
    string $tokens[];
    tokenize($longname[0], "|", $tokens);
    return $tokens[0];
}

当然,它在Python中更优雅:

root = cmds.ls(node, l=True)[0].split("|")[0]

您也可以通过调用listRelatives -p重新编写orignal函数,直到它不返回任何内容;但字符串方法更容易

答案 1 :(得分:2)

我认为这可能是最直接的:

string $roots[] = `ls -assemblies`;

来自文档:

    -assemblies(-as)
        List top level transform Dag objects

答案 2 :(得分:0)

我理解这个话题有点过时......但是......

Theodox的回答帮助了我,但出于某种原因......

root = cmds.ls(node, l=True)[0].split("|")[0]

...没有给我我需要的确切答案。代替...

root = cmds.ls(node, l=True)[0].split("|")[1] #<-- Notice this [1]

给了我我需要的确切答案。显然,[0]在我的场景中提供了一个空白区域,因为该数组被列为......

 [u'',u'the_Item_I_Need',u'etc1',u'etc2']

如果有人遇到问题,这只是一个有用的暗示!!