[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47204] branches/soc-2011-tomato/source/ blender: circle select for mask view (Ckey)

Campbell Barton ideasman42 at gmail.com
Wed May 30 08:33:44 CEST 2012


Revision: 47204
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47204
Author:   campbellbarton
Date:     2012-05-30 06:33:44 +0000 (Wed, 30 May 2012)
Log Message:
-----------
circle select for mask view (Ckey)

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/mask/mask_editor.c
    branches/soc-2011-tomato/source/blender/editors/mask/mask_select.c
    branches/soc-2011-tomato/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/soc-2011-tomato/source/blender/editors/mask/mask_editor.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/mask_editor.c	2012-05-30 06:07:26 UTC (rev 47203)
+++ branches/soc-2011-tomato/source/blender/editors/mask/mask_editor.c	2012-05-30 06:33:44 UTC (rev 47204)
@@ -202,6 +202,7 @@
 	WM_operatortype_append(MASK_OT_select_all);
 	WM_operatortype_append(MASK_OT_select_border);
 	WM_operatortype_append(MASK_OT_select_lasso);
+	WM_operatortype_append(MASK_OT_select_circle);
 
 	/* hide/reveal */
 	WM_operatortype_append(MASK_OT_hide_view_clear);
@@ -253,6 +254,7 @@
 	RNA_enum_set(kmi->ptr, "action", SEL_INVERT);
 
 	WM_keymap_add_item(keymap, "MASK_OT_select_border", BKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "MASK_OT_select_circle", CKEY, KM_PRESS, 0, 0);
 
 	kmi = WM_keymap_add_item(keymap, "MASK_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_ALT, 0);
 	RNA_boolean_set(kmi->ptr, "deselect", FALSE);

Modified: branches/soc-2011-tomato/source/blender/editors/mask/mask_select.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/mask_select.c	2012-05-30 06:07:26 UTC (rev 47203)
+++ branches/soc-2011-tomato/source/blender/editors/mask/mask_select.c	2012-05-30 06:33:44 UTC (rev 47204)
@@ -145,15 +145,17 @@
 	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
 		MaskSpline *spline;
 
-		if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
-			continue;
-		}
-
 		for (spline = maskobj->splines.first; spline; spline = spline->next) {
 			int i;
 
 			spline->flag &= ~SELECT;
 
+			/* intentionally _dont_ do this in the maskobj loop
+			 * so we clear flags on all splines */
+			if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+				continue;
+			}
+
 			for (i = 0; i < spline->tot_point; i++) {
 				MaskSplinePoint *cur_point = &spline->points[i];
 
@@ -373,6 +375,10 @@
 	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
 		MaskSpline *spline;
 
+		if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+			continue;
+		}
+
 		for (spline = maskobj->splines.first; spline; spline = spline->next) {
 			for (i = 0; i < spline->tot_point; i++) {
 				MaskSplinePoint *point = &spline->points[i];
@@ -380,18 +386,16 @@
 				/* TODO: handles? */
 				/* TODO: uw? */
 
-				if (1) { /* can the point be selected? */
-					if (BLI_in_rctf(&rectf, point->bezt.vec[1][0], point->bezt.vec[1][1])) {
-						BKE_mask_point_select_set(point, mode == GESTURE_MODAL_SELECT);
-						BKE_mask_point_select_set_handle(point, mode == GESTURE_MODAL_SELECT);
-					}
-					else if (!extend) {
-						BKE_mask_point_select_set(point, FALSE);
-						BKE_mask_point_select_set_handle(point, FALSE);
-					}
+				if (BLI_in_rctf(&rectf, point->bezt.vec[1][0], point->bezt.vec[1][1])) {
+					BKE_mask_point_select_set(point, mode == GESTURE_MODAL_SELECT);
+					BKE_mask_point_select_set_handle(point, mode == GESTURE_MODAL_SELECT);
+				}
+				else if (!extend) {
+					BKE_mask_point_select_set(point, FALSE);
+					BKE_mask_point_select_set_handle(point, FALSE);
+				}
 
-					change = TRUE;
-				}
+				change = TRUE;
 			}
 		}
 	}
@@ -443,6 +447,10 @@
 	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
 		MaskSpline *spline;
 
+		if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+			continue;
+		}
+
 		for (spline = maskobj->splines.first; spline; spline = spline->next) {
 			for (i = 0; i < spline->tot_point; i++) {
 				MaskSplinePoint *point = &spline->points[i];
@@ -519,28 +527,27 @@
 	RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first");
 }
 
-#if 0
 /********************** circle select operator *********************/
 
-static int marker_inside_ellipse(MovieTrackingMarker *marker, float offset[2], float ellipse[2])
+static int mask_spline_point_inside_ellipse(MaskSplinePoint *point, float offset[2], float ellipse[2])
 {
 	/* normalized ellipse: ell[0] = scaleX, ell[1] = scaleY */
 	float x, y;
 
-	x = (marker->pos[0] - offset[0])*ellipse[0];
-	y = (marker->pos[1] - offset[1])*ellipse[1];
+	x = (point->bezt.vec[1][0] - offset[0]) * ellipse[0];
+	y = (point->bezt.vec[1][1] - offset[1]) * ellipse[1];
 
 	return x*x + y*y < 1.0f;
 }
 
 static int circle_select_exec(bContext *C, wmOperator *op)
 {
+	Mask *mask = CTX_data_edit_mask(C);
+	MaskObject *maskobj;
+	int i;
+
 	SpaceClip *sc = CTX_wm_space_clip(C);
-	MovieClip *clip = ED_space_clip(sc);
 	ARegion *ar = CTX_wm_region(C);
-	MovieTracking *tracking = &clip->tracking;
-	MovieTrackingTrack *track;
-	ListBase *tracksbase = BKE_tracking_get_tracks(tracking);
 	int x, y, radius, width, height, mode, change = FALSE;
 	float zoomx, zoomy, offset[2], ellipse[2];
 
@@ -551,29 +558,37 @@
 
 	mode = RNA_int_get(op->ptr, "gesture_mode");
 
+	/* TODO - make generic! - this is SpaceClip only! */
 	/* compute ellipse and position in unified coordinates */
 	ED_space_clip_size(sc, &width, &height);
 	ED_space_clip_zoom(sc, ar, &zoomx, &zoomy);
+	width = height = MAX2(width, height);
 
 	ellipse[0] = width * zoomx / radius;
 	ellipse[1] = height * zoomy / radius;
 
-	ED_clip_point_stable_pos(C, x, y, &offset[0], &offset[1]);
+	ED_mask_point_pos(C, x, y, &offset[0], &offset[1]);
 
-	/* do selection */
-	track = tracksbase->first;
-	while (track) {
-		if ((track->flag & TRACK_HIDDEN) == 0) {
-			MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr);
+	/* do actual selection */
+	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
+		MaskSpline *spline;
 
-			if (MARKER_VISIBLE(sc, track, marker) && marker_inside_ellipse(marker, offset, ellipse)) {
-				BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode != GESTURE_MODAL_SELECT);
+		if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+			continue;
+		}
 
-				change = TRUE;
+		for (spline = maskobj->splines.first; spline; spline = spline->next) {
+			for (i = 0; i < spline->tot_point; i++) {
+				MaskSplinePoint *point = &spline->points[i];
+
+				if (mask_spline_point_inside_ellipse(point, offset, ellipse)) {
+					BKE_mask_point_select_set(point, mode == GESTURE_MODAL_SELECT);
+					BKE_mask_point_select_set_handle(point, mode == GESTURE_MODAL_SELECT);
+
+					change = TRUE;
+				}
 			}
 		}
-
-		track = track->next;
 	}
 
 	if (change) {
@@ -609,5 +624,3 @@
 	RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX);
 	RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX);
 }
-
-#endif

Modified: branches/soc-2011-tomato/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/soc-2011-tomato/source/blender/windowmanager/intern/wm_operators.c	2012-05-30 06:07:26 UTC (rev 47203)
+++ branches/soc-2011-tomato/source/blender/windowmanager/intern/wm_operators.c	2012-05-30 06:33:44 UTC (rev 47204)
@@ -3853,6 +3853,7 @@
 	WM_modalkeymap_assign(keymap, "VIEW3D_OT_select_circle");
 	WM_modalkeymap_assign(keymap, "UV_OT_circle_select");
 	WM_modalkeymap_assign(keymap, "CLIP_OT_select_circle");
+	WM_modalkeymap_assign(keymap, "MASK_OT_select_circle");
 
 }
 




More information about the Bf-blender-cvs mailing list