[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22756] branches/blender2.5/blender/source /blender: 2.5 - Keying Sets API (now usable from Py-Scripts)

Joshua Leung aligorith at gmail.com
Tue Aug 25 06:05:38 CEST 2009


Revision: 22756
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22756
Author:   aligorith
Date:     2009-08-25 06:05:37 +0200 (Tue, 25 Aug 2009)

Log Message:
-----------
2.5 - Keying Sets API (now usable from Py-Scripts)

Wrapped the Keying Sets API with RNA Functions so that they can now be called from Py-Scripts. This will ultimately be useful for riggers to create Keying Sets which can get loaded up/created for animators to use after importing their rig. 

I've created a demo for this, which can be found at:
http://www.pasteall.org/blend/552

Notes:
- Kazanbas, I've had to create a rna_scene_api.c here to hold some of the relevant functions. Hopefully this won't cause you too much pain when you do your next merge from 2.5 to your branch ;)
- I've noticed that there seem to be a few cases mentioned in the demo which don't totally work yet. I'll commit some fixes for those later.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
    branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
    branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation_api.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene_api.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-08-25 04:05:37 UTC (rev 22756)
@@ -207,12 +207,6 @@
 /* *********************************** */ 
 /* KeyingSet API */
 
-/* NOTES:
- * It is very likely that there will be two copies of the api - one for internal use,
- * and one 'operator' based wrapper of the internal API, which should allow for access
- * from Python/scripts so that riggers can automate the creation of KeyingSets for their rigs.
- */
-
 /* Finding Tools --------------------------- */
 
 /* Find the first path that matches the given criteria */
@@ -299,18 +293,25 @@
 	KS_Path *ksp;
 	
 	/* sanity checks */
-	if ELEM(NULL, ks, rna_path)
+	if ELEM(NULL, ks, rna_path) {
+		printf("ERROR: no Keying Set and/or RNA Path to add destination with \n");
 		return;
+	}
 	
 	/* ID is optional for relative KeyingSets, but is necessary for absolute KeyingSets */
 	if (id == NULL) {
-		if (ks->flag & KEYINGSET_ABSOLUTE)
+		if (ks->flag & KEYINGSET_ABSOLUTE) {
+			printf("ERROR: No ID provided for absolute destination. \n");
 			return;
+		}
 	}
 	
 	/* don't add if there is already a matching KS_Path in the KeyingSet */
-	if (BKE_keyingset_find_destination(ks, id, group_name, rna_path, array_index, groupmode))
+	if (BKE_keyingset_find_destination(ks, id, group_name, rna_path, array_index, groupmode)) {
+		if (G.f & G_DEBUG)
+			printf("ERROR: destination already exists in Keying Set \n");
 		return;
+	}
 	
 	/* allocate a new KeyingSet Path */
 	ksp= MEM_callocN(sizeof(KS_Path), "KeyingSet Path");
@@ -1263,6 +1264,7 @@
 			dummy_strip.act= adt->action;
 			dummy_strip.remap= adt->remap;
 			
+			/* action range is calculated taking F-Modifiers into account (which making new strips doesn't do due to the troublesome nature of that) */
 			calc_action_range(dummy_strip.act, &dummy_strip.actstart, &dummy_strip.actend, 1);
 			dummy_strip.start = dummy_strip.actstart;
 			dummy_strip.end = (IS_EQ(dummy_strip.actstart, dummy_strip.actend)) ?  (dummy_strip.actstart + 1.0f): (dummy_strip.actend);

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c	2009-08-25 04:05:37 UTC (rev 22756)
@@ -398,9 +398,6 @@
 	
 	WM_operatortype_append(ANIM_OT_add_driver_button);
 	WM_operatortype_append(ANIM_OT_remove_driver_button);
-	
-	WM_operatortype_append(ANIM_OT_keyingset_add_new);
-	WM_operatortype_append(ANIM_OT_keyingset_add_destination);
 }
 
 void ED_keymap_anim(wmWindowManager *wm)

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-08-25 04:05:37 UTC (rev 22756)
@@ -80,137 +80,6 @@
 /* ************************************************** */
 /* KEYING SETS - EDITING API  */
 
-/* Operators ------------------------------------------- */
-
-/* These operators are only provided for scripting/macro usage, not for direct
- * calling from the UI since they wrap some of the data-access API code for these
- * (defined in blenkernel) which have quite a few properties.
- */
-
-/* ----- */
-
-static int keyingset_add_destination_exec (bContext *C, wmOperator *op)
-{
-	PointerRNA ptr;
-	KeyingSet *ks= NULL;
-	ID *id= NULL;
-	char rna_path[256], group_name[64]; // xxx
-	short groupmode=0, flag=0;
-	int array_index=0;
-	
-	/* get settings from operator properties */
-	ptr = RNA_pointer_get(op->ptr, "keyingset");
-	if (ptr.data) 
-		ks= (KeyingSet *)ptr.data;
-	
-	ptr = RNA_pointer_get(op->ptr, "id");
-	if (ptr.data)
-		id= (ID *)ptr.data;
-	
-	groupmode= RNA_enum_get(op->ptr, "grouping_method");
-	RNA_string_get(op->ptr, "group_name", group_name);		
-	
-	RNA_string_get(op->ptr, "rna_path", rna_path);
-	array_index= RNA_int_get(op->ptr, "array_index");
-	
-	if (RNA_boolean_get(op->ptr, "entire_array"))
-		flag |= KSP_FLAG_WHOLE_ARRAY;
-	
-	/* if enough args are provided, call API method */
-	if (ks) {
-		BKE_keyingset_add_destination(ks, id, group_name, rna_path, array_index, flag, groupmode);
-		return OPERATOR_FINISHED;
-	}
-	else {
-		BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
-		return OPERATOR_CANCELLED;
-	}	
-}
-
-void ANIM_OT_keyingset_add_destination (wmOperatorType *ot)
-{
-	// XXX: this is also defined in rna_animation.c
-	static EnumPropertyItem prop_mode_grouping_items[] = {
-		{KSP_GROUP_NAMED, "NAMED", 0, "Named Group", ""},
-		{KSP_GROUP_NONE, "NONE", 0, "None", ""},
-		{KSP_GROUP_KSNAME, "KEYINGSET", 0, "Keying Set Name", ""},
-		{0, NULL, 0, NULL, NULL}};
-	
-	/* identifiers */
-	ot->name= "Add Keying Set Destination";
-	ot->idname= "ANIM_OT_keyingset_add_destination";
-	
-	/* callbacks */
-	ot->exec= keyingset_add_destination_exec;
-	ot->poll= ED_operator_scene_editable;
-	
-	/* props */
-		/* pointers */ // xxx - do we want to directly expose these?
-	RNA_def_pointer_runtime(ot->srna, "keyingset", &RNA_KeyingSet, "Keying Set", "Keying Set to add destination to.");
-	RNA_def_pointer_runtime(ot->srna, "id", &RNA_ID, "ID", "ID-block for the destination.");
-		/* grouping */
-	RNA_def_enum(ot->srna, "grouping_method", prop_mode_grouping_items, KSP_GROUP_NAMED, "Grouping Method", "Method used to define which Group-name to use.");
-	RNA_def_string(ot->srna, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
-		/* rna-path */
-	RNA_def_string(ot->srna, "rna_path", "", 256, "RNA-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
-	RNA_def_int(ot->srna, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX);
-		/* flags */
-	RNA_def_boolean(ot->srna, "entire_array", 1, "Entire Array", "hen an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used.");
-	
-}
- 
-/* ----- */
-
-static int keyingset_add_new_exec (bContext *C, wmOperator *op)
-{
-	Scene *sce= CTX_data_scene(C);
-	KeyingSet *ks= NULL;
-	short flag=0, keyingflag=0;
-	char name[64];
-	
-	/* get settings from operator properties */
-	RNA_string_get(op->ptr, "name", name);
-	
-	if (RNA_boolean_get(op->ptr, "absolute"))
-		flag |= KEYINGSET_ABSOLUTE;
-	if (RNA_boolean_get(op->ptr, "insertkey_needed"))
-		keyingflag |= INSERTKEY_NEEDED;
-	if (RNA_boolean_get(op->ptr, "insertkey_visual"))
-		keyingflag |= INSERTKEY_MATRIX;
-		
-	/* call the API func, and set the active keyingset index */
-	ks= BKE_keyingset_add(&sce->keyingsets, name, flag, keyingflag);
-	
-	if (ks) {
-		sce->active_keyingset= BLI_countlist(&sce->keyingsets);
-		return OPERATOR_FINISHED;
-	}
-	else {
-		BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
-		return OPERATOR_CANCELLED;
-	}
-}
-
-void ANIM_OT_keyingset_add_new (wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name= "Add Keying Set";
-	ot->idname= "ANIM_OT_keyingset_add_new";
-	
-	/* callbacks */
-	ot->exec= keyingset_add_new_exec;
-	ot->poll= ED_operator_scene_editable;
-	
-	/* props */
-		/* name */
-	RNA_def_string(ot->srna, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
-		/* flags */
-	RNA_def_boolean(ot->srna, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
-		/* keying flags */
-	RNA_def_boolean(ot->srna, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
-	RNA_def_boolean(ot->srna, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
-}
-
 /* UI API --------------------------------------------- */
 
 /* Build menu-string of available keying-sets (allocates memory for string)

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h	2009-08-25 04:05:37 UTC (rev 22756)
@@ -154,15 +154,6 @@
 /* Initialise builtin KeyingSets on startup */
 void init_builtin_keyingsets(void);
 
-/* -------- */
-
-/* KeyingSet Editing Operators:
- *	These can add a new KeyingSet and/or add 'destinations' to the KeyingSets,
- *	acting as a means by which they can be added outside the Outliner.
- */
-void ANIM_OT_keyingset_add_new(struct wmOperatorType *ot);
-void ANIM_OT_keyingset_add_destination(struct wmOperatorType *ot);
-
 /* ************ Drivers ********************** */
 
 /* Main Driver Management API calls:

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h	2009-08-25 04:05:37 UTC (rev 22756)
@@ -41,6 +41,8 @@
 extern EnumPropertyItem beztriple_handle_type_items[];
 extern EnumPropertyItem beztriple_interpolation_mode_items[];
 
+extern EnumPropertyItem keyingset_path_grouping_items[];
+
 extern EnumPropertyItem fmodifier_type_items[];
 
 extern EnumPropertyItem nla_mode_extend_items[];

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-08-25 04:05:37 UTC (rev 22756)
@@ -1942,7 +1942,7 @@
 	{"rna_ID.c", NULL, RNA_def_ID},
 	{"rna_texture.c", NULL, RNA_def_texture},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list