41#include "glcurveval.h"
57void OpenGLCurveEvaluator::inPreEvaluate(
int order, REAL vprime, REAL *coeff)
73 oneMinusvprime = 1-vprime;
74 coeff[0] = oneMinusvprime;
76 if (order == 2)
return;
78 for (i = 2; i < order; i++) {
79 oldval = coeff[0] * vprime;
80 coeff[0] = oneMinusvprime * coeff[0];
81 for (j = 1; j < i; j++) {
83 oldval = coeff[j] * vprime;
84 coeff[j] = temp + oneMinusvprime * coeff[j];
90void OpenGLCurveEvaluator::inMap1f(
int which,
103 temp_em = &em_vertex;
107 temp_em = &em_normal;
115 temp_em = &em_texcoord;
119 REAL *data = temp_em->ctlpoints;
120 temp_em->uprime = -1;
122 temp_em->u1 = ulower;
123 temp_em->u2 = uupper;
124 temp_em->ustride = ustride;
125 temp_em->uorder = uorder;
127 for(i=0; i<uorder; i++){
129 data[x] = ctlpoints[x];
131 ctlpoints += ustride;
136void OpenGLCurveEvaluator::inDoDomain1(
curveEvalMachine *em, REAL u, REAL *retPoint)
144 the_uprime = (u-em->u1) / (em->u2-em->u1);
146 if(em->uprime != the_uprime){
147 inPreEvaluate(em->uorder, the_uprime, em->ucoeff);
148 em->uprime = the_uprime;
151 for(j=0; j<em->k; j++){
152 data = em->ctlpoints+j;
154 for(row=0; row<em->uorder; row++)
156 retPoint[j] += em->ucoeff[row] * (*data);
162void OpenGLCurveEvaluator::inDoEvalCoord1(REAL u)
167 REAL temp_texcoord[4];
170 inDoDomain1(&em_texcoord, u, temp_texcoord);
171 texcoordCallBack(temp_texcoord, userData);
174printf(
"color_flag = %i\n", color_flag);
178 inDoDomain1(&em_color, u, temp_color);
179 colorCallBack(temp_color, userData);
183 inDoDomain1(&em_normal, u, temp_normal);
184 normalCallBack(temp_normal, userData);
188 inDoDomain1(&em_vertex, u, temp_vertex);
189 vertexCallBack(temp_vertex, userData);
193void OpenGLCurveEvaluator::inMapMesh1f(
int umin,
int umax)
197 if(global_grid_nu == 0)
199 du = (global_grid_u1 - global_grid_u0) / (REAL) global_grid_nu;
201 for(i=umin; i<= umax; i++){
202 u = (i==global_grid_nu)? global_grid_u1: global_grid_u0 + i*du;