blob: a6869002fb614bba573f24e23a052f2f79b7c37b [file] [log] [blame]
/*
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice including the dates of first publication and
* either this permission notice or a reference to
* http://oss.sgi.com/projects/FreeB/
* shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of Silicon Graphics, Inc.
* shall not be used in advertising or otherwise to promote the sale, use or
* other dealings in this Software without prior written authorization from
* Silicon Graphics, Inc.
*/
/*
* nurbstess.h
*
*/
#ifndef __glunurbstess_h_
#define __glunurbstess_h_
#include "mysetjmp.h"
#include "subdivider.h"
#include "renderhints.h"
#include "backend.h"
#include "maplist.h"
#include "reader.h"
#include "nurbsconsts.h"
struct Knotvector;
class Quilt;
class DisplayList;
class BasicCurveEvaluator;
class BasicSurfaceEvaluator;
class NurbsTessellator {
public:
NurbsTessellator( BasicCurveEvaluator &c,
BasicSurfaceEvaluator &e );
virtual ~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 * );
//for optimizing untrimmed nurbs in the case of domain distance sampling
void set_domain_distance_u_rate(REAL u_rate);
void set_domain_distance_v_rate(REAL v_rate);
void set_is_domain_distance_sampling(int flag);
protected:
Renderhints renderhints;
Maplist maplist;
Backend backend;
private:
void resetObjects( void );
int do_check_knots( Knotvector *, const 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;
public:
Pool quiltPool;
private:
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_ */