[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32086] trunk/blender/source/blender/ editors/space_view3d/view3d_select.c: Fix #23005: circle select not working paint modes with face select.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Sep 23 23:01:12 CEST 2010


Revision: 32086
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32086
Author:   blendix
Date:     2010-09-23 23:01:12 +0200 (Thu, 23 Sep 2010)

Log Message:
-----------
Fix #23005: circle select not working paint modes with face select.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2010-09-23 20:26:03 UTC (rev 32085)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2010-09-23 21:01:12 UTC (rev 32086)
@@ -1833,61 +1833,61 @@
 {
 	ToolSettings *ts= vc->scene->toolsettings;
 	int bbsel;
-	Object *ob= vc->obact;
+	struct {ViewContext *vc; short select, mval[2]; float radius; } data;
 	
-	if(vc->obedit==NULL && paint_facesel_test(ob)) {
-		Mesh *me = ob?ob->data:NULL;
+	bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 
-		if (me) {
-			em_vertoffs= me->totface+1;	/* max index array */
+	vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
 
-			bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
-			EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE);
-			EM_free_backbuf();
+	data.vc = vc;
+	data.select = selecting;
+	data.mval[0] = mval[0];
+	data.mval[1] = mval[1];
+	data.radius = rad;
 
-// XXX			object_tface_flags_changed(OBACT, 0);
+	if(ts->selectmode & SCE_SELECT_VERTEX) {
+		if(bbsel) {
+			EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE);
+		} else {
+			mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1);
 		}
 	}
-	else {
-		struct {ViewContext *vc; short select, mval[2]; float radius; } data;
-		
-		bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
-		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 
-		vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
+	if(ts->selectmode & SCE_SELECT_EDGE) {
+		if (bbsel) {
+			EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE);
+		} else {
+			mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0);
+		}
+	}
+	
+	if(ts->selectmode & SCE_SELECT_FACE) {
+		if(bbsel) {
+			EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE);
+		} else {
+			mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
+		}
+	}
 
-		data.vc = vc;
-		data.select = selecting;
-		data.mval[0] = mval[0];
-		data.mval[1] = mval[1];
-		data.radius = rad;
+	EM_free_backbuf();
+	EM_selectmode_flush(vc->em);
+}
 
-		if(ts->selectmode & SCE_SELECT_VERTEX) {
-			if(bbsel) {
-				EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE);
-			} else {
-				mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1);
-			}
-		}
+static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+{
+	Object *ob= vc->obact;
+	Mesh *me = ob?ob->data:NULL;
+	int bbsel;
 
-		if(ts->selectmode & SCE_SELECT_EDGE) {
-			if (bbsel) {
-				EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE);
-			} else {
-				mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0);
-			}
-		}
-		
-		if(ts->selectmode & SCE_SELECT_FACE) {
-			if(bbsel) {
-				EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE);
-			} else {
-				mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
-			}
-		}
+	if (me) {
+		em_vertoffs= me->totface+1;	/* max index array */
 
+		bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
+		EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE);
 		EM_free_backbuf();
-		EM_selectmode_flush(vc->em);
+
+// XXX			object_tface_flags_changed(OBACT, 0);
 	}
 }
 
@@ -2082,7 +2082,8 @@
 	
 	selecting= (gesture_mode==GESTURE_MODAL_SELECT);
     
-	if(CTX_data_edit_object(C) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
+	if(CTX_data_edit_object(C) || paint_facesel_test(obact) ||
+		(obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
 		ViewContext vc;
 		short mval[2];
 		
@@ -2096,6 +2097,10 @@
 			obedit_circle_select(&vc, selecting, mval, (float)radius);
 			WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
 		}
+		else if(paint_facesel_test(obact)) {
+			paint_facesel_circle_select(&vc, selecting, mval, (float)radius);
+			WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
+		}
 		else
 			return PE_circle_select(C, selecting, mval, (float)radius);
 	}





More information about the Bf-blender-cvs mailing list