[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47261] branches/soc-2012-bratwurst/source /blender/editors/transform/transform_generics.c: UV transform correction tool

Antony Riakiotakis kalast at gmail.com
Thu May 31 11:08:09 CEST 2012


Revision: 47261
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47261
Author:   psy-fi
Date:     2012-05-31 09:08:09 +0000 (Thu, 31 May 2012)
Log Message:
-----------
UV transform correction tool
============================
* Allow edge ratios to be negative, allows for better displacement when
leaving the boundaries of the uv islands a vertex is in.
* minor cleanup of unused variables.

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/editors/transform/transform_generics.c

Modified: branches/soc-2012-bratwurst/source/blender/editors/transform/transform_generics.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/transform/transform_generics.c	2012-05-31 09:01:15 UTC (rev 47260)
+++ branches/soc-2012-bratwurst/source/blender/editors/transform/transform_generics.c	2012-05-31 09:08:09 UTC (rev 47261)
@@ -1662,7 +1662,7 @@
  * These elements will be artificially pinned for this first attempt at the algorithm */
 void calculateUVTransformCorrection(TransInfo *t)
 {
-	int i, index;
+	int i;
 	BMIter iter;
 	BMLoop *l;
 	BMEditMesh *em = BMEdit_FromObject(t->obedit);
@@ -1683,14 +1683,13 @@
 			float uv_tot[2];
 			int uv_counter = 0;
 
-			index =  uvtc->vert_indices[BM_elem_index_get(v)];
 			uv_tot[0] = uv_tot[1] = 0.0;
 
 			//printf("disc loops %d\n",  bmesh_disk_facevert_count(v));
 			BM_ITER_ELEM(l, &iter, v, BM_LOOPS_OF_VERT) {
+				float mul;
 				float edge_len_init, edge_len_init2;
 				float edge_len_final, edge_len_final2;
-				float edge_uv_len_init, edge_uv_len_init2;
 				float edge_vec_init[3], edge_vec_init2[3];
 				float edge_vec_final[3], edge_vec_final2[3];
 				float edge_uv_init[2], edge_uv_init2[2];
@@ -1727,22 +1726,18 @@
 					sub_v3_v3v3(edge_vec_final2, td[index_prev].iloc, v->co);
 					sub_v2_v2v2(edge_uv_init2, uvtc->initial_uvs[BM_elem_index_get(l_prev->v)]->init_uv, uvtc->initial_uvs[BM_elem_index_get(v)]->init_uv);
 				}
-				//sub_v3_v3v3(edge_vec_final, l_next->v->co, v->co);
-				//sub_v3_v3v3(edge_vec_final2, l_prev->v->co, v->co);
 
-				//sub_v3_v3v3(edge_vec_final, l_next->v->co, v->co);
-				//sub_v3_v3v3(edge_vec_final2, l_prev->v->co, v->co);
-
 				/* first project final edges to initial edges to get the translation along the edge axis */
-				project_v3_v3v3(edge_vec_final, edge_vec_final, edge_vec_init);
-				project_v3_v3v3(edge_vec_final2, edge_vec_final2, edge_vec_init2);
+				mul = dot_v3v3(edge_vec_final, edge_vec_init) / dot_v3v3(edge_vec_init, edge_vec_init);
+				mul_v3_v3fl(edge_vec_final, edge_vec_init, mul);
+				edge_len_final = signf(mul)*len_v3(edge_vec_final);
 
+				mul = dot_v3v3(edge_vec_final2, edge_vec_init2) / dot_v3v3(edge_vec_init2, edge_vec_init2);
+				mul_v3_v3fl(edge_vec_final2, edge_vec_init2, mul);
+				edge_len_final2 = signf(mul)*len_v3(edge_vec_final2);
+
 				edge_len_init = len_v3(edge_vec_init);
 				edge_len_init2 = len_v3(edge_vec_init2);
-				edge_len_final = len_v3(edge_vec_final);
-				edge_len_final2 = len_v3(edge_vec_final2);
-				edge_uv_len_init = len_v2(edge_uv_init);
-				edge_uv_len_init2 = len_v2(edge_uv_init2);
 
 				//printf("\nedge_uv_init %f %f\n", edge_uv_init[0], edge_uv_init[1]);
 				//printf("edge_uv_init2 %f %f\n", edge_uv_init2[0], edge_uv_init2[1]);
@@ -1764,6 +1759,7 @@
 			mul_v2_fl(uv_tot, 1.0/uv_counter);
 			add_v2_v2(uv_tot, uvtc->initial_uvs[BM_elem_index_get(v)]->init_uv);
 
+			/* flush to actual uvs */
 			BM_ITER_ELEM(l, &iter, v, BM_LOOPS_OF_VERT) {
 				MLoopUV *luv;
 




More information about the Bf-blender-cvs mailing list