[tiemann@localhost src]$ diff -u editface.c~ editface.c --- editface.c~ 2007-01-30 18:07:56.000000000 -0500 +++ editface.c 2007-04-29 22:43:02.000000000 -0400 @@ -417,9 +417,54 @@ case B_UVAUTO_RESET: tface= me->mtface; - for(a=0; atotface; a++, tface++) - if(tface->flag & TF_SELECT) - default_uv(tface->uv, 1.0); + mface= me->mface; + for(a=0; atotface; a++, mface++, tface++) + if(tface->flag & TF_SELECT) { + int vorder[4], omin, o; + float v1[3], v2[3], v3[3], v4[3], va1, va2, va3, va4, amin; + + vorder[0] = 0; + vorder[1] = 1; + vorder[2] = 2; + vorder[3] = 3; + + /* The angle-calculation code was lifted from drawobject.c */ + VECCOPY(v1,(me->mvert+mface->v1)->co); + VECCOPY(v2,(me->mvert+mface->v2)->co); + VECCOPY(v3,(me->mvert+mface->v3)->co); + if (mface->v4) { + VECCOPY(v4,(me->mvert+mface->v4)->co); + } else { + VECCOPY(v4, v3); + } + + /* Calculate the angles */ + omin = 0; + amin = va1 = VecAngle3(v4, v1, v2); + va2 = VecAngle3(v1, v2, v3); + if (va2 < amin) { + omin = 1; + amin = va2; + } + va3 = VecAngle3(v2, v3, v4); + if (va3 < amin) { + omin = 2; + amin = va3; + } + if (mface->v4) { + va4 = VecAngle3(v3, v4, v1); + if (va4 < amin) { + omin = 3; + amin = va4; + } + } + + for (o = 0; o < 4; o++) { + vorder[o] = (omin + o) % 4; + } + + default_uv(tface->uv, 1.0, vorder); + } break; case B_UVAUTO_CYLINDER: @@ -588,7 +633,7 @@ return NULL; } -void default_uv(float uv[][2], float size) +void default_uv(float uv[][2], float size, int vorder[]) { int dy; @@ -596,17 +641,17 @@ dy= 1.0-size; - uv[0][0]= 0; - uv[0][1]= size+dy; + uv[vorder[0]][0]= 0; + uv[vorder[0]][1]= size+dy; - uv[1][0]= 0; - uv[1][1]= dy; + uv[vorder[1]][0]= 0; + uv[vorder[1]][1]= dy; - uv[2][0]= size; - uv[2][1]= dy; + uv[vorder[2]][0]= size; + uv[vorder[2]][1]= dy; - uv[3][0]= size; - uv[3][1]= size+dy; + uv[vorder[3]][0]= size; + uv[vorder[3]][1]= size+dy; } void make_tfaces(Mesh *me)