[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38402] branches/soc-2011-radish/source/ blender/editors/space_view3d: Added Lasso select and Box select to weight paint.

Jason Hays jason_hays22 at mymail.eku.edu
Thu Jul 14 20:04:49 CEST 2011


Revision: 38402
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38402
Author:   jason_hays22
Date:     2011-07-14 18:04:48 +0000 (Thu, 14 Jul 2011)
Log Message:
-----------
Added Lasso select and Box select to weight paint.
Clipping still doesn't work properly there.

Modified Paths:
--------------
    branches/soc-2011-radish/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-radish/source/blender/editors/space_view3d/view3d_select.c

Modified: branches/soc-2011-radish/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/space_view3d/drawobject.c	2011-07-14 17:29:53 UTC (rev 38401)
+++ branches/soc-2011-radish/source/blender/editors/space_view3d/drawobject.c	2011-07-14 18:04:48 UTC (rev 38402)
@@ -1676,7 +1676,7 @@
 		}
 
 		if (s[0]!=IS_CLIPPED)
-			data->func(data->userData, me->mvert, s[0], s[1], index);
+			data->func(data->userData, mv, s[0], s[1], index);
 	}
 }
 /*Jason*/

Modified: branches/soc-2011-radish/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/space_view3d/view3d_select.c	2011-07-14 17:29:53 UTC (rev 38401)
+++ branches/soc-2011-radish/source/blender/editors/space_view3d/view3d_select.c	2011-07-14 18:04:48 UTC (rev 38402)
@@ -641,7 +641,15 @@
 	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data);
 }
+/* Jason */
+static void do_obmode_lasso_select__doSelect(void *userData, MVert *mv, int x, int y)
+{
+	struct { int (*mcords)[2]; short moves; short select; } *data = userData;
 
+	if (lasso_inside(data->mcords, data->moves, x, y)) {
+		mv->flag = data->select?(mv->flag|SELECT):(mv->flag&~SELECT);
+	}
+}
 static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, int y)
 {
 	struct { int (*mcords)[2]; short moves; short select; } *data = userData;
@@ -743,29 +751,62 @@
 	}
 }
 /* Jason */
-static void do_lasso_select_paintvert(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
+static void do_obmode_box_select__doSelect(void *userData, MVert *mv, int x, int y)
 {
+	struct { ViewContext vc; rcti *rect; int select; } *data = userData;
+
+	if (BLI_in_rcti(data->rect, x, y)) {
+		mv->flag = data->select?(mv->flag|SELECT):(mv->flag&~SELECT);
+	}
+}
+/* Jason */
+int do_paintvert_box_select(ViewContext *vc, rcti *rect, int select, int extend)
+{
 	Object *ob= vc->obact;
 	Mesh *me= ob?ob->data:NULL;
-	rcti rect;
+	int sx= rect->xmax-rect->xmin+1;
+	int sy= rect->ymax-rect->ymin+1;
+	bglMats mats;
+	struct { ViewContext vc; rcti *rect; int select; } data = {NULL};
 
-	if(me==NULL || me->totvert==0)
-		return;
+	if(me==NULL || me->totvert==0 || sx*sy <= 0)
+		return OPERATOR_CANCELLED;
 
 	if(extend==0 && select)
 		paintvert_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */
 
-	em_vertoffs= me->totvert+1;	/* max index array */
+	ED_view3d_init_mats_rv3d(ob, vc->rv3d);
+	data.vc = *vc;
+	data.rect = rect;
+	data.select= select;
 
-	lasso_select_boundbox(&rect, mcords, moves);
-	EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
-	
-	EM_backbuf_checkAndSelectTVerts(me, select);
+	mesh_obmode_foreachScreenVert(vc, do_obmode_box_select__doSelect, &data, 1);
 
-	EM_free_backbuf();
+	paintvert_flush_flags(ob);
 
-	paintface_flush_flags(ob);
+	return OPERATOR_FINISHED;
 }
+/* Jason */
+static void do_lasso_select_paintvert(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
+{
+	Object *ob= vc->obact;
+	Mesh *me= ob?ob->data:NULL;
+
+	struct { int (*mcords)[2]; short moves; short select; } data = {NULL};
+
+	if(me==NULL || me->totvert==0)
+		return;
+
+	if(extend==0 && select)
+		paintvert_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */
+	ED_view3d_init_mats_rv3d(ob, vc->rv3d);
+	data.select = select;
+	data.mcords = mcords;
+	data.moves= moves;
+	mesh_obmode_foreachScreenVert(vc, do_obmode_lasso_select__doSelect, &data, 1);
+
+	paintvert_flush_flags(ob);
+}
 static void do_lasso_select_paintface(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
 {
 	Object *ob= vc->obact;
@@ -1833,6 +1874,9 @@
 		else if(vc.obact && paint_facesel_test(vc.obact)) {
 			ret= do_paintface_box_select(&vc, &rect, select, extend);
 		}
+		else if(vc.obact && paint_vertsel_test(vc.obact)) {
+			ret= do_paintvert_box_select(&vc, &rect, select, extend);
+		}
 		else if(vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) {
 			ret= PE_border_select(C, &rect, select, extend);
 		}
@@ -2018,12 +2062,12 @@
 	}
 }
 /* Jason */
-static void mesh_obmode_circle_doSelectVert(void *userData, MVert *mv, int x, int y, int index)
+static void mesh_obmode_circle_doSelectVert(void *userData, MVert *mv, int x, int y, int UNUSED(index))
 {
 	struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData;
 	int mx = x - data->mval[0], my = y - data->mval[1];
 	float r = sqrt(mx*mx + my*my);
-	mv = mv+index;
+
 	if (r<=data->radius) {
 		mv->flag = data->select?(mv->flag|1):(mv->flag&~1);
 	}




More information about the Bf-blender-cvs mailing list