[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.

Campbell Barton ideasman42 at gmail.com
Tue Apr 17 16:44:05 CEST 2012


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


More information about the Bf-committers mailing list