![]() |
GLam Collection version 0.4 - | ACCUEIL - CLASSES - HIERARCHIE - MEMBRES - EXEMPLES |
Solide construit par facettisation. Plus de détails...
#include <glamtesselation.h>
Fonctions membres publiques | |
GLamTesselation () | |
GLamTesselation (double *pts, int numPts, double thickness) | |
GLamTesselation (const GLamTesselation &obj) | |
GLamTesselation (const GLamPolygon &obj) | |
GLamTesselation (const GLamCube &obj) | |
GLamTesselation (const GLamCylinder &obj) | |
GLamTesselation (const GLamClosedCurve &obj) | |
~GLamTesselation () | |
GLamTesselation & | operator= (const GLamTesselation &obj) |
GLamTesselation & | operator= (const GLamPolygon &obj) |
GLamTesselation & | operator= (const GLamCube &obj) |
GLamTesselation & | operator= (const GLamCylinder &obj) |
GLamTesselation & | operator= (const GLamClosedCurve &obj) |
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 | setThickness (double thickness) |
void | setSelected (bool selected=true) |
void | addCircularHole (double xCenter, double yCenter, double radius, int numSectors=20) |
void | addPolygonalHole (double xOffset, double yOffset, double *pts, int numPts) |
void | addPolygonalHole (double xOffset, double yOffset, const GLamPolygon &obj) |
void | addPolygonalHole (double xOffset, double yOffset, double length, double radius, double alpha) |
void | addCurvedHole (double xOffset, double yOffset, double *pts, int numPtsCtrl, int numSectors) |
int | numHoles () const |
Solide construit par facettisation.
Cette classe permet de définir un objet par un contour polygonal quelconque (convexe ou concave) et une épaisseur.
L'objet est posé sur le plan 0XY et en élévation sur l'axe Z.
En plus du constructeur de copie, un objet de classe GLamTesselation peut aussi être construit à partir d'un élément de classe GLamPolygon, GLamCube, GLamCylinder ou encore GLamClosedCurve.
Une fois le volume de base créé, la classe permet d'ajouter des ouvertures (trous) au moyen de ses méthodes add
...Hole(). Les deux premiers arguments de ces méthodes déterminent la position de l'évidement sur le plan 0XY.
La classe doit son nom à la technique GLU utilisée pour calculer la décomposition en facettes triangulaires des faces trouées de l'objet.
// attributs GLamPolygon* poly1 ; GLamTesselation* tess1 ; GLamTesselation* tess2 ; GLamTesselation* tess3 ; GLamTesselation* tess4 ; // construction double pts[][2] = { {0,0}, {2,0}, {2,2}, {1.5,3}, {-0.5,3} } ; poly1 = new GLamPolygon( (double*)pts, 5, 1.5 ) ; tess1 = new GLamTesselation( *poly1 ) ; tess1->addCircularHole( 1, 1, 0.7, 40 ) ; tess2 = new GLamTesselation( GLamCube(4,4,2) ) ; tess2->addCircularHole( 1, 0, 0.5, 90 ) ; tess2->addPolygonalHole( -0.8, 0, 3, 0.4, 60 ) ; tess2->setColor(0.7, 0.3, 0.2, true ) ; GLamCylinder cyl(3, 0.8 ) ; cyl.setNumSectors(180 ) ; tess3 = new GLamTesselation( cyl ) ; double hol[][2] = { {1,1.4}, {-1,1.4}, {0,0.2} } ; GLamObject::rotatePoints((double*)hol, 3, 360 / 10 ) ; tess3->addCurvedHole(0,0,(double*)hol, 3, 20 ) ; for (int i = 0 ; i < 4 ; i++ ) { GLamObject::rotatePoints((double*)hol, 3, 360 / 5 ) ; tess3->addCurvedHole(0,0,(double*)hol, 3, 20 ) ; } tess3->setThickness( 1.25 ) ; tess3->addCircularHole(0, 0, 0.4, 10 ) ; tess3->setColor(0.565, 0.933, 0.565, true ) ; double hh = 5 ; double ww = 5 ; double coeur[][2] = { {0,-2*hh/3}, {0,-2*hh/3}, {ww/8,-hh/3}, {ww/2,0}, {3*ww/8,hh/3}, {ww/10,hh/3}, {0,hh/5}, {0,hh/5}, {-ww/10,hh/3}, {-3*ww/8,hh/3}, {-ww/2,0}, {-ww/8,-hh/3}, {0,-2*hh/3}, {0,-2*hh/3} } ; tess4 = new GLamTesselation( GLamClosedCurve( (double*)coeur, 14, 100, 0.5 ) ) ; tess4->setColor(1.0, 0.753, 0.796, true ); // projection sur la scène glPushMatrix() ; glTranslated( -2, -6, 0 ) ; tess1->draw() ; glTranslated( 2, 8, 1 ) ; tess2->draw() ; glTranslated( -5, -7, 0 ) ; glRotated(45, 0, 1, 0 ) ; tess3->draw() ; glTranslated( -1, 7, 0 ) ; tess4->draw() ; glPopMatrix() ; | ![]() |
GLamTesselation::GLamTesselation | ( | ) |
Constructeur par défaut. Le constructeur implicite crée un objet en forme de « H » de volume 1.0 x 1.0 x 1.0, apparaissant sous sa forme fil de fer (wireframe). Cet état n'est révocable que par copie d'un autre objet (cf. sélecteur isDefault() de la classe de base). | ![]() |
GLamTesselation::GLamTesselation | ( | double * | pts, | |
int | numPts, | |||
double | thickness | |||
) |
Contructeur par liste de sommets.
La forme du solide est définie par une liste de points (x,y) et une épaisseur thickness
.
GLamTesselation::GLamTesselation | ( | const GLamTesselation & | obj | ) |
Constructeur de copie.
GLamTesselation::GLamTesselation | ( | const GLamPolygon & | obj | ) |
Constructeur de copie d'un objet de classe GLamPolygon.
La forme du solide est définie par la liste des points (x,y) de l'objet et par son épaisseur thickness
. Le contour peut être convexe ou concave.
GLamTesselation::GLamTesselation | ( | const GLamCube & | obj | ) |
Constructeur de copie d'un objet de classe GLamCube.
La forme du solide est définie par la largeur, la hauteur et l'épaisseur de l'objet. Le solide est centrée sur le plan XY.
GLamTesselation::GLamTesselation | ( | const GLamCylinder & | obj | ) |
Constructeur de copie d'un objet de classe GLamCylinder.
La forme du solide est définie par le diamètre, l'épaisseur et le nombre de facettes (polygone régulier) de l'objet.
GLamTesselation::GLamTesselation | ( | const GLamClosedCurve & | obj | ) |
Constructeur de copie d'un objet de classe GLamClosedCurve.
La forme du solide est définie par une courbe de BSpline bornée par la liste des points de contrôle de l'objet. Le contour peut être convexe ou concave.
GLamTesselation::~GLamTesselation | ( | ) |
Destructeur.
void GLamTesselation::addCircularHole | ( | double | xCenter, | |
double | yCenter, | |||
double | radius, | |||
int | numSectors = 20 | |||
) |
Méthode d'ajout d'un trou dont la section est un polygone régulier.
Les arguments xCenter et yCenter fixent la position du centre du trou dans le plan XY du solide. Le contour est défini par son rayon et son nombre de facettes (polygone régulier).
void GLamTesselation::addCurvedHole | ( | double | xOffset, | |
double | yOffset, | |||
double * | pts, | |||
int | numPtsCtrl, | |||
int | numSectors | |||
) |
Méthode d'ajout d'un trou de section calculée par BSpline.
La forme curviligne convexe ou concave du trou est déterminée par une liste de points de contrôle et un nombre total de facettes, de manière à définir une courbe de BSpline fermée automatiquement. Les arguments xOffset et yOffset permettent d'ajuster la position du trou dans le repère XY du solide.
void GLamTesselation::addPolygonalHole | ( | double | xOffset, | |
double | yOffset, | |||
double | length, | |||
double | radius, | |||
double | alpha | |||
) |
Méthode d'ajout d'un trou de section oblongue.
Le trou oblong est défini par une longueur totale length, un rayon radius, et un angle d'inclinaison en degrés alpha. Les arguments xOffset et yOffset permettent d'ajuster la position du trou dans le repère XY du solide.
void GLamTesselation::addPolygonalHole | ( | double | xOffset, | |
double | yOffset, | |||
const GLamPolygon & | obj | |||
) |
Méthode d'ajout d'un trou polygonal quelconque.
Le polygone obj peut être de classe GLamPolygon ou d'une de ses classes filles. Les arguments xOffset et yOffset permettent d'ajuster la position du trou dans le repère XY du solide.
void GLamTesselation::addPolygonalHole | ( | double | xOffset, | |
double | yOffset, | |||
double * | pts, | |||
int | numPts | |||
) |
Méthode d'ajout d'un trou de section polygonale quelconque.
Le polygone peut être convexe ou concave, il est défini par une liste de points (x,y). Les arguments xOffset et yOffset permettent d'ajuster la position du trou dans le repère XY du solide.
void GLamTesselation::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()
.
Réimplémentée à partir de GLamPolygon.
int GLamTesselation::numHoles | ( | ) | const [inline] |
Retourne le nombre courant d'ouvertures pratiquées dans l'objet.
GLamTesselation & GLamTesselation::operator= | ( | const GLamClosedCurve & | obj | ) |
Surcharge de l'opérateur d'affectation.
GLamTesselation & GLamTesselation::operator= | ( | const GLamCylinder & | obj | ) |
Surcharge de l'opérateur d'affectation.
GLamTesselation & GLamTesselation::operator= | ( | const GLamCube & | obj | ) |
Surcharge de l'opérateur d'affectation.
GLamTesselation & GLamTesselation::operator= | ( | const GLamPolygon & | obj | ) |
Surcharge de l'opérateur d'affectation.
Réimplémentée à partir de GLamPolygon.
GLamTesselation & GLamTesselation::operator= | ( | const GLamTesselation & | obj | ) |
Surcharge de l'opérateur d'affectation.
void GLamTesselation::setColor | ( | float | r, | |
float | g, | |||
float | b, | |||
bool | shiny = false | |||
) | [virtual] |
Propriété color.
Réimplémentée à partir de GLamObject.
void GLamTesselation::setMaterial | ( | float | mat[10] | ) | [virtual] |
Propriété material.
Réimplémentée à partir de GLamObject.
void GLamTesselation::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 GLamTesselation::setShiny | ( | bool | shiny = true |
) | [virtual] |
Propriété shiny.
Réimplémentée à partir de GLamObject.
void GLamTesselation::setSimpleColor | ( | bool | simpleColor = true |
) | [virtual] |
Propriété simpleColor.
Réimplémentée à partir de GLamObject.
void GLamTesselation::setThickness | ( | double | thickness | ) | [virtual] |
Propriété thickness.
Réimplémentée à partir de GLamObject.
void GLamTesselation::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.