Skip to content

Commit b7e0058

Browse files
authored
Merge pull request #6 from BartMoyaers/master
Add joint_direct_children function
2 parents ed8c963 + 5c86323 commit b7e0058

3 files changed

Lines changed: 18 additions & 1 deletion

File tree

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,8 @@ Python module for parsing BVH (Biovision hierarchical data) mocap files
7272
>>> [str(node) for node in mocap.search('JOINT')]
7373
['JOINT mixamorig:Spine', 'JOINT mixamorig:Spine1', 'JOINT mixamorig:Spine2', 'JOINT mixamorig:Neck', 'JOINT mixamorig:Head', 'JOINT mixamorig:HeadTop_End', 'JOINT mixamorig:LeftEye', 'JOINT mixamorig:RightEye', 'JOINT mixamorig:LeftShoulder', 'JOINT mixamorig:LeftArm', 'JOINT mixamorig:LeftForeArm', 'JOINT mixamorig:LeftHand', 'JOINT mixamorig:LeftHandMiddle1', 'JOINT mixamorig:LeftHandMiddle2', 'JOINT mixamorig:LeftHandMiddle3', 'JOINT mixamorig:LeftHandThumb1', 'JOINT mixamorig:LeftHandThumb2', 'JOINT mixamorig:LeftHandThumb3', 'JOINT mixamorig:LeftHandIndex1', 'JOINT mixamorig:LeftHandIndex2', 'JOINT mixamorig:LeftHandIndex3', 'JOINT mixamorig:LeftHandRing1', 'JOINT mixamorig:LeftHandRing2', 'JOINT mixamorig:LeftHandRing3', 'JOINT mixamorig:LeftHandPinky1', 'JOINT mixamorig:LeftHandPinky2', 'JOINT mixamorig:LeftHandPinky3', 'JOINT mixamorig:RightShoulder', 'JOINT mixamorig:RightArm', 'JOINT mixamorig:RightForeArm', 'JOINT mixamorig:RightHand', 'JOINT mixamorig:RightHandMiddle1', 'JOINT mixamorig:RightHandMiddle2', 'JOINT mixamorig:RightHandMiddle3', 'JOINT mixamorig:RightHandThumb1', 'JOINT mixamorig:RightHandThumb2', 'JOINT mixamorig:RightHandThumb3', 'JOINT mixamorig:RightHandIndex1', 'JOINT mixamorig:RightHandIndex2', 'JOINT mixamorig:RightHandIndex3', 'JOINT mixamorig:RightHandRing1', 'JOINT mixamorig:RightHandRing2', 'JOINT mixamorig:RightHandRing3', 'JOINT mixamorig:RightHandPinky1', 'JOINT mixamorig:RightHandPinky2', 'JOINT mixamorig:RightHandPinky3', 'JOINT mixamorig:RightUpLeg', 'JOINT mixamorig:RightLeg', 'JOINT mixamorig:RightFoot', 'JOINT mixamorig:RightToeBase', 'JOINT mixamorig:LeftUpLeg', 'JOINT mixamorig:LeftLeg', 'JOINT mixamorig:LeftFoot', 'JOINT mixamorig:LeftToeBase']
7474
```
75+
#### Get joint's direct children
76+
```python
77+
>>> mocap.joint_direct_children('mixamorig:Hips')
78+
[JOINT mixamorig:Spine, JOINT mixamorig:RightUpLeg, JOINT mixamorig:LeftUpLeg]
79+
```

bvh.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ def iterate_joints(joint):
113113
iterate_joints(next(self.root.filter('ROOT')))
114114
return joints
115115

116+
def joint_direct_children(self, name):
117+
joint = self.get_joint(name)
118+
return [child for child in joint.filter('JOINT')]
119+
116120
def get_joint_index(self, name):
117121
return self.get_joints().index(self.get_joint(name))
118122

tests/test_bvh.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,14 @@ def test_frames_multi_channels(self):
173173
rotations = mocap.frames_joint_channels('Head', ['Xrotation', 'Yrotation', 'Zrotation'])
174174
self.assertEqual(len(rotations), mocap.nframes)
175175

176-
176+
def test_joint_children(self):
177+
with open('tests/test_mocapbank.bvh') as f:
178+
mocap = Bvh(f.read())
179+
self.assertEqual(mocap.joint_direct_children('Chest')[0].name, 'Chest2')
180+
self.assertEqual(mocap.joint_direct_children('Hips')[0].name, 'Chest')
181+
self.assertEqual(mocap.joint_direct_children('Hips')[1].name, 'LeftHip')
182+
self.assertEqual(mocap.joint_direct_children('Hips')[2].name, 'RightHip')
183+
self.assertEqual(mocap.joint_direct_children('RightWrist'), [])
184+
177185
if __name__ == '__main__':
178186
unittest.main()

0 commit comments

Comments
 (0)