[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44380] trunk/blender/source/blender: bmesh split tool (Ykey), was only splitting off faces, unlike EditMesh which could also split edges.
Campbell Barton
ideasman42 at gmail.com
Thu Feb 23 17:00:59 CET 2012
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);
More information about the Bf-blender-cvs
mailing list