[Bf-blender-cvs] [cf1a7e3944] surface-deform-modifier: Review: Report errors in UI and some more cleanup

Luca Rood noreply at git.blender.org
Wed Jan 25 07:08:10 CET 2017


Commit: cf1a7e39441b9c5cdf730a138746360d88b3c7ea
Author: Luca Rood
Date:   Tue Jan 24 17:58:54 2017 -0200
Branches: surface-deform-modifier
https://developer.blender.org/rBcf1a7e39441b9c5cdf730a138746360d88b3c7ea

Review: Report errors in UI and some more cleanup

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

M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/modifiers/intern/MOD_surfacedeform.c

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

diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index df052926d1..0c17909db2 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1606,8 +1606,8 @@ enum {
 /* Surface Deform vertex bind modes */
 enum {
 	MOD_SDEF_MODE_LOOPTRI = 0,
-	MOD_SDEF_MODE_NGON    = 1,
-	MOD_SDEF_MODE_CENTROID  = 2,
+	MOD_SDEF_MODE_NGON = 1,
+	MOD_SDEF_MODE_CENTROID = 2,
 };
 
 #define MOD_MESHSEQ_READ_ALL \
diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c
index 6a23eea3b6..1fd2758c63 100644
--- a/source/blender/modifiers/intern/MOD_surfacedeform.c
+++ b/source/blender/modifiers/intern/MOD_surfacedeform.c
@@ -75,9 +75,19 @@ typedef struct SDefBindWeightData {
 	unsigned int numbinds;
 } SDefBindWeightData;
 
+/* Bind result values */
+enum {
+	MOD_SDEF_BIND_RESULT_SUCCESS = 1,
+	MOD_SDEF_BIND_RESULT_GENERIC_ERR = 0,
+	MOD_SDEF_BIND_RESULT_MEM_ERR = -1,
+	MOD_SDEF_BIND_RESULT_NONMANY_ERR = -2,
+	MOD_SDEF_BIND_RESULT_CONCAVE_ERR = -3,
+	MOD_SDEF_BIND_RESULT_OVERLAP_ERR = -4,
+};
+
 static void initData(ModifierData *md)
 {
-	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *) md;
+	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
 	smd->target = NULL;
 	smd->verts = NULL;
 	smd->flags = 0;
@@ -86,7 +96,7 @@ static void initData(ModifierData *md)
 
 static void freeData(ModifierData *md)
 {
-	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *) md;
+	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
 
 	if (smd->verts) {
 		for (int i = 0; i < smd->numverts; i++) {
@@ -107,8 +117,8 @@ static void freeData(ModifierData *md)
 
 static void copyData(ModifierData *md, ModifierData *target)
 {
-	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *) md;
-	SurfaceDeformModifierData *tsmd = (SurfaceDeformModifierData *) target;
+	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
+	SurfaceDeformModifierData *tsmd = (SurfaceDeformModifierData *)target;
 
 	*tsmd = *smd;
 
@@ -135,7 +145,7 @@ static void copyData(ModifierData *md, ModifierData *target)
 
 static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
 {
-	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *) md;
+	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
 
 	walk(userData, ob, &smd->target, IDWALK_NOP);
 }
@@ -146,7 +156,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest,
                            Object *UNUSED(ob),
                            DagNode *obNode)
 {
-	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *) md;
+	SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
 
 	if (smd->target) {
 		DagNode *curNode = dag_get_node(forest, smd->target);
@@ -205,8 +215,7 @@ static int buildAdjacencyMap(const MPoly *poly, const MEdge *edge, const MLoop *
 				edge_polys[loop->e].num++;
 			}
 			else {
-				printf("Surface Deform: Target has edges with more than two polys\n");
-				return -1;
+				return MOD_SDEF_BIND_RESULT_NONMANY_ERR;
 			}
 		}
 	}
@@ -215,7 +224,7 @@ static int buildAdjacencyMap(const MPoly *poly, const MEdge *edge, const MLoop *
 	for (int i = 0; i < numedges; i++, edge++) {
 		adj = MEM_mallocN(sizeof(*adj), "SDefVertEdge");
 		if (adj == NULL) {
-			return 0;
+			return MOD_SDEF_BIND_RESULT_MEM_ERR;
 		}
 
 		adj->next = vert_edges[edge->v1];
@@ -224,7 +233,7 @@ static int buildAdjacencyMap(const MPoly *poly, const MEdge *edge, const MLoop *
 
 		adj = MEM_mallocN(sizeof(*adj), "SDefVertEdge");
 		if (adj == NULL) {
-			return 0;
+			return MOD_SDEF_BIND_RESULT_MEM_ERR;
 		}
 
 		adj->next = vert_edges[edge->v2];
@@ -232,7 +241,7 @@ static int buildAdjacencyMap(const MPoly *poly, const MEdge *edge, const MLoop *
 		vert_edges[edge->v2] = adj;
 	}
 
-	return 1;
+	return MOD_SDEF_BIND_RESULT_SUCCESS;
 }
 
 BLI_INLINE void sortPolyVertsEdge(unsigned int *indices, const MLoop * const mloop, const unsigned int edge, const unsigned int num)
@@ -304,14 +313,13 @@ BLI_INLINE unsigned int nearestVert(SDefBindCalcData * const data, const float p
 	}
 }
 
-BLI_INLINE bool isPolyValid(const float coords[][2], const unsigned int nr)
+BLI_INLINE int isPolyValid(const float coords[][2], const unsigned int nr)
 {
 	float prev_co[2];
 	float curr_vec[2], prev_vec[2];
 
 	if (!is_poly_convex_v2(coords, nr)) {
-		printf("Surface Deform: Target containts concave polys\n");
-		return false;
+		return MOD_SDEF_BIND_RESULT_CONCAVE_ERR;
 	}
 
 	copy_v2_v2(prev_co, coords[nr - 1]);
@@ -321,20 +329,18 @@ BLI_INLINE bool isPolyValid(const float coords[][2], const unsigned int nr)
 		sub_v2_v2v2(curr_vec, coords[i], prev_co);
 
 		if (len_v2(curr_vec) < FLT_EPSILON) {
-			printf("Surface Deform: Target containts overlapping verts\n");
-			return false;
+			return MOD_SDEF_BIND_RESULT_OVERLAP_ERR;
 		}
 
 		if (1.0f - dot_v2v2(prev_vec, curr_vec) < FLT_EPSILON) {
-			printf("Surface Deform: Target containts concave polys\n");
-			return false;
+			return MOD_SDEF_BIND_RESULT_CONCAVE_ERR;
 		}
 
 		copy_v2_v2(prev_co, coords[i]);
 		copy_v2_v2(prev_vec, curr_vec);
 	}
 
-	return true;
+	return MOD_SDEF_BIND_RESULT_SUCCESS;
 }
 
 static void freeBindData(SDefBindWeightData * const bwdata)
@@ -374,7 +380,7 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData * const data,
 
 	bwdata = MEM_callocN(sizeof(*bwdata), "SDefBindWeightData");
 	if (bwdata == NULL) {
-		data->success = 0;
+		data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 		return NULL;
 	}
 
@@ -394,12 +400,13 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData * const data,
 				float angle;
 				float axis[3];
 				float tmp_vec_v2[2];
+				int is_poly_valid;
 
 				/* SDefBindPoly initialization */
 				bpoly = MEM_mallocN(sizeof(*bpoly), "SDefBindPoly");
 				if (bpoly == NULL) {
 					freeBindData(bwdata);
-					data->success = 0;
+					data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 					return NULL;
 				}
 
@@ -421,14 +428,14 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData * const data,
 				bpoly->coords = MEM_mallocN(sizeof(*bpoly->coords) * poly->totloop, "SDefBindPolyCoords");
 				if (bpoly->coords == NULL) {
 					freeBindData(bwdata);
-					data->success = 0;
+					data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 					return NULL;
 				}
 
 				bpoly->coords_v2 = MEM_mallocN(sizeof(*bpoly->coords_v2) * poly->totloop, "SDefBindPolyCoords_v2");
 				if (bpoly->coords_v2 == NULL) {
 					freeBindData(bwdata);
-					data->success = 0;
+					data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 					return NULL;
 				}
 
@@ -465,9 +472,11 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData * const data,
 					madd_v2_v2fl(bpoly->centroid_v2, bpoly->coords_v2[j], 1.0f / poly->totloop);
 				}
 
-				if (!isPolyValid(bpoly->coords_v2, poly->totloop)) {
+				is_poly_valid = isPolyValid(bpoly->coords_v2, poly->totloop);
+
+				if (is_poly_valid != MOD_SDEF_BIND_RESULT_SUCCESS) {
 					freeBindData(bwdata);
-					data->success = -1;
+					data->success = is_poly_valid;
 					return NULL;
 				}
 
@@ -596,12 +605,7 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData * const data,
 
 			if (isnan(tmp1) || isnan(tmp2)) {
 				freeBindData(bwdata);
-				data->success = -1;
-				/* I know this message is vague, but I could not think of a way
-				 * to explain this whith a reasonably sized message.
-				 * Though it shouldn't really matter all that much,
-				 * because this is very unlikely to occur */
-				printf("Surface Deform: Target contains invalid polys\n");
+				data->success = MOD_SDEF_BIND_RESULT_GENERIC_ERR;
 				return NULL;
 			}
 
@@ -729,7 +733,7 @@ BLI_INLINE float computeNormalDisplacement(const float point_co[3], const float
 
 static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int index, const int UNUSED(threadid))
 {
-	SDefBindCalcData * const data = (SDefBindCalcData *) userdata;
+	SDefBindCalcData * const data = (SDefBindCalcData *)userdata;
 	float point_co[3];
 	float point_co_proj[3];
 
@@ -738,7 +742,7 @@ static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int ind
 	SDefBindPoly *bpoly;
 	SDefBind *sdbind;
 
-	if (data->success != 1) {
+	if (data->success != MOD_SDEF_BIND_RESULT_SUCCESS) {
 		sdvert->binds = NULL;
 		sdvert->numbinds = 0;
 		return;
@@ -755,7 +759,7 @@ static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int ind
 
 	sdvert->binds = MEM_callocN(sizeof(*sdvert->binds) * bwdata->numbinds, "SDefVertBindData");
 	if (sdvert->binds == NULL) {
-		data->success = 0;
+		data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 		sdvert->numbinds = 0;
 		return;
 	}
@@ -775,13 +779,13 @@ static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int ind
 				sdbind->mode = MOD_SDEF_MODE_NGON;
 				sdbind->vert_weights = MEM_mallocN(sizeof(*sdbind->vert_weights) * bpoly->numverts, "SDefNgonVertWeights");
 				if (sdbind->vert_weights == NULL) {
-					data->success = 0;
+					data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 					return;
 				}
 
 				sdbind->vert_inds = MEM_mallocN(sizeof(*sdbind->vert_inds) * bpoly->numverts, "SDefNgonVertInds");
 				if (sdbind->vert_inds == NULL) {
-					data->success = 0;
+					data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 					return;
 				}
 
@@ -810,13 +814,13 @@ static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int ind
 					sdbind->mode = MOD_SDEF_MODE_CENTROID;
 					sdbind->vert_weights = MEM_mallocN(sizeof(*sdbind->vert_weights) * 3, "SDefCentVertWeights");
 					if (sdbind->vert_weights == NULL) {
-						data->success = 0;
+						data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 						return;
 					}
 
 					sdbind->vert_inds = MEM_mallocN(sizeof(*sdbind->vert_inds) * bpoly->numverts, "SDefCentVertInds");
 					if (sdbind->vert_inds == NULL) {
-						data->success = 0;
+						data->success = MOD_SDEF_BIND_RESULT_MEM_ERR;
 						return;
 					}
 
@@ -835,9 +839,7 @@ static void bindVert(void *userdata, void *UNUSED(userdata_chunk), const int ind
 					/* W

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list