GLam Collection version 0.4 - | ACCUEIL - CLASSES - HIERARCHIE - MEMBRES - EXEMPLES |
Pièce de révolution ou toroïde. Plus de détails...
#include <glamrevolution.h>
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 () | |
GLamRevolution & | operator= (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) |
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().
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).
// 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::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::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.
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.
Réimplémentée à partir de GLamObject.