GLam Collection version 0.4 -  ACCUEIL -  CLASSES -  HIERARCHIE -  MEMBRES -  EXEMPLES


Référence de la classe GLamRevolution

Pièce de révolution ou toroïde. Plus de détails...

#include <glamrevolution.h>

Graphe d'héritage de GLamRevolution:
GLamObject GLamCylinder GLamRoundedCorner GLamSphere GLamTorus

Liste de tous les membres

Fonctions membres publiques

 GLamRevolution ()
 GLamRevolution (double *pts, int numPts, int numSectors=20, double angle=360.0)
 GLamRevolution (double *pts, double *vectors, int numSectors=20, double angle=360.0)
 GLamRevolution (const GLamRevolution &obj)
 ~GLamRevolution ()
GLamRevolutionoperator= (const GLamRevolution &obj)
virtual void create ()
void update ()
void setColor (float r, float g, float b, bool shiny=false)
void setShiny (bool shiny=true)
void setSimpleColor (bool simpleColor=true)
void setMaterial (float mat[10])
void setSelected (bool selected=true)
int numSectors () const
void setNumSectors (int numSectors)
double angle () const
void setAngle (double angle)
double radius () const
void setRadius (double radius)
bool isClosed () const
void setClosed (bool closed=true)
bool isSideChanged () const
void changeSide (bool changeSide=true)

Fonctions membres protégées

void setPoints (double *pts, int numPts)
void setBezierPoints (double *pts, double *vectors, int numPts)

Description détaillée

Pièce de révolution ou toroïde.

La classe GLamRevolution assure la construction de toute pièce de révolution (coupe transversale de type polygone régulier) définie par son demi-profil longitudinal. L'élément est centré sur l'origine. Les points de définition du profil sont des couples (x,z) ou (y,z).
Les points de définition du demi-profil sont créés sous forme d'un tableau double[][2], à transmettre lors de la construction sous la forme d'un double*, suivi du nombre de points puis du nombre de segments de la section polygonale régulière et de l'angle de révolution.
Le demi-profil peut aussi être défini par un point de départ et un point d'arrivée ( tableau double[2][2] ), suivi des vecteurs en ces points ( deuxième tableau double[2][2] ) et du nombre de facettes ; le profil est alors calculé comme une courbe lisse de Bézier.
La propriété radius permet de réaliser un toroïde en spécifiant un rayon d'excentricité du profil défini ; celui-ci devant être de préférence fermé (le dernier point équivalent au premier). Note : La classe GLamTorus permet de fabriquer plus facilement de vrais tores (toroïdes de section circulaire).
Si l'angle de révolution est inférieur à 360° (valeur par défaut), la classe peut générer ou non les surfaces radiales de fermeture de l'objet en fonction de la propriété closed (false par défaut).
Les faces de l'élément sensibles au rendu sont par défaut les faces extérieures, le rendu peut cependant être inversé par la méthode changeSide().


Propriétés

numSectors : Nombre de facettes pour une révolution complète. La valeur par défaut est fixée à 20.

angle : Angle de révolution en degrés (défaut 360).

radius : Rayon de la pièce de révolution (0 par défaut). Une valeur positive permet d'excentrer le profil de définition de la section de la pièce de révolution afin d'obtenir un toroïde (à condition que la liste de points représente un polygone fermé avec le premier point égal au dernier).

closed : Fermeture radiale du solide (false par défaut). Cette propriété n'a d'effet que lorsque la révolution est incomplète.

changeSide : Inversion des faces sensibles au rendu (false par défaut).


Exemple

// attributs

GLamRevolution* revol1 ;
GLamRevolution* revol2 ;
GLamRevolution* revol3 ;

// construction

double pts1[][2] = { {0,-1}, {3,0}, {3,1}, {2,1}, {2,2},
           {1,3}, {2,4}, {2,5}, {0,6} } ;

revol1 = new GLamRevolution( (double*)pts1, 9, 360, 230 ) ;
revol1->setClosed() ;
revol1->setColor(0.2,0.4,0.8, true ) ;

double pts2[][2] = { {2,0}, {0,2} } ;
double vec1[][2] = { {0.8,2}, {1,-1} } ;

revol2 = new GLamRevolution( (double*)pts2, (double*)vec1, 90 ) ;
revol2->setColor(0.7,0.3,0.2, true ) ;

double pts3[][2] = { {1,0}, {-0.5,0.5}, {-0.5,-1}, {1,-1}, {1,0} } ;

revol3 = new GLamRevolution( (double*)pts3, 5, 180, 160 ) ;
revol3->setRadius( 2.5 ) ;
revol3->setClosed() ;

// projection sur la scène

glPushMatrix() ;
  revol1->draw() ;
  glTranslated(-5, -5, 1 ) ;
  revol2->draw() ;
  glTranslated(6, 0, 0 ) ;
  glRotated(-15, 1, 0 ,0 ) ;
  revol3->draw() ;
glPopMatrix() ;
glamrevolution_example.png



Documentation des constructeurs et destructeur

GLamRevolution::GLamRevolution (  ) 
Constructeur par défaut.

Le constructeur par défaut crée un diamant octogonal de volume 1.0 x 1.0 x 1.0, apparaissant sous sa forme fil de fer (wireframe). Cet état est révocable par copie d'un autre objet de même classe (cf. sélecteur isDefault() de la classe de base).
glamrevolution_default.png
GLamRevolution::GLamRevolution ( double *  pts,
int  numPts,
int  numSectors = 20,
double  angle = 360.0 
)

Construction par liste de points.
L'argument pts doit pointer sur une liste de couples de coordonnées (x,z) dont le nombre est spécifié par numPts.
Le nombre de facettes de la révolution complète est spécifié par numSectors et l'angle de révolution par angle.

GLamRevolution::GLamRevolution ( double *  pts,
double *  vectors,
int  numSectors = 20,
double  angle = 360.0 
)

Construction par courbe lisse de Bézier.
L'argument pts doit fournir les coordonnées (x,z) des points de départ et d'arrivée de la courbe, et vectors les vecteurs dans le même plan au point de départ et au point d'arrivée.
Le nombre de facettes de la révolution complète est spécifié par numSectors et l'angle de révolution par angle.

GLamRevolution::GLamRevolution ( const GLamRevolution obj  ) 

Constructeur de copie.

GLamRevolution::~GLamRevolution (  ) 

Destructeur.


Documentation des fonctions membres

double GLamRevolution::angle (  )  const [inline]

Propriété angle.

void GLamRevolution::changeSide ( bool  changeSide = true  ) 

Propriété changeSide.

void GLamRevolution::create (  )  [virtual]

Méthode de dessin utilisée par la classe de base pour générer la display list de l'objet. Les programmes clients ne doivent normalement pas invoquer directement cette méthode, mais préférer la méthode draw() qui exploite la primitive OpenGL glCallList() .

Implémente GLamObject.

Réimplémentée dans GLamRoundedCorner.

bool GLamRevolution::isClosed (  )  const [inline]

Propriété closed.

bool GLamRevolution::isSideChanged (  )  const [inline]

Propriété changeSide.

int GLamRevolution::numSectors (  )  const [inline]

Propriété numSectors.

GLamRevolution & GLamRevolution::operator= ( const GLamRevolution obj  ) 

Surcharge de l'opérateur d'affectation.

double GLamRevolution::radius (  )  const [inline]

Propriété radius.

void GLamRevolution::setAngle ( double  angle  ) 

Propriété angle.

void GLamRevolution::setBezierPoints ( double *  pts,
double *  vectors,
int  numPts 
) [protected]

Calcul du profil (cas d'une construction par courbe de Bézier).

void GLamRevolution::setClosed ( bool  closed = true  ) 

Propriété closed.

void GLamRevolution::setColor ( float  r,
float  g,
float  b,
bool  shiny = false 
) [virtual]

Propriété color.

Réimplémentée à partir de GLamObject.

void GLamRevolution::setMaterial ( float  mat[10]  )  [virtual]

Propriété material.

Réimplémentée à partir de GLamObject.

void GLamRevolution::setNumSectors ( int  numSectors  ) 

Propriété numSectors.

Réimplémentée dans GLamRoundedCorner, et GLamSphere.

void GLamRevolution::setPoints ( double *  pts,
int  numPts 
) [protected]

Mémorisation du profil (cas d'une construction par liste de points).

void GLamRevolution::setRadius ( double  radius  ) 

Propriété radius.

void GLamRevolution::setSelected ( bool  selected = true  )  [virtual]

Force ou non l'état 'sélectionné' de l'objet. Le cas échéant, celui-ci est alors regénéré avec un aspect cyan semi-transparent.

Réimplémentée à partir de GLamObject.

void GLamRevolution::setShiny ( bool  shiny = true  )  [virtual]

Propriété shiny.

Réimplémentée à partir de GLamObject.

void GLamRevolution::setSimpleColor ( bool  simpleColor = true  )  [virtual]

Propriété simpleColor.

Réimplémentée à partir de GLamObject.

void GLamRevolution::update (  )  [virtual]

Fixation du mode de rendu de l'objet et fabrication de la display list. Mise à jour de l'identifiant de l'objet dans la liste des objets.

Voir également:
isUpdate(), updateNeeded()

Réimplémentée à partir de GLamObject.


Doxygen version 1.6.3 - GLam Collection - (c) 2009-2010 Alain Menu