[Bf-blender-cvs] [c111eb0e992] blender2.8: Cleanup: get rid of dual DM/Mesh versions of mirror topology code.

Bastien Montagne noreply at git.blender.org
Thu Jun 21 19:06:18 CEST 2018


Commit: c111eb0e9927ecfafd1173fc31dac4f04389e31e
Author: Bastien Montagne
Date:   Thu Jun 21 19:05:10 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBc111eb0e9927ecfafd1173fc31dac4f04389e31e

Cleanup: get rid of dual DM/Mesh versions of mirror topology code.

Easy to switch to only use (evaluated) mesh instead!

===================================================================

M	source/blender/editors/include/ED_mesh.h
M	source/blender/editors/mesh/editmesh_utils.c
M	source/blender/editors/mesh/mesh_mirror.c
M	source/blender/editors/mesh/meshtools.c
M	source/blender/editors/physics/particle_edit.c

===================================================================

diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index a9c9e8c0fbd..32504db6498 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -225,14 +225,9 @@ typedef struct MirrTopoStore_t {
 } MirrTopoStore_t;
 
 bool ED_mesh_mirrtopo_recalc_check(
-        struct Mesh *me, struct DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store);
-bool ED_mesh_mirrtopo_recalc_check__real_mesh(
-        struct Mesh *me, struct Mesh *dm, MirrTopoStore_t *mesh_topo_store);
+        struct Mesh *me, struct Mesh *me_eval, MirrTopoStore_t *mesh_topo_store);
 void ED_mesh_mirrtopo_init(
-        struct Mesh *me, struct DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store,
-        const bool skip_em_vert_array_init);
-void ED_mesh_mirrtopo_init__real_mesh(
-        struct Mesh *me, struct Mesh *dm, MirrTopoStore_t *mesh_topo_store,
+        struct Mesh *me, struct Mesh *me_eval, MirrTopoStore_t *mesh_topo_store,
         const bool skip_em_vert_array_init);
 void ED_mesh_mirrtopo_free(MirrTopoStore_t *mesh_topo_store);
 
@@ -322,22 +317,17 @@ int         join_mesh_shapes_exec(struct bContext *C, struct wmOperator *op);
 
 /* mirror lookup api */
 int ED_mesh_mirror_spatial_table(
-        struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm, const float co[3], char mode);
-int ED_mesh_mirror_spatial_table__real_mesh(
-        struct Object *ob, struct BMEditMesh *em, struct Mesh *mesh, const float co[3], char mode);
-int  ED_mesh_mirror_topo_table(struct Object *ob, struct DerivedMesh *dm, char mode);
-int ED_mesh_mirror_topo_table__real_mesh(struct Object *ob, struct Mesh *mesh, char mode);
+        struct Object *ob, struct BMEditMesh *em, struct Mesh *me_eval, const float co[3], char mode);
+int  ED_mesh_mirror_topo_table(struct Object *ob, struct Mesh *me_eval, char mode);
 
 /* retrieves mirrored cache vert, or NULL if there isn't one.
  * note: calling this without ensuring the mirror cache state
  * is bad.*/
-int            mesh_get_x_mirror_vert(struct Object *ob, struct DerivedMesh *dm, int index, const bool use_topology);
-int mesh_get_x_mirror_vert__real_mesh(struct Object *ob, struct Mesh *mesh, int index, const bool use_topology);
+int mesh_get_x_mirror_vert(struct Object *ob, struct Mesh *me_eval, int index, const bool use_topology);
 struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em,
                                            struct BMVert *eve, const float co[3],
                                            int index, const bool use_topology);
-int           *mesh_get_x_mirror_faces(struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm);
-int *mesh_get_x_mirror_faces__real_mesh(struct Object *ob, struct BMEditMesh *em, struct Mesh *mesh);
+int *mesh_get_x_mirror_faces(struct Object *ob, struct BMEditMesh *em, struct Mesh *me_eval);
 
 int ED_mesh_mirror_get_vert(struct Object *ob, int index);
 
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index 64e6b477abe..5481c52269d 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -1035,7 +1035,7 @@ void EDBM_verts_mirror_cache_begin_ex(
 	BM_mesh_elem_index_ensure(bm, BM_VERT);
 
 	if (use_topology) {
-		ED_mesh_mirrtopo_init__real_mesh(me, NULL, &mesh_topo_store, true);
+		ED_mesh_mirrtopo_init(me, NULL, &mesh_topo_store, true);
 	}
 	else {
 		tree = BLI_kdtree_new(bm->totvert);
diff --git a/source/blender/editors/mesh/mesh_mirror.c b/source/blender/editors/mesh/mesh_mirror.c
index 4c078d2ac8b..4b526915551 100644
--- a/source/blender/editors/mesh/mesh_mirror.c
+++ b/source/blender/editors/mesh/mesh_mirror.c
@@ -32,9 +32,9 @@
 #include "BLI_bitmap.h"
 
 #include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_object_types.h"
 
-#include "BKE_DerivedMesh.h"
 #include "BLI_kdtree.h"
 #include "BKE_editmesh.h"
 #include "BKE_library.h"
@@ -52,11 +52,11 @@ static struct { void *tree; } MirrKdStore = {NULL};
 
 /* mode is 's' start, or 'e' end, or 'u' use */
 /* if end, ob can be NULL */
-int ED_mesh_mirror_spatial_table(Object *ob, BMEditMesh *em, DerivedMesh *dm, const float co[3], char mode)
+int ED_mesh_mirror_spatial_table(Object *ob, BMEditMesh *em, Mesh *me_eval, const float co[3], char mode)
 {
 	if (mode == 'u') {        /* use table */
 		if (MirrKdStore.tree == NULL)
-			ED_mesh_mirror_spatial_table(ob, em, dm, NULL, 's');
+			ED_mesh_mirror_spatial_table(ob, em, me_eval, NULL, 's');
 
 		if (MirrKdStore.tree) {
 			KDTreeNearest nearest;
@@ -72,11 +72,11 @@ int ED_mesh_mirror_spatial_table(Object *ob, BMEditMesh *em, DerivedMesh *dm, co
 	}
 	else if (mode == 's') {   /* start table */
 		Mesh *me = ob->data;
-		const bool use_em = (!dm && em && me->edit_btmesh == em);
-		const int totvert = use_em ? em->bm->totvert : dm ? dm->getNumVerts(dm) : me->totvert;
+		const bool use_em = (!me_eval && em && me->edit_btmesh == em);
+		const int totvert = use_em ? em->bm->totvert : me_eval ? me_eval->totvert : me->totvert;
 
 		if (MirrKdStore.tree) /* happens when entering this call without ending it */
-			ED_mesh_mirror_spatial_table(ob, em, dm, co, 'e');
+			ED_mesh_mirror_spatial_table(ob, em, me_eval, co, 'e');
 
 		MirrKdStore.tree = BLI_kdtree_new(totvert);
 
@@ -93,73 +93,7 @@ int ED_mesh_mirror_spatial_table(Object *ob, BMEditMesh *em, DerivedMesh *dm, co
 			}
 		}
 		else {
-			MVert *mvert = dm ? dm->getVertArray(dm) : me->mvert;
-			int i;
-
-			for (i = 0; i < totvert; i++, mvert++) {
-				BLI_kdtree_insert(MirrKdStore.tree, i, mvert->co);
-			}
-		}
-
-		BLI_kdtree_balance(MirrKdStore.tree);
-	}
-	else if (mode == 'e') { /* end table */
-		if (MirrKdStore.tree) {
-			BLI_kdtree_free(MirrKdStore.tree);
-			MirrKdStore.tree = NULL;
-		}
-	}
-	else {
-		BLI_assert(0);
-	}
-
-	return 0;
-}
-
-/* mode is 's' start, or 'e' end, or 'u' use */
-/* if end, ob can be NULL */
-int ED_mesh_mirror_spatial_table__real_mesh(Object *ob, BMEditMesh *em, Mesh *mesh, const float co[3], char mode)
-{
-	if (mode == 'u') {        /* use table */
-		if (MirrKdStore.tree == NULL)
-			ED_mesh_mirror_spatial_table__real_mesh(ob, em, mesh, NULL, 's');
-
-		if (MirrKdStore.tree) {
-			KDTreeNearest nearest;
-			const int i = BLI_kdtree_find_nearest(MirrKdStore.tree, co, &nearest);
-
-			if (i != -1) {
-				if (nearest.dist < KD_THRESH) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-	else if (mode == 's') {   /* start table */
-		Mesh *me = ob->data;
-		const bool use_em = (!mesh && em && me->edit_btmesh == em);
-		const int totvert = use_em ? em->bm->totvert : mesh ? mesh->totvert : me->totvert;
-
-		if (MirrKdStore.tree) /* happens when entering this call without ending it */
-			ED_mesh_mirror_spatial_table__real_mesh(ob, em, mesh, co, 'e');
-
-		MirrKdStore.tree = BLI_kdtree_new(totvert);
-
-		if (use_em) {
-			BMVert *eve;
-			BMIter iter;
-			int i;
-
-			/* this needs to be valid for index lookups later (callers need) */
-			BM_mesh_elem_table_ensure(em->bm, BM_VERT);
-
-			BM_ITER_MESH_INDEX (eve, &iter, em->bm, BM_VERTS_OF_MESH, i) {
-				BLI_kdtree_insert(MirrKdStore.tree, i, eve->co);
-			}
-		}
-		else {
-			MVert *mvert = mesh ? mesh->mvert : me->mvert;
+			MVert *mvert = me_eval ? me_eval->mvert : me->mvert;
 			int i;
 
 			for (i = 0; i < totvert; i++, mvert++) {
@@ -209,46 +143,15 @@ static int mirrtopo_vert_sort(const void *v1, const void *v2)
 	return 0;
 }
 
-bool ED_mesh_mirrtopo_recalc_check(Mesh *me, DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store)
-{
-	const bool is_editmode = (me->edit_btmesh != NULL);
-	int totvert;
-	int totedge;
-
-	if (dm) {
-		totvert = dm->getNumVerts(dm);
-		totedge = dm->getNumEdges(dm);
-	}
-	else if (me->edit_btmesh) {
-		totvert = me->edit_btmesh->bm->totvert;
-		totedge = me->edit_btmesh->bm->totedge;
-	}
-	else {
-		totvert = me->totvert;
-		totedge = me->totedge;
-	}
-
-	if ((mesh_topo_store->index_lookup == NULL) ||
-	    (mesh_topo_store->prev_is_editmode != is_editmode) ||
-	    (totvert != mesh_topo_store->prev_vert_tot) ||
-	    (totedge != mesh_topo_store->prev_edge_tot))
-	{
-		return true;
-	}
-	else {
-		return false;
-	}
-
-}
-bool ED_mesh_mirrtopo_recalc_check__real_mesh(Mesh *me, Mesh *dm, MirrTopoStore_t *mesh_topo_store)
+bool ED_mesh_mirrtopo_recalc_check(Mesh *me, Mesh *me_eval, MirrTopoStore_t *mesh_topo_store)
 {
 	const bool is_editmode = (me->edit_btmesh != NULL);
 	int totvert;
 	int totedge;
 
-	if (dm) {
-		totvert = dm->totvert;
-		totedge = dm->totedge;
+	if (me_eval) {
+		totvert = me_eval->totvert;
+		totedge = me_eval->totedge;
 	}
 	else if (me->edit_btmesh) {
 		totvert = me->edit_btmesh->bm->totvert;
@@ -272,33 +175,13 @@ bool ED_mesh_mirrtopo_recalc_check__real_mesh(Mesh *me, Mesh *dm, MirrTopoStore_
 
 }
 
-
 void ED_mesh_mirrtopo_init(
-        Mesh *me, DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store,
-        const bool skip_em_vert_array_init)
-{
-	Mesh *fake_mesh = NULL;
-
-	if (dm != NULL) {
-		/* ED_real_mesh_mirrtopo_init() only uses the counts, not the actual data */
-		fake_mesh = BKE_mesh_new_nomain(dm->getNumVerts(dm), dm->getNumEdges(dm), dm->getNumTessFaces(dm),
-		                                dm->getNumLoops(dm), dm->getNumPolys(dm));
-	}
-
-	ED_mesh_mirrtopo_init__real_mesh(me, fake_mesh, mesh_topo_store, skip_em_vert_array_init);
-
-	if (dm != NULL) {
-		BKE_id_free(NULL, fake_mesh);
-	}
-}
-
-void ED_mesh_mirrtopo_init__real_mesh(
-        Mesh *me, Mesh *dm, MirrTopoStore_t *mesh_topo_store,
+        Mesh *me, Mesh *me_eval, MirrTopoStore_t *mesh_topo_store,
         const bool skip_em_vert_array_init)
 {
 	const bool is_editmode = (me->edit_btmesh != NULL);
 	MEdge *medge = NULL, *med;
-	BMEditMesh *em = dm ?  NULL : me->edit_btmesh;
+	BMEditMesh *em = me_eval ?  NULL : me->edit_btmesh;
 
 	/* editmode*/
 	BMEdge *eed;
@@ -327,7 +210,7 @@ void ED_mesh_mirrtopo_init__real_mesh(
 		totvert = em->bm->totvert;
 	}
 	else {
-		totvert = dm ? dm->totvert : me->totvert;
+		totvert = me_eval ? me_eval->totvert : me->totvert;
 	}
 
 	topo_hash = MEM_callocN(totvert * sizeof(MirrTopoHash_t), "TopoMirr");
@@ -343,8 +226,8 @@ void ED_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list