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>2011-12-10 09:38:00 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-10 09:38:00 +0400
commit65f3b93f144699fa4aafa46c7e226aa1390b7239 (patch)
tree1a9599589c98d9e17631844fd011463031fe59cd /source/blender/blenkernel/intern/mesh_validate.c
parent99d893bb89a96dd0d6cb9410b12928e7ade4b565 (diff)
parenta88b29c062f32514e4414bfd4006f7b348077a42 (diff)
svn merge ^/trunk/blender -r42521:42550
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_validate.c')
-rw-r--r--source/blender/blenkernel/intern/mesh_validate.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c
index fd19d8461d5..d3cfa42b179 100644
--- a/source/blender/blenkernel/intern/mesh_validate.c
+++ b/source/blender/blenkernel/intern/mesh_validate.c
@@ -136,9 +136,11 @@ int BKE_mesh_validate_arrays( Mesh *me,
MVert *mvert= mverts;
unsigned int i;
- int do_face_free= FALSE;
- int do_edge_free= FALSE;
- int verts_fixed= FALSE;
+ short do_face_free= FALSE;
+ short do_edge_free= FALSE;
+
+ short verts_fixed= FALSE;
+ short vert_weights_fixed= FALSE;
int do_edge_recalc= FALSE;
@@ -165,9 +167,12 @@ int BKE_mesh_validate_arrays( Mesh *me,
for(j=0; j<3; j++) {
if(!finite(mvert->co[j])) {
PRINT(" vertex %u: has invalid coordinate\n", i);
- zero_v3(mvert->co);
- verts_fixed= TRUE;
+ if (do_fixes) {
+ zero_v3(mvert->co);
+
+ verts_fixed= TRUE;
+ }
}
if(mvert->no[j]!=0)
@@ -176,8 +181,10 @@ int BKE_mesh_validate_arrays( Mesh *me,
if(fix_normal) {
PRINT(" vertex %u: has zero normal, assuming Z-up normal\n", i);
- mvert->no[2]= SHRT_MAX;
- verts_fixed= TRUE;
+ if (do_fixes) {
+ mvert->no[2]= SHRT_MAX;
+ verts_fixed= TRUE;
+ }
}
}
@@ -318,8 +325,8 @@ int BKE_mesh_validate_arrays( Mesh *me,
if (dverts) {
MDeformVert *dv;
for(i=0, dv= dverts; i<totvert; i++, dv++) {
- MDeformWeight *dw= dv->dw;
- unsigned int j= 0;
+ MDeformWeight *dw;
+ unsigned int j;
for(j=0, dw= dv->dw; j < dv->totweight; j++, dw++) {
/* note, greater then max defgroups is accounted for in our code, but not < 0 */
@@ -327,6 +334,14 @@ int BKE_mesh_validate_arrays( Mesh *me,
PRINT(" vertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight);
if (do_fixes) {
dw->weight= 0.0f;
+ vert_weights_fixed= TRUE;
+ }
+ }
+ else if (dw->weight < 0.0f || dw->weight > 1.0f) {
+ PRINT(" vertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight);
+ if (do_fixes) {
+ CLAMP(dw->weight, 0.0f, 1.0f);
+ vert_weights_fixed= TRUE;
}
}
@@ -339,6 +354,8 @@ int BKE_mesh_validate_arrays( Mesh *me,
* within the for loop and may not be valid */
j--;
dw= dv->dw + j;
+
+ vert_weights_fixed= TRUE;
}
else { /* all freed */
break;
@@ -369,7 +386,7 @@ int BKE_mesh_validate_arrays( Mesh *me,
}
}
- return (verts_fixed || do_face_free || do_edge_free || do_edge_recalc);
+ return (verts_fixed || vert_weights_fixed || do_face_free || do_edge_free || do_edge_recalc);
}
static int mesh_validate_customdata(CustomData *data, short do_verbose, const short do_fixes)