editmesh accessor functions. most editmesh access now goes through:
[blender.git] / source / blender / editors / mesh / editmesh.c
index 9e24e520b696c9725d8e0922ba9b9d049406fb64..a266bd18a7a5b8d7463dafbb2dc3f69b2c0c93db 100644 (file)
@@ -1455,9 +1455,10 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
        
        obedit= editbase->object;
        me= obedit->data;
-       em= me->edit_mesh;
+       em= EM_GetEditMesh(me);
        if(me->key) {
                error("Can't separate with vertex keys");
+               EM_EndEditMesh(me, em);
                return 0;
        }
        
@@ -1468,7 +1469,10 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
        
        EM_stats_update(em);
        
-       if(em->totvertsel==0) return 0;
+       if(em->totvertsel==0) {
+               EM_EndEditMesh(me, em);
+               return 0;
+       }
        
        /* we are going to work as follows:
         * 1. add a linked duplicate object: this will be the new one, we remember old pointer
@@ -1536,6 +1540,8 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
        DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); 
        DAG_object_flush_update(scene, basenew->object, OB_RECALC_DATA);        
 
+       EM_EndEditMesh(me, em);
+
        return 1;
 }
 
@@ -1543,7 +1549,7 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
 static int mesh_separate_material(Scene *scene, Base *editbase)
 {
        Mesh *me= editbase->object->data;
-       EditMesh *em= me->edit_mesh;
+       EditMesh *em= EM_GetEditMesh(me);
        unsigned char curr_mat;
        
        for (curr_mat = 1; curr_mat < editbase->object->totcol; ++curr_mat) {
@@ -1552,9 +1558,13 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
                /* select the material */
                editmesh_select_by_material(em, curr_mat);
                /* and now separate */
-               if(0==mesh_separate_selected(scene, editbase))
+               if(0==mesh_separate_selected(scene, editbase)) {
+                       EM_EndEditMesh(me, em);
                        return 0;
+               }
        }
+
+       EM_EndEditMesh(me, em);
        return 1;
 }
 
@@ -1566,10 +1576,11 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
        int doit= 1;
        
        me= editbase->object->data;
-       em= me->edit_mesh;
+       em= EM_GetEditMesh(me);
        
        if(me->key) {
                error("Can't separate with vertex keys");
+               EM_EndEditMesh(me, em);
                return 0;
        }
        
@@ -1585,6 +1596,8 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
                /* and now separate */
                doit= mesh_separate_selected(scene, editbase);
        }
+
+       EM_EndEditMesh(me, em);
        return 1;
 }
 
@@ -2015,3 +2028,11 @@ void em_setup_viewcontext(bContext *C, ViewContext *vc)
        }
 }
 
+EditMesh *EM_GetEditMesh(Mesh *me)
+{
+       return me->edit_mesh;
+}
+
+void EM_EndEditMesh(Mesh *me, EditMesh *em)
+{
+}