[Bf-blender-cvs] [3cae116704f] uv_unwrapping_slim_algorithm: SLIM: In live Unwrap mode unpinned vertices can now be moved. Also, a single pin also invokes SLIM. That also avoids crashing minimize_stretch when invoked on chart with one pin.
Aurel Gruber
noreply at git.blender.org
Thu Apr 13 16:33:56 CEST 2017
Commit: 3cae116704f35dc7b73480057761538a6a612ea6
Author: Aurel Gruber
Date: Thu Apr 13 16:22:49 2017 +0200
Branches: uv_unwrapping_slim_algorithm
https://developer.blender.org/rB3cae116704f35dc7b73480057761538a6a612ea6
SLIM: In live Unwrap mode unpinned vertices can now be moved. Also, a single pin also invokes SLIM. That also avoids crashing minimize_stretch when invoked on chart with one pin.
===================================================================
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 66bc0e8f8c3..8d599a3a1e4 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -4821,7 +4821,7 @@ static void slim_get_pinned_vertex_data(ParamHandle *liveHandle,
selected_pins[*n_selected_pins] = be->vert->slim_id;
++(*n_selected_pins);
}
-
+
pinned_vertex_indices[i] = be->vert->slim_id;
pinned_vertex_positions_2D[2*i] = be->vert->uv[0];
pinned_vertex_positions_2D[2*i+1] = be->vert->uv[1];
@@ -4851,6 +4851,21 @@ static void slim_get_pinned_vertex_data(ParamHandle *liveHandle,
phandle->slim_mt->n_pinned_vertices[chartNr] = i;
}
+void slim_reload_all_uvs(ParamHandle *liveHandle)
+{
+
+ PHandle *phandle = (PHandle *) liveHandle;
+
+ PVert *v;
+ for (int i = 0; i < phandle->ncharts; i++) {
+ PChart *chart = phandle->charts[i];
+
+ for (v = chart->verts; v; v = v->nextlink) {
+ p_vert_load_pin_select_uvs(liveHandle, v); /* reload v */
+ }
+ }
+}
+
void param_slim_solve(ParamHandle *handle, SLIMMatrixTransfer *mt)
{
PHandle *phandle = (PHandle *) handle;
@@ -4896,7 +4911,7 @@ void param_slim_begin(ParamHandle *handle, SLIMMatrixTransfer *mt)
deselect = P_TRUE;
}
- if ((!mt->is_minimize_stretch && (!select || !deselect)) || (npins == 1)) {
+ if ((!mt->is_minimize_stretch && (!select || !deselect)) || (npins == 0)) {
/* nothing to unwrap */
chart->u.slim.ptr = NULL;
chart->flag |= PCHART_NOFLUSH;
@@ -4936,25 +4951,25 @@ void param_slim_solve_iteration(ParamHandle *handle)
continue;
int *pinned_vertex_indices =
- MEM_callocN(sizeof(*pinned_vertex_indices) * mt->n_verts[i],
- "indices of pinned verts");
+ MEM_callocN(sizeof(*pinned_vertex_indices) * mt->n_verts[i],
+ "indices of pinned verts");
double *pinned_vertex_positions_2D =
- MEM_callocN(sizeof(*pinned_vertex_positions_2D) * 2 * mt->n_verts[i],
- "positions of pinned verts: [u1, v1, u2, v2, ..., un, vn]");
+ MEM_callocN(sizeof(*pinned_vertex_positions_2D) * 2 * mt->n_verts[i],
+ "positions of pinned verts: [u1, v1, u2, v2, ..., un, vn]");
int *selected_pins =
- MEM_callocN(sizeof(*pinned_vertex_indices) * mt->n_verts[i],
- "indices of pinned & selected verts");
+ MEM_callocN(sizeof(*pinned_vertex_indices) * mt->n_verts[i],
+ "indices of pinned & selected verts");
int n_pins = 0;
int n_selected_pins = 0;
slim_get_pinned_vertex_data(handle,
- i,
- &n_pins,
- pinned_vertex_indices,
- pinned_vertex_positions_2D,
- &n_selected_pins,
- selected_pins);
+ i,
+ &n_pins,
+ pinned_vertex_indices,
+ pinned_vertex_positions_2D,
+ &n_selected_pins,
+ selected_pins);
SLIM_parametrize_live(chart->u.slim.ptr,
n_pins,
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h b/source/blender/editors/uvedit/uvedit_parametrizer.h
index 0d41b3b2d9d..45b8f5733f1 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.h
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.h
@@ -80,7 +80,7 @@ void param_delete(ParamHandle *chart);
* - solve: compute cheap initialization (if necessary) and refine iteratively
* - end: clean up
*/
-
+void slim_reload_all_uvs(ParamHandle *handle);
void param_slim_solve(ParamHandle *handle, SLIMMatrixTransfer *mt);
void param_slim_begin(ParamHandle *handle, SLIMMatrixTransfer *mt);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index b9d0eed6d4a..08f1b00a3d7 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -898,6 +898,7 @@ void ED_uvedit_live_unwrap_re_solve(void)
{
if (liveHandle) {
if (param_is_slim(liveHandle)) {
+ slim_reload_all_uvs(liveHandle);
param_slim_solve_iteration(liveHandle);
}
else {
More information about the Bf-blender-cvs
mailing list