[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44640] trunk/blender/source/blender: Movie clip editor: implemented border select operator for curves view

Sergey Sharybin sergey.vfx at gmail.com
Sun Mar 4 20:34:09 CET 2012


Revision: 44640
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44640
Author:   nazgul
Date:     2012-03-04 19:34:01 +0000 (Sun, 04 Mar 2012)
Log Message:
-----------
Movie clip editor: implemented border select operator for curves view

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_clip/clip_graph_ops.c
    trunk/blender/source/blender/editors/space_clip/clip_intern.h
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/space_clip/clip_graph_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_graph_ops.c	2012-03-04 16:36:31 UTC (rev 44639)
+++ trunk/blender/source/blender/editors/space_clip/clip_graph_ops.c	2012-03-04 19:34:01 UTC (rev 44640)
@@ -37,6 +37,7 @@
 #include "BLI_utildefines.h"
 #include "BLI_math.h"
 #include "BLI_listbase.h"
+#include "BLI_rect.h"
 
 #include "BKE_context.h"
 #include "BKE_movieclip.h"
@@ -304,6 +305,92 @@
 		"Extend", "Extend selection rather than clearing the existing selection");
 }
 
+/********************** border select operator *********************/
+
+typedef struct BorderSelectuserData {
+	rctf rect;
+	int change, mode, extend;
+} BorderSelectuserData;
+
+static void border_select_cb(void *userdata, MovieTrackingTrack *UNUSED(track),
+                             MovieTrackingMarker *marker, int coord, float val)
+{
+	BorderSelectuserData *data = (BorderSelectuserData *) userdata;
+
+	if (BLI_in_rctf(&data->rect, marker->framenr, val)) {
+		int flag = 0;
+
+		if (coord == 0)
+			flag = MARKER_GRAPH_SEL_X;
+		else
+			flag = MARKER_GRAPH_SEL_Y;
+
+		if (data->mode == GESTURE_MODAL_SELECT)
+			marker->flag |= flag;
+		else
+			marker->flag &= ~flag;
+
+		data->change = TRUE;
+	}
+	else if (!data->extend) {
+		marker->flag&= ~(MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
+	}
+}
+
+static int border_select_graph_exec(bContext *C, wmOperator *op)
+{
+	SpaceClip *sc = CTX_wm_space_clip(C);
+	ARegion *ar = CTX_wm_region(C);
+	MovieClip *clip = ED_space_clip(sc);
+	MovieTracking *tracking= &clip->tracking;
+	MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking);
+	BorderSelectuserData userdata;
+	rcti rect;
+
+	/* get rectangle from operator */
+	rect.xmin = RNA_int_get(op->ptr, "xmin");
+	rect.ymin = RNA_int_get(op->ptr, "ymin");
+	rect.xmax = RNA_int_get(op->ptr, "xmax");
+	rect.ymax = RNA_int_get(op->ptr, "ymax");
+
+	UI_view2d_region_to_view(&ar->v2d, rect.xmin, rect.ymin, &userdata.rect.xmin, &userdata.rect.ymin);
+	UI_view2d_region_to_view(&ar->v2d, rect.xmax, rect.ymax, &userdata.rect.xmax, &userdata.rect.ymax);
+
+	userdata.change = FALSE;
+	userdata.mode = RNA_int_get(op->ptr, "gesture_mode");
+	userdata.extend = RNA_boolean_get(op->ptr, "extend");
+
+	clip_graph_tracking_values_iterate_track(sc, act_track, &userdata, border_select_cb, NULL, NULL);
+
+	if (userdata.change) {
+		WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL);
+
+		return OPERATOR_FINISHED;
+	}
+
+	return OPERATOR_CANCELLED;
+}
+
+void CLIP_OT_graph_select_border(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Border Select";
+	ot->description = "Select curve points using border selection";
+	ot->idname = "CLIP_OT_graph_select_border";
+
+	/* api callbacks */
+	ot->invoke = WM_border_select_invoke;
+	ot->exec = border_select_graph_exec;
+	ot->modal = WM_border_select_modal;
+	ot->poll = ED_space_clip_graph_poll;
+
+	/* flags */
+	ot->flag = OPTYPE_UNDO;
+
+	/* properties */
+	WM_operator_properties_gesture_border(ot, TRUE);
+}
+
 /******************** delete curve operator ********************/
 
 static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))

Modified: trunk/blender/source/blender/editors/space_clip/clip_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_intern.h	2012-03-04 16:36:31 UTC (rev 44639)
+++ trunk/blender/source/blender/editors/space_clip/clip_intern.h	2012-03-04 19:34:01 UTC (rev 44640)
@@ -58,6 +58,7 @@
 void ED_clip_graph_center_current_frame(struct Scene *scene, struct ARegion *ar);
 
 void CLIP_OT_graph_select(struct wmOperatorType *ot);
+void CLIP_OT_graph_select_border(struct wmOperatorType *ot);
 void CLIP_OT_graph_delete_curve(struct wmOperatorType *ot);
 void CLIP_OT_graph_delete_knot(struct wmOperatorType *ot);
 void CLIP_OT_graph_view_all(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_clip/space_clip.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-03-04 16:36:31 UTC (rev 44639)
+++ trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-03-04 19:34:01 UTC (rev 44640)
@@ -370,6 +370,7 @@
 
 	/* graph editing */
 	WM_operatortype_append(CLIP_OT_graph_select);
+	WM_operatortype_append(CLIP_OT_graph_select_border);
 	WM_operatortype_append(CLIP_OT_graph_delete_curve);
 	WM_operatortype_append(CLIP_OT_graph_delete_knot);
 	WM_operatortype_append(CLIP_OT_graph_view_all);
@@ -553,6 +554,8 @@
 	kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
 	RNA_boolean_set(kmi->ptr, "extend", TRUE);
 
+	WM_keymap_add_item(keymap, "CLIP_OT_graph_select_border", BKEY, KM_PRESS, 0, 0);
+
 	/* delete */
 	WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", DELKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", XKEY, KM_PRESS, 0, 0);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-03-04 16:36:31 UTC (rev 44639)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-03-04 19:34:01 UTC (rev 44640)
@@ -3835,6 +3835,7 @@
 	WM_modalkeymap_assign(keymap, "SEQUENCER_OT_view_ghost_border");
 	WM_modalkeymap_assign(keymap, "UV_OT_select_border");
 	WM_modalkeymap_assign(keymap, "CLIP_OT_select_border");
+	WM_modalkeymap_assign(keymap, "CLIP_OT_graph_select_border");
 	WM_modalkeymap_assign(keymap, "VIEW2D_OT_zoom_border");
 	WM_modalkeymap_assign(keymap, "VIEW3D_OT_clip_border");
 	WM_modalkeymap_assign(keymap, "VIEW3D_OT_render_border");




More information about the Bf-blender-cvs mailing list