[Bf-blender-cvs] [2e662bbca47] uv_unwrapping_slim_algorithm: SLIM: use operator history instead of toolsettings for remembering settings.
Brecht Van Lommel
noreply at git.blender.org
Mon Mar 27 22:44:34 CEST 2017
Commit: 2e662bbca477d8a179dcbd25c52a17e8e4a7d518
Author: Brecht Van Lommel
Date: Sat Mar 25 16:14:30 2017 +0100
Branches: uv_unwrapping_slim_algorithm
https://developer.blender.org/rB2e662bbca477d8a179dcbd25c52a17e8e4a7d518
SLIM: use operator history instead of toolsettings for remembering settings.
===================================================================
M source/blender/blenkernel/intern/scene.c
M source/blender/blenloader/intern/versioning_260.c
M source/blender/blenloader/intern/versioning_legacy.c
M source/blender/editors/include/ED_uvedit.h
M source/blender/editors/uvedit/uvedit_ops.c
M source/blender/editors/uvedit/uvedit_unwrap_ops.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_event_system.c
===================================================================
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 56bfe5d7ff1..1e8c1a0db05 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -597,7 +597,6 @@ void BKE_scene_init(Scene *sce)
sce->toolsettings->doublimit = 0.001;
sce->toolsettings->vgroup_weight = 1.0f;
sce->toolsettings->uvcalc_margin = 0.001f;
- sce->toolsettings->unwrapper = 1;
sce->toolsettings->select_thresh = 0.01f;
sce->toolsettings->selectmode = SCE_SELECT_VERTEX;
diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c
index ab3d14af882..4a856feaa1a 100644
--- a/source/blender/blenloader/intern/versioning_260.c
+++ b/source/blender/blenloader/intern/versioning_260.c
@@ -1707,13 +1707,12 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *main)
}
if (main->versionfile < 264 || (main->versionfile == 264 && main->subversionfile < 5)) {
- /* set a unwrapping margin and ABF by default */
+ /* set a UV margin by default */
Scene *scene;
for (scene = main->scene.first; scene; scene = scene->id.next) {
if (scene->toolsettings->uvcalc_margin == 0.0f) {
scene->toolsettings->uvcalc_margin = 0.001f;
- scene->toolsettings->unwrapper = 0;
}
}
}
diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c
index f2d42849bcc..921c69fcaa4 100644
--- a/source/blender/blenloader/intern/versioning_legacy.c
+++ b/source/blender/blenloader/intern/versioning_legacy.c
@@ -2236,12 +2236,6 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
if (sce->nodetree)
ntree_version_241(sce->nodetree);
- /* uv calculation options moved to toolsettings */
- if (sce->toolsettings->unwrapper == 0) {
- sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES;
- sce->toolsettings->unwrapper = 1;
- }
-
if (sce->r.mode & R_PANORAMA) {
/* all these checks to ensure saved files between released versions keep working... */
if (sce->r.xsch < sce->r.ysch) {
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 535683823bf..a0ff29790fe 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -42,8 +42,10 @@ struct Main;
struct Object;
struct Scene;
struct SpaceImage;
+struct UnwrapProperties;
struct bNode;
struct wmKeyConfig;
+struct wmOperator;
/* uvedit_ops.c */
void ED_operatortypes_uvedit(void);
@@ -104,7 +106,7 @@ void ED_uvedit_pack_islands(struct Scene *scene, struct Object *ob, struct BMesh
void ED_uvedit_unwrap_cube_project(struct Object *ob, struct BMesh *bm, float cube_size, bool use_select);
/* single call up unwrap using scene settings, used for edge tag unwrapping */
-void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel);
+void ED_uvedit_unwrap(struct Scene *scene, struct Object *obedit, const short sel, struct wmOperator *op);
/* uvedit_draw.c */
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 193b006cf0d..c7b292d1458 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -4182,7 +4182,7 @@ static int uv_mark_seam_exec(bContext *C, wmOperator *op)
me->drawflag |= ME_DRAWSEAMS;
if (scene->toolsettings->edge_mode_live_unwrap)
- ED_unwrap_lscm(scene, ob, false);
+ ED_uvedit_unwrap(scene, ob, false, NULL);
DAG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index ed01971fecc..2f288708160 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -76,7 +76,6 @@
#include "RNA_access.h"
#include "RNA_define.h"
-
#include "WM_api.h"
#include "WM_types.h"
@@ -86,24 +85,6 @@
#include "slim_matrix_transfer.h"
#include "slim_capi.h"
-static void modifier_unwrap_state(Object *obedit, Scene *scene, bool *r_use_subsurf)
-{
- ModifierData *md;
- bool subsurf = (scene->toolsettings->uvcalc_flag & UVCALC_USESUBSURF) != 0;
-
- md = obedit->modifiers.first;
-
- /* subsurf will take the modifier settings only if modifier is first or right after mirror */
- if (subsurf) {
- if (md && md->type == eModifierType_Subsurf)
- subsurf = true;
- else
- subsurf = false;
- }
-
- *r_use_subsurf = subsurf;
-}
-
static bool ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
{
Main *bmain = CTX_data_main(C);
@@ -167,6 +148,61 @@ static bool ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
return 1;
}
+/******************* Remembered Properties ******************/
+
+typedef struct UnwrapProperties {
+ bool use_slim;
+ bool use_abf;
+ bool correct_aspect;
+ bool fill_holes;
+ bool use_subsurf;
+ char vertex_group[MAX_ID_NAME];
+ float vertex_group_factor;
+ float relative_scale;
+ int reflection_mode;
+ int iterations;
+} UnwrapProperties;
+
+static UnwrapProperties unwrap_properties_get(wmOperator *op, Object *ob)
+{
+ /* We use the properties from the last unwrap operator for subsequent
+ * live unwrap and minize stretch operators. */
+ PointerRNA ptr;
+ WM_operator_last_properties_alloc(op, "UV_OT_unwrap", &ptr);
+
+ UnwrapProperties unwrap;
+ unwrap.use_abf = RNA_enum_get(&ptr, "method") == 0;
+ unwrap.use_slim = RNA_enum_get(&ptr, "method") == 2;
+ unwrap.correct_aspect = RNA_boolean_get(&ptr, "correct_aspect");
+ unwrap.fill_holes = RNA_boolean_get(&ptr, "fill_holes");
+ unwrap.use_subsurf = RNA_boolean_get(&ptr, "use_subsurf_data");
+ RNA_string_get(&ptr, "vertex_group", unwrap.vertex_group);
+ unwrap.vertex_group_factor = RNA_float_get(&ptr, "vertex_group_factor");
+ unwrap.relative_scale = RNA_float_get(&ptr, "relative_scale");
+ unwrap.reflection_mode = RNA_enum_get(&ptr, "reflection_mode");
+ unwrap.iterations = RNA_int_get(&ptr, "iterations");
+
+ /* SLIM requires hole filling */
+ if (unwrap.use_slim) {
+ unwrap.fill_holes = true;
+ }
+
+ /* Subsurf will take the modifier settings only if modifier is first or right after mirror */
+ if (unwrap.use_subsurf) {
+ ModifierData *md = ob->modifiers.first;
+
+ if (!(md && md->type == eModifierType_Subsurf)) {
+ unwrap.use_subsurf = false;
+ if (op)
+ BKE_report(op->reports, RPT_INFO, "Subdivision Surface modifier needs to be first to work with unwrap");
+ }
+ }
+
+ WM_operator_properties_free(&ptr);
+
+ return unwrap;
+}
+
/****************** Parametrizer Conversion ***************/
static bool uvedit_have_selection(Scene *scene, BMEditMesh *em, bool implicit)
@@ -523,7 +559,7 @@ static void create_weight_matrix(BMesh *bm,
}
}
-static int retrieve_weightmap_index(Object *obedit, char *vertex_group)
+static int retrieve_weightmap_index(Object *obedit, const char *vertex_group)
{
return defgroup_name_index(obedit, vertex_group);
}
@@ -540,14 +576,16 @@ static void fill_in_matrix_transfer(SLIMMatrixTransfer *mt,
mt->relative_scale = relative_scale;
}
-static void enrich_handle_slim(Scene *scene,
- Object *obedit,
+static void enrich_handle_slim(Object *obedit,
BMEditMesh *em,
ParamHandle *handle,
SLIMMatrixTransfer *mt,
- bool is_minimize_stretch)
+ bool is_minimize_stretch,
+ const UnwrapProperties *unwrap,
+ bool skip_initialization,
+ bool pack_islands)
{
- int weight_map_index = retrieve_weightmap_index(obedit, scene->toolsettings->slim_vertex_group);
+ int weight_map_index = retrieve_weightmap_index(obedit, unwrap->vertex_group);
bool with_weighted_parameterization = (weight_map_index >=0);
float *weight_array = NULL;
@@ -561,17 +599,14 @@ static void enrich_handle_slim(Scene *scene,
fill_in_matrix_transfer(mt,
with_weighted_parameterization,
- scene->toolsettings->slim_weight_influence,
- scene->toolsettings->slim_pack_islands,
- scene->toolsettings->slim_relative_scale);
-
- int n_iterations = scene->toolsettings->slim_n_iterations;
- bool skip_initialization = scene->toolsettings->slim_skip_initialization;
+ unwrap->vertex_group_factor,
+ pack_islands,
+ unwrap->relative_scale);
param_slim_enrich_handle(handle,
mt,
weight_array,
- n_iterations,
+ unwrap->iterations,
skip_initialization,
is_minimize_stretch);
}
@@ -606,6 +641,14 @@ static bool minimize_stretch_init(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ bool implicit = true;
+
+ if (!uvedit_have_selection(scene, em, implicit)) {
+ return false;
+ }
+
+ UnwrapProperties unwrap = unwrap_properties_get(NULL, obedit);
+ unwrap.fill_holes = true;
ParamHandle *handle = construct_param_handle(scene, obedit, em->bm, false, true, 1, 1);
@@ -620,11 +663,7 @@ static bool minimize_stretch_init(bContext *C, wmOperator *op)
ms->fixBorder = RNA_boolean_get(op->ptr, "fix_boundary");
rs->mt->fixed_boundary = RNA_boolean_get(op->ptr, "fix_boundary");
- scene->toolsettings->slim_skip_initialization = true;
- scene->toolsettings->slim_pack_islands = false;
- scene->toolsettings->slim_fixed_boundary = RNA_boolean_get(op->ptr, "fix_boundary");
-
- enrich_handle_slim(scene, obedit, em, handle, rs->mt, true);
+ enrich_handle_slim(obedit, em, handle, rs->mt, true, &unwrap, true, false);
param_slim_begin(handle);
rs->slimPtrs = MEM_callocN(sizeof(rs->slimPtrs)*rs->mt->n_charts, "pointers to per-chart-Data for Slim");
@@ -903,34 +942,26 @@ static ParamHandle *liveHandle = NULL;
void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit)
{
-
BMEditMesh *em = BKE_editmesh_from_object(obedit);
- const bool abf = (scene->toolsettings->unwrapper == 0);
- const bool fillholes = (scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES) != 0;
- bool use_subsurf;
-
- modifier_unwrap_state(obedit, scene, &use_subsurf);
if (!ED_uvedit_test(obedit)) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list