[Bf-blender-cvs] [d70d5cc] soc-2016-uv_tools: WIP Simulated Annealing
Phil Gosch
noreply at git.blender.org
Wed Jul 20 01:37:21 CEST 2016
Commit: d70d5ccf0f2190f88bd79e6d41ada763490f7ae2
Author: Phil Gosch
Date: Wed Jul 20 01:36:54 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rBd70d5ccf0f2190f88bd79e6d41ada763490f7ae2
WIP Simulated Annealing
Store/Restore last best solution
===================================================================
M source/blender/editors/uvedit/uvedit_parametrizer.c
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 4e5582b..fa7f86d 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -229,7 +229,8 @@ typedef struct PChart {
} pack;
struct PChartIrregularPack {
PConvexHull *convex_hull; /* ToDo (SaphireS): Only convex for now */
- float area;
+ PPointUV *best_pos;
+ float area, scale;
} ipack;
} u;
@@ -590,7 +591,7 @@ static void p_scale_charts(PHandle *handle, float scale)
for (i = 0; i < handle->ncharts; i++) {
chart = handle->charts[i];
- p_chart_uv_scale(chart, scale);
+ p_chart_uv_scale_origin(chart, scale);
}
}
@@ -5420,16 +5421,17 @@ void param_irregular_pack_begin(ParamHandle *handle, float *w_area)
PFace *f;
int npoint, right, i, j;
unsigned int seed = 31415926;
- float used_area, init_scale, init_value = 0.9f;
+ float used_area, init_scale, init_value = 0.6f;
param_assert(phandle->state == PHANDLE_STATE_CONSTRUCTED);
phandle->state = PHANDLE_STATE_PACK;
/* Initializations */
-
phandle->rng = BLI_rng_new(seed);
+ used_area = p_face_uv_area_combined(handle);
+ init_scale = init_value / used_area;
+ printf("init_scale: %f\n", init_scale);
-
for (i = 0; i < phandle->ncharts; i++) {
chart = phandle->charts[i];
@@ -5440,12 +5442,11 @@ void param_irregular_pack_begin(ParamHandle *handle, float *w_area)
/* Set initial scale of charts */
/* 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);*/
+ /*p_chart_uv_scale_origin(chart, init_scale); */
/* Compute convex hull for each chart -> CW */
chart->u.ipack.convex_hull = p_convex_hull_new(chart);
+ chart->u.ipack.best_pos = MEM_callocN(sizeof(PPointUV), "PPointUV");
/* 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]);
@@ -5511,7 +5512,7 @@ void param_irregular_pack_end(ParamHandle *handle)
for (i = 0; i < phandle->ncharts; i++) {
chart = phandle->charts[i];
-
+ MEM_freeN(chart->u.ipack.best_pos);
p_convex_hull_delete(chart->u.ipack.convex_hull);
}
@@ -5875,19 +5876,45 @@ void param_store_packing_solution(ParamHandle *handle)
{
PHandle *phandle = (PHandle *)handle;
PChart *chart;
+ PConvexHull *chull;
int i;
+ printf("param_store_packing_solution\n");
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];
+ chull = chart->u.ipack.convex_hull;
+ chart->u.ipack.best_pos->x = chull->h_verts[chull->ref_vert_index]->uv[0];
+ chart->u.ipack.best_pos->y = chull->h_verts[chull->ref_vert_index]->uv[1];
+
//chart->u.ipack.best_scale = chart-> ?
}
+ printf("DONE param_store_packing_solution\n");
}
void param_restore_packing_solution(ParamHandle *handle)
{
+ PHandle *phandle = (PHandle *)handle;
+ PChart *chart;
+ PConvexHull *chull;
+ float trans[2], cur_pos[2];
+ int i;
+ printf("param_restore_packing_solution\n");
+ for (i = 0; i < phandle->ncharts; i++) {
+ chart = phandle->charts[i];
+ chull = chart->u.ipack.convex_hull;
+
+ cur_pos[0] = chull->h_verts[chull->ref_vert_index]->uv[0];
+ cur_pos[1] = chull->h_verts[chull->ref_vert_index]->uv[1];
+
+ trans[0] = cur_pos[0] - chart->u.ipack.best_pos->x;
+ trans[1] = cur_pos[1] - chart->u.ipack.best_pos->y;
+
+ p_chart_uv_translate(chart, trans);
+
+ //chart->u.ipack.best_scale ?
+ }
+ printf("DONE param_restore_packing_solution\n");
}
/* XXX (SaphireS): Remove */
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index b8b2e83..3fe85742 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -886,7 +886,7 @@ static bool irregular_pack_islands_init(bContext *C, wmOperator *op)
simann->temperature = 1.0f;
pi->sa = simann;
- param_irregular_pack_begin(pi->handle, &wasted_area);
+ param_irregular_pack_begin(pi->handle, &wasted_area /* SA */);
pi->wasted_area_last = wasted_area;
op->customdata = pi;
@@ -913,9 +913,9 @@ static void irregular_pack_islands_iteration(bContext *C, wmOperator *op, bool i
}
- /* Find neigbohring solution */
+ /* Find neighboring solution */
/*ToDo Saphires: Pass SA parameters */
- param_irregular_pack_iter(pi->handle, &wasted_area, pi->iter_global /* temp */);
+ param_irregular_pack_iter(pi->handle, &wasted_area, pi->iter_global /* SA */);
/* delta Energy */
dE = wasted_area - pi->wasted_area_last;
More information about the Bf-blender-cvs
mailing list