/* * 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_ */