[Bf-blender-cvs] [ddf2a582821] blender2.8: Mesh: Replace DM for mesh w/ wpaint vertex picking

Campbell Barton noreply at git.blender.org
Fri Jun 1 14:30:20 CEST 2018


Commit: ddf2a5828215cdd77a93fcbf2041f600349f8e55
Author: Campbell Barton
Date:   Fri Jun 1 14:29:22 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBddf2a5828215cdd77a93fcbf2041f600349f8e55

Mesh: Replace DM for mesh w/ wpaint vertex picking

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

M	source/blender/editors/mesh/meshtools.c

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

diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 9b86f904161..802922ab799 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -1154,21 +1154,22 @@ bool ED_mesh_pick_face(bContext *C, Object *ob, const int mval[2], unsigned int
 static void ed_mesh_pick_face_vert__mpoly_find(
         /* context */
         struct ARegion *ar, const float mval[2],
-        /* mesh data */
-        DerivedMesh *dm, MPoly *mp, MLoop *mloop,
+        /* mesh data (evaluated) */
+        const MPoly *mp,
+        const MVert *mvert, const MLoop *mloop,
         /* return values */
         float *r_len_best, int *r_v_idx_best)
 {
 	const MLoop *ml;
 	int j = mp->totloop;
 	for (ml = &mloop[mp->loopstart]; j--; ml++) {
-		float co[3], sco[2], len;
+		float sco[2];
 		const int v_idx = ml->v;
-		dm->getVertCo(dm, v_idx, co);
+		const float *co = mvert[v_idx].co;
 		if (ED_view3d_project_float_object(ar, co, sco, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
-			len = len_manhattan_v2v2(mval, sco);
-			if (len < *r_len_best) {
-				*r_len_best = len;
+			const float len_test = len_manhattan_v2v2(mval, sco);
+			if (len_test < *r_len_best) {
+				*r_len_best = len_test;
 				*r_v_idx_best = v_idx;
 			}
 		}
@@ -1191,7 +1192,7 @@ bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned
 		struct ARegion *ar = CTX_wm_region(C);
 
 		/* derived mesh to find deformed locations */
-		DerivedMesh *dm = mesh_get_derived_final(depsgraph, scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
+		Mesh *me_eval = mesh_get_eval_final(depsgraph, scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
 
 		int v_idx_best = ORIGINDEX_NONE;
 
@@ -1199,36 +1200,38 @@ bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned
 		const float mval_f[2] = {UNPACK2(mval)};
 		float len_best = FLT_MAX;
 
-		MPoly *dm_mpoly;
-		MLoop *dm_mloop;
-		unsigned int dm_mpoly_tot;
+		MPoly *me_eval_mpoly;
+		MLoop *me_eval_mloop;
+		MVert *me_eval_mvert;
+		unsigned int me_eval_mpoly_len;
 		const int *index_mp_to_orig;
 
-		dm_mpoly = dm->getPolyArray(dm);
-		dm_mloop = dm->getLoopArray(dm);
+		me_eval_mpoly = me_eval->mpoly;
+		me_eval_mloop = me_eval->mloop;
+		me_eval_mvert = me_eval->mvert;
 
-		dm_mpoly_tot = dm->getNumPolys(dm);
+		me_eval_mpoly_len = me_eval->totpoly;
 
-		index_mp_to_orig = dm->getPolyDataArray(dm, CD_ORIGINDEX);
+		index_mp_to_orig = CustomData_get_layer(&me_eval->pdata, CD_ORIGINDEX);
 
 		/* tag all verts using this face */
 		if (index_mp_to_orig) {
 			unsigned int i;
 
-			for (i = 0; i < dm_mpoly_tot; i++) {
+			for (i = 0; i < me_eval_mpoly_len; i++) {
 				if (index_mp_to_orig[i] == poly_index) {
 					ed_mesh_pick_face_vert__mpoly_find(
 					        ar, mval_f,
-					        dm, &dm_mpoly[i], dm_mloop,
+					        &me_eval_mpoly[i], me_eval_mvert, me_eval_mloop,
 					        &len_best, &v_idx_best);
 				}
 			}
 		}
 		else {
-			if (poly_index < dm_mpoly_tot) {
+			if (poly_index < me_eval_mpoly_len) {
 				ed_mesh_pick_face_vert__mpoly_find(
 				        ar, mval_f,
-				        dm, &dm_mpoly[poly_index], dm_mloop,
+				        &me_eval_mpoly[poly_index], me_eval_mvert, me_eval_mloop,
 				        &len_best, &v_idx_best);
 			}
 		}
@@ -1236,15 +1239,12 @@ bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned
 		/* map 'dm -> me' index if possible */
 		if (v_idx_best != ORIGINDEX_NONE) {
 			const int *index_mv_to_orig;
-
-			index_mv_to_orig = dm->getVertDataArray(dm, CD_ORIGINDEX);
+			index_mv_to_orig = CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX);
 			if (index_mv_to_orig) {
 				v_idx_best = index_mv_to_orig[v_idx_best];
 			}
 		}
 
-		dm->release(dm);
-
 		if ((v_idx_best != ORIGINDEX_NONE) && (v_idx_best < me->totvert)) {
 			*index = v_idx_best;
 			return true;



More information about the Bf-blender-cvs mailing list