[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46624] trunk/blender/source/blender: code cleanup: add WM_gesture_lasso_path_to_array, move mouse path to array conversion there.

Campbell Barton ideasman42 at gmail.com
Mon May 14 14:41:58 CEST 2012


Revision: 46624
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46624
Author:   campbellbarton
Date:     2012-05-14 12:41:56 +0000 (Mon, 14 May 2012)
Log Message:
-----------
code cleanup: add WM_gesture_lasso_path_to_array, move mouse path to array conversion there.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-05-14 12:15:38 UTC (rev 46623)
+++ trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-05-14 12:41:56 UTC (rev 46624)
@@ -945,7 +945,7 @@
 }
 
 
-static int do_lasso_select_mar(bContext *C, int mcords[][2], short moves, short select)
+static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select)
 {
 	ARegion *ar = CTX_wm_region(C);
 	SpaceClip *sc = CTX_wm_space_clip(C);
@@ -963,8 +963,9 @@
 	track = tracksbase->first;
 	while (track) {
 		if ((track->flag & TRACK_HIDDEN) == 0) {
+			MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr);
+
 			if (MARKER_VISIBLE(sc, track, marker)) {
-				MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr);
 				float screen_co[2];
 
 				/* tracker in screen coords */
@@ -994,27 +995,17 @@
 
 static int clip_lasso_select_exec(bContext *C, wmOperator *op)
 {
-	int i = 0;
-	int mcords[1024][2];
+	int mcords_tot;
+	int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
 
-	RNA_BEGIN (op->ptr, itemptr, "path")
-	{
-		float loc[2];
-
-		RNA_float_get_array(&itemptr, "loc", loc);
-		mcords[i][0] = (int)loc[0];
-		mcords[i][1] = (int)loc[1];
-		i++;
-		if (i >= 1024) break;
-	}
-	RNA_END;
-
-	if (i > 1) {
+	if (mcords) {
 		short select;
 
 		select = !RNA_boolean_get(op->ptr, "deselect");
-		do_lasso_select_movieclip(C, mcords, i, select);
+		do_lasso_select_marker(C, mcords, mcords_tot, select);
 
+		MEM_freeN(mcords);
+
 		return OPERATOR_FINISHED;
 	}
 	return OPERATOR_PASS_THROUGH;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2012-05-14 12:15:38 UTC (rev 46623)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2012-05-14 12:41:56 UTC (rev 46624)
@@ -827,22 +827,10 @@
 static int view3d_lasso_select_exec(bContext *C, wmOperator *op)
 {
 	ViewContext vc;
-	int i = 0;
-	int mcords[1024][2];
-
-	RNA_BEGIN (op->ptr, itemptr, "path")
-	{
-		float loc[2];
-		
-		RNA_float_get_array(&itemptr, "loc", loc);
-		mcords[i][0] = (int)loc[0];
-		mcords[i][1] = (int)loc[1];
-		i++;
-		if (i >= 1024) break;
-	}
-	RNA_END;
+	int mcords_tot;
+	int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
 	
-	if (i > 1) {
+	if (mcords) {
 		short extend, select;
 		view3d_operator_needs_opengl(C);
 		
@@ -851,8 +839,10 @@
 		
 		extend = RNA_boolean_get(op->ptr, "extend");
 		select = !RNA_boolean_get(op->ptr, "deselect");
-		view3d_lasso_select(C, &vc, mcords, i, extend, select);
+		view3d_lasso_select(C, &vc, mcords, mcords_tot, extend, select);
 		
+		MEM_freeN(mcords);
+
 		return OPERATOR_FINISHED;
 	}
 	return OPERATOR_PASS_THROUGH;

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-05-14 12:15:38 UTC (rev 46623)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-05-14 12:41:56 UTC (rev 46624)
@@ -2709,34 +2709,21 @@
 
 static int uv_lasso_select_exec(bContext *C, wmOperator *op)
 {
-	int i = 0;
-	int mcords[1024][2];
+	int mcords_tot;
+	int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
 
-	RNA_BEGIN (op->ptr, itemptr, "path")
-	{
-		float loc[2];
-
-		RNA_float_get_array(&itemptr, "loc", loc);
-		mcords[i][0] = (int)loc[0];
-		mcords[i][1] = (int)loc[1];
-		i++;
-		if (i >= 1024) break;
-	}
-	RNA_END;
-
-	if (i > 1) {
+	if (mcords) {
 		short select;
+		short change;
 
 		select = !RNA_boolean_get(op->ptr, "deselect");
+		change = do_lasso_select_mesh_uv(C, mcords, mcords_tot, select);
 
-		if (do_lasso_select_mesh_uv(C, mcords, i, select)) {
-			return OPERATOR_FINISHED;
-		}
-		else {
-			return OPERATOR_CANCELLED;
-		}
+		MEM_freeN(mcords);
 
+		return change ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
 	}
+
 	return OPERATOR_PASS_THROUGH;
 }
 

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2012-05-14 12:15:38 UTC (rev 46623)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2012-05-14 12:41:56 UTC (rev 46624)
@@ -259,6 +259,7 @@
 int			WM_gesture_lasso_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int			WM_gesture_lasso_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int			WM_gesture_lasso_cancel(struct bContext *C, struct wmOperator *op);
+int       (*WM_gesture_lasso_path_to_array(struct bContext *C, struct wmOperator *op, int *mcords_tot))[2];
 int			WM_gesture_straightline_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int			WM_gesture_straightline_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int			WM_gesture_straightline_cancel(struct bContext *C, struct wmOperator *op);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-05-14 12:15:38 UTC (rev 46623)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-05-14 12:41:56 UTC (rev 46624)
@@ -2789,6 +2789,44 @@
 	return OPERATOR_CANCELLED;
 }
 
+/**
+ * helper function, we may want to add options for conversion to view space
+ *
+ * caller must free.
+ */
+int (*WM_gesture_lasso_path_to_array(bContext *UNUSED(C), wmOperator *op, int *mcords_tot))[2]
+{
+	PropertyRNA *prop = RNA_struct_find_property(op->ptr, "path");
+	int (*mcords)[2] = NULL;
+	BLI_assert(prop != NULL);
+
+	if (prop) {
+		const int len = RNA_property_collection_length(op->ptr, prop);
+
+		if (len) {
+			int i = 0;
+			mcords = MEM_mallocN(sizeof(int) * 2 * len, __func__);
+
+			RNA_PROP_BEGIN(op->ptr, itemptr, prop)
+			{
+				float loc[2];
+
+				RNA_float_get_array(&itemptr, "loc", loc);
+				mcords[i][0] = (int)loc[0];
+				mcords[i][1] = (int)loc[1];
+				i++;
+			}
+			RNA_PROP_END;
+		}
+		*mcords_tot = len;
+	}
+	else {
+		*mcords_tot = 0;
+	}
+
+	return mcords;
+}
+
 #if 0
 /* template to copy from */
 




More information about the Bf-blender-cvs mailing list