Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/op/fcurve_euler_filter.py')
-rw-r--r--release/scripts/op/fcurve_euler_filter.py48
1 files changed, 36 insertions, 12 deletions
diff --git a/release/scripts/op/fcurve_euler_filter.py b/release/scripts/op/fcurve_euler_filter.py
index a2730e16843..b7d456dd525 100644
--- a/release/scripts/op/fcurve_euler_filter.py
+++ b/release/scripts/op/fcurve_euler_filter.py
@@ -1,7 +1,28 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
from math import *
import bpy
from mathutils import *
+
def main(context):
def cleanupEulCurve(fcv):
keys = []
@@ -12,37 +33,38 @@ def main(context):
for i in range(len(keys)):
cur = keys[i]
- prev = keys[i-1] if i > 0 else None
- next = keys[i+1] if i < len(keys)-1 else None
+ prev = keys[i - 1] if i > 0 else None
+ next = keys[i + 1] if i < len(keys) - 1 else None
- if prev == None:
+ if prev is None:
continue
th = pi
- if abs(prev[1][1] - cur[1][1]) >= th: # more than 180 degree jump
- fac = pi*2
+ if abs(prev[1][1] - cur[1][1]) >= th: # more than 180 degree jump
+ fac = pi * 2.0
if prev[1][1] > cur[1][1]:
- while abs(cur[1][1]-prev[1][1]) >= th: # < prev[1][1]:
+ while abs(cur[1][1] - prev[1][1]) >= th: # < prev[1][1]:
cur[0][1] += fac
cur[1][1] += fac
cur[2][1] += fac
elif prev[1][1] < cur[1][1]:
- while abs(cur[1][1]-prev[1][1]) >= th:
+ while abs(cur[1][1] - prev[1][1]) >= th:
cur[0][1] -= fac
cur[1][1] -= fac
cur[2][1] -= fac
for i in range(len(keys)):
for x in range(2):
- fcv.keyframe_points[i].handle_left[x] = keys[i][0][x]
- fcv.keyframe_points[i].co[x] = keys[i][1][x]
- fcv.keyframe_points[i].handle_right[x] = keys[i][2][x]
+ fcv.keyframe_points[i].handle_left[x] = keys[i][0][x]
+ fcv.keyframe_points[i].co[x] = keys[i][1][x]
+ fcv.keyframe_points[i].handle_right[x] = keys[i][2][x]
flist = bpy.context.active_object.animation_data.action.fcurves
for f in flist:
if f.select and f.data_path.endswith("rotation_euler"):
cleanupEulCurve(f)
+
class DiscontFilterOp(bpy.types.Operator):
"""Fixes the most common causes of gimbal lock in the fcurves of the active bone"""
bl_idname = "graph.euler_filter"
@@ -56,11 +78,13 @@ class DiscontFilterOp(bpy.types.Operator):
main(context)
return {'FINISHED'}
+
def register():
- pass
+ bpy.utils.register_module(__name__)
+
def unregister():
- pass
+ bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()