home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
505a.lha
/
GrapicsGems
/
2DClip
/
line.h
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-01
|
2KB
|
82 lines
/*
Two-Dimensional Clipping: A Vector Based Approach
by Hans Spoelder and Fons Ullings
from "Graphics Gems", Academic Press, 1990
*/
/*
* file line.h
* contains major definitions for the clipping routines
*
*/
#define NFAC 10 /* discrete measure */
#define SCALE (1 << NFAC) /* 1024 points/cm */
#define TO_INT(X) ((int)((X)*SCALE))
#define TO_FLT(X) (((float)(X))/SCALE)
#define COINCIDE 1 /* what do the lines do */
#define PARALLEL 2
#define CROSS 3
#define NO_CROSS 4
#define STD 0 /* crossing types */
#define DELAY 1
#define CLIP_NORMAL 1
typedef struct { /* holds a point */
long _x; /* holds x coordinate */
long _y; /* holds y coordinate */
} POINT;
typedef struct { /* holds a cross point */
POINT _p; /* holds the solution */
short _type; /* more information */
} CLIST;
struct segment { /* holds a segment */
POINT _from; /* start coordinates */
POINT _to; /* stop coordinates */
struct segment *_next;
struct segment *_prev;
};
#define SEGMENT struct segment
struct contour { /* holds a contour */
short _no; /* contour counter */
short _status; /* holds information */
short _cnt; /* number of elements */
SEGMENT *_s; /* the segments */
struct contour *_next; /* linked list */
long _minx; /* coordinates of box */
long _miny;
long _maxx;
long _maxy;
};
#define CONTOUR struct contour
#define ACTIVE 01 /* polygon attributes */
#define NORMAL 02
#define SET_ON(p) ((p)->_status |= ACTIVE)
#define SET_NORMAL(p) ((p)->_status |= NORMAL)
#define SET_OFF(p) ((p)->_status &= ~ACTIVE)
#define SET_INVERSE(p) ((p)->_status &= ~NORMAL)
#define IS_ON(p) ((p)->_status & ACTIVE)
#define IS_NORMAL(p) ((p)->_status & NORMAL)
extern CONTOUR *CL;
CONTOUR *get_contour_ptr();
extern short C_COUNT;