[Bf-blender-cvs] [6dfd245] soc-2016-uv_tools: Chart placement: Slide possible placement positions along edge of chosen NFP point to include every possible placement solution

Phil Gosch noreply at git.blender.org
Mon Jul 25 14:06:25 CEST 2016


Commit: 6dfd2454d1710e6aed09a92b592ee2634ad30210
Author: Phil Gosch
Date:   Mon Jul 25 14:05:53 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB6dfd2454d1710e6aed09a92b592ee2634ad30210

Chart placement: Slide possible placement positions along edge of chosen NFP point to include every possible placement solution

===================================================================

M	source/blender/editors/uvedit/uvedit_parametrizer.c

===================================================================

diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index e18dbfe..0beee80 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -680,11 +680,23 @@ bool p_rect_intersect(float min1[2], float max1[2], float min2[2], float max2[2]
 	return true;
 }
 
+/* Returns the interval of range in which f falls in */
 int p_float_to_int_range(float f, int range)
 {
 	return (int)(f * (float)(range));
 }
 
+/* Returns the interval of range in which f falls in */
+/* re contains the remainder of f, linearized to 0-1 range */
+int p_float_to_int_range_remainder(float f, int range, float *re)
+{
+	int val = p_float_to_int_range(f, range);
+	float section = 1.0f / (float)range;
+	*re = (f - (((float)val) * section)) / section;
+	
+	return val;
+}
+
 /* Topological Utilities */
 
 static PEdge *p_wheel_edge_next(PEdge *e)
@@ -5297,7 +5309,7 @@ bool p_chart_pack_individual(PHandle *phandle,  PChart *item)
 #endif
 	PConvexHull *ch_item = item->u.ipack.convex_hull;
 	PChart *fixed;
-	float end_pos[2], randf1, randf2;
+	float end_pos[2], delta_edge[2], randf1, randf2, r = 0.0f;
 	int i, j, cur_iter = 0, max_iter = 100;
 	unsigned int rand1, rand2;
 	bool found = false, init = true;
@@ -5358,13 +5370,24 @@ bool p_chart_pack_individual(PHandle *phandle,  PChart *item)
 				randf2 = BLI_rng_get_float(phandle->rng);
 				/*printf("--randf2 choosen as: %f\n", randf2);*/
 				//rand2 = p_float_to_int_range(item->u.ipack.sa_params[2], nfps[rand1]->nverts); /* ToDo: Actual point amount in cfr */
-				rand2 = p_float_to_int_range(randf2, nfps[rand1]->nverts); 
+				//rand2 = p_float_to_int_range(randf2, nfps[rand1]->nverts); 
+				r = 0.0f;
+				rand2 = p_float_to_int_range_remainder(randf2, nfps[rand1]->nverts, &r);
 
 				if (nfps[rand1]->final_pos[rand2]) {
-					end_pos[0] = nfps[rand1]->final_pos[rand2]->x;
-					end_pos[1] = nfps[rand1]->final_pos[rand2]->y;
-					printf("-rand1 choosen as: %i\n", rand1);
-					printf("--rand2 choosen as: %i\n", rand2);
+					/* Account for sliding along edges here to cover all possible placements */
+					if(rand2 == (nfps[rand1]->nverts - 1)){
+						delta_edge[0] = nfps[rand1]->final_pos[0]->x - nfps[rand1]->final_pos[rand2]->x;
+						delta_edge[1] = nfps[rand1]->final_pos[0]->y - nfps[rand1]->final_pos[rand2]->y;
+					}
+					else {
+						delta_edge[0] = nfps[rand1]->final_pos[rand2 + 1]->x - nfps[rand1]->final_pos[rand2]->x;
+						delta_edge[1] = nfps[rand1]->final_pos[rand2 + 1]->y - nfps[rand1]->final_pos[rand2]->y;
+					}
+
+					end_pos[0] = nfps[rand1]->final_pos[rand2]->x + delta_edge[0] * r;
+					end_pos[1] = nfps[rand1]->final_pos[rand2]->y + delta_edge[1] * r;
+
 					found = p_temp_cfr_check(nfps, ifp, end_pos, phandle->ncharts, rand1);
 				}
 			}




More information about the Bf-blender-cvs mailing list