static void outpoly() { int i; int vab,vca; #ifdef DBG printf(" outpoly, npoly = %d \n", npoly); #endif /* check to make sure poly faces away from origin: if not, flip it */ check_facing(); if (subdiv_sides) { DPoint midp; int nxti = 0; for (i=npoly-1; i>=0; i--) { pol[2*i] = pol[i]; MidPoint(&midp,&verts[pol[i]],&verts[pol[nxti]]); pol[2*i+1] = reg_vert(&midp); nxti = 2*i; } npoly *= 2; } if (center_verts||star_axis[curax]||state.scale_axis[curax]!=1.0) { DPoint sum; int nc,nxt; sum.x = sum.y = sum.z = 0.0; for (i=0; i<npoly; i++) { sum.x += verts[pol[i]].x; sum.y += verts[pol[i]].y; sum.z += verts[pol[i]].z; } sum.x /= (float)npoly; sum.y /= (float)npoly; sum.z /= (float)npoly; if (state.scale_axis[curax]!=1.0) { ScaleVect(&sum,state.scale_axis[curax]); nc = reg_vert(&sum); for (i=0; i<npoly; i++) { nxt = (i==npoly-1)?0:i+1; outface(nc,pol[i],pol[nxt],1,1,1); } } else { nc = reg_vert(&sum); for (i=0; i<npoly; i++) { nxt = (i==npoly-1)?0:i+1; outface(nc,pol[i],pol[nxt],0,1,0); } } } else { for (i=1; i<npoly-1; i++) { vab = vca = 0; if (i==1) vab = 1; if (i==npoly-2) vca = 1; #ifdef DBG2 printf(" face (%d,%d,%d) vis = (%d %d %d) \n", pol[0],pol[i],pol[i+1],vab,1,vca); #endif outface(pol[0],pol[i],pol[i+1],vab,1,vca); #ifdef DBG2 { double l = dist(pol[i],pol[i+1]); printf(" side length = %.6f \n",l); } #endif } } }
void check_facing_at(enum Orientation o, int x, int y) { check_facing(o); check_at(x, y); }