[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41035] branches/bmesh/blender/source/ blender/editors: select boundary loop tool (aka region to loop) switches to edge select mode if the mode was face select

Andrew Wiggin ender79bl at gmail.com
Sat Oct 15 16:47:38 CEST 2011


Revision: 41035
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41035
Author:   ender79
Date:     2011-10-15 14:47:37 +0000 (Sat, 15 Oct 2011)
Log Message:
-----------
select boundary loop tool (aka region to loop) switches to edge select mode if the mode was face select

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/util/editmode_undo.c

Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-10-15 14:46:26 UTC (rev 41034)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-10-15 14:47:37 UTC (rev 41035)
@@ -297,7 +297,7 @@
 int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
 int ED_mesh_color_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
 
-void EDBM_selectmode_to_scene(struct Scene *scene, struct Object *obedit);
+void EDBM_selectmode_to_scene(struct bContext *C);
 
 #include "../mesh/editbmesh_bvh.h"
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-10-15 14:46:26 UTC (rev 41034)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-10-15 14:47:37 UTC (rev 41035)
@@ -2437,7 +2437,10 @@
 	BMFace *f;
 	BMEdge *e;
 	BMIter iter;
+	ViewContext vc;
 	
+	em_setup_viewcontext(C, &vc);
+	
 	BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
 		BM_SetIndex(e, 0);
 	}
@@ -2465,8 +2468,17 @@
 		if (BM_GetIndex(e) && !BM_TestHFlag(e, BM_HIDDEN))
 			BM_Select_Edge(em->bm, e, 1);
 	}
-	
+
+	/* If in face-only select mode, switch to edge select mode so that
+	   an edge-only selection is not inconsistent state */
+	if (em->selectmode == SCE_SELECT_FACE) {
+		em->selectmode = SCE_SELECT_EDGE;
+		EDBM_selectmode_set(em);
+		EDBM_selectmode_to_scene(C);
+	}
+
 	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
+
 	return OPERATOR_FINISHED;
 }
 
@@ -2628,7 +2640,7 @@
 	BMFace *f;
 	int selbigger = RNA_boolean_get(op->ptr, "select_bigger");
 	int a, b;
-	
+
 	/*find the set of regions with smallest number of total faces*/
  	a = loop_find_regions(em, selbigger);
 	b = loop_find_regions(em, !selbigger);

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-10-15 14:46:26 UTC (rev 41034)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-10-15 14:47:37 UTC (rev 41035)
@@ -252,14 +252,19 @@
 	return EDBM_FinishOp(em, &bmop, NULL, 0);
 }
 
-void EDBM_selectmode_to_scene(Scene *scene, Object *obedit)
+void EDBM_selectmode_to_scene(bContext *C)
 {
+	Scene *scene = CTX_data_scene(C);
+	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = ((Mesh*)obedit->data)->edit_btmesh;
 
 	if (!em)
 		return;
 
 	scene->toolsettings->selectmode = em->selectmode;
+
+	/* Request redraw of header buttons (to show new select mode) */
+	WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, scene);
 }
 
 void EDBM_MakeEditBMesh(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)

Modified: branches/bmesh/blender/source/blender/editors/util/editmode_undo.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/util/editmode_undo.c	2011-10-15 14:46:26 UTC (rev 41034)
+++ branches/bmesh/blender/source/blender/editors/util/editmode_undo.c	2011-10-15 14:47:37 UTC (rev 41035)
@@ -274,7 +274,7 @@
 	
 	/* special case for editmesh, mode must be copied back to the scene */
 	if(obedit->type == OB_MESH) {
-		EDBM_selectmode_to_scene(CTX_data_scene(C), obedit);
+		EDBM_selectmode_to_scene(C);
 	}
 
 	DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);




More information about the Bf-blender-cvs mailing list