[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28011] trunk/blender: Animation Editors: Select Linked Operator

Joshua Leung aligorith at gmail.com
Mon Apr 5 13:47:56 CEST 2010


Revision: 28011
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28011
Author:   aligorith
Date:     2010-04-05 13:47:55 +0200 (Mon, 05 Apr 2010)

Log Message:
-----------
Animation Editors: Select Linked Operator

This operator selects all the keyframes in the same F-Curve as a selected keyframe.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_dopesheet.py
    trunk/blender/release/scripts/ui/space_graph.py
    trunk/blender/source/blender/editors/space_action/action_intern.h
    trunk/blender/source/blender/editors/space_action/action_ops.c
    trunk/blender/source/blender/editors/space_action/action_select.c
    trunk/blender/source/blender/editors/space_graph/graph_intern.h
    trunk/blender/source/blender/editors/space_graph/graph_ops.c
    trunk/blender/source/blender/editors/space_graph/graph_select.c

Modified: trunk/blender/release/scripts/ui/space_dopesheet.py
===================================================================
--- trunk/blender/release/scripts/ui/space_dopesheet.py	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/release/scripts/ui/space_dopesheet.py	2010-04-05 11:47:55 UTC (rev 28011)
@@ -124,7 +124,10 @@
         layout.operator("action.select_more")
         layout.operator("action.select_less")
 
+        layout.separator()
+        layout.operator("action.select_linked")
 
+
 class DOPESHEET_MT_channel(bpy.types.Menu):
     bl_label = "Channel"
 

Modified: trunk/blender/release/scripts/ui/space_graph.py
===================================================================
--- trunk/blender/release/scripts/ui/space_graph.py	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/release/scripts/ui/space_graph.py	2010-04-05 11:47:55 UTC (rev 28011)
@@ -126,6 +126,9 @@
         layout.separator()
         layout.operator("graph.select_more")
         layout.operator("graph.select_less")
+		
+        layout.separator()
+        layout.operator("graph.select_linked")
 
 
 class GRAPH_MT_channel(bpy.types.Menu):

Modified: trunk/blender/source/blender/editors/space_action/action_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_intern.h	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_intern.h	2010-04-05 11:47:55 UTC (rev 28011)
@@ -56,6 +56,7 @@
 void ACTION_OT_select_all_toggle(struct wmOperatorType *ot);
 void ACTION_OT_select_border(struct wmOperatorType *ot);
 void ACTION_OT_select_column(struct wmOperatorType *ot);
+void ACTION_OT_select_linked(struct wmOperatorType *ot);
 void ACTION_OT_select_more(struct wmOperatorType *ot);
 void ACTION_OT_select_less(struct wmOperatorType *ot);
 void ACTION_OT_clickselect(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_action/action_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_ops.c	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_ops.c	2010-04-05 11:47:55 UTC (rev 28011)
@@ -119,7 +119,10 @@
 	WM_keymap_add_item(keymap, "ACTION_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "ACTION_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
 	
+		/* select linekd */
+	WM_keymap_add_item(keymap, "ACTION_OT_select_linked", LKEY, KM_PRESS, 0, 0);
 	
+	
 	/* action_edit.c */
 		/* snap - current frame to selected keys */
 		// TODO: maybe since this is called jump, we're better to have it on <something>-J?

Modified: trunk/blender/source/blender/editors/space_action/action_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_select.c	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_action/action_select.c	2010-04-05 11:47:55 UTC (rev 28011)
@@ -558,6 +558,61 @@
 	ot->prop= RNA_def_enum(ot->srna, "mode", prop_column_select_types, 0, "Mode", "");
 }
 
+/* ******************** Select Linked Operator *********************** */
+
+static int actkeys_select_linked_exec (bContext *C, wmOperator *op)
+{
+	bAnimContext ac;
+	
+	ListBase anim_data= {NULL, NULL};
+	bAnimListElem *ale;
+	int filter;
+	
+	KeyframeEditFunc ok_cb = ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+	KeyframeEditFunc sel_cb = ANIM_editkeyframes_select(SELECT_ADD);
+	
+	/* get editor data */
+	if (ANIM_animdata_get_context(C, &ac) == 0)
+		return OPERATOR_CANCELLED;
+	
+	/* loop through all of the keys and select additional keyframes based on these */
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY);
+	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+	
+	for (ale= anim_data.first; ale; ale= ale->next) {
+		FCurve *fcu= (FCurve *)ale->key_data;
+		
+		/* check if anything selected? */
+		if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, ok_cb, NULL)) {
+			/* select every keyframe in this curve then */
+			ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL);
+		}
+	}
+	
+	/* Cleanup */
+	BLI_freelistN(&anim_data);
+	
+	/* set notifier that keyframe selection has changed */
+	WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL);
+	
+	return OPERATOR_FINISHED;
+}
+
+void ACTION_OT_select_linked (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Select Linked";
+	ot->idname= "ACTION_OT_select_linked";
+	ot->description = "Select keyframes occurring the same F-Curves as selected ones";
+	
+	/* api callbacks */
+	ot->exec= actkeys_select_linked_exec;
+	ot->poll= ED_operator_action_active;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
+}
+
 /* ******************** Select More/Less Operators *********************** */
 
 /* Common code to perform selection */

Modified: trunk/blender/source/blender/editors/space_graph/graph_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_intern.h	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_intern.h	2010-04-05 11:47:55 UTC (rev 28011)
@@ -63,6 +63,7 @@
 void GRAPH_OT_select_all_toggle(struct wmOperatorType *ot);
 void GRAPH_OT_select_border(struct wmOperatorType *ot);
 void GRAPH_OT_select_column(struct wmOperatorType *ot);
+void GRAPH_OT_select_linked(struct wmOperatorType *ot);
 void GRAPH_OT_select_more(struct wmOperatorType *ot);
 void GRAPH_OT_select_less(struct wmOperatorType *ot);
 void GRAPH_OT_clickselect(struct wmOperatorType *ot);
@@ -149,6 +150,7 @@
 
 /* ***************************************** */
 /* graph_buttons.c */
+
 void GRAPH_OT_properties(struct wmOperatorType *ot);
 void graph_buttons_register(struct ARegionType *art);
 

Modified: trunk/blender/source/blender/editors/space_graph/graph_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_ops.c	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_ops.c	2010-04-05 11:47:55 UTC (rev 28011)
@@ -231,6 +231,7 @@
 	WM_operatortype_append(GRAPH_OT_select_all_toggle);
 	WM_operatortype_append(GRAPH_OT_select_border);
 	WM_operatortype_append(GRAPH_OT_select_column);
+	WM_operatortype_append(GRAPH_OT_select_linked);
 	WM_operatortype_append(GRAPH_OT_select_more);
 	WM_operatortype_append(GRAPH_OT_select_less);
 	
@@ -318,7 +319,10 @@
 	WM_keymap_add_item(keymap, "GRAPH_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "GRAPH_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
 	
+		/* select linked */
+	WM_keymap_add_item(keymap, "GRAPH_OT_select_linked", LKEY, KM_PRESS, 0, 0);
 	
+	
 	/* graph_edit.c */
 		/* snap - current frame to selected keys */
 		// TODO: maybe since this is called jump, we're better to have it on <something>-J?

Modified: trunk/blender/source/blender/editors/space_graph/graph_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_select.c	2010-04-05 11:22:49 UTC (rev 28010)
+++ trunk/blender/source/blender/editors/space_graph/graph_select.c	2010-04-05 11:47:55 UTC (rev 28011)
@@ -547,6 +547,61 @@
 	ot->prop= RNA_def_enum(ot->srna, "mode", prop_column_select_types, 0, "Mode", "");
 }
 
+/* ******************** Select Linked Operator *********************** */
+
+static int graphkeys_select_linked_exec (bContext *C, wmOperator *op)
+{
+	bAnimContext ac;
+	
+	ListBase anim_data= {NULL, NULL};
+	bAnimListElem *ale;
+	int filter;
+	
+	KeyframeEditFunc ok_cb = ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+	KeyframeEditFunc sel_cb = ANIM_editkeyframes_select(SELECT_ADD);
+	
+	/* get editor data */
+	if (ANIM_animdata_get_context(C, &ac) == 0)
+		return OPERATOR_CANCELLED;
+	
+	/* loop through all of the keys and select additional keyframes based on these */
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY);
+	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+	
+	for (ale= anim_data.first; ale; ale= ale->next) {
+		FCurve *fcu= (FCurve *)ale->key_data;
+		
+		/* check if anything selected? */
+		if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, ok_cb, NULL)) {
+			/* select every keyframe in this curve then */
+			ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL);
+		}
+	}
+	
+	/* Cleanup */
+	BLI_freelistN(&anim_data);
+	
+	/* set notifier that keyframe selection has changed */
+	WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL);
+	
+	return OPERATOR_FINISHED;
+}
+
+void GRAPH_OT_select_linked (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Select Linked";
+	ot->idname= "GRAPH_OT_select_linked";
+	ot->description = "Select keyframes occurring the same F-Curves as selected ones";
+	
+	/* api callbacks */
+	ot->exec= graphkeys_select_linked_exec;
+	ot->poll= graphop_visible_keyframes_poll;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
+}
+
 /* ******************** Select More/Less Operators *********************** */
 
 /* Common code to perform selection */





More information about the Bf-blender-cvs mailing list