Page d'accueil

Espace Pro      
 Mon CV                      
  CV intéractif              
  CV Classique          
  CV imprimable        
  Téléchargement      
 Mes Projets              
  Statistiques              
  C.A.O.                        
  Programmation       
  Contact                     
Espace Perso  
 Liste DVD                  
Accueil programmation | Manipulations, Schémas et Formules | Images de surfaces | Makefile | NURBS.cpp | PLSV.cpp | PLSV.h | Surface.cpp | Surface.h | Vu.cpp | Vu.h | Rn.h | LesFichiers.h

#ifndef _SURFACE_H
# define _SURFACE_H

#include "PLSV.h"

#ifndef RAC2
# define RAC2 1.414213562373
#endif

#ifndef RAC2_2
# define RAC2_2 0.707106781186
#endif

#ifndef PI
# define PI 3.14159265
#endif

extern int NoSurface;
extern int Ombrage;

void NommerSurface( Nom & nom);

class Surface : public PLSV {
public:
Surface * PSuivant; // Chainage utilise dans la classe Surfaces
Z degreu; // degre selon le premier parametre u
Z degrev; // degre selon le second parametre v

Z nbnu,nbnv; // nombre de noeuds en u et en v
R *U,*V; // valeurs des noeuds en u et en v

Point ***PC; // PC[][] pointeur sur un point de controle
R **Poids; // si Poids != NULL courbe rationnelle
Ligne **Courbes; // Tableau de pointeurs sur les NURBS de base

/* Constructeurs et destructeur */
Surface();
Surface( Nom NomSurface );
~Surface();
/* Autres Fonctions Membres */
R3 PointMilieuSurface(void);
void PointSurface( R u, R v, R3 & P );
int Mailler( Points * LesPoints );
void TracerMaillage( MemoirePx3d & mpx );
void TracerPolyedre( MemoirePx3d & mpx );
virtual void VerifierMaillage( Points * LesPoints );
virtual void CalculNbEF( int & arcu, int & arcv ) = 0;
virtual void AfficherDefinition() = 0;
};

 

 

class SurfaceNURBS : public Surface
{
public:
SurfaceNURBS(Lignes *LesLignes, Points *LesPoints);
SurfaceNURBS(Points *LesPoints,Lignes *LesLignes);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};


class SurfaceBezier : public Surface
{
public:
SurfaceBezier(Lignes *LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

 


class SurfaceGauche : public Surface
{
public:
SurfaceGauche(Lignes *LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

class SurfaceReglee : public Surface
{
public:
SurfaceReglee(Lignes *LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};


class SurfaceBilineaire : public Surface
{
public:
SurfaceBilineaire(Lignes *LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

class SurfaceExtrudee : public Surface
{
private:
R Hauteur;

public:
SurfaceExtrudee(Lignes * LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};


class SurfaceRevolution : public Surface
{
private:
R Rayon;

public :
SurfaceRevolution(Lignes *LesLignes,Points *LesPoints); //constructeur a l'aide de la souris
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};


class SurfaceSphere : public Surface
{
private:
Point *PtCentre;
R Rayon;

public:
SurfaceSphere(Lignes *LesLignes,Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage( Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

 

class SurfaceTore : public Surface
{
private:
Point *PtCentre;
R Rayon,rayon;

public:
SurfaceTore(Lignes *LesLignes,Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage (Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

class SurfaceCylindre : public Surface
{
private:
R Hauteur;

public:
SurfaceCylindre(Lignes * LesLignes, Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage(Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

class SurfaceCone : public Surface
{
public:
SurfaceCone(Lignes *LesLignes,Points *LesPoints);
virtual void AfficherDefinition();
virtual void VerifierMaillage (Points *LesPoints);
void CalculNbEF( int & nbefu, int & nbefv );
};

 

//=============================================================================
class Surfaces {
public:
Surface * P1Surface;

Surfaces();
~Surfaces();
Surface * RetrouverSurface( Nom NomSurface, Surface * & SurfaceAvant );
Surface *CliquerSurface( void );
void Ajouter1Surface( Surface * PSurface );
void AfficherSurfaces();
void TracerSurfaces( MemoirePx3d & mpx, Points * LesPoints );
void TracerPolyedre( MemoirePx3d & mpx );
};


//=============================================================================
// Identique a Ligne::IntervalleNURBS, mais avec l'object explicite U
int IntervalleNURBS( R u, R *U, int nbn, int degre);

// Identique a Ligne::ValeurBaseNURBS, mais avec l'objet explicite U
void ValeurBaseNURBS( int i, Z NbEtape, R u, R U[], R N[] );
#endif /* _SURFACE_H */

seNURBS, mais avec l'objet explicite U
void ValeurBaseNURBS( int i, Z NbEtape, R u, R U[], R N[] );
#endif /* _SURFACE_H */