2014-03-17 4 views
2

나는이 작업을 수행하는 기존 코드를 보았지만 더 나은 방법이 있어야한다고 가정합니다. 따라서 Autodesk Maya에서 메쉬 노드를 최고 수준으로 끌어 올릴 필요가 있습니다.MEL 스크립트에서 루트 노드를 얻는 방법은 무엇입니까?

// 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] ; 

답변

2

루트를 얻기 위해 단지 문자열을 분할 긴 이름 : 물론

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

는 파이썬에서 훨씬 더 우아 :

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

당신은 또한 다시 쓸 수 아무런 결과가 없을 때까지 listRelatives -p을 호출하여 신호 함수를 호출합니다. 하지만 문자열 방법은 쉽게

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

그냥 도움이되는 힌트를 빈 공간을 제공합니다!

+1

항상 모든 장면 XD의 0 인덱스에 빈 공간을 제공합니다 –

1

나는 이것이 아마 가장 직접적인 생각 : 워드 프로세서

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

:

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