|
|
1.1 root 1: /*******************************************************************
2: * *
3: * File: CIFPLOT/edgepath.c *
4: * Written by Dan Fitzpatrick *
5: * copyright 1980 -- Regents of the University of California *
6: * *
7: ********************************************************************/
8:
9: #include <stdio.h>
10: #include "defs.h"
11: #include "globals.h"
12: #include "parser_defs.h"
13: #include "structs.h"
14: #include "out_structs.h"
15: #include "alloc.h"
16:
17:
18: static int xstart,ystart,xlast,ylast;
19: static PolyDesc *poly;
20: static transform *trans;
21:
22: StartEdgePath(x,y,itrans,ipoly)
23: real x,y;
24: transform *itrans;
25: PolyDesc *ipoly;
26: {
27: poly = ipoly;
28: trans = itrans;
29: Trans(&x,&y,trans);
30: xstart = xlast = CONVERT(x);
31: ystart = ylast = CONVERT(y);
32: return;
33: }
34:
35: iedge *NextEdgePath(x,y)
36: real x,y;
37: {
38: iedge *e;
39: int t;
40: int ix1,ix2,iy1,iy2;
41:
42: Trans(&x,&y,trans);
43: ix1 = ix2 = CONVERT(x); iy1 = iy2 = CONVERT(y);
44:
45: e = GetIEdge();
46: e->type = EDGE;
47: e->poly = poly;
48: (poly->refs)++;
49: if(xlast <= ix1) e->dir = 1;
50: else {
51: e->dir = -1;
52: SWAP(xlast,ix1,t);
53: SWAP(ylast,iy1,t);
54: }
55: /* xlast <= x */
56: e->min = e->x1 = xlast; e->y1 = ylast;
57: e->x2 = ix1; e->y2 = iy1;
58: xlast = ix2; ylast = iy2;
59: return(e);
60: }
61:
62: iedge *EndEdgePath()
63: {
64: iedge *e;
65: int t;
66:
67: e = GetIEdge();
68: e->type = EDGE;
69: e->poly = poly;
70: (poly->refs)++;
71: if(xlast <= xstart) e->dir = 1;
72: else {
73: e->dir = -1;
74: SWAP(xlast,xstart,t);
75: SWAP(ylast,ystart,t);
76: }
77: e->min = e->x1 = xlast; e->y1 = ylast;
78: e->x2 = xstart; e->y2 = ystart;
79: return(e);
80: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.