2 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice including the dates of first publication and
13 * either this permission notice or a reference to
14 * http://oss.sgi.com/projects/FreeB/
15 * shall be included in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * Except as contained in this notice, the name of Silicon Graphics, Inc.
26 * shall not be used in advertising or otherwise to promote the sale, use or
27 * other dealings in this Software without prior written authorization from
28 * Silicon Graphics, Inc.
36 #ifndef __glunurbstess_h_
37 #define __glunurbstess_h_
40 #include "subdivider.h"
41 #include "renderhints.h"
45 #include "nurbsconsts.h"
50 class BasicCurveEvaluator
;
51 class BasicSurfaceEvaluator
;
53 class NurbsTessellator
{
55 NurbsTessellator( BasicCurveEvaluator
&c
,
56 BasicSurfaceEvaluator
&e
);
57 virtual ~NurbsTessellator( void );
59 void getnurbsproperty( long, INREAL
* );
60 void getnurbsproperty( long, long, INREAL
* );
61 void setnurbsproperty( long, INREAL
);
62 void setnurbsproperty( long, long, INREAL
);
63 void setnurbsproperty( long, long, INREAL
* );
64 void setnurbsproperty( long, long, INREAL
*, long, long );
66 // called before a tessellation begins/ends
67 virtual void bgnrender( void );
68 virtual void endrender( void );
70 // called to make a display list of the output vertices
71 virtual void makeobj( int n
);
72 virtual void closeobj( void );
74 // called when a error occurs
75 virtual void errorHandler( int );
77 void bgnsurface( long );
78 void endsurface( void );
81 void bgncurve( long );
82 void endcurve( void );
83 void pwlcurve( long, INREAL
[], long, long );
84 void nurbscurve( long, INREAL
[], long, INREAL
[], long, long );
85 void nurbssurface( long, INREAL
[], long, INREAL
[], long, long,
86 INREAL
[], long, long, long );
88 void defineMap( long, long, long );
89 void redefineMaps( void );
91 // recording of input description
92 void discardRecording( void * );
93 void * beginRecording( void );
94 void endRecording( void );
95 void playRecording( void * );
97 //for optimizing untrimmed nurbs in the case of domain distance sampling
98 void set_domain_distance_u_rate(REAL u_rate
);
99 void set_domain_distance_v_rate(REAL v_rate
);
100 void set_is_domain_distance_sampling(int flag
);
104 Renderhints renderhints
;
110 void resetObjects( void );
111 int do_check_knots( Knotvector
*, const char * );
112 void do_nurbserror( int );
113 void do_bgncurve( O_curve
* );
114 void do_endcurve( void );
115 void do_freeall( void );
116 void do_freecurveall( O_curve
* );
117 void do_freebgntrim( O_trim
* );
118 void do_freebgncurve( O_curve
* );
119 void do_freepwlcurve( O_pwlcurve
* );
120 void do_freenurbscurve( O_nurbscurve
* );
121 void do_freenurbssurface( O_nurbssurface
* );
122 void do_freebgnsurface( O_surface
* );
123 void do_bgnsurface( O_surface
* );
124 void do_endsurface( void );
125 void do_bgntrim( O_trim
* );
126 void do_endtrim( void );
127 void do_pwlcurve( O_pwlcurve
* );
128 void do_nurbscurve( O_nurbscurve
* );
129 void do_nurbssurface( O_nurbssurface
* );
130 void do_freenurbsproperty( Property
* );
131 void do_setnurbsproperty( Property
* );
132 void do_setnurbsproperty2( Property
* );
134 Subdivider subdivider
;
135 JumpBuffer
* jumpbuffer
;
137 Pool o_nurbscurvePool
;
141 Pool o_nurbssurfacePool
;
146 TrimVertexPool extTrimVertexPool
;
148 int inSurface
; /* bgnsurface seen */
149 int inCurve
; /* bgncurve seen */
150 int inTrim
; /* bgntrim seen */
151 int isCurveModified
; /* curve changed */
152 int isTrimModified
; /* trim curves changed */
153 int isSurfaceModified
; /* surface changed */
154 int isDataValid
; /* all data is good */
155 int numTrims
; /* valid trim regions */
158 O_trim
** nextTrim
; /* place to link o_trim */
159 O_curve
** nextCurve
; /* place to link o_curve */
160 O_nurbscurve
** nextNurbscurve
; /* place to link o_nurbscurve */
161 O_pwlcurve
** nextPwlcurve
; /* place to link o_pwlcurve */
162 O_nurbssurface
** nextNurbssurface
; /* place to link o_nurbssurface */
164 O_surface
* currentSurface
;
166 O_curve
* currentCurve
;
172 #endif /* __glunurbstess_h_ */