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 */
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to