Blame


1 4314729d 2004-04-14 devnull #include "mplot.h"
2 4314729d 2004-04-14 devnull #define code(x, y) ((x<clipminx?1:x>clipmaxx?2:0)|(y<clipminy?4:y>clipmaxy?8:0))
3 4314729d 2004-04-14 devnull void vec(double xx, double yy){
4 4314729d 2004-04-14 devnull int x0, y0, x1, y1, c0, c1, c, tx, ty;
5 4314729d 2004-04-14 devnull double t;
6 4314729d 2004-04-14 devnull t=SCX(e1->copyx); if(fabs(t)>BIGINT) return; x0=t;
7 4314729d 2004-04-14 devnull t=SCY(e1->copyy); if(fabs(t)>BIGINT) return; y0=t;
8 4314729d 2004-04-14 devnull t=SCX(xx); if(fabs(t)>BIGINT) return; x1=t;
9 4314729d 2004-04-14 devnull t=SCY(yy); if(fabs(t)>BIGINT) return; y1=t;
10 4314729d 2004-04-14 devnull e1->copyx=xx;
11 4314729d 2004-04-14 devnull e1->copyy=yy;
12 4314729d 2004-04-14 devnull /* clipping -- what a concept */
13 4314729d 2004-04-14 devnull c0=code(x0, y0);
14 4314729d 2004-04-14 devnull c1=code(x1, y1);
15 4314729d 2004-04-14 devnull while(c0|c1){
16 4314729d 2004-04-14 devnull if(c0&c1) return;
17 4314729d 2004-04-14 devnull c=c0?c0:c1;
18 4314729d 2004-04-14 devnull if(c&1) ty=y0+(y1-y0)*(clipminx-x0)/(x1-x0), tx=clipminx;
19 4314729d 2004-04-14 devnull else if(c&2) ty=y0+(y1-y0)*(clipmaxx-x0)/(x1-x0), tx=clipmaxx;
20 4314729d 2004-04-14 devnull else if(c&4) tx=x0+(x1-x0)*(clipminy-y0)/(y1-y0), ty=clipminy;
21 4314729d 2004-04-14 devnull else tx=x0+(x1-x0)*(clipmaxy-y0)/(y1-y0), ty=clipmaxy;
22 4314729d 2004-04-14 devnull if(c==c0) x0=tx, y0=ty, c0=code(x0, y0);
23 4314729d 2004-04-14 devnull else x1=tx, y1=ty, c1=code(x1, y1);
24 4314729d 2004-04-14 devnull }
25 4314729d 2004-04-14 devnull m_vector(x0, y0, x1, y1, e1->foregr);
26 4314729d 2004-04-14 devnull }