[Bf-blender-cvs] [26fd7e084f] uv_unwrapping_slim_algorithm: Category: UV Unwrapping SLIM Algorithm Integration
Aurel Gruber
noreply at git.blender.org
Thu Feb 23 16:53:34 CET 2017
Commit: 26fd7e084fdfa18354f6ad5fc420fbc6f955c013
Author: Aurel Gruber
Date: Wed Feb 22 12:06:21 2017 +0100
Branches: uv_unwrapping_slim_algorithm
https://developer.blender.org/rB26fd7e084fdfa18354f6ad5fc420fbc6f955c013
Category: UV Unwrapping SLIM Algorithm Integration
adding relative scale, reflection mode and Vertex group input
===================================================================
M intern/SLIM
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
M source/blender/makesdna/DNA_scene_types.h
===================================================================
diff --git a/intern/SLIM b/intern/SLIM
index 8686b499ce..cffc347ba2 160000
--- a/intern/SLIM
+++ b/intern/SLIM
@@ -1 +1 @@
-Subproject commit 8686b499ce3f23d537e1e56ab91412bc0b2aefb3
+Subproject commit cffc347ba26c31b04f9080916b99b1e603d4ee5c
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 472e293d8a..6ff5176491 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -253,6 +253,7 @@ typedef struct PHandle {
MDeformVert *weightMapData;
int weightMapIndex;
double weightInfluence;
+ double relative_scale;
BMesh *bm;
} PHandle;
@@ -4360,9 +4361,8 @@ void add_index_to_vertices(BMEditMesh *em){
}
}
-int retrieve_weightmap_index(Object *obedit){
- char *name = "slim";
- return defgroup_name_index(obedit, name);
+int retrieve_weightmap_index(Object *obedit, char *vertex_group){
+ return defgroup_name_index(obedit, vertex_group);
}
void param_slim_enrich_handle(Object *obedit,
@@ -4372,6 +4372,7 @@ void param_slim_enrich_handle(Object *obedit,
MDeformVert *dvert,
int weightMapIndex,
double weightInfluence,
+ double relative_scale,
int n_iterations,
bool skip_initialization,
bool pack_islands,
@@ -4387,6 +4388,7 @@ void param_slim_enrich_handle(Object *obedit,
phandle->weightMapData = dvert;
phandle->weightMapIndex = weightMapIndex;
phandle->weightInfluence = weightInfluence;
+ phandle->relative_scale = relative_scale;
phandle->bm = em->bm;
}
@@ -4428,7 +4430,6 @@ void param_slim_end(ParamHandle *handle) {
PHandle *phandle = (PHandle *) handle;
matrix_transfer *mt = phandle->mt;
set_uv_param_slim(handle, mt);
- free_matrix_transfer(mt);
}
@@ -4835,6 +4836,7 @@ void transfer_data_to_slim(ParamHandle *handle){
mt->transform_islands = true;
mt->with_weighted_parameterization = phandle->with_weighted_parameterization;
mt->weight_influence = phandle->weightInfluence;
+ mt->relative_scale = phandle->relative_scale;
convert_blender_slim(handle, false, phandle->weightMapIndex);
}
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h b/source/blender/editors/uvedit/uvedit_parametrizer.h
index 2a3abaa35c..8dcaf952ed 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.h
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.h
@@ -90,7 +90,7 @@ void param_delete(ParamHandle *chart);
*/
void add_index_to_vertices(BMEditMesh *em);
-int retrieve_weightmap_index(Object *obedit);
+int retrieve_weightmap_index(Object *obedit, char *vertex_group);
void param_slim_enrich_handle(Object *obedit,
BMEditMesh *em,
ParamHandle *handle,
@@ -98,6 +98,7 @@ void param_slim_enrich_handle(Object *obedit,
MDeformVert *dvert,
int weightMapIndex,
double weightInfluence,
+ double relative_scale,
int n_iterations,
bool skip_initialization,
bool pack_islands,
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index ccce5ca230..db56fc9399 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -511,26 +511,23 @@ static ParamHandle *construct_param_handle_subsurfed(Scene *scene, Object *ob, B
return handle;
}
-int setup_weight_transfer(Object *obedit, BMEditMesh *em){
+int setup_weight_transfer(Object *obedit, BMEditMesh *em, char *vertex_group){
- int defgrp_index = retrieve_weightmap_index(obedit);
-
- if (defgrp_index >= 0) {
- //add_index_to_vertices(em);
- }
+ int defgrp_index = retrieve_weightmap_index(obedit, vertex_group);
return defgrp_index;
}
void enrich_handle_slim(Scene *scene, Object *obedit, BMEditMesh *em, ParamHandle *handle, matrix_transfer *mt) {
- int weightMapIndex = setup_weight_transfer(obedit, em);
+ int weightMapIndex = setup_weight_transfer(obedit, em, scene->toolsettings->slim_vertex_group);
bool with_weighted_parameterization = (weightMapIndex >=0);
int n_iterations = scene->toolsettings->slim_n_iterations;
bool skip_initialization = scene->toolsettings->slim_skip_initialization;
bool pack_islands = scene->toolsettings->slim_pack_islands;
double weight_influence = scene->toolsettings->slim_weight_influence;
+ double relative_scale = scene->toolsettings->slim_relative_scale;
MDeformVert *weightMapData = NULL;
@@ -547,6 +544,7 @@ void enrich_handle_slim(Scene *scene, Object *obedit, BMEditMesh *em, ParamHandl
weightMapData,
weightMapIndex,
weight_influence,
+ relative_scale,
n_iterations,
skip_initialization,
pack_islands,
@@ -899,8 +897,8 @@ static void minimize_stretch_SLIM_exit(bContext *C, wmOperator *op, bool cancel)
param_flush(mss->handle);
param_delete(mss->handle);
- free_matrix_transfer(mss->mt);
free_slimPtrs(mss->slimPtrs, mss->mt->nCharts);
+ free_matrix_transfer(mss->mt);
MEM_freeN(mss->slimPtrs);
MEM_freeN(mss);
op->customdata = NULL;
@@ -1477,14 +1475,17 @@ void ED_unwrap_lscm(Scene *scene, Object *obedit, const short sel)
if (use_slim_method){
matrix_transfer *mt = MEM_callocN(sizeof(matrix_transfer), "matrix transfer data");
+ mt->slim_reflection_mode = scene->toolsettings->slim_reflection_mode;
enrich_handle_slim(scene, obedit, em, handle, mt);
}
param_begin(handle, scene->toolsettings->unwrapper == 0, use_slim_method);
param_solve(handle, use_slim_method);
+ bool transform = (!use_slim_method || transformIslands(handle));
param_end(handle, use_slim_method);
- if (!use_slim_method || transformIslands(handle)){
+ if (transform){
+ printf("packing & scaling islands");
param_average(handle);
param_pack(handle, scene->toolsettings->uvcalc_margin, false);
}
@@ -1502,6 +1503,11 @@ static int unwrap_exec(bContext *C, wmOperator *op)
int n_slim_iterations = RNA_int_get(op->ptr, "slim_iterations");
double slim_weight_influence = RNA_float_get(op->ptr, "slim_weight_influence");
+ double slim_relative_scale = RNA_float_get(op->ptr, "slim_relative_scale");
+ int slim_reflection_mode = RNA_enum_get(op->ptr, "slim_reflection_mode");
+
+ char slim_vertex_group[64];
+ RNA_string_get(op->ptr, "slim_vertex_group", slim_vertex_group);
const bool fill_holes = RNA_boolean_get(op->ptr, "fill_holes");
const bool correct_aspect = RNA_boolean_get(op->ptr, "correct_aspect");
@@ -1536,6 +1542,9 @@ static int unwrap_exec(bContext *C, wmOperator *op)
/* get number of iterations and method in global phase for SLIM unwraping*/
scene->toolsettings->slim_n_iterations = n_slim_iterations;
scene->toolsettings->slim_weight_influence = slim_weight_influence;
+ scene->toolsettings->slim_reflection_mode = slim_reflection_mode;
+ scene->toolsettings->slim_relative_scale = slim_relative_scale;
+ scene->toolsettings->slim_vertex_group = slim_vertex_group;
/* remember packing marging */
if (RNA_struct_property_is_set(op->ptr, "margin"))
@@ -1576,6 +1585,12 @@ void UV_OT_unwrap(wmOperatorType *ot)
{0, NULL, 0, NULL, NULL}
};
+ static EnumPropertyItem reflection_items[] = {
+ {0, "ALLOW", 0, "Allow Flips", ""},
+ {1, "DISALLOW", 0, "Don't Allow Flips", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
/* identifiers */
ot->name = "Unwrap";
ot->description = "Unwrap the mesh of the object being edited";
@@ -1597,8 +1612,17 @@ void UV_OT_unwrap(wmOperatorType *ot)
"Map UVs taking vertex position after Subdivision Surface modifier has been applied");
RNA_def_float_factor(ot->srna, "margin", 0.001f, 0.0f, 1.0f, "Margin", "Space between islands", 0.0f, 1.0f);
- RNA_def_int(ot->srna, "slim_iterations", 1, 0, 10000, "SLIM Iterations",
+ RNA_def_enum(ot->srna, "slim_reflection_mode", reflection_items, 0, "SLIM Reflection Mode",
+ "Allowing reflections means that depending on the position of pins, the map may be flipped. Lower distortion.");
+ RNA_def_int(ot->srna, "slim_iterations", 1, -10, 10000, "SLIM Iterations",
"Number of Iterations if the SLIM algorithm is used.", 1, 30);
+ RNA_def_float(ot->srna, "slim_relative_scale", 1.0, 0.001, 1000.0, "SLIM Relative Scale",
+ "Relative Scale of UV Map with respect to pins.", 0.1, 10.0);
+
+ PropertyRNA *prop;
+ prop = RNA_def_property(ot->srna, "slim_vertex_group", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
+
RNA_def_float(ot->srna, "slim_weight_influence", 1.0, -10000.0, 10000.0, "SLIM Weight Map Influence",
"How much influence the weightmap has for weighted parameterization, 0 being no influence.", 0.0, 10.0);
}
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index cb3c83a763..554490fd46 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1458,8 +1458,13 @@ typedef struct ToolSettings {
char uv_flag;
char uv_selectmode;
/* AUREL THESIS*/
+
+
+ float slim_weight_influence;
+ double slim_relative_scale;
+ char *slim_vertex_group;
int slim_n_iterations;
- double slim_weight_influence;
+ int slim_reflection_mode;
int slim_skip_initialization;
int slim_fixed_boundary;
int slim_pack_islands;
More information about the Bf-blender-cvs
mailing list