[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50292] trunk/blender/source/blender: Fix #32458: changing UV image in image editor not working when the active face

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Aug 31 17:01:40 CEST 2012


Revision: 50292
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50292
Author:   blendix
Date:     2012-08-31 15:01:40 +0000 (Fri, 31 Aug 2012)
Log Message:
-----------
Fix #32458: changing UV image in image editor not working when the active face
was not selected. Now changed it so that the active face must also have its
UVs shown in the image editor to be used as the source of the image shown.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c
    trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/uvedit/uvedit_draw.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -527,9 +527,9 @@
 	bm->act_face = efa;
 }
 
-BMFace *BM_active_face_get(BMesh *bm, int sloppy)
+BMFace *BM_active_face_get(BMesh *bm, int sloppy, int selected)
 {
-	if (bm->act_face) {
+	if (bm->act_face && (!selected || BM_elem_flag_test(bm->act_face, BM_ELEM_SELECT))) {
 		return bm->act_face;
 	}
 	else if (sloppy) {
@@ -546,6 +546,9 @@
 				if (BM_elem_flag_test(f, BM_ELEM_HIDDEN)) {
 					f = NULL;
 				}
+				else if (selected && !BM_elem_flag_test(f, BM_ELEM_SELECT)) {
+					f = NULL;
+				}
 				else {
 					break;
 				}
@@ -768,7 +771,7 @@
 int BM_select_history_active_get(BMesh *bm, BMEditSelection *ese)
 {
 	BMEditSelection *ese_last = bm->selected.last;
-	BMFace *efa = BM_active_face_get(bm, FALSE);
+	BMFace *efa = BM_active_face_get(bm, FALSE, FALSE);
 
 	ese->next = ese->prev = NULL;
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2012-08-31 15:01:40 UTC (rev 50292)
@@ -71,7 +71,7 @@
 
 /* edit selection stuff */
 void    BM_active_face_set(BMesh *bm, BMFace *f);
-BMFace *BM_active_face_get(BMesh *bm, int sloppy);
+BMFace *BM_active_face_get(BMesh *bm, int sloppy, int selected);
 
 void    BM_editselection_center(BMEditSelection *ese, float r_center[3]);
 void    BM_editselection_normal(BMEditSelection *ese, float r_normal[3]);

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2012-08-31 15:01:40 UTC (rev 50292)
@@ -135,7 +135,7 @@
 void                 EDBM_uv_element_map_free(struct UvElementMap *vmap);
 
 int              EDBM_mtexpoly_check(struct BMEditMesh *em);
-struct MTexPoly *EDBM_mtexpoly_active_get(struct BMEditMesh *em, struct BMFace **r_act_efa, int sloppy);
+struct MTexPoly *EDBM_mtexpoly_active_get(struct BMEditMesh *em, struct BMFace **r_act_efa, int sloppy, int selected);
 
 void              EDBM_uv_vert_map_free(struct UvVertMap *vmap);
 struct UvMapVert *EDBM_uv_vert_map_at_index(struct UvVertMap *vmap, unsigned int v);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -2221,7 +2221,7 @@
 		}
 	}
 	else if (em->selectmode & SCE_SELECT_FACE) {
-		f = BM_active_face_get(em->bm, TRUE);
+		f = BM_active_face_get(em->bm, TRUE, FALSE);
 		if (f) {
 			*r_efa = f;
 			return;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_utils.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -992,15 +992,15 @@
 
 /* last_sel, use em->act_face otherwise get the last selected face in the editselections
  * at the moment, last_sel is mainly useful for making sure the space image dosnt flicker */
-MTexPoly *EDBM_mtexpoly_active_get(BMEditMesh *em, BMFace **r_act_efa, int sloppy)
+MTexPoly *EDBM_mtexpoly_active_get(BMEditMesh *em, BMFace **r_act_efa, int sloppy, int selected)
 {
 	BMFace *efa = NULL;
 	
 	if (!EDBM_mtexpoly_check(em))
 		return NULL;
 	
-	efa = BM_active_face_get(em->bm, sloppy);
-	
+	efa = BM_active_face_get(em->bm, sloppy, selected);
+
 	if (efa) {
 		if (r_act_efa) *r_act_efa = efa;
 		return CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);

Modified: trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_navmesh.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/mesh/mesh_navmesh.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -491,7 +491,7 @@
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 
 	/* do work here */
-	BMFace *efa_act = BM_active_face_get(em->bm, FALSE);
+	BMFace *efa_act = BM_active_face_get(em->bm, FALSE, FALSE);
 
 	if (efa_act) {
 		if (CustomData_has_layer(&em->bm->pdata, CD_RECAST)) {

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/space_image/space_image.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -392,11 +392,12 @@
 	else if (obedit && obedit->type == OB_MESH) {
 		Mesh *me = (Mesh *)obedit->data;
 		struct BMEditMesh *em = me->edit_btmesh;
-		int sloppy = 1; /* partially selected face is ok */
+		int sloppy = TRUE; /* partially selected face is ok */
+		int selected = !(scene->toolsettings->uv_flag & UV_SYNC_SELECTION); /* only selected active face? */
 
 		if (BKE_scene_use_new_shading_nodes(scene)) {
 			/* new shading system, get image from material */
-			BMFace *efa = BM_active_face_get(em->bm, sloppy);
+			BMFace *efa = BM_active_face_get(em->bm, sloppy, selected);
 
 			if (efa) {
 				Image *node_ima;
@@ -413,8 +414,8 @@
 			if (em && EDBM_mtexpoly_check(em)) {
 				sima->image = NULL;
 				
-				tf = EDBM_mtexpoly_active_get(em, NULL, TRUE); /* partially selected face is ok */
-				
+				tf = EDBM_mtexpoly_active_get(em, NULL, sloppy, selected);
+
 				if (tf) {
 					/* don't need to check for pin here, see above */
 					sima->image = tf->tpage;

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -3164,7 +3164,7 @@
 
 {
 	Mesh *me = ob->data;
-	BMFace *efa_act = BM_active_face_get(em->bm, FALSE); /* annoying but active faces is stored differently */
+	BMFace *efa_act = BM_active_face_get(em->bm, FALSE, FALSE); /* annoying but active faces is stored differently */
 	BMEdge *eed_act = NULL;
 	BMVert *eve_act = NULL;
 	

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_draw.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_draw.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_draw.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -455,8 +455,8 @@
 
 	StitchPreviewer *stitch_preview = uv_get_stitch_previewer();
 
-	activetf = EDBM_mtexpoly_active_get(em, &efa_act, FALSE); /* will be set to NULL if hidden */
-	activef = BM_active_face_get(bm, FALSE);
+	activetf = EDBM_mtexpoly_active_get(em, &efa_act, FALSE, FALSE); /* will be set to NULL if hidden */
+	activef = BM_active_face_get(bm, FALSE, FALSE);
 	ts = scene->toolsettings;
 
 	drawfaces = draw_uvs_face_check(scene);

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -174,6 +174,8 @@
 	BMIter iter;
 	MTexPoly *tf;
 	int update = 0;
+	int sloppy = TRUE;
+	int selected = !(scene->toolsettings->uv_flag & UV_SYNC_SELECTION);
 	
 	/* skip assigning these procedural images... */
 	if (ima && (ima->type == IMA_TYPE_R_RESULT || ima->type == IMA_TYPE_COMPOSITE))
@@ -190,8 +192,7 @@
 
 	if (BKE_scene_use_new_shading_nodes(scene)) {
 		/* new shading system, assign image in material */
-		int sloppy = 1;
-		BMFace *efa = BM_active_face_get(em->bm, sloppy);
+		BMFace *efa = BM_active_face_get(em->bm, sloppy, selected);
 
 		if (efa)
 			ED_object_assign_active_image(bmain, obedit, efa->mat_nr + 1, ima);

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-08-31 14:06:21 UTC (rev 50291)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-08-31 15:01:40 UTC (rev 50292)
@@ -192,8 +192,11 @@
 	handle = param_construct_begin();
 
 	if (correct_aspect) {
-		efa = BM_active_face_get(em->bm, TRUE);
+		int sloppy = TRUE;
+		int selected = FALSE;
 
+		efa = BM_active_face_get(em->bm, sloppy, selected);
+
 		if (efa) {
 			float aspx, aspy;
 			tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
@@ -380,8 +383,11 @@
 	handle = param_construct_begin();
 
 	if (correct_aspect) {
-		editFace = BM_active_face_get(em->bm, TRUE);
+		int sloppy = TRUE;
+		int selected = FALSE;
 
+		editFace = BM_active_face_get(em->bm, sloppy, selected);
+
 		if (editFace) {
 			MTexPoly *tf;
 			float aspx, aspy;
@@ -1003,7 +1009,9 @@
 
 static void correct_uv_aspect(BMEditMesh *em)
 {
-	BMFace *efa = BM_active_face_get(em->bm, TRUE);
+	int sloppy = TRUE;
+	int selected = FALSE;
+	BMFace *efa = BM_active_face_get(em->bm, sloppy, selected);
 	BMLoop *l;
 	BMIter iter, liter;
 	MLoopUV *luv;




More information about the Bf-blender-cvs mailing list