[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46878] branches/soc-2011-tomato/source/ blender/editors/mask: move select operations into their own file

Campbell Barton ideasman42 at gmail.com
Tue May 22 12:48:29 CEST 2012


Revision: 46878
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46878
Author:   campbellbarton
Date:     2012-05-22 10:48:29 +0000 (Tue, 22 May 2012)
Log Message:
-----------
move select operations into their own file

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/mask/CMakeLists.txt
    branches/soc-2011-tomato/source/blender/editors/mask/mask_intern.h
    branches/soc-2011-tomato/source/blender/editors/mask/mask_ops.c
    branches/soc-2011-tomato/source/blender/editors/mask/mask_relationships.c

Added Paths:
-----------
    branches/soc-2011-tomato/source/blender/editors/mask/mask_select.c

Modified: branches/soc-2011-tomato/source/blender/editors/mask/CMakeLists.txt
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/CMakeLists.txt	2012-05-22 10:10:14 UTC (rev 46877)
+++ branches/soc-2011-tomato/source/blender/editors/mask/CMakeLists.txt	2012-05-22 10:48:29 UTC (rev 46878)
@@ -41,6 +41,7 @@
 	mask_editor.c
 	mask_ops.c
 	mask_relationships.c
+	mask_select.c
 
 	mask_intern.h
 )

Modified: branches/soc-2011-tomato/source/blender/editors/mask/mask_intern.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/mask_intern.h	2012-05-22 10:10:14 UTC (rev 46877)
+++ branches/soc-2011-tomato/source/blender/editors/mask/mask_intern.h	2012-05-22 10:48:29 UTC (rev 46878)
@@ -47,19 +47,37 @@
 void MASK_OT_add_feather_vertex(struct wmOperatorType *ot);
 void MASK_OT_cyclic_toggle(struct wmOperatorType *ot);
 
-void MASK_OT_select(struct wmOperatorType *ot);
-void MASK_OT_select_all(struct wmOperatorType *ot);
-
 void MASK_OT_slide_point(struct wmOperatorType *ot);
 
 void MASK_OT_delete(struct wmOperatorType *ot);
 
 void MASK_OT_handle_type_set(struct wmOperatorType *ot);
 
+int ED_mask_feather_find_nearest(
+        struct bContext *C, struct Mask *mask, float normal_co[2], int threshold,
+        struct MaskObject **maskobj_r, struct MaskSpline **spline_r, struct MaskSplinePoint **point_r,
+        struct MaskSplinePointUW **uw_r, float *score);
+
+struct MaskSplinePoint *ED_mask_point_find_nearest(
+        struct bContext *C, struct Mask *mask, float normal_co[2], int threshold,
+        struct MaskObject **maskobj_r, struct MaskSpline **spline_r, int *is_handle_r,
+        float *score);
+
 /* mask_relationships.c */
 void MASK_OT_parent_set(struct wmOperatorType *ot);
 void MASK_OT_parent_clear(struct wmOperatorType *ot);
 
+/* mask_select.c */
+void MASK_OT_select(struct wmOperatorType *ot);
+void MASK_OT_select_all(struct wmOperatorType *ot);
+
+int ED_mask_spline_select_check(struct MaskSplinePoint *points, int tot_point);
+int ED_mask_select_check(struct Mask *mask);
+void ED_mask_point_select(struct MaskSplinePoint *point, int action);
+
+void ED_mask_select_toggle_all(struct Mask *mask, int action);
+void ED_mask_select_flush_all(struct Mask *mask);
+
 /* mask_editor.c */
 int ED_maskediting_poll(struct bContext *C);
 int ED_maskediting_mask_poll(struct bContext *C);

Modified: branches/soc-2011-tomato/source/blender/editors/mask/mask_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/mask_ops.c	2012-05-22 10:10:14 UTC (rev 46877)
+++ branches/soc-2011-tomato/source/blender/editors/mask/mask_ops.c	2012-05-22 10:48:29 UTC (rev 46878)
@@ -57,38 +57,6 @@
 
 /******************** utility functions *********************/
 
-static void spline_point_select(MaskSplinePoint *point, int action)
-{
-	int i;
-
-	switch (action) {
-		case SEL_SELECT:
-			MASKPOINT_SEL(point);
-			break;
-		case SEL_DESELECT:
-			MASKPOINT_DESEL(point);
-			break;
-		case SEL_INVERT:
-			MASKPOINT_INVSEL(point);
-			break;
-	}
-
-	for (i = 0; i < point->tot_uw; i++) {
-		switch (action) {
-			case SEL_SELECT:
-				point->uw[i].flag |= SELECT;
-				break;
-			case SEL_DESELECT:
-				point->uw[i].flag &= ~SELECT;
-				break;
-			case SEL_INVERT:
-				point->uw[i].flag ^= SELECT;
-				break;
-		}
-	}
-}
-
-
 static float projection_on_spline(MaskSpline *spline, MaskSplinePoint *point, float start_u, const float co[2])
 {
 	const float proj_eps         = 1e-3;
@@ -151,68 +119,11 @@
 	return u;
 }
 
-static int points_has_selection(MaskSplinePoint *points, int tot_point)
+MaskSplinePoint *ED_mask_point_find_nearest(bContext *C, Mask *mask, float normal_co[2], int threshold,
+                                            MaskObject **maskobj_r, MaskSpline **spline_r, int *is_handle_r,
+                                            float *score)
 {
-	int i;
-
-	for (i = 0; i < tot_point; i++) {
-		MaskSplinePoint *point = &points[i];
-
-		if (MASKPOINT_ISSEL(point))
-			return TRUE;
-	}
-
-	return FALSE;
-}
-
-static int mask_has_selection(Mask *mask)
-{
 	MaskObject *maskobj;
-
-	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
-		MaskSpline *spline;
-
-		for (spline = maskobj->splines.first; spline; spline = spline->next) {
-			if (points_has_selection(spline->points, spline->tot_point)) {
-				return TRUE;
-			}
-		}
-	}
-
-	return FALSE;
-}
-
-static void toggle_selection_all(Mask *mask, int action)
-{
-	MaskObject *maskobj;
-
-	if (action == SEL_TOGGLE) {
-		if (mask_has_selection(mask))
-			action = SEL_DESELECT;
-		else
-			action = SEL_SELECT;
-	}
-
-	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
-		MaskSpline *spline;
-
-		for (spline = maskobj->splines.first; spline; spline = spline->next) {
-			int i;
-
-			for (i = 0; i < spline->tot_point; i++) {
-				MaskSplinePoint *point = &spline->points[i];
-
-				spline_point_select(point, action);
-			}
-		}
-	}
-}
-
-static MaskSplinePoint *find_nearest_point(bContext *C, Mask *mask, float normal_co[2], int threshold,
-                                           MaskObject **maskobj_r, MaskSpline **spline_r, int *is_handle_r,
-                                           float *score)
-{
-	MaskObject *maskobj;
 	MaskObject *point_maskobj = NULL;
 	MaskSpline *point_spline = NULL;
 	MaskSplinePoint *point = NULL;
@@ -297,9 +208,9 @@
 	return NULL;
 }
 
-static int find_nearest_feather(bContext *C, Mask *mask, float normal_co[2], int threshold,
-                                MaskObject **maskobj_r, MaskSpline **spline_r, MaskSplinePoint **point_r,
-                                MaskSplinePointUW **uw_r, float *score)
+int ED_mask_feather_find_nearest(bContext *C, Mask *mask, float normal_co[2], int threshold,
+                                 MaskObject **maskobj_r, MaskSpline **spline_r, MaskSplinePoint **point_r,
+                                 MaskSplinePointUW **uw_r, float *score)
 {
 	MaskObject *maskobj, *point_maskobj = NULL;
 	MaskSpline *point_spline = NULL;
@@ -500,39 +411,6 @@
 	return FALSE;
 }
 
-static void mask_flush_selection(Mask *mask)
-{
-	MaskObject *maskobj;
-
-	for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
-		MaskSpline *spline;
-
-		for (spline = maskobj->splines.first; spline; spline = spline->next) {
-			int i;
-
-			spline->flag &= ~SELECT;
-
-			for (i = 0; i < spline->tot_point; i++) {
-				MaskSplinePoint *cur_point = &spline->points[i];
-
-				if (MASKPOINT_ISSEL(cur_point)) {
-					spline->flag |= SELECT;
-				}
-				else {
-					int j;
-
-					for (j = 0; j < cur_point->tot_uw; j++) {
-						if (cur_point->uw[j].flag & SELECT) {
-							spline->flag |= SELECT;
-							break;
-						}
-					}
-				}
-			}
-		}
-	}
-}
-
 /******************** create new mask *********************/
 
 static int mask_new_exec(bContext *C, wmOperator *op)
@@ -677,9 +555,9 @@
 	ED_mask_mouse_pos(C, event, co);
 	ED_mask_size(C, &width, &height);
 
-	cv_point = find_nearest_point(C, mask, co, threshold, &cv_maskobj, &cv_spline, &is_handle, &cv_score);
+	cv_point = ED_mask_point_find_nearest(C, mask, co, threshold, &cv_maskobj, &cv_spline, &is_handle, &cv_score);
 
-	if (find_nearest_feather(C, mask, co, threshold, &feather_maskobj, &feather_spline, &feather_point, &uw, &feather_score)) {
+	if (ED_mask_feather_find_nearest(C, mask, co, threshold, &feather_maskobj, &feather_spline, &feather_point, &uw, &feather_score)) {
 		if (slide_feather || !cv_point || feather_score < cv_score) {
 			action = SLIDE_ACTION_FEATHER;
 
@@ -756,19 +634,19 @@
 
 		if (slidedata->uw) {
 			if ((slidedata->uw->flag & SELECT) == 0) {
-				toggle_selection_all(mask, SEL_DESELECT);
+				ED_mask_select_toggle_all(mask, SEL_DESELECT);
 
 				slidedata->uw->flag |= SELECT;
 
-				mask_flush_selection(mask);
+				ED_mask_select_flush_all(mask);
 			}
 		}
 		else if (!MASKPOINT_ISSEL(slidedata->point)) {
-			toggle_selection_all(mask, SEL_DESELECT);
+			ED_mask_select_toggle_all(mask, SEL_DESELECT);
 
-			spline_point_select(slidedata->point, SEL_SELECT);
+			ED_mask_point_select(slidedata->point, SEL_SELECT);
 
-			mask_flush_selection(mask);
+			ED_mask_select_flush_all(mask);
 		}
 
 		slidedata->maskobj->act_spline = slidedata->spline;
@@ -934,132 +812,6 @@
 	RNA_def_boolean(ot->srna, "slide_feather", 0, "Slide Feather", "First try to slide slide feather instead of vertex");
 }
 
-/******************** toggle selection *********************/
-
-static int select_all_exec(bContext *C, wmOperator *op)
-{
-	Mask *mask = CTX_data_edit_mask(C);
-	int action = RNA_enum_get(op->ptr, "action");
-
-	toggle_selection_all(mask, action);
-	mask_flush_selection(mask);
-
-	WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask);
-
-	return OPERATOR_FINISHED;
-}
-
-void MASK_OT_select_all(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name = "Select or Deselect All";
-	ot->description = "Change selection of all curve points";
-	ot->idname = "MASK_OT_select_all";
-
-	/* api callbacks */
-	ot->exec = select_all_exec;
-	ot->poll = ED_maskediting_mask_poll;
-
-	/* flags */
-	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
-	/* properties */
-	WM_operator_properties_select_all(ot);
-}
-
-/******************** select *********************/
-
-static int select_exec(bContext *C, wmOperator *op)
-{
-	Mask *mask = CTX_data_edit_mask(C);
-	MaskObject *maskobj;
-	MaskSpline *spline;
-	MaskSplinePoint *point = NULL;
-	float co[2];
-	int extend = RNA_boolean_get(op->ptr, "extend");
-	int is_handle = 0;
-	const float threshold = 19;
-
-	RNA_float_get_array(op->ptr, "location", co);
-
-	point = find_nearest_point(C, mask, co, threshold, &maskobj, &spline, &is_handle, NULL);
-
-	if (point) {
-		if (!extend)
-			toggle_selection_all(mask, SEL_DESELECT);
-
-		if (is_handle) {
-			MASKPOINT_HANDLE_SEL(point);
-		}
-		else {
-			spline_point_select(point, SEL_SELECT);
-		}
-
-		maskobj->act_spline = spline;
-		maskobj->act_point = point;
-
-		mask_flush_selection(mask);
-
-		WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask);
-
-		return OPERATOR_FINISHED;
-	}
-	else {
-		MaskSplinePointUW *uw;
-
-		if (find_nearest_feather(C, mask, co, threshold, &maskobj, &spline, &point, &uw, NULL)) {
-			if (!extend)
-				toggle_selection_all(mask, SEL_DESELECT);
-
-			uw->flag |= SELECT;
-
-			maskobj->act_spline = spline;
-			maskobj->act_point = point;
-
-			mask_flush_selection(mask);
-

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list