| 15 |
|
#include "paths.h" |
| 16 |
|
#include "view.h" |
| 17 |
|
|
| 18 |
– |
|
| 19 |
– |
#define FEQ(x,y) (fabs((x)-(y)) <= FTINY) |
| 20 |
– |
#define VEQ(v,w) (FEQ((v)[0],(w)[0]) && FEQ((v)[1],(w)[1]) \ |
| 21 |
– |
&& FEQ((v)[2],(w)[2])) |
| 22 |
– |
|
| 18 |
|
VIEW stdview = STDVIEW; /* default view parameters */ |
| 19 |
|
|
| 20 |
|
static gethfunc gethview; |
| 267 |
|
d = DOT(disp,v->hvec); |
| 268 |
|
d2 = DOT(disp,v->vdir); |
| 269 |
|
ip[0] = 180.0/PI * atan2(d,d2) / v->horiz + 0.5 - v->hoff; |
| 270 |
< |
d = d*d + d2*d2; |
| 271 |
< |
if (d <= FTINY*FTINY) |
| 270 |
> |
d2 = d*d + d2*d2; |
| 271 |
> |
if (d2 <= FTINY*FTINY) |
| 272 |
|
return(VL_BAD); /* at pole */ |
| 273 |
< |
if ((v->vaft > FTINY) & (d >= v->vaft*v->vaft)) |
| 273 |
> |
if ((v->vaft > FTINY) & (d2 >= v->vaft*v->vaft)) |
| 274 |
|
rflags |= VL_BEYOND; |
| 275 |
< |
d = 1.0/sqrt(d); |
| 275 |
> |
d = 1.0/sqrt(d2); |
| 276 |
|
ip[1] = DOT(disp,v->vvec)*d/v->vn2 + 0.5 - v->voff; |
| 277 |
|
ip[2] = VLEN(disp); |
| 278 |
|
ip[2] *= (1.0 - v->vfore*d); |
| 509 |
|
sprintf(cp, " -vt%c", vp->type); |
| 510 |
|
cp += strlen(cp); |
| 511 |
|
} |
| 512 |
< |
if (!VEQ(vp->vp,stdview.vp)) { |
| 512 |
> |
if (!VABSEQ(vp->vp,stdview.vp)) { |
| 513 |
|
sprintf(cp, " -vp %.6g %.6g %.6g", |
| 514 |
|
vp->vp[0], vp->vp[1], vp->vp[2]); |
| 515 |
|
cp += strlen(cp); |
| 516 |
|
} |
| 517 |
< |
if (!FEQ(vp->vdist,stdview.vdist) || !VEQ(vp->vdir,stdview.vdir)) { |
| 517 |
> |
if (!FABSEQ(vp->vdist,stdview.vdist) || !VABSEQ(vp->vdir,stdview.vdir)) { |
| 518 |
|
sprintf(cp, " -vd %.6g %.6g %.6g", |
| 519 |
|
vp->vdir[0]*vp->vdist, |
| 520 |
|
vp->vdir[1]*vp->vdist, |
| 521 |
|
vp->vdir[2]*vp->vdist); |
| 522 |
|
cp += strlen(cp); |
| 523 |
|
} |
| 524 |
< |
if (!VEQ(vp->vup,stdview.vup)) { |
| 524 |
> |
if (!VABSEQ(vp->vup,stdview.vup)) { |
| 525 |
|
sprintf(cp, " -vu %.6g %.6g %.6g", |
| 526 |
|
vp->vup[0], vp->vup[1], vp->vup[2]); |
| 527 |
|
cp += strlen(cp); |
| 528 |
|
} |
| 529 |
< |
if (!FEQ(vp->horiz,stdview.horiz)) { |
| 529 |
> |
if (!FABSEQ(vp->horiz,stdview.horiz)) { |
| 530 |
|
sprintf(cp, " -vh %.6g", vp->horiz); |
| 531 |
|
cp += strlen(cp); |
| 532 |
|
} |
| 533 |
< |
if (!FEQ(vp->vert,stdview.vert)) { |
| 533 |
> |
if (!FABSEQ(vp->vert,stdview.vert)) { |
| 534 |
|
sprintf(cp, " -vv %.6g", vp->vert); |
| 535 |
|
cp += strlen(cp); |
| 536 |
|
} |
| 537 |
< |
if (!FEQ(vp->vfore,stdview.vfore)) { |
| 537 |
> |
if (!FABSEQ(vp->vfore,stdview.vfore)) { |
| 538 |
|
sprintf(cp, " -vo %.6g", vp->vfore); |
| 539 |
|
cp += strlen(cp); |
| 540 |
|
} |
| 541 |
< |
if (!FEQ(vp->vaft,stdview.vaft)) { |
| 541 |
> |
if (!FABSEQ(vp->vaft,stdview.vaft)) { |
| 542 |
|
sprintf(cp, " -va %.6g", vp->vaft); |
| 543 |
|
cp += strlen(cp); |
| 544 |
|
} |
| 545 |
< |
if (!FEQ(vp->hoff,stdview.hoff)) { |
| 545 |
> |
if (!FABSEQ(vp->hoff,stdview.hoff)) { |
| 546 |
|
sprintf(cp, " -vs %.6g", vp->hoff); |
| 547 |
|
cp += strlen(cp); |
| 548 |
|
} |
| 549 |
< |
if (!FEQ(vp->voff,stdview.voff)) { |
| 549 |
> |
if (!FABSEQ(vp->voff,stdview.voff)) { |
| 550 |
|
sprintf(cp, " -vl %.6g", vp->voff); |
| 551 |
|
cp += strlen(cp); |
| 552 |
|
} |
| 625 |
|
if (rp != NULL && !fgetsresolu(rp, fp)) |
| 626 |
|
mvs.ok = 0; |
| 627 |
|
|
| 628 |
< |
fclose(fp); |
| 628 |
> |
if (fp != stdin) |
| 629 |
> |
fclose(fp); |
| 630 |
|
|
| 631 |
|
return(mvs.ok); |
| 632 |
|
} |