Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/mesh/editmesh_utils.c')
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c255
1 files changed, 145 insertions, 110 deletions
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index bf37dbbea2e..f824a9062c9 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -41,6 +41,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_bmesh.h"
#include "BKE_context.h"
+#include "BKE_depsgraph.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_mesh.h"
@@ -55,12 +56,14 @@
#include "bmesh.h"
-void EDBM_RecalcNormals(BMEditMesh *em)
+#include "mesh_intern.h"
+
+void EDBM_mesh_normals_update(BMEditMesh *em)
{
BM_mesh_normals_update(em->bm, TRUE);
}
-void EDBM_ClearMesh(BMEditMesh *em)
+void EDBM_mesh_clear(BMEditMesh *em)
{
/* clear bmesh */
BM_mesh_clear(em->bm);
@@ -110,7 +113,7 @@ void EDBM_stats_update(BMEditMesh *em)
}
}
-int EDBM_InitOpf(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const char *fmt, ...)
+int EDBM_op_init(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const char *fmt, ...)
{
BMesh *bm = em->bm;
va_list list;
@@ -134,7 +137,7 @@ int EDBM_InitOpf(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const char *f
/* returns 0 on error, 1 on success. executes and finishes a bmesh operator */
-int EDBM_FinishOp(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const int report)
+int EDBM_op_finish(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const int report)
{
const char *errmsg;
@@ -143,16 +146,24 @@ int EDBM_FinishOp(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const int re
if (BMO_error_get(em->bm, &errmsg, NULL)) {
BMEditMesh *emcopy = em->emcopy;
- if (report) BKE_report(op->reports, RPT_ERROR, errmsg);
+ if (report) {
+ BKE_report(op->reports, RPT_ERROR, errmsg);
+ }
BMEdit_Free(em);
*em = *emcopy;
- BMEdit_RecalcTessellation(em);
MEM_freeN(emcopy);
em->emcopyusers = 0;
em->emcopy = NULL;
- return 0;
+
+ /* when copying, tessellation isn't to for faster copying,
+ * but means we need to re-tessellate here */
+ if (em->looptris == NULL) {
+ BMEdit_RecalcTessellation(em);
+ }
+
+ return FALSE;
}
else {
em->emcopyusers--;
@@ -165,12 +176,12 @@ int EDBM_FinishOp(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const int re
MEM_freeN(em->emcopy);
em->emcopy = NULL;
}
- }
- return 1;
+ return TRUE;
+ }
}
-int EDBM_CallOpf(BMEditMesh *em, wmOperator *op, const char *fmt, ...)
+int EDBM_op_callf(BMEditMesh *em, wmOperator *op, const char *fmt, ...)
{
BMesh *bm = em->bm;
BMOperator bmop;
@@ -191,10 +202,10 @@ int EDBM_CallOpf(BMEditMesh *em, wmOperator *op, const char *fmt, ...)
BMO_op_exec(bm, &bmop);
va_end(list);
- return EDBM_FinishOp(em, &bmop, op, TRUE);
+ return EDBM_op_finish(em, &bmop, op, TRUE);
}
-int EDBM_CallAndSelectOpf(BMEditMesh *em, wmOperator *op, const char *selectslot, const char *fmt, ...)
+int EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op, const char *selectslot, const char *fmt, ...)
{
BMesh *bm = em->bm;
BMOperator bmop;
@@ -214,15 +225,15 @@ int EDBM_CallAndSelectOpf(BMEditMesh *em, wmOperator *op, const char *selectslot
BMO_op_exec(bm, &bmop);
- BM_mesh_elem_flag_disable_all(em->bm, BM_VERT|BM_EDGE|BM_FACE, BM_ELEM_SELECT);
+ BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
BMO_slot_buffer_hflag_enable(em->bm, &bmop, selectslot, BM_ALL, BM_ELEM_SELECT, TRUE);
va_end(list);
- return EDBM_FinishOp(em, &bmop, op, TRUE);
+ return EDBM_op_finish(em, &bmop, op, TRUE);
}
-int EDBM_CallOpfSilent(BMEditMesh *em, const char *fmt, ...)
+int EDBM_op_call_silentf(BMEditMesh *em, const char *fmt, ...)
{
BMesh *bm = em->bm;
BMOperator bmop;
@@ -242,7 +253,7 @@ int EDBM_CallOpfSilent(BMEditMesh *em, const char *fmt, ...)
BMO_op_exec(bm, &bmop);
va_end(list);
- return EDBM_FinishOp(em, &bmop, NULL, FALSE);
+ return EDBM_op_finish(em, &bmop, NULL, FALSE);
}
void EDBM_selectmode_to_scene(bContext *C)
@@ -257,24 +268,20 @@ void EDBM_selectmode_to_scene(bContext *C)
scene->toolsettings->selectmode = em->selectmode;
/* Request redraw of header buttons (to show new select mode) */
- WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, scene);
+ WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, scene);
}
-void EDBM_MakeEditBMesh(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)
+void EDBM_mesh_make(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)
{
Mesh *me = ob->data;
BMesh *bm;
- if (!me->mpoly && me->totface) {
- fprintf(stderr, "%s: bmesh conversion issue! may lose lots of geometry! (bmesh internal error)\n", __func__);
-
- /* BMESH_TODO need to write smarter code here */
- bm = BKE_mesh_to_bmesh(me, ob);
- }
- else {
- bm = BKE_mesh_to_bmesh(me, ob);
+ if (UNLIKELY(!me->mpoly && me->totface)) {
+ BKE_mesh_convert_mfaces_to_mpolys(me);
}
+ bm = BKE_mesh_to_bmesh(me, ob);
+
if (me->edit_btmesh) {
/* this happens when switching shape keys */
BMEdit_Free(me->edit_btmesh);
@@ -294,12 +301,12 @@ void EDBM_MakeEditBMesh(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)
me->edit_btmesh->ob = ob;
}
-void EDBM_LoadEditBMesh(Scene *scene, Object *ob)
+void EDBM_mesh_load(Object *ob)
{
Mesh *me = ob->data;
BMesh *bm = me->edit_btmesh->bm;
- BMO_op_callf(bm, "object_load_bmesh scene=%p object=%p", scene, ob);
+ BM_mesh_bm_to_me(bm, me, FALSE);
#ifdef USE_TESSFACE_DEFAULT
BKE_mesh_tessface_calc(me);
@@ -307,14 +314,14 @@ void EDBM_LoadEditBMesh(Scene *scene, Object *ob)
}
-void EDBM_FreeEditBMesh(BMEditMesh *tm)
+void EDBM_mesh_free(BMEditMesh *tm)
{
BMEdit_Free(tm);
}
-void EDBM_init_index_arrays(BMEditMesh *tm, int forvert, int foredge, int forface)
+void EDBM_index_arrays_init(BMEditMesh *tm, int forvert, int foredge, int forface)
{
- EDBM_free_index_arrays(tm);
+ EDBM_index_arrays_free(tm);
if (forvert) {
BMIter iter;
@@ -356,7 +363,7 @@ void EDBM_init_index_arrays(BMEditMesh *tm, int forvert, int foredge, int forfac
}
}
-void EDBM_free_index_arrays(BMEditMesh *tm)
+void EDBM_index_arrays_free(BMEditMesh *tm)
{
if (tm->vert_index) {
MEM_freeN(tm->vert_index);
@@ -374,17 +381,17 @@ void EDBM_free_index_arrays(BMEditMesh *tm)
}
}
-BMVert *EDBM_get_vert_for_index(BMEditMesh *tm, int index)
+BMVert *EDBM_vert_at_index(BMEditMesh *tm, int index)
{
- return tm->vert_index && index < tm->bm->totvert ?tm->vert_index[index]:NULL;
+ return tm->vert_index && index < tm->bm->totvert ? tm->vert_index[index] : NULL;
}
-BMEdge *EDBM_get_edge_for_index(BMEditMesh *tm, int index)
+BMEdge *EDBM_edge_at_index(BMEditMesh *tm, int index)
{
- return tm->edge_index && index < tm->bm->totedge ?tm->edge_index[index]:NULL;
+ return tm->edge_index && index < tm->bm->totedge ? tm->edge_index[index] : NULL;
}
-BMFace *EDBM_get_face_for_index(BMEditMesh *tm, int index)
+BMFace *EDBM_face_at_index(BMEditMesh *tm, int index)
{
return (tm->face_index && index < tm->bm->totface && index >= 0) ? tm->face_index[index] : NULL;
}
@@ -448,7 +455,7 @@ void EDBM_select_less(BMEditMesh *em)
EDBM_selectmode_flush(em);
}
-int EDBM_get_actSelection(BMEditMesh *em, BMEditSelection *ese)
+int EDBM_editselection_active_get(BMEditMesh *em, BMEditSelection *ese)
{
BMEditSelection *ese_last = em->bm->selected.last;
BMFace *efa = BM_active_face_get(em->bm, FALSE);
@@ -483,12 +490,12 @@ int EDBM_get_actSelection(BMEditMesh *em, BMEditSelection *ese)
void EDBM_flag_disable_all(BMEditMesh *em, const char hflag)
{
- BM_mesh_elem_flag_disable_all(em->bm, BM_VERT|BM_EDGE|BM_FACE, hflag);
+ BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag);
}
void EDBM_flag_enable_all(BMEditMesh *em, const char hflag)
{
- BM_mesh_elem_flag_enable_all(em->bm, BM_VERT|BM_EDGE|BM_FACE, hflag);
+ BM_mesh_elem_flag_enable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, hflag);
}
/**************-------------- Undo ------------*****************/
@@ -505,11 +512,11 @@ static void *getEditMesh(bContext *C)
return NULL;
}
-typedef struct undomesh {
+typedef struct UndoMesh {
Mesh me;
int selectmode;
char obname[MAX_ID_NAME - 2];
-} undomesh;
+} UndoMesh;
/* undo simply makes copies of a bmesh */
static void *editbtMesh_to_undoMesh(void *emv, void *obdata)
@@ -517,33 +524,26 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata)
BMEditMesh *em = emv;
Mesh *obme = obdata;
- undomesh *um = MEM_callocN(sizeof(undomesh), "undo Mesh");
+ UndoMesh *um = MEM_callocN(sizeof(UndoMesh), "undo Mesh");
BLI_strncpy(um->obname, em->ob->id.name + 2, sizeof(um->obname));
/* make sure shape keys work */
um->me.key = obme->key ? copy_key_nolib(obme->key) : NULL;
-#ifdef BMESH_EM_UNDO_RECALC_TESSFACE_WORKAROUND
-
- /* we recalc the tessellation here, to avoid seeding calls to
- * BMEdit_RecalcTessellation throughout the code. */
- BMEdit_RecalcTessellation(em);
-
-#endif
-
/* BM_mesh_validate(em->bm); */ /* for troubleshooting */
- BMO_op_callf(em->bm, "bmesh_to_mesh mesh=%p notessellation=%b", &um->me, TRUE);
+ BM_mesh_bm_to_me(em->bm, &um->me, FALSE);
+
um->selectmode = em->selectmode;
return um;
}
-static void undoMesh_to_editbtMesh(void *umv, void *emv, void *UNUSED(obdata))
+static void undoMesh_to_editbtMesh(void *umv, void *em_v, void *UNUSED(obdata))
{
- BMEditMesh *em = emv, *em2;
+ BMEditMesh *em = em_v, *em_tmp;
Object *ob;
- undomesh *um = umv;
+ UndoMesh *um = umv;
BMesh *bm;
/* BMESH_TODO - its possible the name wont be found right?, should fallback */
@@ -553,26 +553,31 @@ static void undoMesh_to_editbtMesh(void *umv, void *emv, void *UNUSED(obdata))
BMEdit_Free(em);
bm = BM_mesh_create(&bm_mesh_allocsize_default);
- BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%b", &um->me, ob, FALSE);
- em2 = BMEdit_Create(bm, TRUE);
- *em = *em2;
+ BM_mesh_bm_from_me(bm, &um->me, FALSE, ob->shapenr);
+
+ /* face normals need recalculation since we are not calling through an operator */
+ BM_mesh_normals_update(bm, TRUE);
+
+ em_tmp = BMEdit_Create(bm, TRUE);
+ *em = *em_tmp;
em->selectmode = um->selectmode;
+ em->ob = ob;
- MEM_freeN(em2);
+ MEM_freeN(em_tmp);
}
-
-static void free_undo(void *umv)
+static void free_undo(void *me_v)
{
- if (((Mesh *)umv)->key) {
- free_key(((Mesh *)umv)->key);
- MEM_freeN(((Mesh *)umv)->key);
+ Mesh *me = me_v;
+ if (me->key) {
+ free_key(me->key);
+ MEM_freeN(me->key);
}
-
- free_mesh(umv, 0);
- MEM_freeN(umv);
+
+ free_mesh(me, FALSE);
+ MEM_freeN(me);
}
/* and this is all the undo system needs to know */
@@ -589,7 +594,7 @@ void undo_push_mesh(bContext *C, const char *name)
}
/* write comment here */
-UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_array, float *limit)
+UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx_array, float *limit)
{
BMVert *ev;
BMFace *efa;
@@ -604,7 +609,7 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
int totverts, i, totuv;
if (do_face_idx_array)
- EDBM_init_index_arrays(em, 0, 0, 1);
+ EDBM_index_arrays_init(em, 0, 0, 1);
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
@@ -619,13 +624,13 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
if (totuv == 0) {
if (do_face_idx_array)
- EDBM_free_index_arrays(em);
+ EDBM_index_arrays_free(em);
return NULL;
}
vmap = (UvVertMap *)MEM_callocN(sizeof(*vmap), "UvVertMap");
if (!vmap) {
if (do_face_idx_array)
- EDBM_free_index_arrays(em);
+ EDBM_index_arrays_free(em);
return NULL;
}
@@ -635,7 +640,7 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
if (!vmap->vert || !vmap->buf) {
free_uv_vert_map(vmap);
if (do_face_idx_array)
- EDBM_free_index_arrays(em);
+ EDBM_index_arrays_free(em);
return NULL;
}
@@ -672,7 +677,7 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
v->next = newvlist;
newvlist = v;
- efa = EDBM_get_face_for_index(em, v->f);
+ efa = EDBM_face_at_index(em, v->f);
/* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */
l = BM_iter_at_index(em->bm, BM_LOOPS_OF_FACE, efa, v->tfindex);
@@ -684,7 +689,7 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
while (iterv) {
next = iterv->next;
- efa = EDBM_get_face_for_index(em, iterv->f);
+ efa = EDBM_face_at_index(em, iterv->f);
/* tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */
l = BM_iter_at_index(em->bm, BM_LOOPS_OF_FACE, efa, iterv->tfindex);
@@ -714,13 +719,13 @@ UvVertMap *EDBM_make_uv_vert_map(BMEditMesh *em, int selected, int do_face_idx_a
}
if (do_face_idx_array)
- EDBM_free_index_arrays(em);
+ EDBM_index_arrays_free(em);
return vmap;
}
-UvMapVert *EDBM_get_uv_map_vert(UvVertMap *vmap, unsigned int v)
+UvMapVert *EDBM_uv_vert_map_at_index(UvVertMap *vmap, unsigned int v)
{
return vmap->vert[v];
}
@@ -729,7 +734,7 @@ UvMapVert *EDBM_get_uv_map_vert(UvVertMap *vmap, unsigned int v)
/* A specialized vert map used by stitch operator */
-UvElementMap *EDBM_make_uv_element_map(BMEditMesh *em, int selected, int do_islands)
+UvElementMap *EDBM_uv_element_map_create(BMEditMesh *em, int selected, int do_islands)
{
BMVert *ev;
BMFace *efa;
@@ -779,7 +784,7 @@ UvElementMap *EDBM_make_uv_element_map(BMEditMesh *em, int selected, int do_isla
buf = element_map->buf = (UvElement *)MEM_callocN(sizeof(*element_map->buf) * totuv, "UvElement");
if (!element_map->vert || !element_map->buf) {
- EDBM_free_uv_element_map(element_map);
+ EDBM_uv_element_map_free(element_map);
MEM_freeN(island_number);
return NULL;
}
@@ -918,7 +923,7 @@ UvElementMap *EDBM_make_uv_element_map(BMEditMesh *em, int selected, int do_isla
MEM_freeN(islandbuf);
MEM_freeN(stack);
MEM_freeN(map);
- EDBM_free_uv_element_map(element_map);
+ EDBM_uv_element_map_free(element_map);
MEM_freeN(island_number);
}
@@ -948,13 +953,7 @@ UvElementMap *EDBM_make_uv_element_map(BMEditMesh *em, int selected, int do_isla
return element_map;
}
-
-UvMapVert *EM_get_uv_map_vert(UvVertMap *vmap, unsigned int v)
-{
- return vmap->vert[v];
-}
-
-void EDBM_free_uv_vert_map(UvVertMap *vmap)
+void EDBM_uv_vert_map_free(UvVertMap *vmap)
{
if (vmap) {
if (vmap->vert) MEM_freeN(vmap->vert);
@@ -963,7 +962,7 @@ void EDBM_free_uv_vert_map(UvVertMap *vmap)
}
}
-void EDBM_free_uv_element_map(UvElementMap *element_map)
+void EDBM_uv_element_map_free(UvElementMap *element_map)
{
if (element_map) {
if (element_map->vert) MEM_freeN(element_map->vert);
@@ -975,11 +974,11 @@ void EDBM_free_uv_element_map(UvElementMap *element_map)
/* last_sel, use em->act_face otherwise get the last selected face in the editselections
* at the moment, last_sel is mainly useful for making sure the space image dosnt flicker */
-MTexPoly *EDBM_get_active_mtexpoly(BMEditMesh *em, BMFace **r_act_efa, int sloppy)
+MTexPoly *EDBM_mtexpoly_active_get(BMEditMesh *em, BMFace **r_act_efa, int sloppy)
{
BMFace *efa = NULL;
- if (!EDBM_texFaceCheck(em))
+ if (!EDBM_mtexpoly_check(em))
return NULL;
efa = BM_active_face_get(em->bm, sloppy);
@@ -994,14 +993,14 @@ MTexPoly *EDBM_get_active_mtexpoly(BMEditMesh *em, BMFace **r_act_efa, int slopp
}
/* can we edit UV's for this mesh?*/
-int EDBM_texFaceCheck(BMEditMesh *em)
+int EDBM_mtexpoly_check(BMEditMesh *em)
{
/* some of these checks could be a touch overkill */
return em && em->bm->totface && CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY) &&
- CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
+ CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
}
-int EDBM_vertColorCheck(BMEditMesh *em)
+int EDBM_vert_color_check(BMEditMesh *em)
{
/* some of these checks could be a touch overkill */
return em && em->bm->totface && CustomData_has_layer(&em->bm->ldata, CD_MLOOPCOL);
@@ -1013,11 +1012,31 @@ static BMVert *cache_mirr_intptr_as_bmvert(intptr_t *index_lookup, int index)
return (eve_i == -1) ? NULL : (BMVert *)eve_i;
}
+/**
+ * [note: I've decided to use ideasman's code for non-editmode stuff, but since
+ * it has a big "not for editmode!" disclaimer, I'm going to keep what I have here
+ * - joeedh]
+ *
+ * x-mirror editing api. usage:
+ *
+ * EDBM_verts_mirror_cache_begin(em);
+ * ...
+ * ...
+ * BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+ * mirrorv = EDBM_verts_mirror_get(em, v);
+ * }
+ * ...
+ * ...
+ * EDBM_verts_mirror_cache_end(em);
+ *
+ * \note why do we only allow x axis mirror editing?
+ */
+
/* BM_SEARCH_MAXDIST is too big, copied from 2.6x MOC_THRESH, should become a
* preference */
#define BM_SEARCH_MAXDIST_MIRR 0.00002f
#define BM_CD_LAYER_ID "__mirror_index"
-void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
+void EDBM_verts_mirror_cache_begin(BMEditMesh *em, const short use_select)
{
Mesh *me = em->me;
BMesh *bm = em->bm;
@@ -1034,7 +1053,7 @@ void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
}
if (!em->vert_index) {
- EDBM_init_index_arrays(em, 1, 0, 0);
+ EDBM_index_arrays_init(em, 1, 0, 0);
em->mirr_free_arrays = 1;
}
@@ -1052,7 +1071,7 @@ void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
ED_mesh_mirrtopo_init(me, -1, &mesh_topo_store, TRUE);
}
else {
- tree = BMBVH_NewBVH(em, 0, NULL, NULL);
+ tree = BMBVH_NewBVH(em, 0, NULL, NULL);
}
BM_ITER(v, &iter, bm, BM_VERTS_OF_MESH, NULL) {
@@ -1096,7 +1115,7 @@ void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
em->mirror_cdlayer = li;
}
-BMVert *EDBM_GetMirrorVert(BMEditMesh *em, BMVert *v)
+BMVert *EDBM_verts_mirror_get(BMEditMesh *em, BMVert *v)
{
int *mirr = CustomData_bmesh_get_layer_n(&em->bm->vdata, v->head.data, em->mirror_cdlayer);
@@ -1105,7 +1124,7 @@ BMVert *EDBM_GetMirrorVert(BMEditMesh *em, BMVert *v)
if (mirr && *mirr >= 0 && *mirr < em->bm->totvert) {
if (!em->vert_index) {
printf("err: should only be called between "
- "EDBM_CacheMirrorVerts and EDBM_EndMirrorCache");
+ "EDBM_verts_mirror_cache_begin and EDBM_verts_mirror_cache_end");
return NULL;
}
@@ -1115,7 +1134,7 @@ BMVert *EDBM_GetMirrorVert(BMEditMesh *em, BMVert *v)
return NULL;
}
-void EDBM_ClearMirrorVert(BMEditMesh *em, BMVert *v)
+void EDBM_verts_mirror_cache_clear(BMEditMesh *em, BMVert *v)
{
int *mirr = CustomData_bmesh_get_layer_n(&em->bm->vdata, v->head.data, em->mirror_cdlayer);
@@ -1126,7 +1145,7 @@ void EDBM_ClearMirrorVert(BMEditMesh *em, BMVert *v)
}
}
-void EDBM_EndMirrorCache(BMEditMesh *em)
+void EDBM_verts_mirror_cache_end(BMEditMesh *em)
{
if (em->mirr_free_arrays) {
MEM_freeN(em->vert_index);
@@ -1136,7 +1155,7 @@ void EDBM_EndMirrorCache(BMEditMesh *em)
em->mirror_cdlayer = -1;
}
-void EDBM_ApplyMirrorCache(BMEditMesh *em, const int sel_from, const int sel_to)
+void EDBM_verts_mirror_apply(BMEditMesh *em, const int sel_from, const int sel_to)
{
BMIter iter;
BMVert *v;
@@ -1145,7 +1164,7 @@ void EDBM_ApplyMirrorCache(BMEditMesh *em, const int sel_from, const int sel_to)
BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
if (BM_elem_flag_test(v, BM_ELEM_SELECT) == sel_from) {
- BMVert *mirr = EDBM_GetMirrorVert(em, v);
+ BMVert *mirr = EDBM_verts_mirror_get(em, v);
if (mirr) {
if (BM_elem_flag_test(mirr, BM_ELEM_SELECT) == sel_to) {
copy_v3_v3(mirr->co, v->co);
@@ -1158,7 +1177,7 @@ void EDBM_ApplyMirrorCache(BMEditMesh *em, const int sel_from, const int sel_to)
/* swap is 0 or 1, if 1 it hides not selected */
-void EDBM_hide_mesh(BMEditMesh *em, int swap)
+void EDBM_mesh_hide(BMEditMesh *em, int swap)
{
BMIter iter;
BMElem *ele;
@@ -1190,7 +1209,7 @@ void EDBM_hide_mesh(BMEditMesh *em, int swap)
}
-void EDBM_reveal_mesh(BMEditMesh *em)
+void EDBM_mesh_reveal(BMEditMesh *em)
{
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
@@ -1198,8 +1217,7 @@ void EDBM_reveal_mesh(BMEditMesh *em)
int sels[3] = {(em->selectmode & SCE_SELECT_VERTEX),
(em->selectmode & SCE_SELECT_EDGE),
- (em->selectmode & SCE_SELECT_FACE),
- };
+ (em->selectmode & SCE_SELECT_FACE), };
BMIter iter;
BMElem *ele;
@@ -1230,6 +1248,23 @@ void EDBM_reveal_mesh(BMEditMesh *em)
}
EDBM_selectmode_flush(em);
+
+ /* hidden faces can have invalid normals */
+ EDBM_mesh_normals_update(em);
+}
+
+/* so many tools call these that we better make it a generic function.
+ */
+void EDBM_update_generic(bContext *C, BMEditMesh *em, const short do_tessface)
+{
+ Object *ob = em->ob;
+ /* order of calling isn't important */
+ DAG_id_tag_update(ob->data, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+
+ if (do_tessface) {
+ BMEdit_RecalcTessellation(em);
+ }
}
/* * Selection History ***************************************************** */
@@ -1256,17 +1291,17 @@ void EDBM_editselection_plane(BMEditMesh *em, float *plane, BMEditSelection *ese
BM_editselection_plane(em->bm, plane, ese);
}
-void EDBM_remove_selection(BMEditMesh *em, BMElem *ele)
+void EDBM_editselection_remove(BMEditMesh *em, BMHeader *ele)
{
- BM_select_history_remove(em->bm, ele);
+ BM_select_history_remove(em->bm, (BMElem *)ele);
}
-void EDBM_store_selection(BMEditMesh *em, BMElem *ele)
+void EDBM_editselection_store(BMEditMesh *em, BMHeader *ele)
{
- BM_select_history_store(em->bm, ele);
+ BM_select_history_store(em->bm, (BMElem *)ele);
}
-void EDBM_validate_selections(BMEditMesh *em)
+void EDBM_editselection_validate(BMEditMesh *em)
{
BM_select_history_validate(em->bm);
}