FreeWRL/FreeX3D  3.0.0
nurbstess.h
1 /*
2  * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3  * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4  *
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:
11  *
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.
16  *
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
23  * SOFTWARE.
24  *
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.
29  */
30 
31 /*
32  * nurbstess.h
33  *
34  */
35 
36 #ifndef __glunurbstess_h_
37 #define __glunurbstess_h_
38 
39 #include "mysetjmp.h"
40 #include "subdivider.h"
41 #include "renderhints.h"
42 #include "backend.h"
43 #include "maplist.h"
44 #include "reader.h"
45 #include "nurbsconsts.h"
46 
47 struct Knotvector;
48 class Quilt;
49 class DisplayList;
52 
54 public:
57  virtual ~NurbsTessellator( void );
58 
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 );
65 
66  // called before a tessellation begins/ends
67  virtual void bgnrender( void );
68  virtual void endrender( void );
69 
70  // called to make a display list of the output vertices
71  virtual void makeobj( int n );
72  virtual void closeobj( void );
73 
74  // called when a error occurs
75  virtual void errorHandler( int );
76 
77  void bgnsurface( long );
78  void endsurface( void );
79  void bgntrim( void );
80  void endtrim( 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 );
87 
88  void defineMap( long, long, long );
89  void redefineMaps( void );
90 
91  // recording of input description
92  void discardRecording( void * );
93  void * beginRecording( void );
94  void endRecording( void );
95  void playRecording( void * );
96 
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);
101 
102 
103 protected:
104  Renderhints renderhints;
105  Maplist maplist;
106  Backend backend;
107 
108 private:
109 
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 * );
133 
134  Subdivider subdivider;
135  JumpBuffer* jumpbuffer;
136  Pool o_pwlcurvePool;
137  Pool o_nurbscurvePool;
138  Pool o_curvePool;
139  Pool o_trimPool;
140  Pool o_surfacePool;
141  Pool o_nurbssurfacePool;
142  Pool propertyPool;
143 public:
144  Pool quiltPool;
145 private:
146  TrimVertexPool extTrimVertexPool;
147 
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 */
156  int playBack;
157 
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 */
163 
164  O_surface* currentSurface;
165  O_trim* currentTrim;
166  O_curve* currentCurve;
167 
168  DisplayList *dl;
169 
170 };
171 
172 #endif /* __glunurbstess_h_ */
Definition: quilt.h:64
Definition: reader.h:55
Definition: bufpool.h:50
Definition: reader.h:94