Commit: 39592039be4ca619a1a6be91dbb738cf920ca7dd
Author: Phil Gosch
Date:   Tue Jul 19 19:48:54 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB39592039be4ca619a1a6be91dbb738cf920ca7dd

WIP Simulated Annealing

Stubs for storing the best solution and initial scaling of charts

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

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

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

diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c 
b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 71124f5..4e5582b 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -582,6 +582,18 @@ static void p_chart_uv_scale_origin(PChart *chart, float 
scale)
        p_chart_uv_translate(chart, trans);
 }
 
+static void p_scale_charts(PHandle *handle, float scale)
+{
+       PChart *chart;
+       int i;
+
+       for (i = 0; i < handle->ncharts; i++) {
+               chart = handle->charts[i];
+
+               p_chart_uv_scale(chart, scale);
+       }
+}
+
 static void UNUSED_FUNCTION(p_chart_uv_from_array)(PChart *chart, float 
(*points)[2])
 {
        PVert *v;
@@ -5408,7 +5420,7 @@ void param_irregular_pack_begin(ParamHandle *handle, 
float *w_area)
        PFace *f;
        int npoint, right, i, j;
        unsigned int seed = 31415926;
-       float used_area;
+       float used_area, init_scale, init_value = 0.9f;
 
        param_assert(phandle->state == PHANDLE_STATE_CONSTRUCTED);
        phandle->state = PHANDLE_STATE_PACK;
@@ -5427,7 +5439,10 @@ void param_irregular_pack_begin(ParamHandle *handle, 
float *w_area)
                }
 
                /* Set initial scale of charts */
-               /* ToDo SaphireS: Idea: set initial scale so that combined 
chart area is about 1.0 of UV area */
+               /* ToDo: Do this in p_compute_packing_solution */
+               /*used_area = p_face_uv_area_combined(handle);
+               init_scale = (1.0f / used_area) * init_value;
+               p_scale_charts(handle, init_scale);*/
 
                /* Compute convex hull for each chart -> CW */
                chart->u.ipack.convex_hull = p_convex_hull_new(chart);
@@ -5856,6 +5871,25 @@ void param_flush_restore(ParamHandle *handle)
        }
 }
 
+void param_store_packing_solution(ParamHandle *handle)
+{
+       PHandle *phandle = (PHandle *)handle;
+       PChart *chart;
+       int i;
+
+       for (i = 0; i < phandle->ncharts; i++) {
+               chart = phandle->charts[i];
+               //chart->u.ipack.best_pos->x = chart->uv[0];
+               //chart->u.ipack.best_pos->y = chart->uv[1];
+               //chart->u.ipack.best_scale = chart-> ? 
+       }
+}
+
+void param_restore_packing_solution(ParamHandle *handle)
+{
+
+}
+
 /* XXX (SaphireS): Remove */
 void param_test(ParamHandle *handle)
 {
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h 
b/source/blender/editors/uvedit/uvedit_parametrizer.h
index 710d4fd..0935a8d 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.h
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.h
@@ -108,6 +108,8 @@ void param_pack(ParamHandle *handle, float margin, bool 
do_rotate);
 void param_irregular_pack_begin(ParamHandle *handle);
 void param_irregular_pack_iter(ParamHandle *handle, float *w_area, unsigned 
int seed);
 void param_irregular_pack_end(ParamHandle *handle);
+void param_store_packing_solution(ParamHandle *handle);
+void param_restore_packing_solution(ParamHandle *handle);
 
 /* Average area for all charts */
 
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c 
b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 2708f97..b8b2e83 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -901,7 +901,7 @@ static void irregular_pack_islands_iteration(bContext *C, 
wmOperator *op, bool i
        float wasted_area = 0.0f, dE, r1, r2;
        float a = 0.95f; /*ToDo SaphireS: Make operator parameter for testing */
        /* ToDo Saphires: Find optimal parameter */
-       float k = 5.670367e-8f; /* Stefan-Boltzman constant-like parameter */
+       float k = 0.5f; /* Stefan-Boltzman constant-like parameter */
        int local_iter_max = 50;
        
        pi->iter_global++;
@@ -923,6 +923,7 @@ static void irregular_pack_islands_iteration(bContext *C, 
wmOperator *op, bool i
        if (dE < 0) {
                /* Current solution is new best solution */
                /* ToDo SaphireS: Store last best solution */
+               param_store_packing_solution(pi->handle);
                pi->wasted_area_last = wasted_area;
        }
        else {
@@ -933,6 +934,7 @@ static void irregular_pack_islands_iteration(bContext *C, 
wmOperator *op, bool i
                if (r1 < r2) {
                        /* Current solution is new best solution */
                        /* ToDo SaphireS: Store last best solution */
+                       param_store_packing_solution(pi->handle); 
                        pi->wasted_area_last = wasted_area;
                }
                else {
@@ -950,7 +952,7 @@ static void irregular_pack_islands_iteration(bContext *C, 
wmOperator *op, bool i
 
                if (sa) {
                        BLI_snprintf(str, sizeof(str),
-                               IFACE_("Pack Islands (irregular). Iteration: 
%i, Wasted UV Area: %f"), pi->iter_global, pi->wasted_area_last);
+                               IFACE_("Pack Islands (irregular). Iteration: 
%i, Wasted UV Area (Best Solution): %f"), pi->iter_global, 
pi->wasted_area_last);
                        ED_area_headerprint(sa, str);
                }
 
@@ -971,10 +973,13 @@ static void irregular_pack_islands_exit(bContext *C, 
wmOperator *op, bool cancel
        if (pi->timer)
                WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), 
pi->timer);
 
-       if (cancel)
-               param_flush_restore(pi->handle); /* Restore UVs */
-       else
+       if (cancel) {
+               param_flush_restore(pi->handle); /* Restore original UVs */
+       }
+       else {
+               param_restore_packing_solution(pi->handle); /* Restore best 
solution*/
                param_flush(pi->handle); /* Keep new UVs */
+       }
 
        param_irregular_pack_end(pi->handle);
        param_delete(pi->handle);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to