[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20351] branches/bmesh/blender/source/ blender/editors/mesh/editmesh_add.c: fkey operator now is sortof working right again, though it really should be recoded to 100% bmesh code

Joseph Eagar joeedh at gmail.com
Sat May 23 05:40:38 CEST 2009


Revision: 20351
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20351
Author:   joeedh
Date:     2009-05-23 05:40:38 +0200 (Sat, 23 May 2009)

Log Message:
-----------
fkey operator now is sortof working right again, though it really should be recoded to 100% bmesh code

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_add.c

Modified: branches/bmesh/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editmesh_add.c	2009-05-23 03:24:15 UTC (rev 20350)
+++ branches/bmesh/blender/source/blender/editors/mesh/editmesh_add.c	2009-05-23 03:40:38 UTC (rev 20351)
@@ -60,6 +60,7 @@
 #include "BKE_object.h"
 #include "BKE_utildefines.h"
 #include "BKE_report.h"
+#include "BKE_tessmesh.h"
 
 #include "BIF_retopo.h"
 
@@ -670,16 +671,17 @@
 // XXX	DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
 }
 
-static void addedgeface_mesh(EditMesh *em, wmOperator *op)
+static void addedgeface_mesh(Mesh *me, BMEditMesh *bem, wmOperator *op)
 {
+	EditMesh *em;
 	EditVert *eve, *neweve[4];
 	EditEdge *eed;
 	EditFace *efa;
 	short amount=0;
 	
 	/*return if bmesh vert connect does anything.*/
-	if (em->selectmode & SCE_SELECT_VERTEX) {
-		BMesh *bm = editmesh_to_bmesh(em);
+	if (bem->selectmode & SCE_SELECT_VERTEX) {
+		BMesh *bm = bem->bm;
 		BMOperator bmop;
 		int len, ok;
 
@@ -687,7 +689,7 @@
 		BMO_Exec_Op(bm, &bmop);
 		BMO_Finish_Op(bm, &bmop);
 
-		ok = EDBM_Finish(bm, em, op, 1);
+		ok = EDBM_Finish(bm, bem, op, 1);
 		if (!ok) return OPERATOR_CANCELLED;
 
 		len = BMO_GetSlot(&bmop, "edgeout")->len;		
@@ -700,7 +702,7 @@
 	  hacks like this to integrate with it
 	  are necassary.*/
 	{
-		BMesh *bm = editmesh_to_bmesh(em);
+		BMesh *bm = bem->bm;
 		BMOperator bmop;
 		int len, ok;
 
@@ -708,13 +710,15 @@
 		BMO_Exec_Op(bm, &bmop);
 		BMO_Finish_Op(bm, &bmop);
 
-		ok = EDBM_Finish(bm, em, op, 1);
+		ok = EDBM_Finish(bm, bem, op, 1);
 		if (!ok) return OPERATOR_CANCELLED;
 
 		len = BMO_GetSlot(&bmop, "regionout")->len;		
 		if (len) return;
 	}
 
+	em = BKE_mesh_get_editmesh(me);
+
 	/* how many selected ? */
 	if(em->selectmode & SCE_SELECT_EDGE) {
 		/* in edge mode finding selected vertices means flushing down edge codes... */
@@ -733,16 +737,19 @@
 	if(amount==2) {
 		eed= addedgelist(em, neweve[0], neweve[1], NULL);
 		EM_select_edge(eed, 1);
-
+		
+		BKE_mesh_end_editmesh(me, em);
 		// XXX		DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);	
 		return;
 	}
 	else if(amount > 4) {
 		addfaces_from_edgenet(em);
+		BKE_mesh_end_editmesh(me, em);
 		return;
 	}
 	else if(amount<2) {
 		BKE_report(op->reports, RPT_ERROR, "More vertices are needed to make an edge/face");
+		BKE_mesh_end_editmesh(me, em);
 		return;
 	}
 
@@ -781,6 +788,7 @@
 				
 				if(count++ > 4){
 					addfaces_from_edgenet(em);
+					BKE_mesh_end_editmesh(me, em);
 					return;
 				} else {
 				/* if 4 edges exist, we just create the face, convex or not */
@@ -822,20 +830,21 @@
 		
 		recalc_editnormals(em);
 	}
-	}
 
+	BKE_mesh_end_editmesh(me, em);
+}
+
 static int addedgeface_mesh_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit= CTX_data_edit_object(C);
-	EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
+	BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
 	
-	addedgeface_mesh(em, op);
+	addedgeface_mesh((Mesh *)obedit->data, em, op);
 	
 	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
 	
 	DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);	
 	
-	BKE_mesh_end_editmesh(obedit->data, em);
 	return OPERATOR_FINISHED;
 }
 





More information about the Bf-blender-cvs mailing list