From 4a04f7206914a49f5f95adc5eb786237f1a9f547 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 23 Oct 2011 17:52:20 +0000 Subject: remove $Id: tags after discussion on the mailign list: http://markmail.org/message/fp7ozcywxum3ar7n --- source/blender/blenkernel/intern/mesh_validate.c | 53 +++++++++++++++++++++--- 1 file changed, 48 insertions(+), 5 deletions(-) (limited to 'source/blender/blenkernel/intern/mesh_validate.c') diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c index 4d735f1d54b..0dac4b8cd80 100644 --- a/source/blender/blenkernel/intern/mesh_validate.c +++ b/source/blender/blenkernel/intern/mesh_validate.c @@ -1,6 +1,4 @@ /* - * $Id$ - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -117,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; } @@ -284,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 @@ -305,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(itotlayer) { + 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) -- cgit v1.2.3