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-10-26 07:26:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-10-26 07:26:52 +0400
commit94f8e3198d713d4b27aff4594ee3ba7b8328691c (patch)
treeb8e8472b654eee407ef189099cb58229b656ca16 /source/blender/blenkernel/intern/mesh_validate.c
parent2e0d838bc9e7d787e59bdb2d7a7156e95dd6d647 (diff)
parent944b07f5b7339f45bfb0bded22f64458cca3980b (diff)
svn merge -r41266:41287 ^/trunk/blender
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_validate.c')
-rw-r--r--source/blender/blenkernel/intern/mesh_validate.c51
1 files changed, 48 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c
index b3a9bf98d37..4fc843a3944 100644
--- a/source/blender/blenkernel/intern/mesh_validate.c
+++ b/source/blender/blenkernel/intern/mesh_validate.c
@@ -115,9 +115,10 @@ 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)
{
-# define PRINT if(do_verbose) printf
# 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; }
@@ -282,7 +283,6 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
PRINT("BKE_mesh_validate: finished\n\n");
-# undef PRINT
# undef REMOVE_EDGE_TAG
# undef REMOVE_FACE_TAG
@@ -303,12 +303,57 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
return (do_face_free || do_edge_free || do_edge_recalc);
}
+static int mesh_validate_customdata(CustomData *data, short do_verbose, const short do_fixes)
+{
+ int i= 0, has_fixes= 0;
+
+ while(i<data->totlayer) {
+ CustomDataLayer *layer= &data->layers[i];
+ int mask= 1 << layer->type;
+ int ok= 1;
+
+ if((mask&CD_MASK_MESH)==0) {
+ PRINT("CustomDataLayer type %d which isn't in CD_MASK_MESH is stored in Mehs structure\n", layer->type);
+
+ if(do_fixes) {
+ CustomData_free_layer(data, layer->type, 0, i);
+ ok= 0;
+ has_fixes= 1;
+ }
+ }
+
+ if(ok)
+ i++;
+ }
+
+ return has_fixes;
+}
+
+#undef PRINT
+
+int BKE_mesh_validate_all_customdata(CustomData *vdata, CustomData *edata, CustomData *fdata, short do_verbose, const short do_fixes)
+{
+ int vfixed= 0, efixed= 0, ffixed= 0;
+
+ vfixed= mesh_validate_customdata(vdata, do_verbose, do_fixes);
+ efixed= mesh_validate_customdata(edata, do_verbose, do_fixes);
+ ffixed= mesh_validate_customdata(fdata, do_verbose, do_fixes);
+
+ return vfixed || efixed || ffixed;
+}
+
int BKE_mesh_validate(Mesh *me, int do_verbose)
{
+ int layers_fixed= 0, arrays_fixed= 0;
+
if(do_verbose) {
printf("MESH: %s\n", me->id.name+2);
}
- return BKE_mesh_validate_arrays(me, me->mvert, me->totvert, me->medge, me->totedge, me->mface, me->totface, do_verbose, TRUE);
+
+ layers_fixed= BKE_mesh_validate_all_customdata(&me->vdata, &me->edata, &me->fdata, do_verbose, TRUE);
+ arrays_fixed= BKE_mesh_validate_arrays(me, me->mvert, me->totvert, me->medge, me->totedge, me->mface, me->totface, do_verbose, TRUE);
+
+ return layers_fixed || arrays_fixed;
}
int BKE_mesh_validate_dm(DerivedMesh *dm)