[Bf-blender-cvs] [177848e] soc-2016-uv_tools: Depth limited binary search to determine the scale factor of items which don't fit
Phil Gosch
noreply at git.blender.org
Mon Jul 11 10:53:50 CEST 2016
Commit: 177848e73caf58c74a45f885b81ff9ee1ee2f565
Author: Phil Gosch
Date: Mon Jul 11 10:53:32 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB177848e73caf58c74a45f885b81ff9ee1ee2f565
Depth limited binary search to determine the scale factor of items which don't fit
===================================================================
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 ba9a12d..03e4435 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -5133,13 +5133,6 @@ void p_no_fit_polygon_delete(PNoFitPolygon *nfp)
MEM_freeN(nfp);
}
-float p_binary_depth_search(int depth)
-{
- /* ToDo SaphireS */
-
- return 0.8f;
-}
-
void p_place_chart(PChart* item, PConvexHull *ch_item, PPointUV *pos)
{
float cur_pos[2], trans[2];
@@ -5256,11 +5249,47 @@ bool p_chart_pack_individual(PHandle *phandle, PChart *item)
return true;
}
+float p_scale_binary_search(PHandle *phandle, PChart *chart, float val, float min, float max, int depth)
+{
+ float val1, min1, max1;
+
+ if (depth--) {
+ p_chart_uv_scale(chart, val);
+
+ if (!(p_chart_pack_individual(phandle, chart))) {
+ /*scale down */
+ min1 = min;
+ max1 = val;
+ val1 = (min + max) / 2.0f;
+
+ return p_scale_binary_search(phandle, chart, val1, min1, max1, depth);
+ }
+ else {
+ /* scale up */
+ min1 = val;
+ max1 = max;
+ val1 = (min + max) / 2.0f;
+
+ return p_scale_binary_search(phandle, chart, val1, min1, max1, depth);
+ }
+ }
+ else {
+ return val;
+ }
+}
+
+float p_binary_depth_search(PHandle *phandle, PChart *chart, int depth)
+{
+ float scale = 0.5f, min = 0.0f, max = 1.0f;
+
+ return p_scale_binary_search(phandle, chart, scale, min, max, depth);
+}
+
bool p_compute_packing_solution(PHandle *phandle /* ToDo SaphireS: Simulated Annealing parameters */)
{
PChart *chart;
int i, j;
- int depth;
+ int depth = 4;
/* Set initial overall scale */
@@ -5274,9 +5303,9 @@ bool p_compute_packing_solution(PHandle *phandle /* ToDo SaphireS: Simulated Ann
printf("p_compute_packing_solution: chart[%i] with area %f:\n", i, chart->u.ipack.area);
if (!(chart->u.ipack.convex_hull->placed)) {
- while (!p_chart_pack_individual(phandle, chart, phandle->ncharts)){
+ while (!p_chart_pack_individual(phandle, chart)){
/* binary depth search for scaling down the current chart */
- scale = p_binary_depth_search(depth);
+ scale = p_binary_depth_search(phandle, chart, depth);
/* scale chart */
p_chart_uv_scale(chart, scale);
@@ -5313,7 +5342,7 @@ void param_irregular_pack_begin(ParamHandle *handle)
}
/* Compute convex hull for each chart -> CW */
- chart->u.ipack.convex_hull = p_convex_hull_new(chart, true);
+ chart->u.ipack.convex_hull = p_convex_hull_new(chart);
/* DEBUG */
printf("Bounds of chart [%i]: minx: %f, maxx: %f, miny: %f,maxy: %f\n", i, chart->u.ipack.convex_hull->min_v[0], chart->u.ipack.convex_hull->max_v[0], chart->u.ipack.convex_hull->min_v[1], chart->u.ipack.convex_hull->max_v[1]);
More information about the Bf-blender-cvs
mailing list