[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