[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21654] branches/bmesh/blender/source/ blender: some small edge split related things.

Joseph Eagar joeedh at gmail.com
Fri Jul 17 08:05:10 CEST 2009


Revision: 21654
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21654
Author:   joeedh
Date:     2009-07-17 08:05:09 +0200 (Fri, 17 Jul 2009)

Log Message:
-----------
some small edge split related things.  now you can split edges (with no additional geometry created) with mkey.

Modified Paths:
--------------
    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/subdivideop.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
    branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-07-17 06:05:09 UTC (rev 21654)
@@ -6,6 +6,17 @@
   through the code and find all references to them!*/
 
 
+BMOpDefine def_edgesplit = {
+	"edgesplit",
+	{{BMOP_OPSLOT_ELEMENT_BUF, "edges"},
+	{BMOP_OPSLOT_INT, "numcuts"},
+	{BMOP_OPSLOT_ELEMENT_BUF, "outsplit"},
+	{0} /*null-terminating sentinel*/,
+	},
+	esplit_exec,
+	0
+};
+
 BMOpDefine def_mirror = {
 	"mirror",
 	/*maps welded vertices to verts they should weld to.*/
@@ -336,6 +347,7 @@
 	&def_removedoubles,
 	&def_finddoubles,
 	&def_mirror,
+	&def_edgesplit,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-07-17 06:05:09 UTC (rev 21654)
@@ -35,5 +35,6 @@
 void bmesh_removedoubles_exec(BMesh *bm, BMOperator *op);
 void bmesh_finddoubles_exec(BMesh *bm, BMOperator *op);
 void bmesh_mirror_exec(BMesh *bm, BMOperator *op);
+void esplit_exec(BMesh *bm, BMOperator *op);
 
 #endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c	2009-07-17 06:05:09 UTC (rev 21654)
@@ -593,12 +593,12 @@
 };
 
 subdpattern *patterns[] = {
-	&q_1edge,
+	//&q_1edge,
 	&q_2edge_op,
 	&q_4edge,
 	&q_3edge,
 	&q_2edge,
-	&t_1edge,
+	//&t_1edge,
 	&t_2edge,
 	&t_3edge,
 };
@@ -822,4 +822,23 @@
 	MEM_freeN(em2);
 	BM_Free_Mesh(bm);
 }
-#endif
\ No newline at end of file
+#endif
+
+void esplit_exec(BMesh *bm, BMOperator *op)
+{
+	BMOIter siter;
+	BMEdge *e;
+	subdparams params;
+
+	params.numcuts = BMO_GetSlot(op, "numcuts")->data.i;
+	params.op = op;
+	
+	/*go through and split edges*/
+	BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) {
+		bm_subdivide_multicut(bm, e, &params, e->v1, e->v2);
+	}
+
+	BMO_Flag_To_Slot(bm, op, "outsplit",
+		         ELE_SPLIT, BM_ALL);
+}
+

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2009-07-17 06:05:09 UTC (rev 21654)
@@ -1355,3 +1355,40 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
+
+static int editbmesh_edge_split(bContext *C, wmOperator *op)
+{
+	Scene *scene = CTX_data_scene(C);
+	Object *obedit= CTX_data_edit_object(C);
+	Mesh *me= ((Mesh *)obedit->data);
+	BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
+	BMesh *bm = em->bm;
+	BMOperator bmop;
+	int len = 0;
+	
+	BMO_InitOpf(bm, &bmop, "edgesplit edges=%he numcuts=%d", BM_SELECT, RNA_int_get(op->ptr,"number_cuts"));
+	BMO_Exec_Op(bm, &bmop);
+	len = BMO_GetSlot(&bmop, "outsplit")->len;
+	BMO_Finish_Op(bm, &bmop);
+	
+	DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
+	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+
+	return len ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+}
+
+void MESH_OT_edge_split(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Edge Split";
+	ot->idname= "MESH_OT_edge_split";
+	
+	/* api callbacks */
+	ot->exec= editbmesh_edge_split;
+	ot->poll= ED_operator_editmesh;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	RNA_def_int(ot->srna, "number_cuts", 1, 1, 10, "Number of Cuts", "", 1, INT_MAX);
+}

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h	2009-07-17 06:05:09 UTC (rev 21654)
@@ -295,6 +295,7 @@
 
 /* ************* bmesh_tools.c ***********/
 void MESH_OT_vert_connect(struct wmOperatorType *ot);
+void MESH_OT_edge_split(struct wmOperatorType *ot);
 
 #endif // MESH_INTERN_H
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2009-07-17 05:09:33 UTC (rev 21653)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2009-07-17 06:05:09 UTC (rev 21654)
@@ -315,6 +315,7 @@
 	WM_operatortype_append(MESH_OT_specials);
 
 	WM_operatortype_append(MESH_OT_vert_connect);
+	WM_operatortype_append(MESH_OT_edge_split);
 }
 
 /* note mesh keymap also for other space? */
@@ -350,8 +351,9 @@
 	RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_edges_select_sharp", SKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
 	
 	WM_keymap_add_item(keymap, "MESH_OT_vertices_transform_to_sphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT , 0);
+	WM_keymap_add_item(keymap, "MESH_OT_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
 
-	WM_keymap_add_item(keymap, "MESH_OT_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_edge_split", MKEY, KM_PRESS, 0, 0);
 	
 	/* selection mode */
 	WM_keymap_add_item(keymap, "MESH_OT_selection_type", TABKEY, KM_PRESS, KM_CTRL, 0);





More information about the Bf-blender-cvs mailing list