[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52197] trunk/blender/source/blender/ editors/uvedit/uvedit_ops.c: speedup to uv remove doubles.

Campbell Barton ideasman42 at gmail.com
Wed Nov 14 03:58:49 CET 2012


Revision: 52197
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52197
Author:   campbellbarton
Date:     2012-11-14 02:58:43 +0000 (Wed, 14 Nov 2012)
Log Message:
-----------
speedup to uv remove doubles.
- no need to copy the UV vectors, just point to them.
- calculate the midpoint once and copy rather then mid_v2_v2v2() on each UV.
- reduce the number of comparisons by only checking the remaining uv's in the nested loop.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-11-14 02:03:34 UTC (rev 52196)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2012-11-14 02:58:43 UTC (rev 52197)
@@ -1570,8 +1570,8 @@
 	MTexPoly *tf;
 	int uv_a_index;
 	int uv_b_index;
-	float uv_a[2];
-	float uv_b[2];
+	float *uv_a;
+	float *uv_b;
 	float weld_dist;
 	MLoopUV **loop_arr = NULL;
 	BLI_array_declare(loop_arr);
@@ -1616,16 +1616,15 @@
 			BLI_array_empty(loop_arr);
 			BLI_array_append(loop_arr, vert_arr[uv_a_index].uv_loop);
 
-			copy_v2_v2(uv_a, vert_arr[uv_a_index].uv_loop->uv);
+			uv_a = vert_arr[uv_a_index].uv_loop->uv;
 
 			copy_v2_v2(uv_max, uv_a);
 			copy_v2_v2(uv_min, uv_a);
 
 			vert_arr[uv_a_index].weld = TRUE;
-			for (uv_b_index = 0; uv_b_index < BLI_array_count(vert_arr); uv_b_index++) {
-				copy_v2_v2(uv_b, vert_arr[uv_b_index].uv_loop->uv);
-				if ((uv_a_index != uv_b_index) &&
-				    (vert_arr[uv_b_index].weld == FALSE) &&
+			for (uv_b_index = uv_a_index + 1; uv_b_index < BLI_array_count(vert_arr); uv_b_index++) {
+				uv_b = vert_arr[uv_b_index].uv_loop->uv;
+				if ((vert_arr[uv_b_index].weld == FALSE) &&
 				    (len_manhattan_v2v2(uv_a, uv_b) < weld_dist))
 				{
 					minmax_v2v2_v2(uv_max, uv_min, uv_b);
@@ -1633,8 +1632,12 @@
 					vert_arr[uv_b_index].weld = TRUE;
 				}
 			}
-			for (uv_b_index = 0; uv_b_index < BLI_array_count(loop_arr); uv_b_index++) {
-				mid_v2_v2v2(loop_arr[uv_b_index]->uv, uv_min, uv_max);
+			if (BLI_array_count(loop_arr)) {
+				float uv_mid[2];
+				mid_v2_v2v2(uv_mid, uv_min, uv_max);
+				for (uv_b_index = 0; uv_b_index < BLI_array_count(loop_arr); uv_b_index++) {
+					copy_v2_v2(loop_arr[uv_b_index]->uv, uv_mid);
+				}
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list