home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d2xx
/
d222
/
plplot.lha
/
Plplot
/
src
/
source.zoo
/
pllclp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-05-15
|
2KB
|
66 lines
/* Draws a (x1,y1) to (x2,y2) within the clip limits */
#include "plplot.h"
#define betw(ix,ia,ib) ((ix<=ia && ix>=ib) || (ix>=ia && ix<=ib))
#define inside(ix,iy) (betw(ix,clpxmi,clpxma) && betw(iy,clpymi,clpyma))
#define ixcut(iy) round((float)((x2-x1)*(iy-y1)+x1*(y2-y1))/(float)(y2-y1))
#define iycut(ix) round((float)((y2-y1)*(ix-x1)+y1*(x2-x1))/(float)(x2-x1))
void pllclp(x1,y1,x2,y2)
int x1,y1,x2,y2;
{
int xt[2],yt[2];
int it, k;
int clpxmi,clpxma,clpymi,clpyma;
gclp(&clpxmi,&clpxma,&clpymi,&clpyma);
k=0;
if (inside(x1,y1)) {
xt[k]=x1;
yt[k]=y1;
k=k+1;
}
if (inside(x2,y2)) {
xt[k]=x2;
yt[k]=y2;
k=k+1;
}
if (k == 2) goto draw;
if (y1 != y2) {
it=ixcut(clpymi);
if (inside(it,clpymi) && betw(clpymi,y1,y2)) {
xt[k]=it;
yt[k]=clpymi;
k=k+1;
}
if (k == 2) goto draw;
it=ixcut(clpyma);
if (inside(it,clpyma) && betw(clpyma,y1,y2)) {
xt[k]=it;
yt[k]=clpyma;
k=k+1;
}
if (k == 2) goto draw;
}
if (x1 != x2) {
it=iycut(clpxmi);
if (inside(clpxmi,it) && betw(clpxmi,x1,x2)) {
xt[k]=clpxmi;
yt[k]=it;
k=k+1;
}
if (k == 2) goto draw;
it=iycut(clpxma);
if (inside(clpxma,it) && betw(clpxma,x1,x2)) {
xt[k]=clpxma;
yt[k]=it;
k=k+1;
}
if (k == 2) goto draw;
}
draw:
if (k == 2) genlin(xt[0],yt[0],xt[1],yt[1]);
scurr(x2,y2);
}