[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43438] branches/bmesh/blender/source/ blender/bmesh: fix own error [#28645] TODO: dissolve edges doesn' t delete lonely vertices on edges

Campbell Barton ideasman42 at gmail.com
Tue Jan 17 04:41:58 CET 2012


fix was infact for: [#29907] Uncoherent behaviour of Delete Edge Loop

On Tue, Jan 17, 2012 at 2:40 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
> Revision: 43438
>          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43438
> Author:   campbellbarton
> Date:     2012-01-17 03:40:37 +0000 (Tue, 17 Jan 2012)
> Log Message:
> -----------
> fix own error [#28645] TODO: dissolve edges doesn't delete lonely vertices on edges
>
> made this mistake when refactoring edge collapse code, though overall I think the function works better then before now.
>
> Modified Paths:
> --------------
>    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
>    branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
>
> Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
> ===================================================================
> --- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c     2012-01-17 02:20:23 UTC (rev 43437)
> +++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c     2012-01-17 03:40:37 UTC (rev 43438)
> @@ -408,17 +408,21 @@
>        BMEdge *ne = NULL;
>        BMVert *tv = bmesh_edge_getothervert(ke, kv);
>
> +       BMEdge *e2;
> +       BMVert *tv2;
>
>        BMIter iter;
>        BMLoop *l=NULL, *kvloop=NULL, *tvloop=NULL;
>        BMFace **faces = NULL, *f;
>        BLI_array_staticdeclare(faces, 8);
> +
>        void *src[2];
>        float w[2];
>
>        /* Only intended to be called for 2-valence vertices */
>        BLI_assert(bmesh_disk_count(kv) <= 2);
>
> +
>        w[0] = 1.0f - fac;
>        w[1] = fac;
>
> @@ -441,19 +445,13 @@
>                BLI_array_append(faces, f);
>        }
>
> -       /* Collapse between 2+ faces */
> -       if (faces && BLI_array_count(faces) > 1) {
> -               BMFace *f2;
> -               BMEdge *e2;
> -               BMVert *tv2;
> +       BM_Data_Interp_From_Verts(bm, kv, tv, kv, fac);
>
> -               /* only call when making real changes */
> -               BM_Data_Interp_From_Verts(bm, kv, tv, kv, fac);
> +       e2 = bmesh_disk_nextedge(ke, kv);
> +       tv2 = BM_OtherEdgeVert(e2, kv);
>
> -               e2 = bmesh_disk_nextedge(ke, kv);
> -               tv2 = BM_OtherEdgeVert(e2, kv);
> -
> -               f2 = BM_Join_Faces(bm, faces, BLI_array_count(faces));
> +       if (BLI_array_count(faces) > 1) {
> +               BMFace *f2 = BM_Join_Faces(bm, faces, BLI_array_count(faces));
>                if (f2) {
>                        BMLoop *nl = NULL;
>                        if (BM_Split_Face(bm, f2, tv, tv2, &nl, NULL)) {
> @@ -461,7 +459,12 @@
>                        }
>                }
>        }
> -       /* else we cant do anything! */
> +       else { /* single face or no faces */
> +               /* same as BM_Collapse_Vert_Edges() however we already
> +                * have vars to perform this operation so dont call. */
> +               bmesh_jekv(bm, ke, kv);
> +               ne = BM_Edge_Exist(tv, tv2);
> +       }
>
>        BLI_array_free(faces);
>
> @@ -472,8 +475,7 @@
>  /**
>  *                     BM_Collapse_Vert_Edges
>  *
> - * Collapses a vertex onto another vertex it shares an edge with. Fac defines
> - * the amount of interpolation for Custom Data.
> + * Collapses a vertex onto another vertex it shares an edge with.
>  *
>  * Note that this is not a general edge collapse function.
>  *
>
> Modified: branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
> ===================================================================
> --- branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 2012-01-17 02:20:23 UTC (rev 43437)
> +++ branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 2012-01-17 03:40:37 UTC (rev 43438)
> @@ -159,10 +159,9 @@
>
>        BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
>                if (BMO_TestFlag(bm, v, VERT_MARK) &&
> -                       BM_Vert_EdgeCount(v) == 2)
> +                       BM_Vert_EdgeCount(v) == 2)
>                {
> -                       BLI_array_growone(verts);
> -                       verts[BLI_array_count(verts)-1] = v;
> +                       BLI_array_append(verts, v);
>                }
>        }
>
> @@ -224,8 +223,8 @@
>                        BMVert *v1= e->v1, *v2= e->v2;
>
>                        /*collapse the vert*/
> -                       if (BM_Vert_EdgeCount(v1) == 2) BM_Collapse_Vert_Edges(bm, v1->e, v1);
> -                       if (BM_Vert_EdgeCount(v2) == 2) BM_Collapse_Vert_Edges(bm, v2->e, v2);
> +                       if (BM_Vert_EdgeCount(v1) == 2) BM_Collapse_Vert_Faces(bm, v1->e, v1, 1.0f);
> +                       if (BM_Vert_EdgeCount(v2) == 2) BM_Collapse_Vert_Faces(bm, v2->e, v2, 1.0f);
>
>                }
>        }
> @@ -298,7 +297,7 @@
>                        if (BM_Vert_EdgeCount(v) == 2) {
>
>                                /*collapse the vert*/
> -                               BM_Collapse_Vert_Edges(bm, v->e, v);
> +                               BM_Collapse_Vert_Faces(bm, v->e, v, 1.0f);
>                                continue;
>                        }
>
>
> _______________________________________________
> 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-blender-cvs mailing list