44 #include "trimvertex.h"
50 typedef class Arc *Arc_ptr;
52 enum arc_side { arc_none = 0, arc_right, arc_top, arc_left, arc_bottom };
58 static const int bezier_tag;
59 static const int arc_tag;
60 static const int tail_tag;
70 inline Arc( arc_side,
long );
72 Arc_ptr append( Arc_ptr );
74 int isMonotone(
void );
75 int isDisconnected(
void );
77 void markverts(
void );
78 void getextrema( Arc_ptr[4] );
81 void makeSide(
PwlArc *, arc_side );
82 inline int isTessellated() {
return pwlArc ? 1 : 0; }
83 inline long isbezier() {
return type & bezier_tag; }
84 inline void setbezier() { type |= bezier_tag; }
85 inline void clearbezier() { type &= ~bezier_tag; }
86 inline long npts() {
return pwlArc->npts; }
87 inline TrimVertex * pts() {
return pwlArc->pts; }
88 inline REAL * tail() {
return pwlArc->pts[0].param; }
89 inline REAL * head() {
return next->pwlArc->pts[0].param; }
90 inline REAL * rhead() {
return pwlArc->pts[pwlArc->npts-1].param; }
91 inline long ismarked() {
return type & arc_tag; }
92 inline void setmark() { type |= arc_tag; }
93 inline void clearmark() { type &= (~arc_tag); }
94 inline void clearside() { type &= ~(0x7 << 8); }
95 inline void setside( arc_side s ) { clearside(); type |= (((long)s)<<8); }
96 inline arc_side getside() {
return (arc_side) ((type>>8) & 0x7); }
97 inline int getitail() {
return type & tail_tag; }
98 inline void setitail() { type |= tail_tag; }
99 inline void clearitail() { type &= (~tail_tag); }
124 Arc::Arc( arc_side side,
long _nuid )