diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-04-17 18:24:04 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-04-17 18:24:04 +0400 |
commit | 3f9fce6542e92f4a62af326572bccd3a4cbcfce1 (patch) | |
tree | 86c3eb71cfd58c8adc5068ad9f5084768fac0a3c | |
parent | e4734d3d01a72a765aab3dad7da23b447f7018fe (diff) |
Fix #30980: edge slide Correct UVs option not working.
Was a bmesh todo, main issue was with shape keys, now disabled any changes to
the shape key data layer, and disabled the option altogether when editing
non-basis shape keys.
-rw-r--r-- | source/blender/editors/transform/transform.c | 35 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 5 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 4 |
3 files changed, 17 insertions, 27 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 374268dc735..90c4d87d6f1 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4697,15 +4697,17 @@ void projectSVData(TransInfo *t, int final) BMEditMesh *em = sld->em; SmallHash visit; int i; - + 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 don't want to modify UVs for eg. - * current BMesh code doesnt make it easy to pick which data we interpolate - * - campbell */ + if(!(t->settings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) + return; + + /* don't do this at all for non-basis shape keys, too easy to + accidentally break uv maps or vertex colors then */ + if(em->bm->shapenr > 1) + return; BLI_smallhash_init(&visit); @@ -4717,14 +4719,14 @@ void projectSVData(TransInfo *t, int final) BMIter liter2; BMFace *copyf, *copyf2; BMLoop *l2; - int sel, hide /*, do_vdata */ /* UNUSED */; + int sel, hide; if (BLI_smallhash_haskey(&visit, (uintptr_t)f)) continue; BLI_smallhash_insert(&visit, (uintptr_t)f, NULL); - /*the face attributes of the copied face will get + /* the face attributes of the copied face will get * copied over, so its necessary to save the selection * and hidden state*/ sel = BM_elem_flag_test(f, BM_ELEM_SELECT); @@ -4732,16 +4734,13 @@ void projectSVData(TransInfo *t, int final) copyf2 = BLI_smallhash_lookup(&sld->origfaces, (uintptr_t)f); - /*project onto copied projection face*/ + /* project onto copied projection face */ BM_ITER(l2, &liter2, em->bm, BM_LOOPS_OF_FACE, f) { copyf = copyf2; - /* do_vdata = l2->v==tempsv->v; */ /* UNUSED */ if (BM_elem_flag_test(l2->e, BM_ELEM_SELECT) || BM_elem_flag_test(l2->prev->e, BM_ELEM_SELECT)) { BMLoop *l3 = l2; - /* do_vdata = 1; */ /* UNUSED */ - if (!BM_elem_flag_test(l2->e, BM_ELEM_SELECT)) l3 = l3->prev; @@ -4755,10 +4754,9 @@ void projectSVData(TransInfo *t, int final) continue; /* shouldn't happen, but protection */ } - /* do not run interpolation of all layers for now because it's not actually what you'll always expect - * and layers like shapekeys shouldn't be interpolated from here because oherwise they'll - * propagate to basis keys and will propagate twice to related keys (sergey) */ - // BM_loop_interp_from_face(em->bm, l2, copyf, do_vdata, FALSE); + /* only loop data, no vertex data since that contains shape keys, + * and we do not want to mess up other shape keys */ + BM_loop_interp_from_face(em->bm, l2, copyf, FALSE, FALSE); if (final) { BM_loop_interp_multires(em->bm, l2, copyf); @@ -4893,10 +4891,7 @@ static int doEdgeSlide(TransInfo *t, float perc) } } - /* BMESH_TODO: simply not all layers should be interpolated from there - * but it's quite complicated to set this up with current API. - * details are in comments in projectSVData function */ - // projectSVData(t, 0); + projectSVData(t, 0); return 1; } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index c273d6a5b4c..2cf76158df8 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4892,10 +4892,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } EDBM_automerge(t->scene, t->obedit, 1); } -#if 0 - /* BMESH_TODO: simply nothing to cancel from here, but when interpolation of - * some custom layers would be added this code would eb needed - * some details are in comments in projectSVData (sergey) */ else { if (t->mode == TFM_EDGE_SLIDE) { SlideData *sld = t->customData; @@ -4904,7 +4900,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t) projectSVData(t, FALSE); } } -#endif } } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index cb7d9ae723b..09078c199c4 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -500,12 +500,12 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) if (flags & P_OPTIONS) { - RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Object data texture space", ""); + RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Texture Space", "Edit Object data texture space"); } if (flags & P_CORRECT_UV) { - RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UV coords when transforming", ""); + RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UVs", "Correct UV coordinates 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 |