diff --git a/curve_simplify.py b/curve_simplify.py index 2b7b4bda13f5129248d7b0e05c9c738829f09e31..e5e87e6f07fad418e7cdf6bf44baae1e2cdbf81d 100644 --- a/curve_simplify.py +++ b/curve_simplify.py @@ -101,17 +101,27 @@ def binom(n, m): def getDerivative(verts, t, nth): order = len(verts) - 1 - nth QVerts = [] - for i in range(nth): - if QVerts: - verts = QVerts - derivVerts = [] - for i in range(len(verts)-1): - derivVerts.append(verts[i+1] - verts[i]) - QVerts = derivVerts - point = mathutils.Vector((0, 0, 0)) + + if nth: + for i in range(nth): + if QVerts: + verts = QVerts + derivVerts = [] + for i in range(len(verts)-1): + derivVerts.append(verts[i+1] - verts[i]) + QVerts = derivVerts + else: + QVerts = verts + + if len(verts[0]) == 3: + point = mathutils.Vector((0, 0, 0)) + if len(verts[0]) == 2: + point = mathutils.Vector((0, 0)) + for i, vert in enumerate(QVerts): point += binom(order, i) * math.pow(t, i) * math.pow(1-t, order-i) * vert deriv = point + return deriv # get curvature from first, second derivative @@ -232,7 +242,6 @@ def main(context, obj, options): # get vec3 list to simplify if spline.type == 'BEZIER': # get bezierverts - splineVerts = spline.bezier_points.values() splineVerts = [splineVert.co.copy() for splineVert in spline.bezier_points.values()] @@ -400,14 +409,21 @@ class GRAPH_OT_simplify(bpy.types.Operator): box.prop(props, 'dis_error', expand=True) col = layout.column() - ## Check for curve + ## Check for animdata def poll(self, context): - objs = context.selected_objects - return (objs) + obj = context.active_object + fcurves = False + if obj: + animdata = obj.animation_data + if animdata: + act = animdata.action + if act: + fcurves = act.fcurves + return (obj and fcurves) ## execute def execute(self, context): - print("------START------") + #print("------START------") options = [ self.properties.mode, #0 @@ -425,7 +441,7 @@ class GRAPH_OT_simplify(bpy.types.Operator): fcurves_simplify(context, obj, options, self.fcurves) - print("-------END-------") + #print("-------END-------") return {'FINISHED'} ###########################