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:
authorCampbell Barton <ideasman42@gmail.com>2020-04-03 13:47:56 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-04-03 13:52:13 +0300
commit7ec59cc7b700952fdbddfbb44a55977e0bf3bcb6 (patch)
treee96541ccf39d82f79cf9d76792c7fdbbc0e8ae56 /source/blender/editors/mesh/meshtools.c
parentb5253159b6113e1f54297ebe06322191b483996e (diff)
Cleanup: split ED_mesh_mirror_*_table into multiple functions
Spatial & topology mirror table each used a single function taking a char as an identifier. Split these into begin/end/lookup functions.
Diffstat (limited to 'source/blender/editors/mesh/meshtools.c')
-rw-r--r--source/blender/editors/mesh/meshtools.c85
1 files changed, 48 insertions, 37 deletions
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 62237b46481..519822dd65c 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -786,53 +786,64 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
}
/* -------------------------------------------------------------------- */
-/* Mesh Mirror (Topology) */
-
/** \name Mesh Topology Mirror API
* \{ */
static MirrTopoStore_t mesh_topo_store = {NULL, -1. - 1, -1};
+BLI_INLINE void mesh_mirror_topo_table_get_meshes(Object *ob,
+ Mesh *me_eval,
+ Mesh **r_me_mirror,
+ BMEditMesh **r_em_mirror)
+{
+ Mesh *me_mirror = NULL;
+ BMEditMesh *em_mirror = NULL;
+
+ Mesh *me = ob->data;
+ if (me_eval != NULL) {
+ me_mirror = me_eval;
+ }
+ else if (me->edit_mesh != NULL) {
+ em_mirror = me->edit_mesh;
+ }
+ else {
+ me_mirror = me;
+ }
+
+ *r_me_mirror = me_mirror;
+ *r_em_mirror = em_mirror;
+}
+
/**
* Mode is 's' start, or 'e' end, or 'u' use
* if end, ob can be NULL.
* \note This is supposed return -1 on error,
* which callers are currently checking for, but is not used so far.
*/
-int ED_mesh_mirror_topo_table(Object *ob, Mesh *me_eval, char mode)
+void ED_mesh_mirror_topo_table_begin(Object *ob, Mesh *me_eval)
{
+ Mesh *me_mirror;
+ BMEditMesh *em_mirror;
+ mesh_mirror_topo_table_get_meshes(ob, me_eval, &me_mirror, &em_mirror);
- Mesh *me_mirror = NULL;
- BMEditMesh *em_mirror = NULL;
+ ED_mesh_mirrtopo_init(em_mirror, me_mirror, &mesh_topo_store, false);
+}
- if (mode != 'e') {
- Mesh *me = ob->data;
- if (me_eval != NULL) {
- me_mirror = me_eval;
- }
- else if (me->edit_mesh != NULL) {
- em_mirror = me->edit_mesh;
- }
- else {
- me_mirror = me;
- }
- }
+void ED_mesh_mirror_topo_table_end(Object *UNUSED(ob))
+{
+ /* TODO: store this in object/object-data (keep unused argument for now). */
+ ED_mesh_mirrtopo_free(&mesh_topo_store);
+}
- if (mode == 'u') { /* use table */
- if (ED_mesh_mirrtopo_recalc_check(em_mirror, me_mirror, &mesh_topo_store)) {
- ED_mesh_mirror_topo_table(ob, me_eval, 's');
- }
- }
- else if (mode == 's') { /* start table */
- ED_mesh_mirrtopo_init(em_mirror, me_mirror, &mesh_topo_store, false);
- }
- else if (mode == 'e') { /* end table */
- ED_mesh_mirrtopo_free(&mesh_topo_store);
- }
- else {
- BLI_assert(0);
- }
+static int ed_mesh_mirror_topo_table_update(Object *ob, Mesh *me_eval)
+{
+ Mesh *me_mirror;
+ BMEditMesh *em_mirror;
+ mesh_mirror_topo_table_get_meshes(ob, me_eval, &me_mirror, &em_mirror);
+ if (ED_mesh_mirrtopo_recalc_check(em_mirror, me_mirror, &mesh_topo_store)) {
+ ED_mesh_mirror_topo_table_begin(ob, me_eval);
+ }
return 0;
}
@@ -849,12 +860,12 @@ static int mesh_get_x_mirror_vert_spatial(Object *ob, Mesh *mesh, int index)
vec[1] = mvert->co[1];
vec[2] = mvert->co[2];
- return ED_mesh_mirror_spatial_table(ob, NULL, mesh, vec, 'u');
+ return ED_mesh_mirror_spatial_table_lookup(ob, NULL, mesh, vec);
}
static int mesh_get_x_mirror_vert_topo(Object *ob, Mesh *mesh, int index)
{
- if (ED_mesh_mirror_topo_table(ob, mesh, 'u') == -1) {
+ if (ed_mesh_mirror_topo_table_update(ob, mesh) == -1) {
return -1;
}
@@ -885,7 +896,7 @@ static BMVert *editbmesh_get_x_mirror_vert_spatial(Object *ob, BMEditMesh *em, c
vec[1] = co[1];
vec[2] = co[2];
- i = ED_mesh_mirror_spatial_table(ob, em, NULL, vec, 'u');
+ i = ED_mesh_mirror_spatial_table_lookup(ob, em, NULL, vec);
if (i != -1) {
return BM_vert_at_index(em->bm, i);
}
@@ -898,7 +909,7 @@ static BMVert *editbmesh_get_x_mirror_vert_topo(Object *ob,
int index)
{
intptr_t poinval;
- if (ED_mesh_mirror_topo_table(ob, NULL, 'u') == -1) {
+ if (ed_mesh_mirror_topo_table_update(ob, NULL) == -1) {
return NULL;
}
@@ -1098,13 +1109,13 @@ int *mesh_get_x_mirror_faces(Object *ob, BMEditMesh *em, Mesh *me_eval)
mvert = me_eval ? me_eval->mvert : me->mvert;
mface = me_eval ? me_eval->mface : me->mface;
- ED_mesh_mirror_spatial_table(ob, em, me_eval, NULL, 's');
+ ED_mesh_mirror_spatial_table_begin(ob, em, me_eval);
for (a = 0, mv = mvert; a < totvert; a++, mv++) {
mirrorverts[a] = mesh_get_x_mirror_vert(ob, me_eval, a, use_topology);
}
- ED_mesh_mirror_spatial_table(ob, em, me_eval, NULL, 'e');
+ ED_mesh_mirror_spatial_table_end(ob);
fhash = BLI_ghash_new_ex(mirror_facehash, mirror_facecmp, "mirror_facehash gh", me->totface);
for (a = 0, mf = mface; a < totface; a++, mf++) {