diff options
-rw-r--r-- | source/blender/editors/include/ED_transform.h | 1 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 6 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 16 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 7 |
4 files changed, 29 insertions, 1 deletions
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index d4d7f971b74..00ae7dda2e3 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -148,6 +148,7 @@ void BIF_selectOrientation(void); #define P_ALIGN_SNAP (P_GEO_SNAP|(1 << 5)) #define P_CONSTRAINT (1 << 6) #define P_OPTIONS (1 << 7) +#define P_CORRECT_UV (1 << 8) void Transform_Properties(struct wmOperatorType *ot, int flags); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index a6cde37913a..6e9b78011a6 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4609,6 +4609,12 @@ void projectSVData(TransInfo *t, int final) if (!em) return; + /* BMESH_TODO, (t->settings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) + * currently all vertex data is interpolated which is nice mostly + * except for shape keys where you dont want to modify UVs for eg. + * current BMesh code doesnt make it easy to pick which data we interpolate + * - campbell */ + BLI_smallhash_init(&visit); for (i=0, tempsv=sld->sv; i<sld->totsv; i++, tempsv++) { diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 71d890daf05..9df00163302 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1015,6 +1015,22 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->options |= CTX_NO_PET; } } + + /* initialize UV transform from */ + if (RNA_struct_find_property(op->ptr, "correct_uv")) { + if(RNA_property_is_set(op->ptr, "correct_uv")) { + if(RNA_boolean_get(op->ptr, "correct_uv")) { + t->settings->uvcalc_flag |= UVCALC_TRANSFORM_CORRECT; + } + else { + t->settings->uvcalc_flag &= ~UVCALC_TRANSFORM_CORRECT; + } + } + else { + RNA_boolean_set(op->ptr, "correct_uv", t->settings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT); + } + } + } else if(t->spacetype==SPACE_IMAGE) { diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index fb40cee95fb..54e0b31e201 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -508,6 +508,11 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Object data texture space", ""); } + if (flags & P_CORRECT_UV) + { + RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UV coords when transforming", ""); + } + // Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit /*prop =*/ RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Always confirm operation when releasing button"); //RNA_def_property_flag(prop, PROP_HIDDEN); @@ -755,7 +760,7 @@ void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f); - Transform_Properties(ot, P_MIRROR|P_SNAP); + Transform_Properties(ot, P_MIRROR|P_SNAP|P_CORRECT_UV); } void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot) |