我遇到过现有的代码,但我认为必须有更好的方法。因此,我需要在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] ;
答案 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']
如果有人遇到问题,这只是一个有用的暗示!!