Revision: 20967
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20967
Author:   joeedh
Date:     2009-06-18 06:39:33 +0200 (Thu, 18 Jun 2009)

Log Message:
-----------
Turned delkey->Dissolve Verts into delkey->Dissolve,
and made it sensitive to the selection mode.  Also 
coded dissolve edges, since that was missing.
Removed the old "Delete Edge Loop", since dissolve
edges pretty much replaces that :)

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
    branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c     
2009-06-18 04:36:45 UTC (rev 20966)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c     
2009-06-18 04:39:33 UTC (rev 20967)
@@ -318,7 +318,7 @@
 
                                src[0] = kvloop->data;
                                src[1] = tvloop->data;
-                               CustomData_bmesh_interp(&bm->ldata, src,w, 
NULL, 2, kvloop->data);                                                         
     
+                               CustomData_bmesh_interp(&bm->ldata, src,w, 
NULL, 2, kvloop->data);
                        }
                        l=l->radial.next->data;
                }while(l!=ke->loop);

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-06-18 04:36:45 UTC (rev 20966)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-06-18 04:39:33 UTC (rev 20967)
@@ -148,6 +148,15 @@
        0
 };
 
+BMOpDefine def_dissolveedgessop = {
+       "dissolveedges",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "edges"},
+       {BMOP_OPSLOT_ELEMENT_BUF, "regionout"},
+       {0} /*null-terminating sentinel*/},
+       dissolveedges_exec,
+       0
+};
+
 BMOpDefine def_dissolvefacesop = {
        "dissolvefaces",
        {{BMOP_OPSLOT_ELEMENT_BUF, "faces"},
@@ -243,6 +252,7 @@
        &def_subdop,
        &def_triangop,
        &def_dissolvefacesop,
+       &def_dissolveedgessop,
        &def_dissolvevertsop,
        &def_makefgonsop,
        &def_extrudefaceregion,

Modified: 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h    
    2009-06-18 04:36:45 UTC (rev 20966)
+++ 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h    
    2009-06-18 04:39:33 UTC (rev 20967)
@@ -29,6 +29,6 @@
 void bmesh_edgenet_fill_exec(BMesh *bm, BMOperator *op);
 void bmesh_rotate_exec(BMesh *bm, BMOperator *op);
 void bmesh_makevert_exec(BMesh *bm, BMOperator *op);
+void dissolveedges_exec(BMesh *bm, BMOperator *op);
 
-
 #endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 
2009-06-18 04:36:45 UTC (rev 20966)
+++ branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 
2009-06-18 04:39:33 UTC (rev 20967)
@@ -188,6 +188,51 @@
        V_FREE(regions);
 }
 
+void dissolveedges_exec(BMesh *bm, BMOperator *op)
+{
+       BMOperator fop;
+       BMOIter oiter;
+       BMIter iter;
+       BMVert *v, **verts = NULL;
+       V_DECLARE(verts);
+       BMEdge *e;
+       BMFace *f;
+       int i;
+
+       BMO_ITER(e, &oiter, bm, op, "edges") {
+               if (BM_Edge_FaceCount(e) == 2) {
+                       BMO_SetFlag(bm, e->v1, VERT_MARK);
+                       BMO_SetFlag(bm, e->v2, VERT_MARK);
+
+                       BM_Join_Faces(bm, e->loop->f, 
+                                     ((BMLoop*)e->loop->radial.next->data)->f,
+                                     e);
+               }
+       }
+
+       BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
+               if (BMO_TestFlag(bm, v, VERT_MARK) && 
+                       BM_Vert_EdgeCount(v) == 2) 
+               {
+                       V_GROW(verts);
+                       verts[V_COUNT(verts)-1] = v;
+               }
+       }
+
+       for (i=0; i<V_COUNT(verts); i++) {
+               BM_Collapse_Vert(bm, verts[i]->edge, verts[i], 1.0);
+       }
+       
+       V_FREE(verts);
+
+       //BMO_InitOpf(bm, &fop, "dissolvefaces faces=%ff", FACE_MARK);
+       //BMO_Exec_Op(bm, &fop);
+
+       //BMO_CopySlot(op, &fop, "regionout", "regionout");
+
+       //BMO_Finish_Op(bm, &fop);
+}
+
 static int test_extra_verts(BMesh *bm, BMVert *v)
 {
        BMIter iter, liter, iter2, iter3;

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c    
2009-06-18 04:36:45 UTC (rev 20966)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c    
2009-06-18 04:39:33 UTC (rev 20967)
@@ -967,13 +967,18 @@
                        return OPERATOR_CANCELLED;
        } 
        else if(event==7) {
-               //"Dissolve Verts"
-               if (!EDBM_CallOpf(bem, op, "dissolveverts verts=%hv",BM_SELECT))
-                       return OPERATOR_CANCELLED;
+               //"Dissolve"
+               if (bem->selectmode & SCE_SELECT_FACE) {
+                       if (!EDBM_CallOpf(bem, op, "dissolvefaces 
faces=%hf",BM_SELECT))
+                               return OPERATOR_CANCELLED;
+               } else if (bem->selectmode & SCE_SELECT_EDGE) {
+                       if (!EDBM_CallOpf(bem, op, "dissolveedges 
edges=%he",BM_SELECT))
+                               return OPERATOR_CANCELLED;
+               } else if (bem->selectmode & SCE_SELECT_VERTEX) {
+                       if (!EDBM_CallOpf(bem, op, "dissolveverts 
verts=%hv",BM_SELECT))
+                               return OPERATOR_CANCELLED;
+               }
        }
-       else if(event==6) {
-               //"Erase Edge Loop";
-       }
        else if(event==4) {
                if (!EDBM_CallOpf(bem, op, "del geom=%hef context=%i", 
BM_SELECT, DEL_EDGESFACES))
                        return OPERATOR_CANCELLED;
@@ -1002,13 +1007,12 @@
 
 /* Note, these values must match delete_mesh() event values */
 static EnumPropertyItem prop_mesh_delete_types[] = {
-       {7, "DISSOLVE",         "Dissolve Verts", ""},
+       {7, "DISSOLVE",         "Dissolve", ""},
        {10,"VERT",             "Vertices", ""},
        {1, "EDGE",             "Edges", ""},
        {2, "FACE",             "Faces", ""},
        {4, "EDGE_FACE","Edges & Faces", ""},
        {5, "ONLY_FACE","Only Faces", ""},
-       {6, "EDGE_LOOP","Edge Loop", ""},
        {0, NULL, NULL, NULL}
 };
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to