bvh-python库的接口备注
BvhNode
- 每一行建模为一个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()返回列表里的索引