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

This commit is contained in:
2009-05-23 03:40:38 +00:00
parent f026266e18
commit 5f4502ec66

View File

@@ -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 @@ void addfaces_from_edgenet(EditMesh *em)
// 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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
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;
}