| 66 |
|
distarr = (float *)calloc(n, 3*sizeof(float)); |
| 67 |
|
if (distarr == NULL) |
| 68 |
|
error(SYSTEM, "out of memory in o_face"); |
| 69 |
< |
mkaxes(u, v, fa->norm); |
| 69 |
> |
/* take first edge longer than sqrt(area) */ |
| 70 |
> |
for (i = 1; i < fa->nv; i++) { |
| 71 |
> |
for (j = 0; j < 3; j++) |
| 72 |
> |
u[j] = VERTEX(fa,i)[j] - VERTEX(fa,i-1)[j]; |
| 73 |
> |
if (DOT(u,u) >= fa->area-FTINY) |
| 74 |
> |
break; |
| 75 |
> |
} |
| 76 |
> |
if (i < fa->nv) { /* got one! -- let's align our axes */ |
| 77 |
> |
normalize(u); |
| 78 |
> |
fcross(v, fa->norm, u); |
| 79 |
> |
} else /* oh well, we'll just have to wing it */ |
| 80 |
> |
mkaxes(u, v, fa->norm); |
| 81 |
> |
/* now, find limits in (u,v) coordinates */ |
| 82 |
|
ur[0] = vr[0] = FHUGE; |
| 83 |
|
ur[1] = vr[1] = -FHUGE; |
| 84 |
|
for (i = 0; i < fa->nv; i++) { |