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 */
|