python — FBX SDK — получить FbxNode из ENodeId символа

Можно ли получить связанный FbxNode из enum ENodeId?
например, если я хочу получить FbxNode из Character::eLeftHand

Я пытался использовать Character::GetCharacterLink(ENodeId, FbxCharacterLink)
затем извлекая FbxNode из FbxCharacterLink просто позвонив FbxCharacterLink::mNode

Однако эта функция возвращает большинство ENodeIds False, поэтому нет FbxCharacterLink создано.

character = myScene.GetCharacter(0)
lefthand = character.eLeftHand
lefthand_node = FbxCharacterLink()
character.GetCharacterLink(lefthand, lefthand_node) # False
lefthand_node = lefthand_node.mNode

когда я писал сценарии внутри Motionbuilder, используя Python и Pyfbxsdk, это было очень легко, независимо от того, как названы объекты скелета, я могу получить FBXObject из этого

m = character.GetModel(self.BodyNodeObject[o])

а также BodyNodeObject генерируется с

def BodyNodes(self):
for i in dir(FBBodyNodeId):
if i[0] == 'k':
try:
self.BodyNodeObject[BodyNodesId[i]] = getattr(FBBodyNodeId, i)
except:
pass

BodyNodesId это просто словарь

BodyNodesId = OrderedDict({
'kFBChestNodeId':'Spine1',
'kFBHeadNodeId':'Head',
'kFBHipsNodeId':'Hips',
'kFBLeftAnkleNodeId':'LeftFoot',
'kFBLeftCollarNodeId':'LeftShoulder',
'kFBLeftElbowNodeId':'LeftForeArm',
...
})

4

Решение

это сработало для меня

from fbx import *

for i in range(myscene.GetCharacterCount()):
character = myscene.GetCharacter(i)
node = character.eHips
link = FbxCharacterLink()
while (character.GetCharacterLink(node, link)):
print node, link.mNode.GetName()
node = character.ENodeId(int(node+1))
0

Другие решения