[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