Changeset 3079 for trunk/src/opengl/glu/nurbs
- Timestamp:
- Mar 11, 2000, 10:05:07 AM (26 years ago)
- Location:
- trunk/src/opengl/glu/nurbs
- Files:
-
- 8 edited
-
interface/glcurveval.cpp (modified) (9 diffs)
-
interface/glcurveval.h (modified) (5 diffs)
-
interface/glinterface.cpp (modified) (12 diffs)
-
interface/glrenderer.h (modified) (5 diffs)
-
interface/glsurfeval.cpp (modified) (5 diffs)
-
interface/glsurfeval.h (modified) (14 diffs)
-
interface/insurfeval.cpp (modified) (21 diffs)
-
internals/slicer.cpp (modified) (42 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/opengl/glu/nurbs/interface/glcurveval.cpp
r2689 r3079 1 /* $Id: glcurveval.cpp,v 1. 1 2000-02-09 08:49:00jeroen Exp $ */1 /* $Id: glcurveval.cpp,v 1.2 2000-03-11 09:05:01 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * glcurveval.c++ 38 38 * 39 * $Date: 2000-0 2-09 08:49:00 $ $Revision: 1.1$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glcurveval.cpp,v 1. 1 2000-02-09 08:49:00jeroen Exp $39 * $Date: 2000-03-11 09:05:01 $ $Revision: 1.2 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glcurveval.cpp,v 1.2 2000-03-11 09:05:01 jeroen Exp $ 41 41 */ 42 42 … … 88 88 OpenGLCurveEvaluator::addMap(CurveMap *m) 89 89 { 90 m = m;90 m = m; 91 91 } 92 92 … … 94 94 OpenGLCurveEvaluator::range1f(long type, REAL *from, REAL *to) 95 95 { 96 type = type;97 from = from;98 to = to;96 type = type; 97 from = from; 98 to = to; 99 99 } 100 100 … … 102 102 OpenGLCurveEvaluator::domain1f(REAL ulo, REAL uhi) 103 103 { 104 ulo = ulo;105 uhi = uhi;104 ulo = ulo; 105 uhi = uhi; 106 106 } 107 107 … … 202 202 void 203 203 OpenGLCurveEvaluator::map1f( 204 long type, /* map type */205 REAL ulo, /* lower parametric bound */206 REAL uhi, /* upper parametric bound */207 long stride, /* distance to next point in REALS */208 long order, /* parametric order */209 REAL *pts /* control points */204 long type, /* map type */ 205 REAL ulo, /* lower parametric bound */ 206 REAL uhi, /* upper parametric bound */ 207 long stride, /* distance to next point in REALS */ 208 long order, /* parametric order */ 209 REAL *pts /* control points */ 210 210 ) 211 211 { … … 216 216 switch(type){ 217 217 case GL_MAP1_VERTEX_3: 218 which = 0;219 dimension = 3;220 break;218 which = 0; 219 dimension = 3; 220 break; 221 221 case GL_MAP1_VERTEX_4: 222 which=0;223 dimension = 4;224 break;222 which=0; 223 dimension = 4; 224 break; 225 225 case GL_MAP1_INDEX: 226 which=2;227 dimension = 1;228 break;226 which=2; 227 dimension = 1; 228 break; 229 229 case GL_MAP1_COLOR_4: 230 which=2;231 dimension = 4;232 break;230 which=2; 231 dimension = 4; 232 break; 233 233 case GL_MAP1_NORMAL: 234 which=1;235 dimension = 3;236 break;234 which=1; 235 dimension = 3; 236 break; 237 237 case GL_MAP1_TEXTURE_COORD_1: 238 which=3;239 dimension = 1;240 break;238 which=3; 239 dimension = 1; 240 break; 241 241 case GL_MAP1_TEXTURE_COORD_2: 242 which=3;243 dimension = 2;244 break;245 242 which=3; 243 dimension = 2; 244 break; 245 246 246 case GL_MAP1_TEXTURE_COORD_3: 247 which=3;248 dimension = 3;249 break;247 which=3; 248 dimension = 3; 249 break; 250 250 case GL_MAP1_TEXTURE_COORD_4: 251 which=3;252 dimension = 4;253 break; 251 which=3; 252 dimension = 4; 253 break; 254 254 } 255 inMap1f(which, dimension, ulo, uhi, stride, order, pts); 255 inMap1f(which, dimension, ulo, uhi, stride, order, pts); 256 256 } 257 257 else 258 258 glMap1f((GLenum) type, (GLfloat) ulo, (GLfloat) uhi, (GLint) stride, 259 (GLint) order, (const GLfloat *) pts);259 (GLint) order, (const GLfloat *) pts); 260 260 } 261 261 … … 276 276 case N_MESHFILL: 277 277 case N_MESHLINE: 278 glEvalMesh1((GLenum) GL_LINE, (GLint) from, (GLint) to);279 break;278 glEvalMesh1((GLenum) GL_LINE, (GLint) from, (GLint) to); 279 break; 280 280 case N_MESHPOINT: 281 glEvalMesh1((GLenum) GL_POINT, (GLint) from, (GLint) to);282 break;281 glEvalMesh1((GLenum) GL_POINT, (GLint) from, (GLint) to); 282 break; 283 283 } 284 284 } … … 304 304 305 305 void 306 OpenGLCurveEvaluator::putCallBack(GLenum which, GLvoid (GL API*fn)(...))306 OpenGLCurveEvaluator::putCallBack(GLenum which, GLvoid (GLCALLBACK *fn)(...)) 307 307 { 308 308 switch(which) 309 309 { 310 310 case GLU_NURBS_BEGIN: 311 beginCallBackN = (void (GL API*) (GLenum)) fn;311 beginCallBackN = (void (GLCALLBACK *) (GLenum)) fn; 312 312 break; 313 313 case GLU_NURBS_END: 314 endCallBackN = (void (GL API*) (void)) fn;314 endCallBackN = (void (GLCALLBACK *) (void)) fn; 315 315 break; 316 316 case GLU_NURBS_VERTEX: 317 vertexCallBackN = (void (GL API*) (const GLfloat*)) fn;317 vertexCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 318 318 break; 319 319 case GLU_NURBS_NORMAL: 320 normalCallBackN = (void (GL API*) (const GLfloat*)) fn;320 normalCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 321 321 break; 322 322 case GLU_NURBS_COLOR: 323 colorCallBackN = (void (GL API*) (const GLfloat*)) fn;323 colorCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 324 324 break; 325 325 case GLU_NURBS_TEXTURE_COORD: 326 texcoordCallBackN = (void (GL API*) (const GLfloat*)) fn;326 texcoordCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 327 327 break; 328 328 case GLU_NURBS_BEGIN_DATA: 329 beginCallBackData = (void (GL API*) (GLenum, void*)) fn;329 beginCallBackData = (void (GLCALLBACK *) (GLenum, void*)) fn; 330 330 break; 331 331 case GLU_NURBS_END_DATA: 332 endCallBackData = (void (GL API*) (void*)) fn;332 endCallBackData = (void (GLCALLBACK *) (void*)) fn; 333 333 break; 334 334 case GLU_NURBS_VERTEX_DATA: 335 vertexCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;335 vertexCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 336 336 break; 337 337 case GLU_NURBS_NORMAL_DATA: 338 normalCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;338 normalCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 339 339 break; 340 340 case GLU_NURBS_COLOR_DATA: 341 colorCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;341 colorCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 342 342 break; 343 343 case GLU_NURBS_TEXTURE_COORD_DATA: 344 texcoordCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;344 texcoordCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 345 345 break; 346 346 } -
trunk/src/opengl/glu/nurbs/interface/glcurveval.h
r2689 r3079 1 /* $Id: glcurveval.h,v 1. 1 2000-02-09 08:49:01jeroen Exp $ */1 /* $Id: glcurveval.h,v 1.2 2000-03-11 09:05:02 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * glcurveval.h 38 38 * 39 * $Date: 2000-0 2-09 08:49:01 $ $Revision: 1.1$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glcurveval.h,v 1. 1 2000-02-09 08:49:01jeroen Exp $39 * $Date: 2000-03-11 09:05:02 $ $Revision: 1.2 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glcurveval.h,v 1.2 2000-03-11 09:05:02 jeroen Exp $ 41 41 */ 42 42 … … 72 72 class OpenGLCurveEvaluator : public BasicCurveEvaluator { 73 73 public: 74 OpenGLCurveEvaluator(void);75 ~OpenGLCurveEvaluator(void);76 void range1f(long, REAL *, REAL *);77 void domain1f(REAL, REAL);78 void addMap(CurveMap *);74 OpenGLCurveEvaluator(void); 75 ~OpenGLCurveEvaluator(void); 76 void range1f(long, REAL *, REAL *); 77 void domain1f(REAL, REAL); 78 void addMap(CurveMap *); 79 79 80 void enable(long);81 void disable(long);82 void bgnmap1f(long);83 void map1f(long, REAL, REAL, long, long, REAL *);84 void mapgrid1f(long, REAL, REAL);85 void mapmesh1f(long, long, long);86 void evalpoint1i(long);87 void evalcoord1f(long, REAL);88 void endmap1f(void);80 void enable(long); 81 void disable(long); 82 void bgnmap1f(long); 83 void map1f(long, REAL, REAL, long, long, REAL *); 84 void mapgrid1f(long, REAL, REAL); 85 void mapmesh1f(long, long, long); 86 void evalpoint1i(long); 87 void evalcoord1f(long, REAL); 88 void endmap1f(void); 89 89 90 void bgnline(void);91 void endline(void);90 void bgnline(void); 91 void endline(void); 92 92 93 93 void put_vertices_call_back(int flag) 94 94 { 95 output_triangles = flag;95 output_triangles = flag; 96 96 } 97 void putCallBack(GLenum which, GLvoid (GL API*fn)(...));97 void putCallBack(GLenum which, GLvoid (GLCALLBACK *fn)(...)); 98 98 void set_callback_userData(void *data) 99 99 { 100 userData = data;100 userData = data; 101 101 } 102 102 … … 116 116 117 117 void inMap1f(int which, //0: vert, 1: norm, 2: color, 3: tex 118 int dimension,119 REAL ulower,120 REAL uupper,121 int ustride,122 int uorder,123 REAL *ctlpoints);118 int dimension, 119 REAL ulower, 120 REAL uupper, 121 int ustride, 122 int uorder, 123 REAL *ctlpoints); 124 124 125 125 void inPreEvaluate(int order, REAL vprime, REAL *coeff); … … 128 128 void inMapMesh1f(int umin, int umax); 129 129 130 void (GL API*beginCallBackN) (GLenum type);131 void (GL API*endCallBackN) (void);132 void (GL API*vertexCallBackN) (const GLfloat *vert);133 void (GL API*normalCallBackN) (const GLfloat *normal);134 void (GL API*colorCallBackN) (const GLfloat *color);135 void (GL API*texcoordCallBackN) (const GLfloat *texcoord);130 void (GLCALLBACK *beginCallBackN) (GLenum type); 131 void (GLCALLBACK *endCallBackN) (void); 132 void (GLCALLBACK *vertexCallBackN) (const GLfloat *vert); 133 void (GLCALLBACK *normalCallBackN) (const GLfloat *normal); 134 void (GLCALLBACK *colorCallBackN) (const GLfloat *color); 135 void (GLCALLBACK *texcoordCallBackN) (const GLfloat *texcoord); 136 136 137 void (GL API*beginCallBackData) (GLenum type, void* data);138 void (GL API*endCallBackData) (void* data);139 void (GL API*vertexCallBackData) (const GLfloat *vert, void* data);140 void (GL API*normalCallBackData) (const GLfloat *normal, void* data);141 void (GL API*colorCallBackData) (const GLfloat *color, void* data);142 void (GL API*texcoordCallBackData) (const GLfloat *texcoord, void* data);137 void (GLCALLBACK *beginCallBackData) (GLenum type, void* data); 138 void (GLCALLBACK *endCallBackData) (void* data); 139 void (GLCALLBACK *vertexCallBackData) (const GLfloat *vert, void* data); 140 void (GLCALLBACK *normalCallBackData) (const GLfloat *normal, void* data); 141 void (GLCALLBACK *colorCallBackData) (const GLfloat *color, void* data); 142 void (GLCALLBACK *texcoordCallBackData) (const GLfloat *texcoord, void* data); 143 143 144 void* userData; //the opaque pointer for Data callback functions145 void beginCallBack(GLenum type, void* data);144 void* userData; /* the opaque pointer for Data callback functions*/ 145 void beginCallBack(GLenum type, void* data); 146 146 void endCallBack(void* data); 147 147 void vertexCallBack(const GLfloat *vert, void *data); -
trunk/src/opengl/glu/nurbs/interface/glinterface.cpp
r2945 r3079 1 /* $Id: glinterface.cpp,v 1. 2 2000-02-29 13:56:48 sandervlExp $ */1 /* $Id: glinterface.cpp,v 1.3 2000-03-11 09:05:02 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 33 33 ** compliant with the OpenGL(R) version 1.2.1 Specification. 34 34 ** 35 ** $Date: 2000-0 2-29 13:56:48 $ $Revision: 1.2$35 ** $Date: 2000-03-11 09:05:02 $ $Revision: 1.3 $ 36 36 */ 37 37 /* 38 ** $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glinterface.cpp,v 1. 2 2000-02-29 13:56:48 sandervlExp $38 ** $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glinterface.cpp,v 1.3 2000-03-11 09:05:02 jeroen Exp $ 39 39 */ 40 40 … … 63 63 void glu_LOD_eval_list(GLUnurbs *nurb, int level) 64 64 { 65 nurb->LOD_eval_list(level);65 nurb->LOD_eval_list(level); 66 66 } 67 67 … … 152 152 void GLAPI 153 153 gluPwlCurve(GLUnurbs *r, GLint count, INREAL array[], 154 GLint stride, GLenum type)154 GLint stride, GLenum type) 155 155 { 156 156 #ifdef DOWN_LOAD_NURBS … … 161 161 switch(type) { 162 162 case GLU_MAP1_TRIM_2: 163 realType = N_P2D;164 break;163 realType = N_P2D; 164 break; 165 165 case GLU_MAP1_TRIM_3: 166 realType = N_P2DR;167 break;166 realType = N_P2DR; 167 break; 168 168 default: 169 realType = type;170 break;169 realType = type; 170 break; 171 171 } 172 172 r->pwlcurve(count, array, sizeof(INREAL) * stride, realType); … … 175 175 void GLAPI 176 176 gluNurbsCurve(GLUnurbs *r, GLint nknots, INREAL knot[], GLint stride, 177 INREAL ctlarray[], GLint order, GLenum type)177 INREAL ctlarray[], GLint order, GLenum type) 178 178 { 179 179 #ifdef DOWN_LOAD_NURBS … … 185 185 switch(type) { 186 186 case GLU_MAP1_TRIM_2: 187 realType = N_P2D;188 break;187 realType = N_P2D; 188 break; 189 189 case GLU_MAP1_TRIM_3: 190 realType = N_P2DR;191 break;190 realType = N_P2DR; 191 break; 192 192 default: 193 realType = type;194 break;193 realType = type; 194 break; 195 195 } 196 196 197 197 r->nurbscurve(nknots, knot, sizeof(INREAL) * stride, ctlarray, order, 198 realType);198 realType); 199 199 } 200 200 201 201 void GLAPI 202 202 gluNurbsSurface(GLUnurbs *r, GLint sknot_count, GLfloat *sknot, 203 GLint tknot_count, GLfloat *tknot,204 GLint s_stride, GLint t_stride,205 GLfloat *ctlarray, GLint sorder, GLint torder,206 GLenum type)203 GLint tknot_count, GLfloat *tknot, 204 GLint s_stride, GLint t_stride, 205 GLfloat *ctlarray, GLint sorder, GLint torder, 206 GLenum type) 207 207 { 208 208 #ifdef DOWN_LOAD_NURBS … … 221 221 } 222 222 tempNurb = nurbSurfMake(sknot_count, sknot, 223 tknot_count, tknot,224 sorder, torder,225 dimension,226 ctlarray,227 s_stride, t_stride);228 223 tknot_count, tknot, 224 sorder, torder, 225 dimension, 226 ctlarray, 227 s_stride, t_stride); 228 229 229 } 230 230 #endif 231 231 232 232 r->nurbssurface(sknot_count, sknot, tknot_count, tknot, 233 sizeof(INREAL) * s_stride, sizeof(INREAL) * t_stride,234 ctlarray, sorder, torder, type);233 sizeof(INREAL) * s_stride, sizeof(INREAL) * t_stride, 234 ctlarray, sorder, torder, type); 235 235 } 236 236 237 237 void GLAPI 238 238 gluLoadSamplingMatrices(GLUnurbs *r, const GLfloat modelMatrix[16], 239 const GLfloat projMatrix[16],240 const GLint viewport[4])239 const GLfloat projMatrix[16], 240 const GLint viewport[4]) 241 241 { 242 242 r->useGLMatrices(modelMatrix, projMatrix, viewport); … … 251 251 case GLU_AUTO_LOAD_MATRIX: 252 252 r->setautoloadmode(value); 253 return;253 return; 254 254 255 255 case GLU_CULLING: 256 if (value != 0.0) {257 nurbsValue = N_CULLINGON;258 } else {259 nurbsValue = N_NOCULLING;260 }261 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_CULLING, nurbsValue);262 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_CULLING, nurbsValue);263 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_CULLING, nurbsValue);264 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_CULLING, nurbsValue);256 if (value != 0.0) { 257 nurbsValue = N_CULLINGON; 258 } else { 259 nurbsValue = N_NOCULLING; 260 } 261 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_CULLING, nurbsValue); 262 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_CULLING, nurbsValue); 263 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_CULLING, nurbsValue); 264 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_CULLING, nurbsValue); 265 265 return; 266 266 267 267 case GLU_SAMPLING_METHOD: 268 if (value == GLU_PATH_LENGTH) {269 nurbsValue = N_PATHLENGTH;270 } else if (value == GLU_PARAMETRIC_ERROR) {271 nurbsValue = N_PARAMETRICDISTANCE;272 } else if (value == GLU_DOMAIN_DISTANCE) {273 nurbsValue = N_DOMAINDISTANCE;268 if (value == GLU_PATH_LENGTH) { 269 nurbsValue = N_PATHLENGTH; 270 } else if (value == GLU_PARAMETRIC_ERROR) { 271 nurbsValue = N_PARAMETRICDISTANCE; 272 } else if (value == GLU_DOMAIN_DISTANCE) { 273 nurbsValue = N_DOMAINDISTANCE; 274 274 r->set_is_domain_distance_sampling(1); //optimzing untrimmed case 275 275 276 } else if (value == GLU_OBJECT_PARAMETRIC_ERROR) {277 nurbsValue = N_OBJECTSPACE_PARA;278 r->setautoloadmode( 0.0 );279 r->setSamplingMatrixIdentity();280 } else if (value == GLU_OBJECT_PATH_LENGTH) {281 nurbsValue = N_OBJECTSPACE_PATH;282 r->setautoloadmode( 0.0 );283 r->setSamplingMatrixIdentity();284 } else {276 } else if (value == GLU_OBJECT_PARAMETRIC_ERROR) { 277 nurbsValue = N_OBJECTSPACE_PARA; 278 r->setautoloadmode( 0.0 ); 279 r->setSamplingMatrixIdentity(); 280 } else if (value == GLU_OBJECT_PATH_LENGTH) { 281 nurbsValue = N_OBJECTSPACE_PATH; 282 r->setautoloadmode( 0.0 ); 283 r->setSamplingMatrixIdentity(); 284 } else { 285 285 r->postError(GLU_INVALID_VALUE); 286 286 return; 287 287 } 288 288 289 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_SAMPLINGMETHOD, nurbsValue);290 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_SAMPLINGMETHOD, nurbsValue);291 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_SAMPLINGMETHOD, nurbsValue);292 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_SAMPLINGMETHOD, nurbsValue);293 return;289 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_SAMPLINGMETHOD, nurbsValue); 290 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_SAMPLINGMETHOD, nurbsValue); 291 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_SAMPLINGMETHOD, nurbsValue); 292 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_SAMPLINGMETHOD, nurbsValue); 293 return; 294 294 295 295 case GLU_SAMPLING_TOLERANCE: 296 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_PIXEL_TOLERANCE, value);297 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_PIXEL_TOLERANCE, value);298 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_PIXEL_TOLERANCE, value);299 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_PIXEL_TOLERANCE, value);300 return;296 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_PIXEL_TOLERANCE, value); 297 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_PIXEL_TOLERANCE, value); 298 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_PIXEL_TOLERANCE, value); 299 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_PIXEL_TOLERANCE, value); 300 return; 301 301 302 302 case GLU_PARAMETRIC_TOLERANCE: 303 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_ERROR_TOLERANCE, value);303 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_ERROR_TOLERANCE, value); 304 304 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_ERROR_TOLERANCE, value); 305 305 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_ERROR_TOLERANCE, value); 306 306 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_ERROR_TOLERANCE, value); 307 307 return; 308 308 309 309 310 310 case GLU_DISPLAY_MODE: 311 312 if (value == GLU_FILL) {313 nurbsValue = N_FILL;314 } else if (value == GLU_OUTLINE_POLYGON) {315 nurbsValue = N_OUTLINE_POLY;316 } else if (value == GLU_OUTLINE_PATCH) {317 nurbsValue = N_OUTLINE_PATCH;318 } else {319 r->postError(GLU_INVALID_VALUE);320 return;321 }322 r->setnurbsproperty(N_DISPLAY, nurbsValue);323 324 break;311 312 if (value == GLU_FILL) { 313 nurbsValue = N_FILL; 314 } else if (value == GLU_OUTLINE_POLYGON) { 315 nurbsValue = N_OUTLINE_POLY; 316 } else if (value == GLU_OUTLINE_PATCH) { 317 nurbsValue = N_OUTLINE_PATCH; 318 } else { 319 r->postError(GLU_INVALID_VALUE); 320 return; 321 } 322 r->setnurbsproperty(N_DISPLAY, nurbsValue); 323 324 break; 325 325 326 326 case GLU_U_STEP: 327 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_S_STEPS, value);328 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_S_STEPS, value);329 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_S_STEPS, value);330 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_S_STEPS, value);331 332 //added for optimizing untrimmed case327 r->setnurbsproperty(GL_MAP1_VERTEX_3, N_S_STEPS, value); 328 r->setnurbsproperty(GL_MAP1_VERTEX_4, N_S_STEPS, value); 329 r->setnurbsproperty(GL_MAP2_VERTEX_3, N_S_STEPS, value); 330 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_S_STEPS, value); 331 332 //added for optimizing untrimmed case 333 333 r->set_domain_distance_u_rate(value); 334 break;334 break; 335 335 336 336 case GLU_V_STEP: … … 340 340 r->setnurbsproperty(GL_MAP2_VERTEX_4, N_T_STEPS, value); 341 341 342 //added for optimizing untrimmed case342 //added for optimizing untrimmed case 343 343 r->set_domain_distance_v_rate(value); 344 break;345 344 break; 345 346 346 case GLU_NURBS_MODE: 347 if(value == GLU_NURBS_RENDERER)348 r->put_callbackFlag(0);349 else if(value == GLU_NURBS_TESSELLATOR)350 r->put_callbackFlag(1);351 else352 r->postError(GLU_INVALID_ENUM);353 break;347 if(value == GLU_NURBS_RENDERER) 348 r->put_callbackFlag(0); 349 else if(value == GLU_NURBS_TESSELLATOR) 350 r->put_callbackFlag(1); 351 else 352 r->postError(GLU_INVALID_ENUM); 353 break; 354 354 355 355 default: 356 r->postError(GLU_INVALID_ENUM);357 return; 356 r->postError(GLU_INVALID_ENUM); 357 return; 358 358 } 359 359 } … … 366 366 switch(property) { 367 367 case GLU_AUTO_LOAD_MATRIX: 368 if (r->getautoloadmode()) {369 *value = GL_TRUE;370 } else {371 *value = GL_FALSE;372 }373 break;368 if (r->getautoloadmode()) { 369 *value = GL_TRUE; 370 } else { 371 *value = GL_FALSE; 372 } 373 break; 374 374 case GLU_CULLING: 375 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_CULLING, &nurbsValue);376 if (nurbsValue == N_CULLINGON) {377 *value = GL_TRUE;378 } else {379 *value = GL_FALSE;380 }381 break;375 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_CULLING, &nurbsValue); 376 if (nurbsValue == N_CULLINGON) { 377 *value = GL_TRUE; 378 } else { 379 *value = GL_FALSE; 380 } 381 break; 382 382 case GLU_SAMPLING_METHOD: 383 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_SAMPLINGMETHOD, value);384 if(*value == N_PATHLENGTH)385 *value = GLU_PATH_LENGTH;386 else if(*value == N_PARAMETRICDISTANCE)387 *value = GLU_PARAMETRIC_ERROR;388 else if(*value == N_DOMAINDISTANCE)389 *value = GLU_DOMAIN_DISTANCE;390 else if(*value == N_OBJECTSPACE_PATH)391 *value = GLU_OBJECT_PATH_LENGTH;392 else if(*value == N_OBJECTSPACE_PARA)393 *value = GLU_OBJECT_PARAMETRIC_ERROR; 394 break;383 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_SAMPLINGMETHOD, value); 384 if(*value == N_PATHLENGTH) 385 *value = GLU_PATH_LENGTH; 386 else if(*value == N_PARAMETRICDISTANCE) 387 *value = GLU_PARAMETRIC_ERROR; 388 else if(*value == N_DOMAINDISTANCE) 389 *value = GLU_DOMAIN_DISTANCE; 390 else if(*value == N_OBJECTSPACE_PATH) 391 *value = GLU_OBJECT_PATH_LENGTH; 392 else if(*value == N_OBJECTSPACE_PARA) 393 *value = GLU_OBJECT_PARAMETRIC_ERROR; 394 break; 395 395 case GLU_SAMPLING_TOLERANCE: 396 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_PIXEL_TOLERANCE, value);397 break;396 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_PIXEL_TOLERANCE, value); 397 break; 398 398 case GLU_PARAMETRIC_TOLERANCE: 399 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_ERROR_TOLERANCE, value);399 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_ERROR_TOLERANCE, value); 400 400 break; 401 401 402 402 case GLU_U_STEP: 403 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_S_STEPS, value);404 break;403 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_S_STEPS, value); 404 break; 405 405 case GLU_V_STEP: 406 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_T_STEPS, value);407 break;406 r->getnurbsproperty(GL_MAP2_VERTEX_3, N_T_STEPS, value); 407 break; 408 408 case GLU_DISPLAY_MODE: 409 r->getnurbsproperty(N_DISPLAY, &nurbsValue);410 if (nurbsValue == N_FILL) {411 *value = GLU_FILL;412 } else if (nurbsValue == N_OUTLINE_POLY) {413 *value = GLU_OUTLINE_POLYGON;414 } else {415 *value = GLU_OUTLINE_PATCH;416 }417 break;409 r->getnurbsproperty(N_DISPLAY, &nurbsValue); 410 if (nurbsValue == N_FILL) { 411 *value = GLU_FILL; 412 } else if (nurbsValue == N_OUTLINE_POLY) { 413 *value = GLU_OUTLINE_POLYGON; 414 } else { 415 *value = GLU_OUTLINE_PATCH; 416 } 417 break; 418 418 419 419 case GLU_NURBS_MODE: 420 if(r->is_callback())421 *value = GLU_NURBS_TESSELLATOR;422 else423 *value = GLU_NURBS_RENDERER;424 break;425 420 if(r->is_callback()) 421 *value = GLU_NURBS_TESSELLATOR; 422 else 423 *value = GLU_NURBS_RENDERER; 424 break; 425 426 426 default: 427 r->postError(GLU_INVALID_ENUM);428 return;427 r->postError(GLU_INVALID_ENUM); 428 return; 429 429 } 430 430 } … … 446 446 case GLU_NURBS_TEXTURE_COORD_DATA: 447 447 case GLU_NURBS_COLOR_DATA: 448 nobj->putSurfCallBack(which, (GLvoid (* )(...))fn);448 nobj->putSurfCallBack(which, (GLvoid (* GLCALLBACK)(...))fn); 449 449 break; 450 450 451 451 case GLU_NURBS_ERROR: 452 nobj->errorCallback = (void (* )( GLenum )) fn;452 nobj->errorCallback = (void (* GLCALLBACK)( GLenum )) fn; 453 453 break; 454 454 default: -
trunk/src/opengl/glu/nurbs/interface/glrenderer.h
r2689 r3079 1 /* $Id: glrenderer.h,v 1. 1 2000-02-09 08:49:01jeroen Exp $ */1 /* $Id: glrenderer.h,v 1.2 2000-03-11 09:05:02 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * glrenderer.h 38 38 * 39 * $Date: 2000-0 2-09 08:49:01 $ $Revision: 1.1$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glrenderer.h,v 1. 1 2000-02-09 08:49:01jeroen Exp $39 * $Date: 2000-03-11 09:05:02 $ $Revision: 1.2 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glrenderer.h,v 1.2 2000-03-11 09:05:02 jeroen Exp $ 41 41 */ 42 42 … … 56 56 void loadGLMatrices( void ); 57 57 void useGLMatrices( const GLfloat modelMatrix[16], 58 const GLfloat projMatrix[16],59 const GLint viewport[4] );60 void setSamplingMatrixIdentity( void );58 const GLfloat projMatrix[16], 59 const GLint viewport[4] ); 60 void setSamplingMatrixIdentity( void ); 61 61 62 void errorHandler( int ); 63 void bgnrender( void ); 64 void endrender( void ); 65 void setautoloadmode( INREAL value ) 66 { 67 68 if (value) autoloadmode = GL_TRUE; 69 else autoloadmode = GL_FALSE; 70 71 } 72 GLboolean getautoloadmode( void ) { return autoloadmode; } 62 void errorHandler( int ); 63 void bgnrender( void ); 64 void endrender( void ); 65 void setautoloadmode( INREAL value ) 66 { 73 67 74 void (GLAPI *errorCallback)( GLenum ); 75 void postError( int which ) 76 { if (errorCallback) (*errorCallback)( (GLenum)which ); } 68 if (value) autoloadmode = GL_TRUE; 69 else autoloadmode = GL_FALSE; 77 70 78 void putSurfCallBack(GLenum which, GLvoid (GLAPI *fn)(...)) 71 } 72 GLboolean getautoloadmode( void ) { return autoloadmode; } 73 74 void (GLCALLBACK *errorCallback)( GLenum ); 75 void postError( int which ) 76 { if (errorCallback) (*errorCallback)( (GLenum)which ); } 77 78 void putSurfCallBack(GLenum which, GLvoid (GLCALLBACK *fn)(...)) 79 79 { 80 curveEvaluator.putCallBack(which, fn);81 surfaceEvaluator.putCallBack(which, fn);80 curveEvaluator.putCallBack(which, fn); 81 surfaceEvaluator.putCallBack(which, fn); 82 82 } 83 83 84 84 int get_vertices_call_back() 85 85 { 86 return surfaceEvaluator.get_vertices_call_back();86 return surfaceEvaluator.get_vertices_call_back(); 87 87 } 88 88 89 89 void put_vertices_call_back(int flag) 90 90 { 91 surfaceEvaluator.put_vertices_call_back(flag);91 surfaceEvaluator.put_vertices_call_back(flag); 92 92 } 93 93 … … 112 112 void LOD_eval_list(int level) 113 113 { 114 surfaceEvaluator.LOD_eval_list(level);114 surfaceEvaluator.LOD_eval_list(level); 115 115 } 116 116 … … 118 118 int is_callback() 119 119 { 120 return callbackFlag;120 return callbackFlag; 121 121 } 122 122 void put_callbackFlag(int flag) 123 123 { 124 callbackFlag = flag;125 surfaceEvaluator.put_vertices_call_back(flag);126 curveEvaluator.put_vertices_call_back(flag);124 callbackFlag = flag; 125 surfaceEvaluator.put_vertices_call_back(flag); 126 curveEvaluator.put_vertices_call_back(flag); 127 127 } 128 128 129 129 private: 130 GLboolean autoloadmode;131 OpenGLSurfaceEvaluator surfaceEvaluator;132 OpenGLCurveEvaluator curveEvaluator;130 GLboolean autoloadmode; 131 OpenGLSurfaceEvaluator surfaceEvaluator; 132 OpenGLCurveEvaluator curveEvaluator; 133 133 134 void loadSamplingMatrix( const GLfloat vmat[4][4],135 const GLint viewport[4] );136 void loadCullingMatrix( GLfloat vmat[4][4] );137 static void grabGLMatrix( GLfloat vmat[4][4] );138 static void transform4d( GLfloat A[4], GLfloat B[4],139 GLfloat mat[4][4] );140 static void multmatrix4d( GLfloat n[4][4], GLfloat left[4][4],141 GLfloat right[4][4] );134 void loadSamplingMatrix( const GLfloat vmat[4][4], 135 const GLint viewport[4] ); 136 void loadCullingMatrix( GLfloat vmat[4][4] ); 137 static void grabGLMatrix( GLfloat vmat[4][4] ); 138 static void transform4d( GLfloat A[4], GLfloat B[4], 139 GLfloat mat[4][4] ); 140 static void multmatrix4d( GLfloat n[4][4], GLfloat left[4][4], 141 GLfloat right[4][4] ); 142 142 143 143 int callbackFlag; -
trunk/src/opengl/glu/nurbs/interface/glsurfeval.cpp
r2996 r3079 1 /* $Id: glsurfeval.cpp,v 1. 2 2000-03-04 19:10:13jeroen Exp $ */1 /* $Id: glsurfeval.cpp,v 1.3 2000-03-11 09:05:02 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * glsurfeval.c++ 38 38 * 39 * $Date: 2000-03- 04 19:10:13 $ $Revision: 1.2$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glsurfeval.cpp,v 1. 2 2000-03-04 19:10:13jeroen Exp $39 * $Date: 2000-03-11 09:05:02 $ $Revision: 1.3 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glsurfeval.cpp,v 1.3 2000-03-11 09:05:02 jeroen Exp $ 41 41 */ 42 42 … … 52 52 #include "bezierPatchMesh.h" 53 53 54 55 54 //extern int surfcount; 56 55 //int surfcount=0; 57 56 58 /*#define USE_INTERNAL_EVAL*/ //use internal evaluator 57 #define USE_INTERNAL_EVAL /* use internal evaluator*/ 59 58 60 59 /*whether do evaluation or not*/ … … 1126 1125 glEvalCoord2f((GLfloat) u, (GLfloat) v); 1127 1126 1128 1129 1127 #endif 1130 1128 … … 1192 1190 1193 1191 void 1194 OpenGLSurfaceEvaluator::putCallBack(GLenum which, GLvoid (GL API*fn)(...))1192 OpenGLSurfaceEvaluator::putCallBack(GLenum which, GLvoid (GLCALLBACK *fn)(...)) 1195 1193 { 1196 1194 switch(which) 1197 1195 { 1198 1196 case GLU_NURBS_BEGIN: 1199 beginCallBackN = (void (GL API*) (GLenum)) fn;1197 beginCallBackN = (void (GLCALLBACK *) (GLenum)) fn; 1200 1198 break; 1201 1199 case GLU_NURBS_END: 1202 endCallBackN = (void (GL API*) (void)) fn;1200 endCallBackN = (void (GLCALLBACK *) (void)) fn; 1203 1201 break; 1204 1202 case GLU_NURBS_VERTEX: 1205 vertexCallBackN = (void (GL API*) (const GLfloat*)) fn;1203 vertexCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 1206 1204 break; 1207 1205 case GLU_NURBS_NORMAL: 1208 normalCallBackN = (void (GL API*) (const GLfloat*)) fn;1206 normalCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 1209 1207 break; 1210 1208 case GLU_NURBS_COLOR: 1211 colorCallBackN = (void (GL API*) (const GLfloat*)) fn;1209 colorCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 1212 1210 break; 1213 1211 case GLU_NURBS_TEXTURE_COORD: 1214 texcoordCallBackN = (void (GL API*) (const GLfloat*)) fn;1212 texcoordCallBackN = (void (GLCALLBACK *) (const GLfloat*)) fn; 1215 1213 break; 1216 1214 case GLU_NURBS_BEGIN_DATA: 1217 beginCallBackData = (void (GL API*) (GLenum, void*)) fn;1215 beginCallBackData = (void (GLCALLBACK *) (GLenum, void*)) fn; 1218 1216 break; 1219 1217 case GLU_NURBS_END_DATA: 1220 endCallBackData = (void (GL API*) (void*)) fn;1218 endCallBackData = (void (GLCALLBACK *) (void*)) fn; 1221 1219 break; 1222 1220 case GLU_NURBS_VERTEX_DATA: 1223 vertexCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;1221 vertexCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 1224 1222 break; 1225 1223 case GLU_NURBS_NORMAL_DATA: 1226 normalCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;1224 normalCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 1227 1225 break; 1228 1226 case GLU_NURBS_COLOR_DATA: 1229 colorCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;1227 colorCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 1230 1228 break; 1231 1229 case GLU_NURBS_TEXTURE_COORD_DATA: 1232 texcoordCallBackData = (void (GL API*) (const GLfloat*, void*)) fn;1230 texcoordCallBackData = (void (GLCALLBACK *) (const GLfloat*, void*)) fn; 1233 1231 break; 1234 1232 -
trunk/src/opengl/glu/nurbs/interface/glsurfeval.h
r2689 r3079 1 /* $Id: glsurfeval.h,v 1. 1 2000-02-09 08:49:02jeroen Exp $ */1 /* $Id: glsurfeval.h,v 1.2 2000-03-11 09:05:03 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * glsurfeval.h 38 38 * 39 * $Date: 2000-0 2-09 08:49:02 $ $Revision: 1.1$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glsurfeval.h,v 1. 1 2000-02-09 08:49:02jeroen Exp $39 * $Date: 2000-03-11 09:05:03 $ $Revision: 1.2 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/glsurfeval.h,v 1.2 2000-03-11 09:05:03 jeroen Exp $ 41 41 */ 42 42 … … 62 62 #define IN_MAX_BEZIER_ORDER 40 /*XXX should be bigger than machine order*/ 63 63 #endif 64 64 65 65 #ifndef IN_MAX_DIMENSION 66 66 #define IN_MAX_DIMENSION 4 … … 90 90 class StoredVertex { 91 91 public: 92 StoredVertex() { type = 0; }93 ~StoredVertex(void) {}94 void saveEvalCoord(REAL x, REAL y)95 {coord[0] = x; coord[1] = y; type = TYPECOORD; }96 void saveEvalPoint(long x, long y)97 {point[0] = x; point[1] = y; type = TYPEPOINT; }98 void invoke(OpenGLSurfaceEvaluator *eval);92 StoredVertex() { type = 0; } 93 ~StoredVertex(void) {} 94 void saveEvalCoord(REAL x, REAL y) 95 {coord[0] = x; coord[1] = y; type = TYPECOORD; } 96 void saveEvalPoint(long x, long y) 97 {point[0] = x; point[1] = y; type = TYPEPOINT; } 98 void invoke(OpenGLSurfaceEvaluator *eval); 99 99 100 100 private: 101 int type;102 REAL coord[2];103 long point[2];101 int type; 102 REAL coord[2]; 103 long point[2]; 104 104 }; 105 105 106 106 class OpenGLSurfaceEvaluator : public BasicSurfaceEvaluator { 107 107 public: 108 OpenGLSurfaceEvaluator();109 ~OpenGLSurfaceEvaluator( void );110 void polymode( long style );111 void range2f( long, REAL *, REAL * );112 void domain2f( REAL, REAL, REAL, REAL );113 void addMap( SurfaceMap * ) { }114 115 void enable( long );116 void disable( long );117 void bgnmap2f( long );118 void map2f( long, REAL, REAL, long, long,119 REAL, REAL, long, long, REAL * );120 void mapgrid2f( long, REAL, REAL, long, REAL, REAL );121 void mapmesh2f( long, long, long, long, long );122 void evalcoord2f( long, REAL, REAL );123 void evalpoint2i( long, long );124 void endmap2f( void );125 126 void bgnline( void );127 void endline( void );128 void bgnclosedline( void );129 void endclosedline( void );130 void bgntmesh( void );131 void swaptmesh( void );132 void endtmesh( void );133 void bgnqstrip( void );134 void endqstrip( void );108 OpenGLSurfaceEvaluator(); 109 ~OpenGLSurfaceEvaluator( void ); 110 void polymode( long style ); 111 void range2f( long, REAL *, REAL * ); 112 void domain2f( REAL, REAL, REAL, REAL ); 113 void addMap( SurfaceMap * ) { } 114 115 void enable( long ); 116 void disable( long ); 117 void bgnmap2f( long ); 118 void map2f( long, REAL, REAL, long, long, 119 REAL, REAL, long, long, REAL * ); 120 void mapgrid2f( long, REAL, REAL, long, REAL, REAL ); 121 void mapmesh2f( long, long, long, long, long ); 122 void evalcoord2f( long, REAL, REAL ); 123 void evalpoint2i( long, long ); 124 void endmap2f( void ); 125 126 void bgnline( void ); 127 void endline( void ); 128 void bgnclosedline( void ); 129 void endclosedline( void ); 130 void bgntmesh( void ); 131 void swaptmesh( void ); 132 void endtmesh( void ); 133 void bgnqstrip( void ); 134 void endqstrip( void ); 135 135 136 136 void bgntfan( void ); … … 141 141 int n_right, REAL u_right, REAL* right_val); 142 142 143 void coord2f( REAL, REAL );144 void point2i( long, long );145 146 void newtmeshvert( REAL, REAL );147 void newtmeshvert( long, long );148 149 void putCallBack(GLenum which, GLvoid (GLAPI*fn)(...));143 void coord2f( REAL, REAL ); 144 void point2i( long, long ); 145 146 void newtmeshvert( REAL, REAL ); 147 void newtmeshvert( long, long ); 148 149 void putCallBack(GLenum which, GLvoid (GLCALLBACK *fn)(...)); 150 150 int get_vertices_call_back() 151 151 { 152 return output_triangles;152 return output_triangles; 153 153 } 154 154 void put_vertices_call_back(int flag) 155 155 { 156 output_triangles = flag;156 output_triangles = flag; 157 157 } 158 158 … … 179 179 180 180 private: 181 StoredVertex *vertexCache[VERTEX_CACHE_SIZE];182 int tmeshing;183 int which;184 int vcount;181 StoredVertex *vertexCache[VERTEX_CACHE_SIZE]; 182 int tmeshing; 183 int which; 184 int vcount; 185 185 186 186 GLint gl_polygon_mode[2];/*to save and restore so that 187 *no side effect188 */187 *no side effect 188 */ 189 189 bezierPatchMesh *global_bpm; //for output triangles 190 190 int output_triangles; //true 1 or false 0 … … 192 192 193 193 194 void (GL API*beginCallBackN) (GLenum type);195 void (GL API*endCallBackN) (void);196 void (GL API*vertexCallBackN) (const GLfloat *vert);197 void (GL API*normalCallBackN) (const GLfloat *normal);198 void (GL API*colorCallBackN) (const GLfloat *color);199 void (GL API*texcoordCallBackN) (const GLfloat *texcoord);200 201 void (GL API*beginCallBackData) (GLenum type, void* data);202 void (GL API*endCallBackData) (void* data);203 void (GL API*vertexCallBackData) (const GLfloat *vert, void* data);204 void (GL API*normalCallBackData) (const GLfloat *normal, void* data);205 void (GL API*colorCallBackData) (const GLfloat *color, void* data);206 void (GL API*texcoordCallBackData) (const GLfloat *texcoord, void* data);207 208 void beginCallBack (GLenum type, void* data);209 void endCallBack (void* data);210 void vertexCallBack (const GLfloat *vert, void* data);211 void normalCallBack (const GLfloat *normal, void* data);212 void colorCallBack (const GLfloat *color, void* data);213 void texcoordCallBack (const GLfloat *texcoord, void* data);214 215 216 void* userData; //the opaque pointer for Data callback functions.194 void (GLCALLBACK *beginCallBackN) (GLenum type); 195 void (GLCALLBACK *endCallBackN) (void); 196 void (GLCALLBACK *vertexCallBackN) (const GLfloat *vert); 197 void (GLCALLBACK *normalCallBackN) (const GLfloat *normal); 198 void (GLCALLBACK *colorCallBackN) (const GLfloat *color); 199 void (GLCALLBACK *texcoordCallBackN) (const GLfloat *texcoord); 200 201 void (GLCALLBACK *beginCallBackData) (GLenum type, void* data); 202 void (GLCALLBACK *endCallBackData) (void* data); 203 void (GLCALLBACK *vertexCallBackData) (const GLfloat *vert, void* data); 204 void (GLCALLBACK *normalCallBackData) (const GLfloat *normal, void* data); 205 void (GLCALLBACK *colorCallBackData) (const GLfloat *color, void* data); 206 void (GLCALLBACK *texcoordCallBackData) (const GLfloat *texcoord, void* data); 207 208 void beginCallBack (GLenum type, void* data); 209 void endCallBack (void* data); 210 void vertexCallBack (const GLfloat *vert, void* data); 211 void normalCallBack (const GLfloat *normal, void* data); 212 void colorCallBack (const GLfloat *color, void* data); 213 void texcoordCallBack (const GLfloat *texcoord, void* data); 214 215 216 void* userData; /* the opaque pointer for Data callback functions.*/ 217 217 218 218 /*LOD evaluation*/ 219 219 void LOD_triangle(REAL A[2], REAL B[2], REAL C[2], 220 int level);220 int level); 221 221 void LOD_eval(int num_vert, REAL* verts, int type, int level); 222 223 int LOD_eval_level; //set by LOD_eval_list()222 223 int LOD_eval_level; /* set by LOD_eval_list() */ 224 224 225 225 /*************begin for internal evaluators*****************/ 226 226 227 227 /*the following global variables are only defined in this file. 228 228 *They are used to cache the precomputed Bezier polynomial values. … … 272 272 /*functions*/ 273 273 void inDoDomain2WithDerivs(int k, REAL u, REAL v, 274 REAL u1, REAL u2, int uorder,275 REAL v1, REAL v2, int vorder,276 REAL *baseData,277 REAL *retPoint, REAL *retdu, REAL *retdv);274 REAL u1, REAL u2, int uorder, 275 REAL v1, REAL v2, int vorder, 276 REAL *baseData, 277 REAL *retPoint, REAL *retdu, REAL *retdv); 278 278 void inPreEvaluate(int order, REAL vprime, REAL *coeff); 279 279 void inPreEvaluateWithDeriv(int order, REAL vprime, REAL *coeff, REAL *coeffDeriv); … … 281 281 void inComputeNormal2(REAL *pu, REAL *pv, REAL *n); 282 282 void inDoEvalCoord2(REAL u, REAL v, 283 REAL *retPoint, REAL *retNormal);283 REAL *retPoint, REAL *retNormal); 284 284 void inDoEvalCoord2NOGE(REAL u, REAL v, 285 REAL *retPoint, REAL *retNormal);285 REAL *retPoint, REAL *retNormal); 286 286 void inMap2f(int k, 287 REAL ulower,288 REAL uupper,289 int ustride,290 int uorder,291 REAL vlower,292 REAL vupper,293 int vstride,294 int vorder,295 REAL *ctlPoints);287 REAL ulower, 288 REAL uupper, 289 int ustride, 290 int uorder, 291 REAL vlower, 292 REAL vupper, 293 int vstride, 294 int vorder, 295 REAL *ctlPoints); 296 296 297 297 void inMapGrid2f(int nu, REAL u0, REAL u1, 298 int nv, REAL v0, REAL v1);298 int nv, REAL v0, REAL v1); 299 299 300 300 void inEvalMesh2(int lowU, int lowV, int highU, int highV); … … 303 303 304 304 void inEvalULine(int n_points, REAL v, REAL* u_vals, 305 int stride, REAL ret_points[][3], REAL ret_normals[][3]);305 int stride, REAL ret_points[][3], REAL ret_normals[][3]); 306 306 307 307 void inEvalVLine(int n_points, REAL u, REAL* v_vals, 308 int stride, REAL ret_points[][3], REAL ret_normals[][3]);308 int stride, REAL ret_points[][3], REAL ret_normals[][3]); 309 309 310 310 void inEvalUStrip(int n_upper, REAL v_upper, REAL* upper_val, … … 326 326 327 327 void inDoDomain2WithDerivsBV(int k, REAL u, REAL v, 328 REAL u1, REAL u2, int uorder,329 REAL v1, REAL v2, int vorder,330 REAL *baseData,331 REAL *retPoint, REAL* retdu, REAL *retdv);328 REAL u1, REAL u2, int uorder, 329 REAL v1, REAL v2, int vorder, 330 REAL *baseData, 331 REAL *retPoint, REAL* retdu, REAL *retdv); 332 332 333 333 void inDoDomain2WithDerivsBU(int k, REAL u, REAL v, 334 REAL u1, REAL u2, int uorder,335 REAL v1, REAL v2, int vorder,336 REAL *baseData,337 REAL *retPoint, REAL* retdu, REAL *retdv);334 REAL u1, REAL u2, int uorder, 335 REAL v1, REAL v2, int vorder, 336 REAL *baseData, 337 REAL *retPoint, REAL* retdu, REAL *retdv); 338 338 339 339 340 340 void inDoEvalCoord2NOGE_BV(REAL u, REAL v, 341 REAL *retPoint, REAL *retNormal);341 REAL *retPoint, REAL *retNormal); 342 342 343 343 void inDoEvalCoord2NOGE_BU(REAL u, REAL v, 344 REAL *retPoint, REAL *retNormal);344 REAL *retPoint, REAL *retNormal); 345 345 346 346 void inBPMEval(bezierPatchMesh* bpm); … … 362 362 363 363 void inMap2fEM(int which, //0:vert,1:norm,2:color,3:tex 364 int dimension,365 REAL ulower,366 REAL uupper,367 int ustride,368 int uorder,369 REAL vlower,370 REAL vupper,371 int vstride,372 int vorder,373 REAL *ctlPoints);364 int dimension, 365 REAL ulower, 366 REAL uupper, 367 int ustride, 368 int uorder, 369 REAL vlower, 370 REAL vupper, 371 int vstride, 372 int vorder, 373 REAL *ctlPoints); 374 374 375 375 void inDoDomain2WithDerivsEM(surfEvalMachine *em, REAL u, REAL v, 376 REAL *retPoint, REAL *retdu, REAL *retdv);376 REAL *retPoint, REAL *retdu, REAL *retdv); 377 377 void inDoDomain2EM(surfEvalMachine *em, REAL u, REAL v, 378 REAL *retPoint);378 REAL *retPoint); 379 379 void inDoEvalCoord2EM(REAL u, REAL v); 380 380 … … 386 386 387 387 /*************end for internal evaluators*****************/ 388 388 389 389 }; 390 390 … … 393 393 switch(type) { 394 394 case TYPECOORD: 395 eval->coord2f(coord[0], coord[1]);396 break;395 eval->coord2f(coord[0], coord[1]); 396 break; 397 397 case TYPEPOINT: 398 eval->point2i(point[0], point[1]);399 break;398 eval->point2i(point[0], point[1]); 399 break; 400 400 default: 401 break;401 break; 402 402 } 403 403 } -
trunk/src/opengl/glu/nurbs/interface/insurfeval.cpp
r2689 r3079 1 /* $Id: insurfeval.cpp,v 1. 1 2000-02-09 08:49:02jeroen Exp $ */1 /* $Id: insurfeval.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 33 33 ** compliant with the OpenGL(R) version 1.2.1 Specification. 34 34 ** 35 ** $Date: 2000-0 2-09 08:49:02 $ $Revision: 1.1$35 ** $Date: 2000-03-11 09:05:03 $ $Revision: 1.2 $ 36 36 */ 37 37 /* 38 ** $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/insurfeval.cpp,v 1. 1 2000-02-09 08:49:02jeroen Exp $38 ** $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/interface/insurfeval.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ 39 39 */ 40 40 … … 66 66 67 67 static void LOD_interpolate(REAL A[2], REAL B[2], REAL C[2], int j, int k, int pow2_level, 68 REAL& u, REAL& v)68 REAL& u, REAL& v) 69 69 { 70 70 REAL a,a1,b,b1; … … 94 94 95 95 void OpenGLSurfaceEvaluator::LOD_triangle(REAL A[2], REAL B[2], REAL C[2], 96 int level)96 int level) 97 97 { 98 98 int k,j; … … 118 118 119 119 for(k=0; k<=j; k++) 120 {121 LOD_interpolate(A,B,C,j,j-k,pow2_level, u,v);120 { 121 LOD_interpolate(A,B,C,j,j-k,pow2_level, u,v); 122 122 #ifdef USE_LOD 123 123 LOD_EVAL_COORD(u,v); 124 // glEvalCoord2f(u,v);124 // glEvalCoord2f(u,v); 125 125 #else 126 inDoEvalCoord2EM(u,v);126 inDoEvalCoord2EM(u,v); 127 127 #endif 128 128 129 LOD_interpolate(A,B,C,j+1,j-k,pow2_level, u,v);129 LOD_interpolate(A,B,C,j+1,j-k,pow2_level, u,v); 130 130 131 131 #ifdef USE_LOD 132 LOD_EVAL_COORD(u,v);133 // glEvalCoord2f(u,v);132 LOD_EVAL_COORD(u,v); 133 // glEvalCoord2f(u,v); 134 134 #else 135 inDoEvalCoord2EM(u,v);135 inDoEvalCoord2EM(u,v); 136 136 #endif 137 }138 // endCallBack(); 137 } 138 // endCallBack(); 139 139 glEnd(); 140 140 } … … 142 142 143 143 void OpenGLSurfaceEvaluator::LOD_eval(int num_vert, REAL* verts, int type, 144 int level145 )144 int level 145 ) 146 146 { 147 147 int i,k; … … 151 151 for(i=2, k=4; i<=num_vert-2; i+=2, k+=4) 152 152 { 153 LOD_triangle(verts+k-4, verts+k-2, verts+k,154 level155 );156 LOD_triangle(verts+k-2, verts+k+2, verts+k,157 level158 );153 LOD_triangle(verts+k-4, verts+k-2, verts+k, 154 level 155 ); 156 LOD_triangle(verts+k-2, verts+k+2, verts+k, 157 level 158 ); 159 159 } 160 160 if(num_vert % 2 ==1) 161 161 { 162 LOD_triangle(verts+2*(num_vert-3), verts+2*(num_vert-2), verts+2*(num_vert-1),163 level164 );162 LOD_triangle(verts+2*(num_vert-3), verts+2*(num_vert-2), verts+2*(num_vert-1), 163 level 164 ); 165 165 } 166 166 break; … … 168 168 for(i=1, k=2; i<=num_vert-2; i++, k+=2) 169 169 { 170 LOD_triangle(verts,verts+k, verts+k+2,171 level172 );170 LOD_triangle(verts,verts+k, verts+k+2, 171 level 172 ); 173 173 } 174 174 break; … … 178 178 } 179 179 } 180 180 181 181 182 182 #endif //USE_LOD … … 256 256 int vstride = bpm->bpatch->dimension; 257 257 inMap2f( 258 (bpm->bpatch->dimension == 3)? GL_MAP2_VERTEX_3 : GL_MAP2_VERTEX_4,259 bpm->bpatch->umin,260 bpm->bpatch->umax,261 ustride,262 bpm->bpatch->uorder,263 bpm->bpatch->vmin,264 bpm->bpatch->vmax,265 vstride,266 bpm->bpatch->vorder,267 bpm->bpatch->ctlpoints);258 (bpm->bpatch->dimension == 3)? GL_MAP2_VERTEX_3 : GL_MAP2_VERTEX_4, 259 bpm->bpatch->umin, 260 bpm->bpatch->umax, 261 ustride, 262 bpm->bpatch->uorder, 263 bpm->bpatch->vmin, 264 bpm->bpatch->vmax, 265 vstride, 266 bpm->bpatch->vorder, 267 bpm->bpatch->ctlpoints); 268 268 269 269 bpm->vertex_array = (float*) malloc(sizeof(float)* (bpm->index_UVarray/2) * 3+1); /*in case the origional dimenion is 4, then we need 4 space to pass to evaluator.*/ … … 1339 1339 leftMostV[1] = v_lower; 1340 1340 1341 leftMostNormal = lowerNormal[j-1];1342 leftMostXYZ = lowerXYZ[j-1];1341 leftMostNormal = lowerNormal[j-1]; 1342 leftMostXYZ = lowerXYZ[j-1]; 1343 1343 } 1344 1344 } … … 1423 1423 { 1424 1424 bgntfan(); 1425 glNormal3fv(botMostNormal);1425 glNormal3fv(botMostNormal); 1426 1426 glVertex3fv(botMostXYZ); 1427 1427 1428 1428 while(j<n_right){ 1429 glNormal3fv(rightNormal[j]);1430 glVertex3fv(rightXYZ[j]);1431 j++;1429 glNormal3fv(rightNormal[j]); 1430 glVertex3fv(rightXYZ[j]); 1431 j++; 1432 1432 1433 1433 } … … 1441 1441 { 1442 1442 bgntfan(); 1443 glNormal3fv(botMostNormal);1444 glVertex3fv(botMostXYZ);1445 1443 glNormal3fv(botMostNormal); 1444 glVertex3fv(botMostXYZ); 1445 1446 1446 for(k=n_left-1; k>=i; k--) /*reverse order for two-side lighting*/ 1447 {1448 glNormal3fv(leftNormal[k]);1449 glVertex3fv(leftXYZ[k]);1450 }1447 { 1448 glNormal3fv(leftNormal[k]); 1449 glVertex3fv(leftXYZ[k]); 1450 } 1451 1451 1452 1452 endtfan(); … … 1458 1458 if(left_val[i] <= right_val[j]) 1459 1459 { 1460 bgntfan();1461 1462 glNormal3fv(rightNormal[j]);1463 glVertex3fv(rightXYZ[j]);1460 bgntfan(); 1461 1462 glNormal3fv(rightNormal[j]); 1463 glVertex3fv(rightXYZ[j]); 1464 1464 1465 1465 /*find the last k>=i such that … … 1480 1480 for(l=k; l>=i; l--)/*the reverse is for two-side lighting*/ 1481 1481 { 1482 glNormal3fv(leftNormal[l]);1483 glVertex3fv(leftXYZ[l]);1482 glNormal3fv(leftNormal[l]); 1483 glVertex3fv(leftXYZ[l]); 1484 1484 1485 1485 } 1486 glNormal3fv(botMostNormal);1487 glVertex3fv(botMostXYZ);1486 glNormal3fv(botMostNormal); 1487 glVertex3fv(botMostXYZ); 1488 1488 1489 1489 endtfan(); … … 1493 1493 i = k+1; 1494 1494 1495 botMostV[0] = u_left;1496 botMostV[1] = left_val[k];1497 botMostNormal = leftNormal[k];1498 botMostXYZ = leftXYZ[k];1495 botMostV[0] = u_left; 1496 botMostV[1] = left_val[k]; 1497 botMostNormal = leftNormal[k]; 1498 botMostXYZ = leftXYZ[k]; 1499 1499 } 1500 1500 else /*left_val[i] > right_val[j])*/ 1501 1501 { 1502 bgntfan();1503 glNormal3fv(leftNormal[i]);1504 glVertex3fv(leftXYZ[i]);1505 1502 bgntfan(); 1503 glNormal3fv(leftNormal[i]); 1504 glVertex3fv(leftXYZ[i]); 1505 1506 1506 glNormal3fv(botMostNormal); 1507 glVertex3fv(botMostXYZ);1508 1507 glVertex3fv(botMostXYZ); 1508 1509 1509 1510 1510 /*find the last k>=j such that … … 1516 1516 if(right_val[k] >= left_val[i]) 1517 1517 break; 1518 glNormal3fv(rightNormal[k]);1519 glVertex3fv(rightXYZ[k]);1518 glNormal3fv(rightNormal[k]); 1519 glVertex3fv(rightXYZ[k]); 1520 1520 1521 1521 k++; … … 1526 1526 */ 1527 1527 j=k; 1528 botMostV[0] = u_right;1529 botMostV[1] = right_val[j-1];1530 1531 botMostNormal = rightNormal[j-1];1532 botMostXYZ = rightXYZ[j-1];1528 botMostV[0] = u_right; 1529 botMostV[1] = right_val[j-1]; 1530 1531 botMostNormal = rightNormal[j-1]; 1532 botMostXYZ = rightXYZ[j-1]; 1533 1533 } 1534 1534 } … … 1536 1536 //clean up 1537 1537 free(leftXYZ); 1538 free( leftXYZ);1539 free( rightNormal);1538 free(rightXYZ); 1539 free(leftNormal); 1540 1540 free(rightNormal); 1541 1541 } … … 1543 1543 /*-----------------------begin evalMachine-------------------*/ 1544 1544 void OpenGLSurfaceEvaluator::inMap2fEM(int which, int k, 1545 REAL ulower,1546 REAL uupper,1547 int ustride,1548 int uorder,1549 REAL vlower,1550 REAL vupper,1551 int vstride,1552 int vorder,1553 REAL *ctlPoints)1545 REAL ulower, 1546 REAL uupper, 1547 int ustride, 1548 int uorder, 1549 REAL vlower, 1550 REAL vupper, 1551 int vstride, 1552 int vorder, 1553 REAL *ctlPoints) 1554 1554 { 1555 1555 int i,j,x; … … 2046 2046 #endif //GENERIC_TEST 2047 2047 2048 inDoEvalCoord2EM(u,v);2048 inDoEvalCoord2EM(u,v); 2049 2049 2050 2050 #endif //USE_LOD 2051 2051 2052 k += 2;2053 }2052 k += 2; 2053 } 2054 2054 endCallBack(userData); 2055 2055 -
trunk/src/opengl/glu/nurbs/internals/slicer.cpp
r2689 r3079 1 /* $Id: slicer.cpp,v 1. 1 2000-02-09 08:50:28jeroen Exp $ */1 /* $Id: slicer.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * slicer.c++ 38 38 * 39 * $Date: 2000-0 2-09 08:50:28 $ $Revision: 1.1$40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/internals/slicer.cpp,v 1. 1 2000-02-09 08:50:28jeroen Exp $39 * $Date: 2000-03-11 09:05:03 $ $Revision: 1.2 $ 40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/internals/slicer.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ 41 41 */ 42 42 … … 55 55 #include "varray.h" 56 56 57 #include "polyUtil.h" //for area()57 #include "polyUtil.h" /* for area() */ 58 58 59 59 //static int count=0; … … 111 111 112 112 n_changes = (compV2InX(loop->prev->head(), loop->prev->tail()) 113 != cur_sign);113 != cur_sign); 114 114 115 115 for(temp=loop->next; temp != loop; temp = temp->next) … … 120 120 { 121 121 #ifdef DEBUG 122 printf("***change signe\n");122 printf("***change signe\n"); 123 123 #endif 124 n_changes++;124 n_changes++; 125 125 } 126 126 } … … 154 154 //first find bot 155 155 for(temp = loop->next; temp != loop; temp = temp->next) 156 {157 if(compInY(temp->tail(), temp->prev->tail()) > 0)158 break;159 }156 { 157 if(compInY(temp->tail(), temp->prev->tail()) > 0) 158 break; 159 } 160 160 bot = temp->prev; 161 161 //then find top 162 162 for(temp=loop->prev; temp != loop; temp = temp->prev) 163 {164 if(compInY(temp->tail(), temp->prev->tail()) > 0)165 break;166 }163 { 164 if(compInY(temp->tail(), temp->prev->tail()) > 0) 165 break; 166 } 167 167 top = temp; 168 168 } … … 170 170 { 171 171 for(temp=loop->next; temp != loop; temp = temp->next) 172 {173 if(compInY(temp->tail(), temp->prev->tail()) < 0)174 break;175 }172 { 173 if(compInY(temp->tail(), temp->prev->tail()) < 0) 174 break; 175 } 176 176 top = temp->prev; 177 177 for(temp=loop->prev; temp != loop; temp = temp->prev) 178 {179 if(compInY(temp->tail(), temp->prev->tail()) < 0)180 break;181 }178 { 179 if(compInY(temp->tail(), temp->prev->tail()) < 0) 180 break; 181 } 182 182 bot = temp; 183 183 } … … 192 192 { 193 193 for(i=0; i<=jarc->pwlArc->npts-2; i++) 194 {195 inc_chain.appendVertex(jarc->pwlArc->pts[i].param);196 }194 { 195 inc_chain.appendVertex(jarc->pwlArc->pts[i].param); 196 } 197 197 198 198 } … … 201 201 { 202 202 for(i=jarc->pwlArc->npts-2; i>=0; i--) 203 {204 dec_chain.appendVertex(jarc->pwlArc->pts[i].param);205 }203 { 204 dec_chain.appendVertex(jarc->pwlArc->pts[i].param); 205 } 206 206 } 207 207 for(i=bot->pwlArc->npts-2; i>=1; i--) 208 208 { 209 209 dec_chain.appendVertex(jarc->pwlArc->pts[i].param); 210 } 210 } 211 211 212 212 monoTriangulationRec(top->tail(), bot->tail(), &inc_chain, 0, 213 &dec_chain, 0, &backend);213 &dec_chain, 0, &backend); 214 214 215 215 } … … 225 225 nlines++; 226 226 if(nlines == 5) 227 break;227 break; 228 228 } 229 229 if(nlines != 4) … … 238 238 printf("loop->next->head=(%f,%f)\n", loop->next->head()[0], loop->next->head()[1]); 239 239 if(fabs(loop->tail()[0] - loop->head()[0])<0.000001) 240 printf("equal 1\n");240 printf("equal 1\n"); 241 241 if(loop->next->tail()[1] == loop->next->head()[1]) 242 printf("equal 2\n");242 printf("equal 2\n"); 243 243 */ 244 244 … … 290 290 int i; 291 291 for(i=0; i<n; i++) 292 backend.tmeshvertNOGE(&verts[i]);292 backend.tmeshvertNOGE(&verts[i]); 293 293 } 294 294 } … … 319 319 { 320 320 if(loop->tail()[1] > loop->prev->prev->tail()[1]) 321 {322 323 top = loop;324 }321 { 322 323 top = loop; 324 } 325 325 else{ 326 326 327 top = loop->prev->prev;328 }327 top = loop->prev->prev; 328 } 329 329 } 330 330 else 331 331 { 332 332 if(loop->tail()[0] > loop->prev->prev->tail()[0]) 333 {334 //loop is the right arc335 336 top = loop->next;337 }333 { 334 //loop is the right arc 335 336 top = loop->next; 337 } 338 338 else 339 {340 341 top = loop->prev;342 }339 { 340 341 top = loop->prev; 342 } 343 343 } 344 344 left = top->next; … … 353 353 int nu = top->pwlArc->npts; 354 354 if(nu < bot->pwlArc->npts) 355 nu = bot->pwlArc->npts;355 nu = bot->pwlArc->npts; 356 356 int nv = left->pwlArc->npts; 357 357 if(nv < right->pwlArc->npts) 358 nv = right->pwlArc->npts;358 nv = right->pwlArc->npts; 359 359 /* 360 360 if(nu > 2 && nv > 2) 361 {362 triangulateRectGen(top, nu-2, nv-2, backend);363 return;364 }361 { 362 triangulateRectGen(top, nu-2, nv-2, backend); 363 return; 364 } 365 365 */ 366 366 } … … 376 376 377 377 if(maxPointsTB < maxPointsLR) 378 triangulateRectAux(left->pwlArc, right->pwlArc, bot->pwlArc, top->pwlArc, backend);378 triangulateRectAux(left->pwlArc, right->pwlArc, bot->pwlArc, top->pwlArc, backend); 379 379 else 380 triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend);380 triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend); 381 381 } 382 382 } … … 397 397 398 398 if(top->npts == 2) { 399 backend.bgntfan();400 OPT_OUTVERT(top->pts[0], backend);//the root401 for(i=0; i<left->npts; i++){402 OPT_OUTVERT(left->pts[i], backend);403 }404 for(i=1; i<= bot->npts-2; i++){405 OPT_OUTVERT(bot->pts[i], backend);406 }407 backend.endtfan();408 409 backend.bgntfan();410 OPT_OUTVERT(bot->pts[bot->npts-2], backend);411 for(i=0; i<right->npts; i++){412 OPT_OUTVERT(right->pts[i], backend);413 }414 backend.endtfan();399 backend.bgntfan(); 400 OPT_OUTVERT(top->pts[0], backend);//the root 401 for(i=0; i<left->npts; i++){ 402 OPT_OUTVERT(left->pts[i], backend); 403 } 404 for(i=1; i<= bot->npts-2; i++){ 405 OPT_OUTVERT(bot->pts[i], backend); 406 } 407 backend.endtfan(); 408 409 backend.bgntfan(); 410 OPT_OUTVERT(bot->pts[bot->npts-2], backend); 411 for(i=0; i<right->npts; i++){ 412 OPT_OUTVERT(right->pts[i], backend); 413 } 414 backend.endtfan(); 415 415 } 416 416 else if(bot->npts == 2) { 417 backend.bgntfan();418 OPT_OUTVERT(bot->pts[0], backend);//the root419 for(i=0; i<right->npts; i++){420 OPT_OUTVERT(right->pts[i], backend);421 }422 for(i=1; i<= top->npts-2; i++){423 OPT_OUTVERT(top->pts[i], backend);424 }425 backend.endtfan();426 427 backend.bgntfan();428 OPT_OUTVERT(top->pts[top->npts-2], backend);429 for(i=0; i<left->npts; i++){430 OPT_OUTVERT(left->pts[i], backend);431 }432 backend.endtfan();417 backend.bgntfan(); 418 OPT_OUTVERT(bot->pts[0], backend);//the root 419 for(i=0; i<right->npts; i++){ 420 OPT_OUTVERT(right->pts[i], backend); 421 } 422 for(i=1; i<= top->npts-2; i++){ 423 OPT_OUTVERT(top->pts[i], backend); 424 } 425 backend.endtfan(); 426 427 backend.bgntfan(); 428 OPT_OUTVERT(top->pts[top->npts-2], backend); 429 for(i=0; i<left->npts; i++){ 430 OPT_OUTVERT(left->pts[i], backend); 431 } 432 backend.endtfan(); 433 433 } 434 434 else { //both top and bot have >=3 points 435 436 backend.bgntfan();437 438 OPT_OUTVERT(top->pts[top->npts-2], backend);439 440 for(i=0; i<=d; i++)441 {442 OPT_OUTVERT(left->pts[i], backend); 443 }444 backend.endtfan();445 446 backend.bgntfan();447 448 OPT_OUTVERT(bot->pts[1], backend);449 450 OPT_OUTVERT(top->pts[top->npts-2], backend);451 452 for(i=d; i< left->npts; i++)453 {454 OPT_OUTVERT(left->pts[i], backend);455 }456 backend.endtfan();457 458 d = right->npts/2;459 //output only when d<right->npts-1 and460 //461 if(d<right->npts-1)462 { 463 backend.bgntfan();464 // backend.tmeshvert(& top->pts[1]);465 OPT_OUTVERT(top->pts[1], backend);466 for(i=d; i< right->npts; i++)467 {468 //backend.tmeshvert(& right->pts[i]);469 470 OPT_OUTVERT(right->pts[i], backend);471 472 }473 backend.endtfan();474 }475 476 backend.bgntfan();477 // backend.tmeshvert(& bot->pts[bot->npts-2]);478 OPT_OUTVERT( bot->pts[bot->npts-2], backend);479 for(i=0; i<=d; i++)480 {481 //backend.tmeshvert(& right->pts[i]);482 OPT_OUTVERT(right->pts[i], backend);483 484 }485 486 // backend.tmeshvert(& top->pts[1]);487 OPT_OUTVERT(top->pts[1], backend);488 489 backend.endtfan();490 491 492 topd_left = top->npts-2;493 topd_right = 1; //topd_left>= topd_right494 495 botd_left = 1;496 botd_right = bot->npts-2; //botd_left<= bot_dright497 498 499 if(top->npts < bot->npts)500 {501 int delta=bot->npts - top->npts;502 int u = delta/2;503 botd_left = 1+ u;504 botd_right = bot->npts-2-( delta-u); 505 506 if(botd_left >1)507 {508 backend.bgntfan();509 //backend.tmeshvert(& top->pts[top->npts-2]);510 OPT_OUTVERT(top->pts[top->npts-2], backend);511 for(i=1; i<= botd_left; i++)512 {513 //backend.tmeshvert(& bot->pts[i]);514 OPT_OUTVERT(bot->pts[i] , backend);515 }516 backend.endtfan();517 }518 if(botd_right < bot->npts-2)519 {520 backend.bgntfan();521 OPT_OUTVERT(top->pts[1], backend);522 for(i=botd_right; i<= bot->npts-2; i++)523 OPT_OUTVERT(bot->pts[i], backend);524 backend.endtfan();525 }526 }527 else if(top->npts> bot->npts)528 {529 int delta=top->npts-bot->npts;530 int u = delta/2;531 topd_left = top->npts-2 - u;532 topd_right = 1+delta-u;533 534 if(topd_left < top->npts-2)535 {536 backend.bgntfan();537 //backend.tmeshvert(& bot->pts[1]);538 OPT_OUTVERT(bot->pts[1], backend);539 for(i=topd_left; i<= top->npts-2; i++)540 {541 //backend.tmeshvert(& top->pts[i]);542 OPT_OUTVERT(top->pts[i], backend);543 }544 backend.endtfan();545 }546 if(topd_right > 1)547 {548 backend.bgntfan();549 OPT_OUTVERT(bot->pts[bot->npts-2], backend);550 for(i=1; i<= topd_right; i++)551 OPT_OUTVERT(top->pts[i], backend);552 backend.endtfan();553 }554 }555 556 if(topd_left <= topd_right)557 return;558 559 backend.bgnqstrip();560 for(j=botd_left, i=topd_left; i>=topd_right; i--,j++)561 {562 //backend.tmeshvert(& top->pts[i]);563 //backend.tmeshvert(& bot->pts[j]);564 OPT_OUTVERT(top->pts[i], backend);565 OPT_OUTVERT(bot->pts[j], backend);566 }567 backend.endqstrip();568 435 436 backend.bgntfan(); 437 438 OPT_OUTVERT(top->pts[top->npts-2], backend); 439 440 for(i=0; i<=d; i++) 441 { 442 OPT_OUTVERT(left->pts[i], backend); 443 } 444 backend.endtfan(); 445 446 backend.bgntfan(); 447 448 OPT_OUTVERT(bot->pts[1], backend); 449 450 OPT_OUTVERT(top->pts[top->npts-2], backend); 451 452 for(i=d; i< left->npts; i++) 453 { 454 OPT_OUTVERT(left->pts[i], backend); 455 } 456 backend.endtfan(); 457 458 d = right->npts/2; 459 //output only when d<right->npts-1 and 460 // 461 if(d<right->npts-1) 462 { 463 backend.bgntfan(); 464 // backend.tmeshvert(& top->pts[1]); 465 OPT_OUTVERT(top->pts[1], backend); 466 for(i=d; i< right->npts; i++) 467 { 468 // backend.tmeshvert(& right->pts[i]); 469 470 OPT_OUTVERT(right->pts[i], backend); 471 472 } 473 backend.endtfan(); 474 } 475 476 backend.bgntfan(); 477 // backend.tmeshvert(& bot->pts[bot->npts-2]); 478 OPT_OUTVERT( bot->pts[bot->npts-2], backend); 479 for(i=0; i<=d; i++) 480 { 481 // backend.tmeshvert(& right->pts[i]); 482 OPT_OUTVERT(right->pts[i], backend); 483 484 } 485 486 // backend.tmeshvert(& top->pts[1]); 487 OPT_OUTVERT(top->pts[1], backend); 488 489 backend.endtfan(); 490 491 492 topd_left = top->npts-2; 493 topd_right = 1; //topd_left>= topd_right 494 495 botd_left = 1; 496 botd_right = bot->npts-2; //botd_left<= bot_dright 497 498 499 if(top->npts < bot->npts) 500 { 501 int delta=bot->npts - top->npts; 502 int u = delta/2; 503 botd_left = 1+ u; 504 botd_right = bot->npts-2-( delta-u); 505 506 if(botd_left >1) 507 { 508 backend.bgntfan(); 509 // backend.tmeshvert(& top->pts[top->npts-2]); 510 OPT_OUTVERT(top->pts[top->npts-2], backend); 511 for(i=1; i<= botd_left; i++) 512 { 513 // backend.tmeshvert(& bot->pts[i]); 514 OPT_OUTVERT(bot->pts[i] , backend); 515 } 516 backend.endtfan(); 517 } 518 if(botd_right < bot->npts-2) 519 { 520 backend.bgntfan(); 521 OPT_OUTVERT(top->pts[1], backend); 522 for(i=botd_right; i<= bot->npts-2; i++) 523 OPT_OUTVERT(bot->pts[i], backend); 524 backend.endtfan(); 525 } 526 } 527 else if(top->npts> bot->npts) 528 { 529 int delta=top->npts-bot->npts; 530 int u = delta/2; 531 topd_left = top->npts-2 - u; 532 topd_right = 1+delta-u; 533 534 if(topd_left < top->npts-2) 535 { 536 backend.bgntfan(); 537 // backend.tmeshvert(& bot->pts[1]); 538 OPT_OUTVERT(bot->pts[1], backend); 539 for(i=topd_left; i<= top->npts-2; i++) 540 { 541 // backend.tmeshvert(& top->pts[i]); 542 OPT_OUTVERT(top->pts[i], backend); 543 } 544 backend.endtfan(); 545 } 546 if(topd_right > 1) 547 { 548 backend.bgntfan(); 549 OPT_OUTVERT(bot->pts[bot->npts-2], backend); 550 for(i=1; i<= topd_right; i++) 551 OPT_OUTVERT(top->pts[i], backend); 552 backend.endtfan(); 553 } 554 } 555 556 if(topd_left <= topd_right) 557 return; 558 559 backend.bgnqstrip(); 560 for(j=botd_left, i=topd_left; i>=topd_right; i--,j++) 561 { 562 // backend.tmeshvert(& top->pts[i]); 563 // backend.tmeshvert(& bot->pts[j]); 564 OPT_OUTVERT(top->pts[i], backend); 565 OPT_OUTVERT(bot->pts[j], backend); 566 } 567 backend.endqstrip(); 568 569 569 } 570 570 } … … 573 573 574 574 static void triangulateRectCenter(int n_ulines, REAL* u_val, 575 int n_vlines, REAL* v_val,576 Backend& backend)575 int n_vlines, REAL* v_val, 576 Backend& backend) 577 577 { 578 578 TrimVertex trimVert; … … 580 580 581 581 backend.surfgrid(u_val[0], u_val[n_ulines-1], n_ulines-1, 582 v_val[n_vlines-1], v_val[0], n_vlines-1);582 v_val[n_vlines-1], v_val[0], n_vlines-1); 583 583 584 584 if(n_ulines>1 && n_vlines>1) … … 593 593 backend.bgnqstrip(); 594 594 for(j=0; j<n_ulines; j++) 595 {596 trimVert.param[0] = u_val[j];597 trimVert.param[1] = v_val[i+1];598 backend.tmeshvert(& trimVert); 599 600 trimVert.param[1] = v_val[i];601 backend.tmeshvert(& trimVert); 602 }595 { 596 trimVert.param[0] = u_val[j]; 597 trimVert.param[1] = v_val[i+1]; 598 backend.tmeshvert(& trimVert); 599 600 trimVert.param[1] = v_val[i]; 601 backend.tmeshvert(& trimVert); 602 } 603 603 backend.endqstrip(); 604 604 … … 617 617 assert(upper_val); 618 618 if(dir) 619 {620 for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)621 {622 upper_val[k] = arc->pwlArc->pts[i].param[0];623 } 624 backend.evalUStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[1],625 upper_val,626 n_ulines, v, u_val);627 }619 { 620 for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++) 621 { 622 upper_val[k] = arc->pwlArc->pts[i].param[0]; 623 } 624 backend.evalUStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[1], 625 upper_val, 626 n_ulines, v, u_val); 627 } 628 628 else 629 {630 for(k=0,i=0; i<arc->pwlArc->npts; i++,k++)631 {632 upper_val[k] = arc->pwlArc->pts[i].param[0];633 634 } 635 636 backend.evalUStrip(637 n_ulines, v, u_val,638 arc->pwlArc->npts, arc->pwlArc->pts[0].param[1], upper_val639 ); 640 }629 { 630 for(k=0,i=0; i<arc->pwlArc->npts; i++,k++) 631 { 632 upper_val[k] = arc->pwlArc->pts[i].param[0]; 633 634 } 635 636 backend.evalUStrip( 637 n_ulines, v, u_val, 638 arc->pwlArc->npts, arc->pwlArc->pts[0].param[1], upper_val 639 ); 640 } 641 641 642 642 free(upper_val); … … 649 649 assert(left_val); 650 650 if(dir) 651 {652 for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)653 {654 left_val[k] = arc->pwlArc->pts[i].param[1];655 }656 backend.evalVStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[0],657 left_val,658 n_ulines, v, u_val);659 }651 { 652 for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++) 653 { 654 left_val[k] = arc->pwlArc->pts[i].param[1]; 655 } 656 backend.evalVStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[0], 657 left_val, 658 n_ulines, v, u_val); 659 } 660 660 else 661 {662 for(k=0,i=0; i<arc->pwlArc->npts; i++,k++)663 {664 left_val[k] = arc->pwlArc->pts[i].param[1];665 }666 backend.evalVStrip(667 n_ulines, v, u_val,668 arc->pwlArc->npts, arc->pwlArc->pts[0].param[0], left_val669 ); 670 }661 { 662 for(k=0,i=0; i<arc->pwlArc->npts; i++,k++) 663 { 664 left_val[k] = arc->pwlArc->pts[i].param[1]; 665 } 666 backend.evalVStrip( 667 n_ulines, v, u_val, 668 arc->pwlArc->npts, arc->pwlArc->pts[0].param[0], left_val 669 ); 670 } 671 671 free(left_val); 672 672 return; 673 673 } 674 674 675 675 //the following is a different version of the above code. If you comment 676 676 //the above code, the following code will still work. The reason to leave … … 689 689 assert(temp_u_val); 690 690 for(i=0; i<n_ulines; i++) 691 temp_u_val[i] = u_val[n_ulines-1-i];691 temp_u_val[i] = u_val[n_ulines-1-i]; 692 692 } 693 693 u_val = temp_u_val; … … 699 699 backend.bgntfan(); 700 700 if(is_u){ 701 trimVert.param[0] = u_val[0];702 trimVert.param[1] = v;701 trimVert.param[0] = u_val[0]; 702 trimVert.param[1] = v; 703 703 } 704 704 else 705 {706 trimVert.param[1] = u_val[0];707 trimVert.param[0] = v;705 { 706 trimVert.param[1] = u_val[0]; 707 trimVert.param[0] = v; 708 708 } 709 709 710 710 backend.tmeshvert(& trimVert); 711 711 for(i=d1; i< parc->npts; i++) 712 backend.tmeshvert(& parc->pts[i]);712 backend.tmeshvert(& parc->pts[i]); 713 713 backend.endtfan(); 714 714 … … 723 723 backend.tmeshvert(& parc->pts[parc->npts-1]); 724 724 for(i=0; i<= d2; i++) 725 {726 if(is_u){727 trimVert.param[0] = u_val[i];728 trimVert.param[1] = v;729 }730 else731 {732 trimVert.param[1] = u_val[i];733 trimVert.param[0] = v;734 }735 backend.tmeshvert(&trimVert);736 }725 { 726 if(is_u){ 727 trimVert.param[0] = u_val[i]; 728 trimVert.param[1] = v; 729 } 730 else 731 { 732 trimVert.param[1] = u_val[i]; 733 trimVert.param[0] = v; 734 } 735 backend.tmeshvert(&trimVert); 736 } 737 737 backend.endtfan(); 738 738 … … 744 744 for(i=d1, j=d2; i>=0; i--, j++) 745 745 { 746 backend.tmeshvert(& parc->pts[i]);747 748 if(is_u){749 trimVert.param[0] = u_val[j];750 trimVert.param[1] = v;751 }752 else{753 trimVert.param[1] = u_val[j];754 trimVert.param[0] = v;755 }756 backend.tmeshvert(&trimVert);757 758 759 746 backend.tmeshvert(& parc->pts[i]); 747 748 if(is_u){ 749 trimVert.param[0] = u_val[j]; 750 trimVert.param[1] = v; 751 } 752 else{ 753 trimVert.param[1] = u_val[j]; 754 trimVert.param[0] = v; 755 } 756 backend.tmeshvert(&trimVert); 757 758 759 760 760 } 761 761 backend.endqstrip(); … … 781 781 782 782 if(loop->tail()[1] > loop->prev->prev->tail()[1]) 783 {784 785 top = loop;786 }783 { 784 785 top = loop; 786 } 787 787 else{ 788 788 789 top = loop->prev->prev;790 }789 top = loop->prev->prev; 790 } 791 791 } 792 792 else 793 793 { 794 794 if(loop->tail()[0] > loop->prev->prev->tail()[0]) 795 {796 //loop is the right arc797 798 top = loop->next;799 }795 { 796 //loop is the right arc 797 798 top = loop->next; 799 } 800 800 else 801 {802 803 top = loop->prev;804 }801 { 802 803 top = loop->prev; 804 } 805 805 } 806 806 … … 813 813 left->pwlArc->npts + 814 814 bot->pwlArc->npts + 815 right->pwlArc->npts816 + 2*n_ulines + 2*n_vlines817 -8;815 right->pwlArc->npts 816 + 2*n_ulines + 2*n_vlines 817 -8; 818 818 num_quads += (n_ulines-1)*(n_vlines-1); 819 819 #endif 820 820 /* 821 821 backend.surfgrid(left->tail()[0], right->tail()[0], n_ulines+1, 822 top->tail()[1], bot->tail()[1], n_vlines+1);822 top->tail()[1], bot->tail()[1], n_vlines+1); 823 823 // if(n_ulines>1 && n_vlines>1) 824 824 backend.surfmesh(0,0,n_ulines+1,n_vlines+1); … … 911 911 directedLine *dline = arcToDLine(arc); 912 912 if(ret == NULL) 913 ret = dline;913 ret = dline; 914 914 else 915 ret->insert(dline);915 ret->insert(dline); 916 916 return ret; 917 917 } … … 919 919 { 920 920 for(Int i=0; i<arc->pwlArc->npts-1; i++) 921 {922 Real vert[2][2];923 vert[0][0] = arc->pwlArc->pts[i].param[0];924 vert[0][1] = arc->pwlArc->pts[i].param[1];925 vert[1][0] = arc->pwlArc->pts[i+1].param[0];926 vert[1][1] = arc->pwlArc->pts[i+1].param[1];927 928 sampledLine *sline = new sampledLine(2, vert);929 directedLine *dline = new directedLine(INCREASING, sline);930 if(ret == NULL)931 ret = dline;932 else933 ret->insert(dline);934 }921 { 922 Real vert[2][2]; 923 vert[0][0] = arc->pwlArc->pts[i].param[0]; 924 vert[0][1] = arc->pwlArc->pts[i].param[1]; 925 vert[1][0] = arc->pwlArc->pts[i+1].param[0]; 926 vert[1][1] = arc->pwlArc->pts[i+1].param[1]; 927 928 sampledLine *sline = new sampledLine(2, vert); 929 directedLine *dline = new directedLine(INCREASING, sline); 930 if(ret == NULL) 931 ret = dline; 932 else 933 ret->insert(dline); 934 } 935 935 return ret; 936 936 } … … 938 938 939 939 940 940 941 941 directedLine* arcLoopToDLineLoop(Arc_ptr loop) 942 942 { … … 970 970 rectBlock* block = rbArray->get_element(l); 971 971 for(k=0, i=block->get_upGridLineIndex(); i>block->get_lowGridLineIndex(); i--, k++) 972 {973 974 backend.bgnqstrip();975 for(j=block->get_leftIndices()[k+1]; j<= block->get_rightIndices()[k+1]; j++)976 {977 trimVert->param[0] = u_values[j];978 trimVert->param[1] = v_values[i];979 backend.tmeshvert(trimVert);980 981 trimVert->param[1] = v_values[i-1];982 backend.tmeshvert(trimVert);983 984 }985 backend.endqstrip();986 987 }972 { 973 974 backend.bgnqstrip(); 975 for(j=block->get_leftIndices()[k+1]; j<= block->get_rightIndices()[k+1]; j++) 976 { 977 trimVert->param[0] = u_values[j]; 978 trimVert->param[1] = v_values[i]; 979 backend.tmeshvert(trimVert); 980 981 trimVert->param[1] = v_values[i-1]; 982 backend.tmeshvert(trimVert); 983 984 } 985 backend.endqstrip(); 986 987 } 988 988 } 989 989 … … 1001 1001 //we need counter-clockwise. 1002 1002 backend.surfgrid(grid->get_u_min(), grid->get_u_max(), grid->get_n_ulines()-1, 1003 grid->get_v_max(), grid->get_v_min(), n_vlines-1);1003 grid->get_v_max(), grid->get_v_min(), n_vlines-1); 1004 1004 1005 1005 … … 1011 1011 1012 1012 for(k=0, i=high; i>low; i--, k++) 1013 {1014 backend.surfmesh(block->get_leftIndices()[k+1], n_vlines-1-i, block->get_rightIndices()[k+1]-block->get_leftIndices()[k+1], 1);1015 }1013 { 1014 backend.surfmesh(block->get_leftIndices()[k+1], n_vlines-1-i, block->get_rightIndices()[k+1]-block->get_leftIndices()[k+1], 1); 1015 } 1016 1016 } 1017 1017 } … … 1033 1033 case PRIMITIVE_STREAM_FAN: 1034 1034 1035 backend.bgntfan();1036 1037 for(j=0; j<pStream->get_length(i); j++)1038 { 1039 trimVert->param[0] = vertices[k];1040 trimVert->param[1] = vertices[k+1];1041 backend.tmeshvert(trimVert); 1042 1043 // backend.tmeshvert(vertices[k], vertices[k+1]);1044 k += 2;1045 }1046 backend.endtfan();1047 break;1048 1035 backend.bgntfan(); 1036 1037 for(j=0; j<pStream->get_length(i); j++) 1038 { 1039 trimVert->param[0] = vertices[k]; 1040 trimVert->param[1] = vertices[k+1]; 1041 backend.tmeshvert(trimVert); 1042 1043 // backend.tmeshvert(vertices[k], vertices[k+1]); 1044 k += 2; 1045 } 1046 backend.endtfan(); 1047 break; 1048 1049 1049 default: 1050 fprintf(stderr, "evalStream: not implemented yet\n");1051 exit(1);1050 fprintf(stderr, "evalStream: not implemented yet\n"); 1051 exit(1); 1052 1052 1053 1053 } … … 1055 1055 free(trimVert); 1056 1056 } 1057 1058 1059 1057 1058 1059 1060 1060 1061 1061 void Slicer::slice_new(Arc_ptr loop) … … 1107 1107 { 1108 1108 if(vlinear) 1109 triangulateRect(loop, backend, 1, ulinear, vlinear);1109 triangulateRect(loop, backend, 1, ulinear, vlinear); 1110 1110 else if(ulinear) 1111 triangulateRect(loop, backend, -1, ulinear, vlinear); 1111 triangulateRect(loop, backend, -1, ulinear, vlinear); 1112 1112 else 1113 triangulateRect(loop, backend, 0, ulinear, vlinear); 1113 triangulateRect(loop, backend, 0, ulinear, vlinear); 1114 1114 } 1115 1115 … … 1151 1151 printf("num_quads = %i\n", num_quads); 1152 1152 #endif 1153 1153 1154 } 1154 1155 … … 1170 1171 1171 1172 Slicer::Slicer( Backend &b ) 1172 : CoveAndTiler( b ), Mesher( b ), backend( b )1173 : CoveAndTiler( b ), Mesher( b ), backend( b ) 1173 1174 { 1174 1175 ulinear = 0; … … 1219 1220 1220 1221 for( long quad=0; quad<varray.numquads; quad++ ) { 1221 backend.surfgrid( uarray.uarray[0],1222 uarray.uarray[ulines-1],1223 ulines-1,1224 varray.vval[quad],1225 varray.vval[quad+1],1226 varray.voffset[quad+1] - varray.voffset[quad] );1227 1228 for( long i=varray.voffset[quad]+1; i <= varray.voffset[quad+1]; i++ ) {1229 topv = botv++;1230 advance( topv - varray.voffset[quad],1231 botv - varray.voffset[quad],1232 varray.varray[botv] );1233 if( i == vlines )1234 getPts( extrema[2] );1235 else1236 getPts( backend );1237 getGridExtent();1222 backend.surfgrid( uarray.uarray[0], 1223 uarray.uarray[ulines-1], 1224 ulines-1, 1225 varray.vval[quad], 1226 varray.vval[quad+1], 1227 varray.voffset[quad+1] - varray.voffset[quad] ); 1228 1229 for( long i=varray.voffset[quad]+1; i <= varray.voffset[quad+1]; i++ ) { 1230 topv = botv++; 1231 advance( topv - varray.voffset[quad], 1232 botv - varray.voffset[quad], 1233 varray.varray[botv] ); 1234 if( i == vlines ) 1235 getPts( extrema[2] ); 1236 else 1237 getPts( backend ); 1238 getGridExtent(); 1238 1239 if( isolines ) { 1239 outline();1240 } else {1241 if( canTile() )1242 coveAndTile();1243 else1244 mesh();1245 }1240 outline(); 1241 } else { 1242 if( canTile() ) 1243 coveAndTile(); 1244 else 1245 mesh(); 1246 } 1246 1247 } 1247 1248 } … … 1257 1258 backend.bgnoutline(); 1258 1259 while( (nextupper( &upper )) ) { 1259 if( upper.isGridVert() )1260 backend.linevert( upper.g );1261 else1262 backend.linevert( upper.t );1260 if( upper.isGridVert() ) 1261 backend.linevert( upper.g ); 1262 else 1263 backend.linevert( upper.t ); 1263 1264 } 1264 1265 backend.endoutline(); … … 1266 1267 backend.bgnoutline(); 1267 1268 while( (nextlower( &lower )) ) { 1268 if( lower.isGridVert() )1269 backend.linevert( lower.g );1270 else1271 backend.linevert( lower.t );1269 if( lower.isGridVert() ) 1270 backend.linevert( lower.g ); 1271 else 1272 backend.linevert( lower.t ); 1272 1273 } 1273 1274 backend.endoutline(); … … 1281 1282 1282 1283 if( jarc->pwlArc->npts >= 2 ) { 1283 backend.bgnoutline();1284 for( int j = jarc->pwlArc->npts-1; j >= 0; j-- )1285 backend.linevert( &(jarc->pwlArc->pts[j]) );1286 backend.endoutline();1287 } 1288 } 1289 1290 1284 backend.bgnoutline(); 1285 for( int j = jarc->pwlArc->npts-1; j >= 0; j-- ) 1286 backend.linevert( &(jarc->pwlArc->pts[j]) ); 1287 backend.endoutline(); 1288 } 1289 } 1290 1291
Note:
See TracChangeset
for help on using the changeset viewer.
