home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 2: PC
/
frozenfish_august_1995.bin
/
bbs
/
d03xx
/
d0315.lha
/
Surf
/
bezpt.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-02-14
|
2KB
|
72 lines
#include "fasttrig.h"
/*
* structures and such for manipulating bezier curves
*/
#define MaxSegs 50 /* max number of bezier segments */
typedef struct {
int prev2; /* second control point of segment n-1 */
int cur0; /* begin of segment n, end of segment n-1 */
int cur1; /* first control point of segment n */
} BezVal;
typedef struct {
BezVal x, y;
} BezCoord;
#define DefBezMeshVal 10
extern BezCoord Bezpt[MaxSegs+1];
extern void SetBezMesh( /* Panel_item, int, struct input_event */);
extern int BezMesh;
extern float BezStepSize;
extern void InitCalcBez( /* void */ );
extern void CalcBezPt(/* float, float *, float * */);
extern void XdrawAllBezSegs(/* void */);
extern void XdrawBezSeg(/* void */);
extern void InitBezPt( /* int, int */);
extern void EditBezPt( /* int, int */);
extern void ResetCurve( /* void */ );
extern int NumBezPts;
extern int ActSeg;
#define BezRings() (GetNumSegs() * BezMesh + 1)
#define GetFirstSeg() (0)
#define GetNumSegs() (NumBezPts-1)
#define ResetActSeg() { ActSeg = GetFirstSeg(); }
#define GetCurSeg() (ActSeg)
#define PrevSegNo() (ActSeg -1 < 0 ? GetNumSegs(): ActSeg -1 )
#define PrevSeg() { ActSeg = PrevSegNo(); }
#define NextSegNo() ((ActSeg+1) % GetNumSegs())
#define NextSeg() { ActSeg = NextSegNo(); }
enum BezPtEnum { BPEStartPt, BPEEndPt, BPECntrlPt1, BPECntrlPt2 };
#define StartPtX(XSegNo) Bezpt[XSegNo].x.cur0
#define StartPtY(XSegNo) Bezpt[XSegNo].y.cur0
#define Cntrl1X(XSegNo) Bezpt[XSegNo].x.cur1
#define Cntrl1Y(XSegNo) Bezpt[XSegNo].y.cur1
#define Cntrl2X(XSegNo) Bezpt[XSegNo+1].x.prev2
#define Cntrl2Y(XSegNo) Bezpt[XSegNo+1].y.prev2
#define EndPtX(XSegNo) Bezpt[XSegNo+1].x.cur0
#define EndPtY(XSegNo) Bezpt[XSegNo+1].y.cur0
#define DrawStartPt() DrawBox( Bezpt[ActSeg].x.cur0, \
Bezpt[ActSeg].y.cur0, XOR )
#define DrawEndPt() DrawBox( Bezpt[ActSeg+1].x.cur0, \
Bezpt[ActSeg+1].y.cur0, XOR )
#define DrawControl0() DrawSqr( Bezpt[ActSeg].x.cur1,\
Bezpt[ActSeg].y.cur1, XOR )
#define DrawControl1() DrawSqr( Bezpt[ActSeg+1].x.prev2,\
Bezpt[ActSeg+1].y.prev2, XOR )