Revision: 44380
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44380
Author:   campbellbarton
Date:     2012-02-23 16:00:53 +0000 (Thu, 23 Feb 2012)
Log Message:
-----------
bmesh split tool (Ykey), was only splitting off faces, unlike EditMesh which 
could also split edges.
make this behavior optional and default to off (match EditMesh).

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
    trunk/blender/source/blender/editors/mesh/bmesh_tools.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-02-23 
15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-02-23 
16:00:53 UTC (rev 44380)
@@ -738,6 +738,7 @@
         {BMO_OP_SLOT_MAPPING, "boundarymap"},
         {BMO_OP_SLOT_MAPPING, "isovertmap"},
         {BMO_OP_SLOT_PNT, "dest"}, /* destination bmesh, if NULL will use 
current on */
+        {BMO_OP_SLOT_BOOL, "use_only_faces"}, /* when enabled. dont duplicate 
loose verts/edges */
         {0} /* null-terminating sentine */},
        splitop_exec,
        0

Modified: trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_dupe.c     2012-02-23 
15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/bmesh/operators/bmo_dupe.c     2012-02-23 
16:00:53 UTC (rev 44380)
@@ -379,11 +379,7 @@
        BMOperator *splitop = op;
        BMOperator dupeop;
        BMOperator delop;
-       BMVert *v;
-       BMEdge *e;
-       BMFace *f;
-       BMIter iter, iter2;
-       int found;
+       const short use_only_faces = BMO_slot_bool_get(op, "use_only_faces");
 
        /* initialize our sub-operator */
        BMO_op_init(bm, &dupeop, "dupe");
@@ -394,30 +390,38 @@
        
        BMO_slot_buffer_flag_enable(bm, splitop, "geom", SPLIT_INPUT, BM_ALL);
 
-       /* make sure to remove edges and verts we don't need */
-       for (e = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); e; e = 
BM_iter_step(&iter)) {
-               found = 0;
-               f = BM_iter_new(&iter2, bm, BM_FACES_OF_EDGE, e);
-               for ( ; f; f = BM_iter_step(&iter2)) {
-                       if (!BMO_elem_flag_test(bm, f, SPLIT_INPUT)) {
-                               found = 1;
-                               break;
+       if (use_only_faces) {
+               BMVert *v;
+               BMEdge *e;
+               BMFace *f;
+               BMIter iter, iter2;
+               int found;
+
+               /* make sure to remove edges and verts we don't need */
+               for (e = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); e; e = 
BM_iter_step(&iter)) {
+                       found = 0;
+                       f = BM_iter_new(&iter2, bm, BM_FACES_OF_EDGE, e);
+                       for ( ; f; f = BM_iter_step(&iter2)) {
+                               if (!BMO_elem_flag_test(bm, f, SPLIT_INPUT)) {
+                                       found = 1;
+                                       break;
+                               }
                        }
+                       if (!found) BMO_elem_flag_enable(bm, e, SPLIT_INPUT);
                }
-               if (!found) BMO_elem_flag_enable(bm, e, SPLIT_INPUT);
-       }
-       
-       for (v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); v; v = 
BM_iter_step(&iter)) {
-               found = 0;
-               e = BM_iter_new(&iter2, bm, BM_EDGES_OF_VERT, v);
-               for ( ; e; e = BM_iter_step(&iter2)) {
-                       if (!BMO_elem_flag_test(bm, e, SPLIT_INPUT)) {
-                               found = 1;
-                               break;
+
+               for (v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); v; v = 
BM_iter_step(&iter)) {
+                       found = 0;
+                       e = BM_iter_new(&iter2, bm, BM_EDGES_OF_VERT, v);
+                       for ( ; e; e = BM_iter_step(&iter2)) {
+                               if (!BMO_elem_flag_test(bm, e, SPLIT_INPUT)) {
+                                       found = 1;
+                                       break;
+                               }
                        }
+                       if (!found) BMO_elem_flag_enable(bm, v, SPLIT_INPUT);
+
                }
-               if (!found) BMO_elem_flag_enable(bm, v, SPLIT_INPUT);
-
        }
 
        /* connect outputs of dupe to delete, exluding keep geometr */

Modified: trunk/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/bmesh_tools.c     2012-02-23 
15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/editors/mesh/bmesh_tools.c     2012-02-23 
16:00:53 UTC (rev 44380)
@@ -3627,7 +3627,7 @@
        BMEditMesh *em = ((Mesh *)ob->data)->edit_btmesh;
        BMOperator bmop;
 
-       EDBM_InitOpf(em, &bmop, op, "split geom=%hvef", BM_ELEM_SELECT);
+       EDBM_InitOpf(em, &bmop, op, "split geom=%hvef use_only_faces=%b", 
BM_ELEM_SELECT, FALSE);
        BMO_op_exec(em->bm, &bmop);
        BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, 
BM_ELEM_SELECT);
        BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ELEM_SELECT, 
BM_ALL, TRUE);

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

Reply via email to