[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