FCurve.evaluate() and bounds() patch from Dan Eicher
authorCampbell Barton <ideasman42@gmail.com>
Thu, 20 May 2010 04:44:10 +0000 (04:44 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 20 May 2010 04:44:10 +0000 (04:44 +0000)
source/blender/makesrna/intern/rna_fcurve.c

index a8a73d15c9d9987bc41f7b961874f6e55d90612b..8da381aff50ea5917a0572e5c1caea6dbce9e689 100644 (file)
@@ -546,6 +546,11 @@ static void rna_FKeyframe_points_remove(FCurve *fcu, ReportList *reports, BezTri
        delete_fcurve_key(fcu, index, !do_fast);
 }
 
+static void rna_fcurve_range(FCurve *fcu, float range[2])
+{
+       calc_fcurve_range(fcu, range, range+1);
+}
+
 #else
 
 static void rna_def_fmodifier_generator(BlenderRNA *brna)
@@ -1321,7 +1326,9 @@ static void rna_def_fcurve(BlenderRNA *brna)
 {
        StructRNA *srna;
        PropertyRNA *prop;
-       
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
        static EnumPropertyItem prop_mode_extend_items[] = {
                {FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", 0, "Constant", ""},
                {FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", 0, "Linear", ""},
@@ -1423,8 +1430,23 @@ static void rna_def_fcurve(BlenderRNA *brna)
        prop= RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_struct_type(prop, "FModifier");
        RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting the shape of the F-Curve");
-
        rna_def_fcurve_modifiers(brna, prop);
+
+       /* Functions */
+       func= RNA_def_function(srna, "evaluate", "evaluate_fcurve"); /* calls the C/API direct */
+       RNA_def_function_ui_description(func, "Evaluate fcurve.");
+       parm= RNA_def_float(func, "frame", 1.0f, -FLT_MAX, FLT_MAX, "Frame", "Evaluate fcurve at given frame", -FLT_MAX, FLT_MAX);
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       /* return value */
+       parm= RNA_def_float(func, "position", 0, -FLT_MAX, FLT_MAX, "Position", "Fcurve position", -FLT_MAX, FLT_MAX);
+       RNA_def_function_return(func, parm);
+
+       func= RNA_def_function(srna, "range", "rna_fcurve_range");
+       RNA_def_function_ui_description(func, "Get the time extents for F-Curve.");
+       /* return value */
+       parm= RNA_def_float_vector(func, "range", 2, NULL, -FLT_MAX, FLT_MAX, "Range", "Min/Max values", -FLT_MAX, FLT_MAX);
+       RNA_def_property_flag(parm, PROP_THICK_WRAP);
+       RNA_def_function_output(func, parm);
 }
 
 /* *********************** */