// Tessellate the curve // The points are stored in m_vPts // virtual bool MH_CrvBezier::Tessellate(float fTolerance) { Cleanup(); #ifdef _DEBUG DWORD dw1 = GetTickCount(); #endif bool bOK = Subdivision(fTolerance, m_vCrvPt); #ifdef _DEBUG DWORD dwTimeCost = GetTickCount() - dw1; #endif return bOK; }
//Display void display (void) { glClearColor(rosso_sf,verde_sf,blu_sf,0.0);//rendo variabili i parametri che mi definiscono il colore glClear(GL_COLOR_BUFFER_BIT); int i; glColor3f(0.0,0.0,1.0); glPointSize(dimpunto); glBegin(GL_POINTS);//per visualizzare anche i punti dove si clicca di colore blu for (i=1;i<=last;i++) glVertex2f(Punti[i].x,Punti[i].y); glEnd(); glColor3f(rosso_dis,verde_dis,blu_dis); glBegin(GL_LINE_STRIP); //poligono di controllo for (i=1;i<=last;i++) glVertex2f(Punti[i].x,Punti[i].y); glEnd(); n=last;//setto n al numero di punti disegnato for(i=1;i<=n;i++) w[i]=1;//metto tutti i pesi a 1 //scelta parametrizzazione if (scelta_param==0) { Parametrizzazione_Uniforme(); } else if(scelta_param==1) { Parametrizzazione_Corde(); } //scelta della funzione glPointSize(2);//la curva la disegno sempre di dimensione 2 if (metodo=='H' && last>1) { Hermite(); Disegna_Funzioni_Base(); } if (metodo=='B' && last>1) { if(mod_pesi_bez==1) w[i_p_b]=val_peso; Bezier(); if (subd==1) Subdivision(); if (d_el==1) Degree_Elevation(); Disegna_fBaseBernstein(); } if (metodo=='S' && last>3) { if(mod_pesi_spline==1) w[i_p_s]=val_pesos; Costruisci_Nodi(); Funzioni_Bspline(Nodi); De_Boor(); } //glutPostRedisplay();//è per questo che le funzioni base saltellano :)...se non lo metti però quando cambi il metodo non viene cambiato immediatamente ma dopo aver spinto un altro punto glFlush(); }
void ComplexMesh::Subdivision() { Mesh M; Subdivision(M); Load(M); }