[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