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;
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to