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


Référence de la classe GLamGroup

Groupement d'objets. Plus de détails...

#include <glamgroup.h>

Graphe d'héritage de GLamGroup:
GLamObject

Liste de tous les membres

Fonctions membres publiques

 GLamGroup ()
 ~GLamGroup ()
void create ()
void update ()
int numObjects () const
int addObject (GLamObject *obj)
void addObjectTranslate (int index, double tx, double ty, double tz)
void addObjectRotate (int index, double rx, double ry, double rz)
void addObjectScale (int index, double sx, double sy, double sz)
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)

Description détaillée

Groupement d'objets.

La classe GLamGroup permet de regrouper plusieurs objets GLamObject dans une seule entité. Les objets du groupement sont ainsi assemblés et peuvent alors subir en une seule opération toute requête de transformation ou de rendu.
La capacité d'un groupement est limitée à 100 objets. Chaque objet est ajouté grâce à la méthode addObject() qui retourne un numéro d'ordre attribué à l'objet dans le groupe. L'ordre d'ajout des objets est sans importance.
Chaque objet, par l'intermédiaire de son numéro, peut ensuite se voir affecter des transformations (translation, rotation, facteur d'échelle) permettant de régir sa géométrie au sein du groupe. Le nombre de transformations par objet est limité à 5, et l'ordre de spécification de ces transformations est important : en effet, en OpenGL, une translation suivie d'une rotation ne donne pas forcément le même résultat que la même rotation suivie de la même translation...
Les modifications liées au rendu (setColor(), setMaterial(),.. ) affectent tous les objets du groupe.
L'ajout d'objet à un groupe est réalisé sous forme d'agrégation. Une instance GLamGroup peut se voir ajouter plusieurs fois le même objet avec des listes de transformations différentes ; mais par contre, les modifications de rendu sur l'objet affectent tous les exemplaires dans le groupe (puisqu'il s'agit du même objet en mémoire...).
Un groupement peut contenir d'autres groupements.


Exemple

// attributs

GLamPolygon*  poly ;
GLamProfile*  prof ;
GLamCorner*   corn ;
GLamGroup*    side ;
GLamGroup*    grp ;

// construction

double pts[][2] = { {3,2}, {2,3}, {-2,3}, {-3,2}, {-3,-2}, {-2,-3}, {2,-3}, {3,-2} } ;
poly = new GLamPolygon((double *)pts, 8 ) ;
poly->setColor(1.0, 0.6, 0.4 ) ;

double pts2[][2] = { {0,0},{0,1} } ;
double vec1[][2] = { {0.5,0},{0.5,0} } ;
prof = new GLamProfile((double *)pts2, (double *)vec1, 40, 4 ) ;
prof->setColor(0.4, 0.6, 1.0, true ) ;

corn = new GLamCorner( *prof ) ;
corn->setBevel( 1 ) ;

side = new GLamGroup ;
side->addObject( prof ) ;
side->addObject( corn ) ;

grp = new GLamGroup ;
int obj[6] ;
obj[0] = grp->addObject( poly ) ;
obj[1] = grp->addObject( poly ) ;
grp->addObjectTranslate(obj[0], 0, 0, 1 ) ;
grp->addObjectRotate(obj[1], 180, 0, 0 ) ;

for (int i = 2 ; i <= 5 ; i++ ) obj[i] = grp->addObject( side ) ;

grp->addObjectRotate(obj[2],   0,  90,  90 ) ;
grp->addObjectRotate(obj[3],   0, -90, -90 ) ;
grp->addObjectRotate(obj[4], -90,   0, 180 ) ;
grp->addObjectRotate(obj[5],  90,   0,   0 ) ;

for (int i = 2 ; i <= 5 ; i++ ) grp->addObjectTranslate(obj[i], 3, 0, -2 ) ;

// projection sur la scène

glPushMatrix() ;
  glTranslated(-3, -3, 1 ) ;
  grp->draw() ;
glPopMatrix() ;
glamgroup_example.png



Documentation des constructeurs et destructeur

GLamGroup::GLamGroup (  ) 

Constructeur.

GLamGroup::~GLamGroup (  ) 

Destructeur.


Documentation des fonctions membres

int GLamGroup::addObject ( GLamObject obj  ) 

Ajout d'un objet dans le groupement.
La méthode retourne un identifiant unique associé à l'objet ajouté.

void GLamGroup::addObjectRotate ( int  index,
double  rx,
double  ry,
double  rz 
)

Ajout d'une rotation pour l'objet spécifié par index.

void GLamGroup::addObjectScale ( int  index,
double  sx,
double  sy,
double  sz 
)

Ajout d'un changement d'échelle pour l'objet spécifié par index.

void GLamGroup::addObjectTranslate ( int  index,
double  tx,
double  ty,
double  tz 
)

Ajout d'une translation pour l'objet spécifié par index.

void GLamGroup::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.

int GLamGroup::numObjects (  )  const [inline]

Retourne le nombre courant d'objets contenus dans le groupement.

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

Propriété color.

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

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

Propriété material.

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

void GLamGroup::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 GLamGroup::setShiny ( bool  shiny = true  )  [virtual]

Propriété shiny.

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

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

Propriété simpleColor.

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

void GLamGroup::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