[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22985] branches/blender2.5/blender/source /blender: Keying Sets: Added options to add/ remove properties from the active Keying Set to the RMB menu ( and also via KKEY and ALT-K respectively)

Joshua Leung aligorith at gmail.com
Fri Sep 4 09:26:32 CEST 2009


Revision: 22985
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22985
Author:   aligorith
Date:     2009-09-04 09:26:32 +0200 (Fri, 04 Sep 2009)

Log Message:
-----------
Keying Sets: Added options to add/remove properties from the active Keying Set to the RMB menu (and also via KKEY and ALT-K respectively)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h
    branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
    branches/blender2.5/blender/source/blender/editors/animation/drivers.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/editors/interface/interface_anim.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-09-04 07:26:32 UTC (rev 22985)
@@ -239,7 +239,7 @@
 		if ((ksp->rna_path==0) || strcmp(rna_path, ksp->rna_path))
 			eq_path= 0;
 			
-		/* index */
+		/* index - need to compare whole-array setting too... */
 		if (ksp->array_index != array_index)
 			eq_index= 0;
 			

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h	2009-09-04 07:26:32 UTC (rev 22985)
@@ -1,18 +1,42 @@
-/* Testing code for 2.5 animation system 
- * Copyright 2009, Joshua Leung
+/**
+ * $Id$
+ *
+ * ***** 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., 59 Temple Place * Suite 330, Boston, MA  02111*1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009, Blender Foundation, Joshua Leung
+ * This is a new part of Blender (with some old code)
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
  */
  
 #ifndef ANIM_INTERN_H
 #define ANIM_INTERN_H
 
-
 /* KeyingSets/Keyframing Interface ------------- */
 
 /* list of builtin KeyingSets (defined in keyingsets.c) */
 extern ListBase builtin_keyingsets;
 
+/* for builtin keyingsets - context poll */
 short keyingset_context_ok_poll(bContext *C, KeyingSet *ks);
 
+/* Main KeyingSet operations API call */
 short modifykey_get_context_data (bContext *C, ListBase *dsources, KeyingSet *ks);
 
 #endif // ANIM_INTERN_H

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c	2009-09-04 07:26:32 UTC (rev 22985)
@@ -381,13 +381,14 @@
 
 void ED_operatortypes_anim(void)
 {
+	/* Animation Editors only -------------------------- */
 	WM_operatortype_append(ANIM_OT_change_frame);
 	WM_operatortype_append(ANIM_OT_time_toggle);
 	
 	WM_operatortype_append(ANIM_OT_previewrange_set);
 	WM_operatortype_append(ANIM_OT_previewrange_clear);
 	
-		// XXX this is used all over... maybe for screen instead?
+	/* Entire UI --------------------------------------- */
 	WM_operatortype_append(ANIM_OT_insert_keyframe);
 	WM_operatortype_append(ANIM_OT_delete_keyframe);
 	WM_operatortype_append(ANIM_OT_insert_keyframe_menu);
@@ -398,6 +399,9 @@
 	
 	WM_operatortype_append(ANIM_OT_add_driver_button);
 	WM_operatortype_append(ANIM_OT_remove_driver_button);
+	
+	WM_operatortype_append(ANIM_OT_add_keyingset_button);
+	WM_operatortype_append(ANIM_OT_remove_keyingset_button);
 }
 
 void ED_keymap_anim(wmWindowManager *wm)

Modified: branches/blender2.5/blender/source/blender/editors/animation/drivers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/drivers.c	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/editors/animation/drivers.c	2009-09-04 07:26:32 UTC (rev 22985)
@@ -281,7 +281,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	/* properties */
-	RNA_def_boolean(ot->srna, "all", 1, "All", "Insert a keyframe for all element of the array.");
+	RNA_def_boolean(ot->srna, "all", 1, "All", "Create drivers for all elements of the array.");
 }
 
 /* Remove Driver Button Operator ------------------------ */
@@ -344,7 +344,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	/* properties */
-	RNA_def_boolean(ot->srna, "all", 1, "All", "Delete keyfames from all elements of the array.");
+	RNA_def_boolean(ot->srna, "all", 1, "All", "Delete drivers for all elements of the array.");
 }
 
 /* ************************************************** */

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-09-04 07:26:32 UTC (rev 22985)
@@ -78,6 +78,171 @@
 #include "anim_intern.h"
 
 /* ************************************************** */
+/* KEYING SETS - OPERATORS (for use in UI menus) */
+
+/* Add to KeyingSet Button Operator ------------------------ */
+
+static int add_keyingset_button_exec (bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	KeyingSet *ks = NULL;
+	PropertyRNA *prop= NULL;
+	PointerRNA ptr;
+	char *path = NULL;
+	short success= 0;
+	int index=0, pflag=0;
+	int all= RNA_boolean_get(op->ptr, "all");
+	
+	/* verify the Keying Set to use:
+	 *	- use the active one for now (more control over this can be added later)
+	 *	- add a new one if it doesn't exist 
+	 */
+	if (scene->active_keyingset == 0) {
+		short flag=0, keyingflag=0;
+		
+		/* validate flags 
+		 *	- absolute KeyingSets should be created by default
+		 */
+		flag |= KEYINGSET_ABSOLUTE;
+		
+		if (IS_AUTOKEY_FLAG(AUTOMATKEY)) 
+			keyingflag |= INSERTKEY_MATRIX;
+		if (IS_AUTOKEY_FLAG(INSERTNEEDED)) 
+			keyingflag |= INSERTKEY_NEEDED;
+			
+		/* call the API func, and set the active keyingset index */
+		ks= BKE_keyingset_add(&scene->keyingsets, "ButtonKeyingSet", flag, keyingflag);
+		
+		scene->active_keyingset= BLI_countlist(&scene->keyingsets);
+	}
+	else
+		ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
+	
+	/* try to add to keyingset using property retrieved from UI */
+	memset(&ptr, 0, sizeof(PointerRNA));
+	uiAnimContextProperty(C, &ptr, &prop, &index);
+	
+	/* check if property is able to be added */
+	if (ptr.data && prop && RNA_property_animateable(ptr.data, prop)) {
+		path= RNA_path_from_ID_to_property(&ptr, prop);
+		
+		if (path) {
+			/* set flags */
+			if (all) 
+				pflag |= KSP_FLAG_WHOLE_ARRAY;
+				
+			/* add path to this setting */
+			BKE_keyingset_add_destination(ks, ptr.id.data, NULL, path, index, pflag, KSP_GROUP_KSNAME);
+			
+			/* free the temp path created */
+			MEM_freeN(path);
+		}
+	}
+	
+	if (success) {
+		/* send updates */
+		ED_anim_dag_flush_update(C);	
+		
+		/* for now, only send ND_KEYS for KeyingSets */
+		WM_event_add_notifier(C, ND_KEYS, NULL);
+	}
+	
+	return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_add_keyingset_button (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Add to Keying Set";
+	ot->idname= "ANIM_OT_add_keyingset_button";
+	
+	/* callbacks */
+	ot->exec= add_keyingset_button_exec; 
+	//op->poll= ???
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	/* properties */
+	RNA_def_boolean(ot->srna, "all", 1, "All", "Add all elements of the array to a Keying Set.");
+}
+
+/* Remove from KeyingSet Button Operator ------------------------ */
+
+static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	KeyingSet *ks = NULL;
+	PropertyRNA *prop= NULL;
+	PointerRNA ptr;
+	char *path = NULL;
+	short success= 0;
+	int index=0;
+	
+	/* verify the Keying Set to use:
+	 *	- use the active one for now (more control over this can be added later)
+	 *	- return error if it doesn't exist
+	 */
+	if (scene->active_keyingset == 0) {
+		BKE_report(op->reports, RPT_ERROR, "No active Keying Set to remove property from");
+		return OPERATOR_CANCELLED;
+	}
+	else
+		ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
+	
+	/* try to add to keyingset using property retrieved from UI */
+	memset(&ptr, 0, sizeof(PointerRNA));
+	uiAnimContextProperty(C, &ptr, &prop, &index);
+
+	if (ptr.data && prop) {
+		path= RNA_path_from_ID_to_property(&ptr, prop);
+		
+		if (path) {
+			KS_Path *ksp;
+			
+			/* try to find a path matching this description */
+			ksp= BKE_keyingset_find_destination(ks, ptr.id.data, ks->name, path, index, KSP_GROUP_KSNAME);
+			
+			if (ksp) {
+				/* just free it... */
+				MEM_freeN(ksp->rna_path);
+				BLI_freelinkN(&ks->paths, ksp);
+				
+				success= 1;
+			}
+			
+			/* free temp path used */
+			MEM_freeN(path);
+		}
+	}
+	
+	
+	if (success) {
+		/* send updates */
+		ED_anim_dag_flush_update(C);	
+		
+		/* for now, only send ND_KEYS for KeyingSets */
+		WM_event_add_notifier(C, ND_KEYS, NULL);
+	}
+	
+	return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_remove_keyingset_button (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Remove from Keying Set";
+	ot->idname= "ANIM_OT_remove_keyingset_button";
+	
+	/* callbacks */
+	ot->exec= remove_keyingset_button_exec; 
+	//op->poll= ???
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* ************************************************** */
 /* KEYING SETS - EDITING API  */
 
 /* UI API --------------------------------------------- */

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h	2009-09-04 06:55:01 UTC (rev 22984)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h	2009-09-04 07:26:32 UTC (rev 22985)
@@ -155,6 +155,12 @@
 /* Initialise builtin KeyingSets on startup */
 void init_builtin_keyingsets(void);
 
+/* -------- */
+
+/* KeyingSet managment operators for UI buttons. */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list