2

我遇到了执行此操作的现有代码,但我认为必须有更好的方法。所以,我需要在 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] ;
4

3 回答 3

2

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

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直到它不返回任何内容;但字符串方法更容易

于 2014-03-17T18:14:32.910 回答
2

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

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

从文档:

    -assemblies(-as)
        List top level transform Dag objects
于 2016-06-08T20:19:04.817 回答
1

我知道这个话题有点过时了......但是......

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']

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

于 2015-06-09T17:18:07.883 回答