home *** CD-ROM | disk | FTP | other *** search
- #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 )
-
-