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-02 05:01:07 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-02 05:01:07 +0400
commit15ad39e6848ea54da8a3f36b867f8b09a7b8b163 (patch)
tree53e4f1c2f37d0e2f3679e284a8f7c0f3f66f6d5c /source/blender/blenkernel/intern/mesh_validate.c
parentce6487291349b00a85f265d2b8cfb682e2bb8086 (diff)
parent1936b31cd0f7741ec39f638cc57286e5b379134c (diff)
svn merge ^/trunk/blender -r42303:42329
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_validate.c')
-rw-r--r--source/blender/blenkernel/intern/mesh_validate.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c
index d8e91a140f7..509cc821c65 100644
--- a/source/blender/blenkernel/intern/mesh_validate.c
+++ b/source/blender/blenkernel/intern/mesh_validate.c
@@ -38,6 +38,7 @@
#include "BLI_utildefines.h"
#include "BLI_edgehash.h"
+#include "BLI_math_base.h"
#include "BKE_DerivedMesh.h"
@@ -117,7 +118,7 @@ static int search_face_cmp(const void *v1, const void *v2)
#define PRINT if(do_verbose) printf
-int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totvert, MEdge *medges, unsigned int totedge, MFace *mfaces, unsigned int totface, const short do_verbose, const short do_fixes)
+int BKE_mesh_validate_arrays(Mesh *me, MVert *mverts, unsigned int totvert, MEdge *medges, unsigned int totedge, MFace *mfaces, unsigned int totface, const short do_verbose, const short do_fixes)
{
# define REMOVE_EDGE_TAG(_med) { _med->v2= _med->v1; do_edge_free= 1; }
# define REMOVE_FACE_TAG(_mf) { _mf->v3=0; do_face_free= 1; }
@@ -126,10 +127,12 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
MEdge *med;
MFace *mf;
MFace *mf_prev;
+ MVert *mvert= mverts;
unsigned int i;
int do_face_free= FALSE;
int do_edge_free= FALSE;
+ int verts_fixed= FALSE;
int do_edge_recalc= FALSE;
@@ -149,6 +152,29 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
do_edge_recalc= TRUE;
}
+ for(i=1; i<totvert; i++, mvert++) {
+ int j;
+ int fix_normal= TRUE;
+
+ for(j=0; j<3; j++) {
+ if(isnan(mvert->co[j]) || !finite(mvert->co[j])) {
+ PRINT(" vertex %u: has invalid coordinate\n", i);
+ zero_v3(mvert->co);
+
+ verts_fixed= TRUE;
+ }
+
+ if(mvert->no[j]!=0)
+ fix_normal= FALSE;
+ }
+
+ if(fix_normal) {
+ PRINT(" vertex %u: has zero normal, assuming Z-up normal\n", i);
+ mvert->no[2]= SHRT_MAX;
+ verts_fixed= TRUE;
+ }
+ }
+
for(i=0, med= medges; i<totedge; i++, med++) {
int remove= FALSE;
if(med->v1 == med->v2) {
@@ -300,7 +326,7 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
}
}
- return (do_face_free || do_edge_free || do_edge_recalc);
+ return (verts_fixed || do_face_free || do_edge_free || do_edge_recalc);
}
static int mesh_validate_customdata(CustomData *data, short do_verbose, const short do_fixes)