[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39572] branches/soc-2011-onion/source/ blender/editors: uv paint brushes

Antony Riakiotakis kalast at gmail.com
Sat Aug 20 22:19:36 CEST 2011


Revision: 39572
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39572
Author:   psy-fi
Date:     2011-08-20 20:19:35 +0000 (Sat, 20 Aug 2011)
Log Message:
-----------
uv paint brushes
=================
-fixes for UV synch mode + use the better find_nearest_uv_vert function for island detection(old way was missing some hits).

Yes, screencasts do expose bugs :)

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/CMakeLists.txt
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c
    branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_intern.h
    branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/CMakeLists.txt
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/CMakeLists.txt	2011-08-20 19:16:46 UTC (rev 39571)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/CMakeLists.txt	2011-08-20 20:19:35 UTC (rev 39572)
@@ -28,6 +28,7 @@
 	../../imbuf
 	../../makesdna
 	../../makesrna
+	../uvedit
 	../../render/extern/include
 	../../windowmanager
 	../../../../intern/guardedalloc

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c	2011-08-20 19:16:46 UTC (rev 39571)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c	2011-08-20 20:19:35 UTC (rev 39572)
@@ -62,6 +62,7 @@
 #include "RNA_enum_types.h"
 
 #include "paint_intern.h"
+#include "uvedit_intern.h"
 
 #include "UI_view2d.h"
 
@@ -463,10 +464,18 @@
 		data->uvpaint = &ts->uvpaint->paint;
 
 		if(do_island_optimization){
-			data->elementMap = EM_make_uv_element_map(em, 0, 1);
-		}else {
 			/* We will need island information */
-			data->elementMap = EM_make_uv_element_map(em, 0, 0);
+			if(ts->uv_flag & UV_SYNC_SELECTION){
+				data->elementMap = EM_make_uv_element_map(em, 0, 1);
+			}else{
+				data->elementMap = EM_make_uv_element_map(em, 1, 1);
+			}
+		}else {
+			if(ts->uv_flag & UV_SYNC_SELECTION){
+				data->elementMap = EM_make_uv_element_map(em, 0, 0);
+			}else{
+				data->elementMap = EM_make_uv_element_map(em, 1, 0);
+			}
 		}
 
 		if(!data->elementMap){
@@ -479,30 +488,12 @@
 
 		/* we need to find the active island here */
 		if(do_island_optimization){
-			float mindist = 1e10;
-			EditFace *nearest_face;
-			int nearest_index;
 			UvElement *element;
+			NearestHit hit;
+			Image *ima= CTX_data_edit_image(C);
+			find_nearest_uv_vert(scene, ima, em, co, NULL, &hit);
 
-			for(efa = em->faces.first; efa; efa = efa->next){
-				int nverts = efa->v4 ? 4 : 3;
-				if(efa->h)
-					continue;
-				mt = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-				for(i = 0; i < nverts; i++){
-					float diff[2], dist;
-					sub_v2_v2v2(diff, mt->uv[i], co);
-					dist = fabs(diff[0]) + fabs(diff[0]);
-					if(dist <= mindist)
-					{
-						mindist = dist;
-						nearest_face = efa;
-						nearest_index = i;
-					}
-				}
-			}
-
-			element = get_uv_element(data->elementMap, nearest_face, nearest_index);
+			element = get_uv_element(data->elementMap, hit.efa, hit.uv);
 			island_index = element->island;
 		}
 
@@ -682,14 +673,6 @@
 
 			data->initial_stroke->totalInitialSelected = counter;
 		}
-
-		if(!(ts->uv_paint_settings & UV_PAINT_ALL_ISLANDS)){
-/*			UvElement *element = map->vert[(*(&efa->v1 + index))->tmp.l];
-				for(;element; element = element->next){
-					if(element->face == efa)
-						return element - map->buf;
-				}*/
-		}
 	}
 
 	return op->customdata;

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_intern.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_intern.h	2011-08-20 19:16:46 UTC (rev 39571)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_intern.h	2011-08-20 20:19:35 UTC (rev 39572)
@@ -82,6 +82,17 @@
 float uv_area(float uv[][2], int quad);
 void uv_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy);
 
+/* find nearest */
+typedef struct NearestHit {
+	struct EditFace *efa;
+	struct MTFace *tf;
+
+	int vert, uv;
+	int edge, vert2;
+} NearestHit;
+
+void find_nearest_uv_vert(struct Scene *scene, struct Image *ima, struct EditMesh *em, float co[2], float penalty[2], struct NearestHit *hit);
+
 /* operators */
 void UV_OT_average_islands_scale(struct wmOperatorType *ot);
 void UV_OT_cube_project(struct wmOperatorType *ot);

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c	2011-08-20 19:16:46 UTC (rev 39571)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c	2011-08-20 20:19:35 UTC (rev 39572)
@@ -478,14 +478,6 @@
 
 /************************** find nearest ****************************/
 
-typedef struct NearestHit {
-	EditFace *efa;
-	MTFace *tf;
-
-	int vert, uv;
-	int edge, vert2;
-} NearestHit;
-
 static void find_nearest_uv_edge(Scene *scene, Image *ima, EditMesh *em, float co[2], NearestHit *hit)
 {
 	MTFace *tf;
@@ -585,7 +577,7 @@
 	return (c1*c2 >= 0.0f);
 }
 
-static void find_nearest_uv_vert(Scene *scene, Image *ima, EditMesh *em, float co[2], float penalty[2], NearestHit *hit)
+void find_nearest_uv_vert(Scene *scene, Image *ima, EditMesh *em, float co[2], float penalty[2], NearestHit *hit)
 {
 	EditFace *efa;
 	EditVert *eve;




More information about the Bf-blender-cvs mailing list