My FlipAnimation插件在版本2.62之前正常工作,但拒绝在新版本上工作。其主要目的是获取当前活动操作的一系列关键帧,并在每个相关帧上执行Copy Pose
和Paste X-flipped Pose
。因此,根据所选模式,可以镜像整个操作,也可以处理并附加指定范围。
现在从2.63开始它'假装'工作但粘贴的姿势不是X翻转。我猜的代码片段应该归咎于:
for frame_item in self.keyframe_bone_dict.items ():
frame = frame_item[0]
bones = frame_item[1]
context.scene.frame_set(frame)
bpy.ops.pose.select_all(action='DESELECT')
for bone_item in bones.items ():
bone = bone_item[0]
bpy.context.active_object.data.bones[bone].select = True
bpy.ops.pose.copy()
if self.append_mode:
context.scene.frame_set(frame + self.append_frames_offset)
bpy.ops.pose.paste(flipped=True)
keyframe_bone_dict
包含每个框架,用于触摸所有受影响骨骼的字典。因此,我遍历所有关键帧,选择具有此处定义的关键帧的骨骼。然后复制姿势并在当前帧或另一个append_frames_offset的帧处执行粘贴X翻转姿势。粘贴的关键帧位于正确的位置,但它们的值不是X翻转。
我在Blender API changes处研究了API更改,但没有发现任何可疑的事情。只对KeyingSets进行一些细微更改,例如name => bl_label。
还有其他变化吗?或者还有什么可能导致改变的行为?
我刚刚开始阅读有关如何向bf-extensions Trackers提交代码的问题,然后在使用不同版本进行测试时遇到了这个问题。现在我真的卡住了,因为我是附加开发的新手。
非常感谢你的帮助
更新
我做了一些进一步的调查,发现在paste pose运算符成功返回后面的调试语句
之后print (context.active_pose_bone, " (after): ", context.active_pose_bone.rotation_quaternion)
显示了所考虑的骨骼关键帧的合理,即正确的值。但是在加载项完成后,相同的键要么保持不变,要么在它们的四元数成员中有可忽略的变化(0 - 1%)。有时受影响的骨骼会略有变化。真奇怪: - (
更新2 附加组件运行仅设计为在姿势模式下运行,并且面板在任何其他模式下都是隐藏的。在开始复制和粘贴过程之前,会执行一系列语句以确保满足所有前提条件。这包括:活动对象是否包含一个至少定义了一个操作的骨架,是否选择了一个动作,使用主动键控设置自动关键帧插入和使用主动键控设置自动关键帧插入仅已启用。
更多信息: