[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45714] trunk/blender/source/blender/ editors/transform: Fix #30980: edge slide Correct UVs option not working.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Apr 17 17:29:50 CEST 2012


The reason to do this is to avoid accidentally modifying UVs while
doing shape key editing, when you don't notice you have Correct UVs
enabled. If you're editing secondary basis keys, probably you still do
not want to do any UV editing?

It seems better to me to keep it like it is, but it's still fuzzy.

Brecht.

On Tue, Apr 17, 2012 at 4:44 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
> re: if(em->bm->shapenr > 1)
>
> Something that I found wasnt clear when looking into shake key code is
> that any shape key can be the basis for another.
> The BM_mesh_bm_to_me() conversion code check for this.
>
> See: bmesh_mesh_conv.c:772, below /* find if this key is a basis for
> any others */
>
> Should this basis check here do something similar or perhaps the bmesh
> could store this as a separate setting?
>
> On Wed, Apr 18, 2012 at 12:24 AM, Brecht Van Lommel
> <brechtvanlommel at pandora.be> wrote:
>> Revision: 45714
>>          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45714
>> Author:   blendix
>> Date:     2012-04-17 14:24:04 +0000 (Tue, 17 Apr 2012)
>> Log Message:
>> -----------
>> 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.
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/editors/transform/transform.c
>>    trunk/blender/source/blender/editors/transform/transform_conversions.c
>>    trunk/blender/source/blender/editors/transform/transform_ops.c
>>
>> Modified: trunk/blender/source/blender/editors/transform/transform.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/transform/transform.c  2012-04-17 13:07:13 UTC (rev 45713)
>> +++ trunk/blender/source/blender/editors/transform/transform.c  2012-04-17 14:24:04 UTC (rev 45714)
>> @@ -4697,16 +4697,18 @@
>>        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);
>>
>>                for (i=0, tempsv=sld->sv; i<sld->totsv; i++, tempsv++) {
>> @@ -4717,14 +4719,14 @@
>>                        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 @@
>>
>>                        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 @@
>>                                                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 @@
>>                }
>>        }
>>
>> -       /* 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;
>>  }
>>
>> Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/transform/transform_conversions.c      2012-04-17 13:07:13 UTC (rev 45713)
>> +++ trunk/blender/source/blender/editors/transform/transform_conversions.c      2012-04-17 14:24:04 UTC (rev 45714)
>> @@ -4892,10 +4892,6 @@
>>                                }
>>                                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 @@
>>                                        projectSVData(t, FALSE);
>>                                }
>>                        }
>> -#endif
>>                }
>>        }
>>
>>
>> Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/transform/transform_ops.c      2012-04-17 13:07:13 UTC (rev 45713)
>> +++ trunk/blender/source/blender/editors/transform/transform_ops.c      2012-04-17 14:24:04 UTC (rev 45714)
>> @@ -500,12 +500,12 @@
>>
>>        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
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
>
>
> --
> - Campbell
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


More information about the Bf-committers mailing list