[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