[Bf-blender-cvs] [21bccefd123] uv_unwrapping_slim_algorithm: SLIM: move code around, no functional changes.
Brecht Van Lommel
noreply at git.blender.org
Mon Mar 27 22:44:32 CEST 2017
Commit: 21bccefd1238f68768c441b54041eabab8245164
Author: Brecht Van Lommel
Date: Sat Mar 25 14:16:02 2017 +0100
Branches: uv_unwrapping_slim_algorithm
https://developer.blender.org/rB21bccefd1238f68768c441b54041eabab8245164
SLIM: move code around, no functional changes.
===================================================================
M intern/slim/CMakeLists.txt
R100 intern/slim/area_compensation.h intern/slim/intern/area_compensation.h
R100 intern/slim/geometry_data_retrieval.h intern/slim/intern/geometry_data_retrieval.h
R100 intern/slim/least_squares_relocator.h intern/slim/intern/least_squares_relocator.h
R100 intern/slim/slim.h intern/slim/intern/slim.h
R100 intern/slim/slim_parametrizer.h intern/slim/intern/slim_parametrizer.h
R100 intern/slim/uv_initializer.h intern/slim/intern/uv_initializer.h
M source/blender/editors/uvedit/uvedit_parametrizer.c
===================================================================
diff --git a/intern/slim/CMakeLists.txt b/intern/slim/CMakeLists.txt
index 0cb66132c6c..d331a0aebed 100644
--- a/intern/slim/CMakeLists.txt
+++ b/intern/slim/CMakeLists.txt
@@ -14,21 +14,21 @@ set(INC_SYS
set(SRC
slim_matrix_transfer.h
- slim.h
- slim_parametrizer.h
- uv_initializer.h
slim_capi.h
- area_compensation.h
- least_squares_relocator.h
- geometry_data_retrieval.h
+ intern/area_compensation.cpp
+ intern/area_compensation.h
+ intern/geometry_data_retrieval.cpp
+ intern/geometry_data_retrieval.h
+ intern/least_squares_relocator.cpp
+ intern/least_squares_relocator.h
intern/slim.cpp
+ intern/slim.h
+ intern/slim_capi.cpp
intern/slim_parametrizer.cpp
+ intern/slim_parametrizer.h
intern/uv_initializer.cpp
- intern/slim_capi.cpp
- intern/area_compensation.cpp
- intern/least_squares_relocator.cpp
- intern/geometry_data_retrieval.cpp
+ intern/uv_initializer.h
${ADDITIONAL_SOURCES}
diff --git a/intern/slim/area_compensation.h b/intern/slim/intern/area_compensation.h
similarity index 100%
rename from intern/slim/area_compensation.h
rename to intern/slim/intern/area_compensation.h
diff --git a/intern/slim/geometry_data_retrieval.h b/intern/slim/intern/geometry_data_retrieval.h
similarity index 100%
rename from intern/slim/geometry_data_retrieval.h
rename to intern/slim/intern/geometry_data_retrieval.h
diff --git a/intern/slim/least_squares_relocator.h b/intern/slim/intern/least_squares_relocator.h
similarity index 100%
rename from intern/slim/least_squares_relocator.h
rename to intern/slim/intern/least_squares_relocator.h
diff --git a/intern/slim/slim.h b/intern/slim/intern/slim.h
similarity index 100%
rename from intern/slim/slim.h
rename to intern/slim/intern/slim.h
diff --git a/intern/slim/slim_parametrizer.h b/intern/slim/intern/slim_parametrizer.h
similarity index 100%
rename from intern/slim/slim_parametrizer.h
rename to intern/slim/intern/slim_parametrizer.h
diff --git a/intern/slim/uv_initializer.h b/intern/slim/intern/uv_initializer.h
similarity index 100%
rename from intern/slim/uv_initializer.h
rename to intern/slim/intern/uv_initializer.h
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 01e69d367fc..44fe9a62b9e 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -4195,808 +4195,809 @@ void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl)
phandle->state = PHANDLE_STATE_CONSTRUCTED;
}
-void param_slim_enrich_handle(ParamHandle *handle,
- SLIMMatrixTransfer *mt,
- float *weight_array,
- int n_iterations,
- bool skip_initialization,
- bool is_minimize_stretch)
-{
-
- PHandle *phandle = (PHandle *)handle;
- phandle->mt = mt;
- phandle->n_iterations = n_iterations;
- phandle->skip_initialization = skip_initialization;
- phandle->weight_array = weight_array;
- phandle->is_minimize_stretch = is_minimize_stretch;
+void param_begin(ParamHandle *handle, ParamBool abf, bool use_slim)
+{
+ if (use_slim) {
+ param_slim_begin(handle);
+ }
+ else {
+ param_lscm_begin(handle, PARAM_FALSE, abf);
+ }
}
-
-/* In the following are all functions necessary to transfer data from the native part to SLIM. */
-
-/* Allocate pointer arrays for each matrix-group. Meaning as many pointers per array as there are charts. */
-static void allocate_memory_for_pointerarrays(SLIMMatrixTransfer *mt, PHandle *phandle)
+void param_solve(ParamHandle *handle, bool use_slim)
{
- mt->n_charts = phandle->ncharts;
- mt->n_verts = MEM_mallocN(mt->n_charts * sizeof(*mt->n_verts), "Array of number of vertices per Chart");
- mt->n_faces = MEM_mallocN(mt->n_charts * sizeof(*mt->n_faces), "Array of number of Faces per Chart");
- mt->n_edges = MEM_mallocN(mt->n_charts * sizeof(*mt->n_edges), "Array of number of Edges per Chart");
- mt->n_pinned_vertices = MEM_mallocN(mt->n_charts * sizeof(*mt->n_pinned_vertices), "Array of number of Faces per Chart");
- mt->n_boundary_vertices = MEM_mallocN(mt->n_charts * sizeof(*mt->n_boundary_vertices), "Array of number of Faces per Chart");
-
- mt->v_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->v_matrices), "Array of pointers to Vertex matrices");
- mt->uv_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->uv_matrices), "Array of pointers to UV matrices");
- mt->pp_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->pp_matrices), "Array of pointers to Pinned-Vertex-Position matrices");
-
- mt->f_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->f_matrices), "Array of pointers to Face matrices");
- mt->p_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->p_matrices), "Array of pointers to Pinned-Vertex matrices");
- mt->b_vectors = MEM_mallocN(mt->n_charts * sizeof(*mt->b_vectors), "Array of pointers to boundary-Vertex vectors");
- mt->e_matrices = MEM_mallocN(mt->n_charts * sizeof(*mt->e_matrices), "Array of pointers to Edge matrices");
-
- mt->el_vectors = MEM_mallocN(mt->n_charts * sizeof(*mt->el_vectors), "Array of pointers to Edge-Length vectors");
- mt->w_vectors = MEM_mallocN(mt->n_charts * sizeof(*mt->w_vectors), "Array of pointers to weight-per-face vectors");
+ if (use_slim) {
+ param_slim_solve(handle);
+ }
+ else {
+ param_lscm_solve(handle);
+ }
}
-/* For one chart, allocate memory. If no accurate estimate (e.g. for number of pinned vertices) overestimate and
- * correct later. */
-static void allocate_memory_for_matrices(const int chartNr, const PHandle *phandle, const SLIMMatrixTransfer *mt)
+void param_end(ParamHandle *handle, bool use_slim)
{
- mt->n_verts[chartNr] = phandle->charts[chartNr]->nverts;
- mt->n_faces[chartNr] = phandle->charts[chartNr]->nfaces;
- mt->n_edges[chartNr] = phandle->charts[chartNr]->nedges;
-
- mt->v_matrices[chartNr] = MEM_mallocN(mt->n_verts[chartNr] * 3 * sizeof(**mt->v_matrices), "Vertex Matrix");
- mt->uv_matrices[chartNr] = MEM_mallocN(mt->n_verts[chartNr] * 2 * sizeof(**mt->uv_matrices), "UV Matrix");
- mt->pp_matrices[chartNr] = MEM_mallocN(mt->n_verts[chartNr] * 2 * sizeof(**mt->pp_matrices), "Pinned-Vertex-position Matrix");
-
- mt->f_matrices[chartNr] = MEM_mallocN(mt->n_faces[chartNr] * 3 * sizeof(**mt->f_matrices), "Face Matrix");
- mt->p_matrices[chartNr] = MEM_mallocN(mt->n_verts[chartNr] * sizeof(**mt->p_matrices), " Pinned-Vertex Matrix");
- mt->b_vectors[chartNr] = MEM_mallocN(mt->n_verts[chartNr] * sizeof(**mt->b_vectors), " Boundary-Vertex Vector");
- //also clear memory for weight vectors, hence calloc
- mt->w_vectors[chartNr] = MEM_callocN(mt->n_verts[chartNr] * sizeof(**mt->w_vectors), " Weight-per-face Vector");
-
- mt->e_matrices[chartNr] = MEM_mallocN(mt->n_edges[chartNr] * 2 * 2 * sizeof(**mt->e_matrices), " Edge matrix");
- mt->el_vectors[chartNr] = MEM_mallocN(mt->n_edges[chartNr] * 2 * sizeof(**mt->el_vectors), " Edge-Length Vector");
+ if (use_slim) {
+ param_slim_end(handle);
+ }
+ else {
+ param_lscm_end(handle);
+ }
}
-/* Transfer edges and edge lengths */
-static void transfer_edges(const int chartNr, const PHandle *phandle, const SLIMMatrixTransfer *mt)
+void param_lscm_begin(ParamHandle *handle, ParamBool live, ParamBool abf)
{
- PChart *chart = phandle->charts[chartNr];
-
- int *E = mt->e_matrices[chartNr];
- double *EL = mt->el_vectors[chartNr];
+ PHandle *phandle = (PHandle *)handle;
+ PFace *f;
+ int i;
- int eid = 0;
+ param_assert(phandle->state == PHANDLE_STATE_CONSTRUCTED);
+ phandle->state = PHANDLE_STATE_LSCM;
- PEdge *e, *e1;
- PEdge *outer;
- p_chart_boundaries(chart, NULL, &outer);
- PEdge *be = outer;
+ for (i = 0; i < phandle->ncharts; i++) {
+ for (f = phandle->charts[i]->faces; f; f = f->nextlink)
+ p_face_backup_uvs(f);
+ p_chart_lscm_begin(phandle->charts[i], (PBool)live, (PBool)abf);
+ }
+}
- do {
- E[eid] = be->vert->slim_id;
- EL[eid] = p_edge_length(be);
+void param_lscm_solve(ParamHandle *handle)
+{
+ PHandle *phandle = (PHandle *)handle;
+ PChart *chart;
+ int i;
+ PBool result;
- be = p_boundary_edge_next(be);
- E[eid + mt->n_edges[chartNr] + mt->n_boundary_vertices[chartNr]] = be->vert->slim_id;
- eid++;
+ param_assert(phandle->state == PHANDLE_STATE_LSCM);
- } while (be != outer);
+ for (i = 0; i < phandle->ncharts; i++) {
+ chart = phandle->charts[i];
- for (e = chart->edges; e; e = e->nextlink) {
- e1 = e->next;
+ if (chart->u.lscm.context) {
+ result = p_chart_lscm_solve(phandle, chart);
- E[eid] = e->vert->slim_id;
- EL[eid] = p_edge_length(e);
+ if (result && !(chart->flag & PCHART_NOPACK))
+ p_chart_rotate_minimum_area(chart);
- E[eid + mt->n_edges[chartNr] + mt->n_boundary_vertices[chartNr]] = e1->vert->slim_id;
- eid++;
+ if (!result || (chart->u.lscm.pin1))
+ p_chart_lscm_end(chart);
+ }
}
}
-/* Transfer vertices and pinned information */
-static void transfer_vertices(const int chartNr, const PHandle *phandle, SLIMMatrixTransfer *mt, float *temp_w)
+void param_lscm_end(ParamHandle *handle)
{
- PChart *chart = phandle->charts[chartNr];
- PVert *v;
-
- double *V, *UV, *PP;
- float *W;
- int *P;
- float weight;
+ PHandle *phandle = (PHandle *)handle;
+ int i;
- int r = mt->n_verts[chartNr];
- V = mt->v_matrices[chartNr];
- UV = mt->uv_matrices[chartNr];
- P = mt->p_matrices[chartNr];
- PP = mt->pp_matrices[chartNr];
- W = mt->w_vectors[chartNr];
+ param_assert(phandle->state == PHANDLE_STATE_LSCM);
- int pVid = 0;
- int vid = mt->n_boundary_vertices[chartNr];
- //For every vertex, fill up V matrix and P matrix (pinned vertices)
- for (v = chart->verts; v; v = v->nextlink) {
+ for (i = 0; i < phandle->ncharts; i++) {
+ p_chart_lscm_end(phandle->charts[i]);
+#if 0
+ p_chart_complexify(phandle->charts[i]);
+#endif
+ }
- if (!v->on_boundary_flag) {
- if (mt->with_weighted_parameterization) {
- weight = temp_w[v->u.key];
- W[vid] = weight;
- }
+ phandle->state = PHANDLE_STATE_CONSTRUCTED;
+}
- v->slim_id = vid;
- vid++;
- }
+void param_smooth_area(ParamHandle *handle)
+{
+ PHandle *phandle = (PHandle *)handle;
+ int i;
- V[v->slim_id] = v->co[0];
- V[r + v->slim_id] = v->co[1];
- V[2 * r + v->slim_id] = v->co[2];
+ param_assert(phandle->state == PHANDLE_STATE_CONSTRUCTED);
- UV[
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list