bvh-python库的接口备注

bvh-python库的bvh.py文件

 BvhNode
self.value -> []
完整一行内容,以空格分隔的元素列表
self.children -> []
直属该Node的所有子节点
filter(key) -> yield child
从该Node的self.children中查找child.value[0]==key的Node。注意key须为单值
_ _getitem_ _(key)
用于支持[]运算符. 注意key的设计,只能是单值,用于跟本Node直属子节点的value列表逐元素比较,返回的是子节点的value值匹配key处之后的元素列表。不可用于写入
name()
返回JOINT或ROOT关节名字。注意,该函数的实现只针对bvh文件里的JOINT和ROOT行有意义

 Bvh
self.data
整个bvh文件的内容bytes
self.root = BvhNode()
一个空的虚拟节点,作为整个骨骼结构的虚拟根。
tokenize()
解析bvh文件。
search(self, *items) -> found_nodes []
深度优先方式查找节点value值能逐元素覆盖items列表元素的节点。返回所有满足要求的节点列表。
get_joints() -> joint_nodes []
深度优先方式获取全部Joints(包含ROOT关节)。返回BvhNode列表,打印时其元素以repr()返回值展示:ROOT root, JOINT pelvis等
get_joints_names() -> list[str]
深度优先方式获取全部Joints(包含ROOT关节)。返回列表,且元素为JOINT后面的token:'root', 'pelvis'等
get_joint(self, name) -> BvhNode
先以['ROOT', name]作为参数调用search函数,返回找到的第一个节点。若没找到则以['JOINT', name]作为参数再次调用search函数,返回找到的第一个节点。
get_joint_index(self, name) -> int
get_joints().index(get_joint(name))。返回的是get_joints()返回列表里的索引
joint_offset(name) -> tuple(三元)
get_joint(name)['OFFSET']的3个值
joint_channels(name) -> list[channel_names]
get_joint(name)['CHANNELS'][1:]。这里['CHANNELS']运算符调用的是BvhNode的_ _getitem_ _(key),如返回[6 Xposition Yposition Zposition Zrotation Xrotation Yrotation],然后再执行[1:]最终返回[Xposition Yposition Zposition Zrotation Xrotation Yrotation]
get_joint_channels_index(joint_name) -> int
返回指定的Joint的Channels数据在一帧数据中的索引。一帧数据是float列表的组织形式(就是bvh文件里数据部分的一行),该函数返回的就是某个float的索引。
frame_joint_channel(frame_index, joint_name, channel_name, default_value) -> float
返回指定数据帧里指定关节的指定Channel的float值
frame_joint_channels(frame_index, joint_name, channels, default_value) -> list[float]
作用同frame_joint_channel,但参数channels是channel_name的列表,相应的返回值也是这些channel对应的float列表
joint_parent(name) -> BvhNode
返回指定名称节点的父节点。注意这里的节点不是指bvh文件规范层面的joints,而是这个python库的BvhNode概念
joint_parent_index(name) -> int
get_joints().index(get_joint(name)). 返回的是get_joints()返回列表里的索引