[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21543] branches/soc-2009-kazanbas: Added Action.get_frame_range returning a (min, max) pair or (0, 0) if there are no keys.

Arystanbek Dyussenov arystan.d at gmail.com
Sun Jul 12 08:59:57 CEST 2009


Revision: 21543
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21543
Author:   kazanbas
Date:     2009-07-12 08:59:57 +0200 (Sun, 12 Jul 2009)

Log Message:
-----------
Added Action.get_frame_range returning a (min, max) pair or (0, 0) if there are no keys.

Modified Paths:
--------------
    branches/soc-2009-kazanbas/release/io/export_fbx.py
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_action_api.c

Modified: branches/soc-2009-kazanbas/release/io/export_fbx.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-07-12 04:29:36 UTC (rev 21542)
+++ branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-07-12 06:59:57 UTC (rev 21543)
@@ -2577,17 +2577,18 @@
 					file.write('\n\tTake: "%s" {' % sane_name_mapping_take[blenAction.name])
 				else:
 					file.write('\n\tTake: "%s" {' % sane_takename(blenAction))
-					
-				tmp = blenAction.getFrameNumbers()
-				if tmp:
-					act_start =	min(tmp)
-					act_end =	max(tmp)
-					del tmp
-				else:
-					# Fallback on this, theres not much else we can do? :/
-					# when an action has no length
-					act_start =	start
-					act_end =	end
+
+				act_start, act_end = blenAction.get_frame_range()
+# 				tmp = blenAction.getFrameNumbers()
+# 				if tmp:
+# 					act_start =	min(tmp)
+# 					act_end =	max(tmp)
+# 					del tmp
+# 				else:
+# 					# Fallback on this, theres not much else we can do? :/
+# 					# when an action has no length
+# 					act_start =	start
+# 					act_end =	end
 				
 				# Set the action active
 				for my_bone in ob_arms:

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_action_api.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_action_api.c	2009-07-12 04:29:36 UTC (rev 21542)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_action_api.c	2009-07-12 06:59:57 UTC (rev 21543)
@@ -36,13 +36,40 @@
 
 #ifdef RNA_RUNTIME
 
-int *rna_Action_get_frames(bAction *act, int *ret_length)
+#include "DNA_anim_types.h"
+#include "DNA_curve_types.h"
+
+/* return frame range of all curves (min, max) or (0, 0) if there are no keys */
+int *rna_Action_get_frame_range(bAction *act, int *ret_length)
 {
-	*ret_length= 3;
-	int *ret= MEM_callocN(*ret_length * sizeof(int), "action frames");
-	ret[0] = 1;
-	ret[1] = 2;
-	ret[2] = 3;
+	FCurve *cu;
+	int *ret;
+
+	*ret_length= 2;
+	ret= MEM_callocN(*ret_length * sizeof(int), "rna_Action_get_frame_range");
+
+	ret[0]= 0;
+	ret[1]= 0;
+
+	for (cu= act->curves.first; cu; cu= cu->next) {
+		int verts= cu->totvert;
+		BezTriple *bezt= cu->bezt;
+		while (verts) {
+			int frame= (int)bezt->vec[1][0];
+
+			if (cu == act->curves.first && verts == cu->totvert)
+				ret[0]= ret[1]= frame;
+
+			if (frame < ret[0])
+				ret[0]= frame;
+			if (frame > ret[1])
+				ret[1]= frame;
+
+			bezt++;
+			verts--;
+		}
+	}
+	
 	return ret;
 }
 
@@ -53,9 +80,9 @@
 	FunctionRNA *func;
 	PropertyRNA *parm;
 
-	func= RNA_def_function(srna, "get_frames", "rna_Action_get_frames");
-	RNA_def_function_ui_description(func, "Get action frames."); /* XXX describe better */
-	parm= RNA_def_int_array(func, "frames", 1, NULL, 0, 0, "", "", 0, 0);
+	func= RNA_def_function(srna, "get_frame_range", "rna_Action_get_frame_range");
+	RNA_def_function_ui_description(func, "Get action frame range as a (min, max) tuple.");
+	parm= RNA_def_int_array(func, "frame_range", 1, NULL, 0, 0, "", "Action frame range.", 0, 0);
 	RNA_def_property_flag(parm, PROP_DYNAMIC_ARRAY);
 	RNA_def_function_return(func, parm);
 }





More information about the Bf-blender-cvs mailing list