56#ifdef FOR_TRITE_TEST_PROGRAM
59#define DebugEvent( tess )
94#define MAX(x,y) ((x) >= (y) ? (x) : (y))
95#define MIN(x,y) ((x) <= (y) ? (x) : (y))
100#define AddWinding(eDst,eSrc) (eDst->winding += eSrc->winding, \
101 eDst->Sym->winding += eSrc->Sym->winding)
128 if(
e1->Dst == event ) {
129 if(
e2->Dst == event ) {
140 if(
e2->Dst == event ) {
153 if(
reg->fixUpperEdge ) {
188 }
while(
reg->eUp->Org ==
org );
193 if(
reg->fixUpperEdge ) {
209 }
while(
reg->eUp->Dst ==
dst );
240 switch(
tess->windingRule ) {
250 return (
n >= 2) || (
n <= -2);
308 if(
e->Org !=
ePrev->Org ) {
309 if( !
reg->fixUpperEdge ) {
378 if(
e->Org !=
ePrev->Org )
break;
386 reg->windingNumber =
regPrev->windingNumber -
e->winding;
418 coords[0] =
isect->coords[0];
419 coords[1] =
isect->coords[1];
420 coords[2] =
isect->coords[2];
427 }
else if( !
tess->fatalError ) {
446 GLfloat weights[4] = { 0.5, 0.5, 0.0, 0.0 };
467 weights[0] = 0.5 *
t2 / (
t1 +
t2);
468 weights[1] = 0.5 *
t1 / (
t1 +
t2);
469 isect->coords[0] += weights[0]*
org->coords[0] + weights[1]*
dst->coords[0];
470 isect->coords[1] += weights[0]*
org->coords[1] + weights[1]*
dst->coords[1];
471 isect->coords[2] += weights[0]*
org->coords[2] + weights[1]*
dst->coords[2];
540 }
else if( eUp->
Org !=
eLo->Org ) {
591 e->Lface->inside =
regUp->inside;
600 e->Rface->inside =
regUp->inside;
775 while(
regLo->dirty ) {
779 if( !
regUp->dirty ) {
791 if( eUp->Dst !=
eLo->Dst ) {
799 if(
regLo->fixUpperEdge ) {
804 }
else if(
regUp->fixUpperEdge ) {
812 if( eUp->
Org !=
eLo->Org ) {
813 if( eUp->Dst !=
eLo->Dst
814 && !
regUp->fixUpperEdge && !
regLo->fixUpperEdge
815 && (eUp->Dst ==
tess->event ||
eLo->Dst ==
tess->event) )
836 if( eUp->
Org ==
eLo->Org && eUp->Dst ==
eLo->Dst ) {
888 if( eUp->Dst !=
eLo->Dst ) {
928 eNew->Sym->activeRegion->fixUpperEdge =
TRUE;
939#define TOLERANCE_NONZERO FALSE
965 if(
regUp->fixUpperEdge ) {
983 if(
reg->fixUpperEdge ) {
1025 tmp.eUp =
vEvent->anEdge->Sym;
1043 if(
regUp->inside ||
reg->fixUpperEdge) {
1053 if(
reg->fixUpperEdge ) {
1085 while(
e->activeRegion ==
NULL ) {
1126#define SENTINEL_COORD (4 * GLU_TESS_MAX_COORD)
1145 tess->event =
e->Dst;
1148 reg->windingNumber = 0;
1187 if( !
reg->sentinel ) {
1212 if(
VertEq(
e->Org,
e->Dst ) &&
e->Lnext->Lnext !=
e ) {
1244 if (pq ==
NULL)
return 0;
1246 vHead = &
tess->mesh->vHead;
1251 if (
v != vHead || !
pqInit( pq ) ) {
1292 if(
e->Lnext->Lnext ==
e ) {
#define GLU_TESS_WINDING_NONZERO
#define GLU_TESS_WINDING_POSITIVE
#define GLU_TESS_WINDING_NEGATIVE
#define GLU_TESS_WINDING_ODD
#define GLU_TESS_NEED_COMBINE_CALLBACK
#define GLU_TESS_WINDING_ABS_GEQ_TWO
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t org
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void reg
#define dictInsert(dict, key)
#define dictDeleteDict(dict)
#define dictSearch(dict, key)
#define dictDelete(dict, node)
#define dictInsertBefore(dict, node, key)
#define dictNewDict(frame, leq)
void __gl_edgeIntersect(GLUvertex *o1, GLUvertex *d1, GLUvertex *o2, GLUvertex *d2, GLUvertex *v)
int __gl_vertLeq(GLUvertex *u, GLUvertex *v)
#define EdgeSign(u, v, w)
#define EdgeEval(u, v, w)
GLUhalfEdge * __gl_meshMakeEdge(GLUmesh *mesh)
GLUhalfEdge * __gl_meshSplitEdge(GLUhalfEdge *eOrg)
void __gl_meshCheckMesh(GLUmesh *mesh)
GLUhalfEdge * __gl_meshConnect(GLUhalfEdge *eOrg, GLUhalfEdge *eDst)
int __gl_meshDelete(GLUhalfEdge *eDel)
int __gl_meshSplice(GLUhalfEdge *eOrg, GLUhalfEdge *eDst)
#define pqNewPriorityQ(leq)
#define pqDeletePriorityQ(pq)
#define pqDelete(pq, handle)
#define pqInsert(pq, key)
static void InitEdgeDict(GLUtesselator *tess)
static int FixUpperEdge(ActiveRegion *reg, GLUhalfEdge *newEdge)
#define AddWinding(eDst, eSrc)
static GLboolean IsWindingInside(GLUtesselator *tess, int n)
static void RemoveDegenerateEdges(GLUtesselator *tess)
static int CheckForRightSplice(GLUtesselator *tess, ActiveRegion *regUp)
static void CallCombine(GLUtesselator *tess, GLUvertex *isect, void *data[4], GLfloat weights[4], int needed)
static int RemoveDegenerateFaces(GLUmesh *mesh)
int __gl_computeInterior(GLUtesselator *tess)
static GLUhalfEdge * FinishLeftRegions(GLUtesselator *tess, ActiveRegion *regFirst, ActiveRegion *regLast)
static void FinishRegion(GLUtesselator *tess, ActiveRegion *reg)
static void SweepEvent(GLUtesselator *tess, GLUvertex *vEvent)
static ActiveRegion * TopLeftRegion(ActiveRegion *reg)
static ActiveRegion * AddRegionBelow(GLUtesselator *tess, ActiveRegion *regAbove, GLUhalfEdge *eNewUp)
static int InitPriorityQ(GLUtesselator *tess)
static void AddRightEdges(GLUtesselator *tess, ActiveRegion *regUp, GLUhalfEdge *eFirst, GLUhalfEdge *eLast, GLUhalfEdge *eTopLeft, GLboolean cleanUp)
static void GetIntersectData(GLUtesselator *tess, GLUvertex *isect, GLUvertex *orgUp, GLUvertex *dstUp, GLUvertex *orgLo, GLUvertex *dstLo)
static void DeleteRegion(GLUtesselator *tess, ActiveRegion *reg)
static void VertexWeights(GLUvertex *isect, GLUvertex *org, GLUvertex *dst, GLfloat *weights)
static ActiveRegion * TopRightRegion(ActiveRegion *reg)
static void WalkDirtyRegions(GLUtesselator *tess, ActiveRegion *regUp)
static void ConnectLeftVertex(GLUtesselator *tess, GLUvertex *vEvent)
static int CheckForIntersect(GLUtesselator *tess, ActiveRegion *regUp)
static int EdgeLeq(GLUtesselator *tess, ActiveRegion *reg1, ActiveRegion *reg2)
static void ConnectRightVertex(GLUtesselator *tess, ActiveRegion *regUp, GLUhalfEdge *eBottomLeft)
static void DoneEdgeDict(GLUtesselator *tess)
static void ComputeWinding(GLUtesselator *tess, ActiveRegion *reg)
static void ConnectLeftDegenerate(GLUtesselator *tess, ActiveRegion *regUp, GLUvertex *vEvent)
static int CheckForLeftSplice(GLUtesselator *tess, ActiveRegion *regUp)
static void DonePriorityQ(GLUtesselator *tess)
#define TOLERANCE_NONZERO
static void SpliceMergeVertices(GLUtesselator *tess, GLUhalfEdge *e1, GLUhalfEdge *e2)
static void AddSentinel(GLUtesselator *tess, GLdouble t)
#define CALL_ERROR_OR_ERROR_DATA(a)
#define CALL_COMBINE_OR_COMBINE_DATA(a, b, c, d)