44 #include "glimports.h"
47 #include "basiccrveval.h"
48 #include "basicsurfeval.h"
49 #include "nurbsconsts.h"
59 Backend::bgnsurf(
int wiretris,
int wirequads,
long nuid )
62 wireframetris = wiretris;
63 wireframequads = wirequads;
81 surfaceEvaluator.bgnmap2f( nuid );
84 surfaceEvaluator.polymode(N_MESHLINE);
86 surfaceEvaluator.polymode(N_MESHFILL);
90 Backend::patch( REAL ulo, REAL uhi, REAL vlo, REAL vhi )
92 surfaceEvaluator.domain2f( ulo, uhi, vlo, vhi );
96 Backend::surfbbox(
long type, REAL *from, REAL *to )
98 surfaceEvaluator.range2f( type, from, to );
118 surfaceEvaluator.map2f( type,ulo,uhi,ustride,uorder,vlo,vhi,vstride,vorder,pts );
119 surfaceEvaluator.enable( type );
127 Backend::surfgrid( REAL u0, REAL u1,
long nu, REAL v0, REAL v1,
long nv )
129 surfaceEvaluator.mapgrid2f( nu, u0, u1, nv, v0, v1 );
137 Backend::surfmesh(
long u,
long v,
long n,
long m )
140 if( wireframequads ) {
142 long u0f = u, u1f = u+n;
143 long v0f = v, v1f = v+m;
144 long parity = (u & 1);
146 for( v0 = v0f, v1 = v0f++ ; v0<v1f; v0 = v1, v1++ ) {
147 surfaceEvaluator.bgnline();
148 for(
long u = u0f; u<=u1f; u++ ) {
150 surfaceEvaluator.evalpoint2i( u, v0 );
151 surfaceEvaluator.evalpoint2i( u, v1 );
153 surfaceEvaluator.evalpoint2i( u, v1 );
154 surfaceEvaluator.evalpoint2i( u, v0 );
158 surfaceEvaluator.endline();
161 surfaceEvaluator.mapmesh2f( N_MESHFILL, u, u+n, v, v+m );
164 if( wireframequads ) {
166 surfaceEvaluator.mapmesh2f( N_MESHLINE, u, u+n, v, v+m );
169 surfaceEvaluator.mapmesh2f( N_MESHFILL, u, u+n, v, v+m );
179 Backend::endsurf(
void )
181 surfaceEvaluator.endmap2f();
186 Backend::bgntfan(
void )
188 surfaceEvaluator.bgntfan();
198 Backend::endtfan(
void )
200 surfaceEvaluator.endtfan();
204 Backend::bgnqstrip(
void )
206 surfaceEvaluator.bgnqstrip();
216 Backend::endqstrip(
void )
218 surfaceEvaluator.endqstrip();
222 Backend::evalUStrip(
int n_upper, REAL v_upper, REAL* upper_val,
223 int n_lower, REAL v_lower, REAL* lower_val
226 surfaceEvaluator.evalUStrip(n_upper, v_upper, upper_val,
227 n_lower, v_lower, lower_val);
231 Backend::evalVStrip(
int n_left, REAL u_left, REAL* left_val,
232 int n_right, REAL u_right, REAL* right_val
235 surfaceEvaluator.evalVStrip(n_left, u_left, left_val,
236 n_right, u_right, right_val);
247 Backend::bgntmesh(
const char * )
254 if( !wireframetris ) {
255 surfaceEvaluator.bgntmesh();
259 if( wireframetris ) {
260 surfaceEvaluator.bgntmesh();
261 surfaceEvaluator.polymode( N_MESHLINE );
263 surfaceEvaluator.bgntmesh();
264 surfaceEvaluator.polymode( N_MESHFILL );
272 if( v->isGridVert() ) {
284 surfaceEvaluator.inDoEvalCoord2NOGE( t->param[0], t->param[1], t->cache_point, t->cache_normal);
293 surfaceEvaluator.inDoEvalCoord2NOGE_BU( t->param[0], t->param[1], t->cache_point, t->cache_normal);
302 surfaceEvaluator.inDoEvalCoord2NOGE_BV( t->param[0], t->param[1], t->cache_point, t->cache_normal);
307 Backend::preEvaluateBU(REAL u)
309 surfaceEvaluator.inPreEvaluateBU_intfac(u);
313 Backend::preEvaluateBV(REAL v)
315 surfaceEvaluator.inPreEvaluateBV_intfac(v);
328 const long nuid = t->nuid;
330 const REAL u = t->param[0];
331 const REAL v = t->param[1];
335 if( wireframetris ) {
337 surfaceEvaluator.bgnclosedline();
338 if( mesh[0][2] == 0 )
339 surfaceEvaluator.evalcoord2f( mesh[0][3], mesh[0][0], mesh[0][1] );
341 surfaceEvaluator.evalpoint2i( (
long) mesh[0][0], (
long) mesh[0][1] );
342 if( mesh[1][2] == 0 )
343 surfaceEvaluator.evalcoord2f( mesh[1][3], mesh[1][0], mesh[1][1] );
345 surfaceEvaluator.evalpoint2i( (
long) mesh[1][0], (
long) mesh[1][1] );
346 surfaceEvaluator.evalcoord2f( nuid, u, v );
347 surfaceEvaluator.endclosedline();
349 mesh[meshindex][0] = u;
350 mesh[meshindex][1] = v;
351 mesh[meshindex][2] = 0;
352 mesh[meshindex][3] = nuid;
353 meshindex = (meshindex+1) % 2;
355 surfaceEvaluator.evalcoord2f( nuid, u, v );
359 surfaceEvaluator.evalcoord2f( 0, u, v );
366 Backend::tmeshvert( REAL u, REAL v )
372 if( wireframetris ) {
374 surfaceEvaluator.bgnclosedline();
375 if( mesh[0][2] == 0 )
376 surfaceEvaluator.evalcoord2f( mesh[0][3], mesh[0][0], mesh[0][1] );
378 surfaceEvaluator.evalpoint2i( (
long) mesh[0][0], (
long) mesh[0][1] );
379 if( mesh[1][2] == 0 )
380 surfaceEvaluator.evalcoord2f( mesh[1][3], mesh[1][0], mesh[1][1] );
382 surfaceEvaluator.evalpoint2i( (
long) mesh[1][0], (
long) mesh[1][1] );
383 surfaceEvaluator.evalcoord2f( nuid, u, v );
384 surfaceEvaluator.endclosedline();
386 mesh[meshindex][0] = u;
387 mesh[meshindex][1] = v;
388 mesh[meshindex][2] = 0;
389 mesh[meshindex][3] = nuid;
390 meshindex = (meshindex+1) % 2;
392 surfaceEvaluator.evalcoord2f( nuid, u, v );
396 surfaceEvaluator.evalcoord2f( 0, u, v );
407 const long u = g->gparam[0];
408 const long v = g->gparam[1];
412 if( wireframetris ) {
414 surfaceEvaluator.bgnclosedline();
415 if( mesh[0][2] == 0 )
416 surfaceEvaluator.evalcoord2f( (
long) mesh[0][3], mesh[0][0], mesh[0][1] );
418 surfaceEvaluator.evalpoint2i( (
long) mesh[0][0], (
long) mesh[0][1] );
419 if( mesh[1][2] == 0 )
420 surfaceEvaluator.evalcoord2f( (
long) mesh[1][3], mesh[1][0], mesh[1][1] );
422 surfaceEvaluator.evalpoint2i( (
long) mesh[1][0], (
long) mesh[1][1] );
423 surfaceEvaluator.evalpoint2i( u, v );
424 surfaceEvaluator.endclosedline();
426 mesh[meshindex][0] = u;
427 mesh[meshindex][1] = v;
428 mesh[meshindex][2] = 1;
429 meshindex = (meshindex+1) % 2;
431 surfaceEvaluator.evalpoint2i( u, v );
434 surfaceEvaluator.evalpoint2i( u, v );
443 Backend::swaptmesh(
void )
446 if( wireframetris ) {
447 meshindex = 1 - meshindex;
449 surfaceEvaluator.swaptmesh();
452 surfaceEvaluator.swaptmesh();
461 Backend::endtmesh(
void )
464 if( ! wireframetris )
465 surfaceEvaluator.endtmesh();
467 surfaceEvaluator.endtmesh();
478 Backend::bgnoutline(
void )
480 surfaceEvaluator.bgnline();
490 surfaceEvaluator.evalcoord2f( t->nuid, t->param[0], t->param[1] );
500 surfaceEvaluator.evalpoint2i( g->gparam[0], g->gparam[1] );
508 Backend::endoutline(
void )
510 surfaceEvaluator.endline();
530 Backend::bgncurv(
void )
532 curveEvaluator.bgnmap1f( 0 );
536 Backend::segment( REAL ulo, REAL uhi )
538 curveEvaluator.domain1f( ulo, uhi );
551 curveEvaluator.map1f( type, ulo, uhi, stride, order, pts );
552 curveEvaluator.enable( type );
556 Backend::curvgrid( REAL u0, REAL u1,
long nu )
558 curveEvaluator.mapgrid1f( nu, u0, u1 );
562 Backend::curvmesh(
long from,
long n )
564 curveEvaluator.mapmesh1f( N_MESHFILL, from, from+n );
568 Backend::curvpt(REAL u)
570 curveEvaluator.evalcoord1f( 0, u );
574 Backend::bgnline(
void )
576 curveEvaluator.bgnline();
580 Backend::endline(
void )
582 curveEvaluator.endline();
586 Backend::endcurv(
void )
588 curveEvaluator.endmap1f();