145 lines
4.7 KiB
C++
145 lines
4.7 KiB
C++
#ifndef __glunurbstess_h_
|
|
#define __glunurbstess_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. *
|
|
* *
|
|
**************************************************************************/
|
|
|
|
/*
|
|
* nurbstess.h - $Revision: 1.2 $
|
|
*/
|
|
|
|
#include "mysetjmp.h"
|
|
#include "subdivid.h"
|
|
#include "renderhi.h"
|
|
#include "backend.h"
|
|
#include "maplist.h"
|
|
#include "reader.h"
|
|
#include "nurbscon.h"
|
|
|
|
class Knotvector;
|
|
class Quilt;
|
|
class DisplayList;
|
|
class BasicCurveEvaluator;
|
|
class BasicSurfaceEvaluator;
|
|
|
|
class NurbsTessellator {
|
|
public:
|
|
NurbsTessellator( BasicCurveEvaluator &c,
|
|
BasicSurfaceEvaluator &e );
|
|
~NurbsTessellator( void );
|
|
|
|
void getnurbsproperty( long, INREAL * );
|
|
void getnurbsproperty( long, long, INREAL * );
|
|
void setnurbsproperty( long, INREAL );
|
|
void setnurbsproperty( long, long, INREAL );
|
|
void setnurbsproperty( long, long, INREAL * );
|
|
void setnurbsproperty( long, long, INREAL *, long, long );
|
|
|
|
// called before a tessellation begins/ends
|
|
virtual void bgnrender( void );
|
|
virtual void endrender( void );
|
|
|
|
// called to make a display list of the output vertices
|
|
virtual void makeobj( int n );
|
|
virtual void closeobj( void );
|
|
|
|
// called when a error occurs
|
|
virtual void errorHandler( int );
|
|
|
|
void bgnsurface( long );
|
|
void endsurface( void );
|
|
void bgntrim( void );
|
|
void endtrim( void );
|
|
void bgncurve( long );
|
|
void endcurve( void );
|
|
void pwlcurve( long, INREAL[], long, long );
|
|
void nurbscurve( long, INREAL[], long, INREAL[], long, long );
|
|
void nurbssurface( long, INREAL[], long, INREAL[], long, long,
|
|
INREAL[], long, long, long );
|
|
|
|
void defineMap( long, long, long );
|
|
void redefineMaps( void );
|
|
|
|
// recording of input description
|
|
void discardRecording( void * );
|
|
void * beginRecording( void );
|
|
void endRecording( void );
|
|
void playRecording( void * );
|
|
|
|
protected:
|
|
Renderhints renderhints;
|
|
Maplist maplist;
|
|
Backend backend;
|
|
|
|
private:
|
|
|
|
void resetObjects( void );
|
|
int do_check_knots( Knotvector *, char * );
|
|
void do_nurbserror( int );
|
|
void do_bgncurve( O_curve * );
|
|
void do_endcurve( void );
|
|
void do_freeall( void );
|
|
void do_freecurveall( O_curve * );
|
|
void do_freebgntrim( O_trim * );
|
|
void do_freebgncurve( O_curve * );
|
|
void do_freepwlcurve( O_pwlcurve * );
|
|
void do_freenurbscurve( O_nurbscurve * );
|
|
void do_freenurbssurface( O_nurbssurface * );
|
|
void do_freebgnsurface( O_surface * );
|
|
void do_bgnsurface( O_surface * );
|
|
void do_endsurface( void );
|
|
void do_bgntrim( O_trim * );
|
|
void do_endtrim( void );
|
|
void do_pwlcurve( O_pwlcurve * );
|
|
void do_nurbscurve( O_nurbscurve * );
|
|
void do_nurbssurface( O_nurbssurface * );
|
|
void do_freenurbsproperty( Property * );
|
|
void do_setnurbsproperty( Property * );
|
|
void do_setnurbsproperty2( Property * );
|
|
|
|
Subdivider subdivider;
|
|
JumpBuffer* jumpbuffer;
|
|
Pool o_pwlcurvePool;
|
|
Pool o_nurbscurvePool;
|
|
Pool o_curvePool;
|
|
Pool o_trimPool;
|
|
Pool o_surfacePool;
|
|
Pool o_nurbssurfacePool;
|
|
Pool propertyPool;
|
|
Pool quiltPool;
|
|
TrimVertexPool extTrimVertexPool;
|
|
|
|
int inSurface; /* bgnsurface seen */
|
|
int inCurve; /* bgncurve seen */
|
|
int inTrim; /* bgntrim seen */
|
|
int isCurveModified; /* curve changed */
|
|
int isTrimModified; /* trim curves changed */
|
|
int isSurfaceModified; /* surface changed */
|
|
int isDataValid; /* all data is good */
|
|
int numTrims; /* valid trim regions */
|
|
int playBack;
|
|
|
|
O_trim** nextTrim; /* place to link o_trim */
|
|
O_curve** nextCurve; /* place to link o_curve */
|
|
O_nurbscurve** nextNurbscurve; /* place to link o_nurbscurve */
|
|
O_pwlcurve** nextPwlcurve; /* place to link o_pwlcurve */
|
|
O_nurbssurface** nextNurbssurface; /* place to link o_nurbssurface */
|
|
|
|
O_surface* currentSurface;
|
|
O_trim* currentTrim;
|
|
O_curve* currentCurve;
|
|
|
|
DisplayList *dl;
|
|
|
|
};
|
|
|
|
#endif /* __glunurbstess_h_ */
|