[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