Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#ifndef __gluarc_h_
#define __gluarc_h_
/**************************************************************************
* * * Copyright (C) 1992, Silicon Graphics, Inc. * * * * These coded instructions, statements, and computer programs contain * * unpublished proprietary information of Silicon Graphics, Inc., and * * are protected by Federal copyright law. They may not be disclosed * * to third parties or copied or duplicated in any form, in whole or * * in part, without the prior written consent of Silicon Graphics, Inc. * * * **************************************************************************/
/*
* arc.h - $Revision: 1.1 $ */
#include "myassert.h"
#include "bufpool.h"
#include "mystdio.h"
#include "types.h"
#include "pwlarc.h"
#include "trimvert.h"
class Bin; class Arc; class BezierArc; typedef Arc *Arc_ptr;
enum arc_side { arc_none = 0, arc_right, arc_top, arc_left, arc_bottom };
#ifdef NT
class Arc : public PooledObj { /* an arc, in two list, the trim list and bin */ public: #else
struct Arc : public PooledObj { /* an arc, in two list, the trim list and bin */ #endif
static const int bezier_tag; static const int arc_tag; static const int tail_tag;
Arc_ptr prev; /* trim list pointer */ Arc_ptr next; /* trim list pointer */ Arc_ptr link; /* bin pointers */ BezierArc * bezierArc; /* associated bezier arc */ PwlArc * pwlArc; /* associated pwl arc */ long type; /* curve type */ long nuid;
inline Arc( Arc *, PwlArc * ); inline Arc( arc_side, long );
Arc_ptr append( Arc_ptr ); int check( void ); int isMonotone( void ); int isDisconnected( void ); int numpts( void ); void markverts( void ); void getextrema( Arc_ptr[4] ); void print( void ); void show( void ); void makeSide( PwlArc *, arc_side );
inline int isTessellated() { return pwlArc ? 1 : 0; } inline long isbezier() { return type & bezier_tag; } inline void setbezier() { type |= bezier_tag; } inline void clearbezier() { type &= ~bezier_tag; } inline long npts() { return pwlArc->npts; } inline TrimVertex * pts() { return pwlArc->pts; } inline REAL * tail() { return pwlArc->pts[0].param; } inline REAL * head() { return next->pwlArc->pts[0].param; } inline REAL * rhead() { return pwlArc->pts[pwlArc->npts-1].param; } inline long ismarked() { return type & arc_tag; } inline void setmark() { type |= arc_tag; } inline void clearmark() { type &= (~arc_tag); } inline void clearside() { type &= ~(0x7 << 8); } inline void setside( arc_side s ) { clearside(); type |= (((long)s)<<8); } inline arc_side getside() { return (arc_side) ((type>>8) & 0x7); } inline int getitail() { return type & tail_tag; } inline void setitail() { type |= tail_tag; } inline void clearitail() { type &= (~tail_tag); } };
/*--------------------------------------------------------------------------
* Arc - initialize a new Arc with the same type and uid of * a given Arc and a given pwl arc *-------------------------------------------------------------------------- */
inline Arc::Arc( Arc *j, PwlArc *p ) { bezierArc = NULL; pwlArc = p; type = j->type; nuid = j->nuid; }
/*--------------------------------------------------------------------------
* Arc - initialize a new Arc with the same type and uid of * a given Arc and a given pwl arc *-------------------------------------------------------------------------- */
inline Arc::Arc( arc_side side, long _nuid ) { bezierArc = NULL; pwlArc = NULL; type = 0; setside( side ); nuid = _nuid; }
#endif /* __gluarc_h_ */
|