/* rotates the vertices of a face in case v[2] or v[3] (vertex index) is = 0. this is necessary to make the if(mface->v4) check for quads work */ int test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr) { /* first test if the face is legal */ if(mface->v3 && mface->v3==mface->v4) { mface->v4= 0; nr--; } if(mface->v2 && mface->v2==mface->v3) { mface->v3= mface->v4; mface->v4= 0; nr--; } if(mface->v1==mface->v2) { mface->v2= mface->v3; mface->v3= mface->v4; mface->v4= 0; nr--; } /* prevent a zero at wrong index location */ if(nr==3) { if(mface->v3==0) { static int corner_indices[4] = {1, 2, 0, 3}; SWAP(int, mface->v1, mface->v2); SWAP(int, mface->v2, mface->v3); if(fdata) CustomData_swap(fdata, mfindex, corner_indices); } } else if(nr==4) {
/* rotates the vertices of a face in case v[2] or v[3] (vertex index) is = 0. this is necessary to make the if(mface->v4) check for quads work */ int test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr) { /* first test if the face is legal */ if((mface->v3 || nr==4) && mface->v3==mface->v4) { mface->v4= 0; nr--; } if((mface->v2 || mface->v4) && mface->v2==mface->v3) { mface->v3= mface->v4; mface->v4= 0; nr--; } if(mface->v1==mface->v2) { mface->v2= mface->v3; mface->v3= mface->v4; mface->v4= 0; nr--; } /* check corrupt cases, bowtie geometry, cant handle these because edge data wont exist so just return 0 */ if(nr==3) { if( /* real edges */ mface->v1==mface->v2 || mface->v2==mface->v3 || mface->v3==mface->v1 ) { return 0; } } else if(nr==4) { if( /* real edges */ mface->v1==mface->v2 || mface->v2==mface->v3 || mface->v3==mface->v4 || mface->v4==mface->v1 || /* across the face */ mface->v1==mface->v3 || mface->v2==mface->v4 ) { return 0; } } /* prevent a zero at wrong index location */ if(nr==3) { if(mface->v3==0) { static int corner_indices[4] = {1, 2, 0, 3}; SWAP(int, mface->v1, mface->v2); SWAP(int, mface->v2, mface->v3); if(fdata) CustomData_swap(fdata, mfindex, corner_indices); } } else if(nr==4) {