Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/mesh_validate.c
| Show First 20 Lines • Show All 761 Lines • ▼ Show 20 Lines | #endif | ||||
| if (dverts) { | if (dverts) { | ||||
| MDeformVert *dv; | MDeformVert *dv; | ||||
| for (i = 0, dv = dverts; i < totvert; i++, dv++) { | for (i = 0, dv = dverts; i < totvert; i++, dv++) { | ||||
| MDeformWeight *dw; | MDeformWeight *dw; | ||||
| for (j = 0, dw = dv->dw; j < dv->totweight; j++, dw++) { | for (j = 0, dw = dv->dw; j < dv->totweight; j++, dw++) { | ||||
| /* note, greater than max defgroups is accounted for in our code, but not < 0 */ | /* note, greater than max defgroups is accounted for in our code, but not < 0 */ | ||||
| if (!isfinite(dw->weight)) { | if (!isfinite(dw->weight)) { | ||||
| PRINT_ERR("\tVertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight); | PRINT_ERR("\tVertex deform %u, group %u has weight: %f\n", i, dw->def_nr, dw->weight); | ||||
| if (do_fixes) { | if (do_fixes) { | ||||
| dw->weight = 0.0f; | dw->weight = 0.0f; | ||||
| fix_flag.verts_weight = true; | fix_flag.verts_weight = true; | ||||
| } | } | ||||
| } | } | ||||
| else if (dw->weight < 0.0f || dw->weight > 1.0f) { | else if (dw->weight < 0.0f || dw->weight > 1.0f) { | ||||
| PRINT_ERR("\tVertex deform %u, group %d has weight: %f\n", i, dw->def_nr, dw->weight); | PRINT_ERR("\tVertex deform %u, group %u has weight: %f\n", i, dw->def_nr, dw->weight); | ||||
| if (do_fixes) { | if (do_fixes) { | ||||
| CLAMP(dw->weight, 0.0f, 1.0f); | CLAMP(dw->weight, 0.0f, 1.0f); | ||||
| fix_flag.verts_weight = true; | fix_flag.verts_weight = true; | ||||
| } | } | ||||
| } | } | ||||
| if (dw->def_nr < 0) { | |||||
| PRINT_ERR("\tVertex deform %u, has invalid group %d\n", i, dw->def_nr); | |||||
| if (do_fixes) { | |||||
| defvert_remove_group(dv, dw); | |||||
| fix_flag.verts_weight = true; | |||||
| if (dv->dw) { | |||||
| /* re-allocated, the new values compensate for stepping | |||||
| * within the for loop and may not be valid */ | |||||
| j--; | |||||
| dw = dv->dw + j; | |||||
| } | |||||
| else { /* all freed */ | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| # undef REMOVE_EDGE_TAG | # undef REMOVE_EDGE_TAG | ||||
| # undef IS_REMOVED_EDGE | # undef IS_REMOVED_EDGE | ||||
| # undef REMOVE_LOOP_TAG | # undef REMOVE_LOOP_TAG | ||||
| # undef REMOVE_POLY_TAG | # undef REMOVE_POLY_TAG | ||||
| ▲ Show 20 Lines • Show All 695 Lines • Show Last 20 Lines | |||||