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


Référence de la classe GLamCurve3D

Courbe 3D. Plus de détails...

#include <glamcurve3d.h>

Graphe d'héritage de GLamCurve3D:
GLamObject GLamWire

Liste de tous les membres

Fonctions membres publiques

 GLamCurve3D ()
 GLamCurve3D (double *pts, int numPts, double diameter=0.1)
 GLamCurve3D (const GLamCurve3D &obj)
 ~GLamCurve3D ()
GLamCurve3Doperator= (const GLamCurve3D &obj)
virtual void create ()
int numPts () const
double x (int numPoint) const
double y (int numPoint) const
double z (int numPoint) const
void setPoints (double *pts, int numPts)
bool isClosed () const
void setClosed (bool closed=true)
bool isRoughMode () const
void setRoughMode (bool roughMode=true)
void setSection (double *pts, int numPts)
void setSection (double diameter, int numSectors=20)
void setSection (const GLamPolygon &obj)

Description détaillée

Courbe 3D.

La classe GLamCurve3D permet de construire un élément gauche de section constante. L'âme du solide est définie par une liste de points (x,y,z) et la section est spécifiée sous forme d'un polygone régulier ou non.

Les points de constitution de la courbe peuvent être calculés à partir d'une équation cartésienne, paramétrique ou encore polaire (voir exemple). Ces points peuvent aussi être définis un par un dans l'espace 3D en fonction des besoins de l'application cliente. Dans tous les cas, la liste de points est transmise sous forme d'un tableau de double accompagné du nombre de points.

La section par défaut est de type circulaire de diamètre 0.1 avec 20 facettes (polygone régulier à 20 faces). Les méthodes setSection() permettent de redéfinir la section aussi bien en tant que polygone régulier qu'en tant que polygone quelconque défini par une liste de points ou par copie des points d'un objet GLamPolygon ou dérivé.


Propriétés

points : Points de construction de la courbe.

closed : Fermeture des extrémités (false par défaut).

roughMode : mode 'ébauche' (false par défaut). Dans ce mode, seul l'âme de la courbe et le périmètre des sections en chaque point de définition sont représentés.


Exemple

// attributs

GLamCurve3D*    curv1 ;
GLamCurve3D*    curv2 ;
GLamCurve3D*    curv3 ;
GLamCurve3D*    curv4 ;

// construction

double r = 1.2 ;
double ymin = -6.0 ;
double ymax = +6.0 ;

int    n = 50 ;
double pts[n][3] ;

// horoptère (cercle cubique), équation cartésienne
// avec y dans l'intervalle [ ymin ; ymax ]

for (int i = 0 ; i < n ; i++ ) {
  double y = ymin + ( ymax - ymin ) * (double)i / ( n - 1 ) ;
  double x = 2 * r / ( 1 + y * y ) ;
  double z = x * y ;

  pts[i][0] = x ; pts[i][1] = y ; pts[i][2] = z ;
}

curv1 = new GLamCurve3D((double*)pts, n ) ;
curv1->setSection( 1.0, 90 ) ;
curv1->setClosed() ;

// cylindre directeur de l'horoptère, équation cartésienne
// de rayon r, avec y dans l'intervalle [ ymin ; ymax ]

for (int i = 0 ; i < n ; i++ ) {
  double y = ymin + ( ymax - ymin ) * (double)i / ( n - 1 ) ;
  double x = r ;
  double z = 0 ;

  pts[i][0] = x ; pts[i][1] = y ; pts[i][2] = z ;
}

curv2 = new GLamCurve3D((double*)pts, n, 2 * r ) ;
curv2->setRoughMode( true ) ;

// hypotrochoïde (noeud), équation paramétrique
// avec t dans l'intervalle [ 0 ; 2Pi ]

n = 200 ;
double pts2[n][3] ;

for (int i = 0 ; i < n ; i++ ) {
  double t = 2 * Pi * (double)i / ( n - 1 ) ;

  double x = cos( t ) + 2 * cos( 2 * t ) ;
  double y = sin( t ) - 2 * sin( 2 * t ) ;
  double z = 2 * sin( 3 * t ) ;

  pts2[i][0] = x ; pts2[i][1] = y ; pts2[i][2] = z ;
}
curv3 = new GLamCurve3D((double*)pts2, n ) ;
curv3->setSection(0.6, 90 ) ;
curv3->setColor(250, 240, 12, true ) ;

// trisectrice de Ceva (courbe 2D), équation polaire
// avec theta dans l'intervalle [ 0 ; 2Pi ]

double a = 1.0 ;

for (int i = 0 ; i < n ; i++ ) {
  double theta = 2 * Pi * (double)i / ( n - 1 ) ;
  double ro = a * ( 1 + 2 * cos( 2 * theta ) ) ;
  double x = ro * sin( theta ) ;
  double y = ro * cos( theta ) ;

  pts2[i][0] = x ; pts2[i][1] = y ; pts2[i][2] = 0 ;
}
curv4 = new GLamCurve3D((double*)pts2, n ) ;
curv4->setSection( GLamCube(0.15, 0.15 ) ) ;
curv4->setColor(150, 40, 110, true ) ;

// projection sur la scène

glPushMatrix() ;
  curv1->draw() ;
  curv2->draw() ;
  glTranslated(-4.5, 3, 0 ) ;
  curv3->draw() ;
  glTranslated(0, -7, 0 ) ;
  glRotated(-45, 0, 0, 1 ) ;
  curv4->draw() ;
glPopMatrix() ;
glamcurve3d_example.png



Documentation des constructeurs et destructeur

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

Le constructeur par défaut crée une boucle de spirale enroulée autour de l'axe Z (16 points, section triangulaire), apparaissant sous sa forme fil de fer (wireframe). Cet état est révoqué dès que l'élément est redimensionné, ou par copie d'un autre objet de même classe (cf. sélecteur isDefault() de la classe de base).
glamcurve3d_default.png
GLamCurve3D::GLamCurve3D ( double *  pts,
int  numPts,
double  diameter = 0.1 
)

Constructeur.

GLamCurve3D::GLamCurve3D ( const GLamCurve3D obj  ) 

Constructeur de copie.

GLamCurve3D::~GLamCurve3D (  ) 

Destructeur.


Documentation des fonctions membres

void GLamCurve3D::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 GLamWire.

bool GLamCurve3D::isClosed (  )  const [inline]

Propriété closed.

bool GLamCurve3D::isRoughMode (  )  const [inline]

Propriété roughMode.

int GLamCurve3D::numPts (  )  const [inline]

Propriété points.

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

Surcharge de l'opérateur d'affectation.

void GLamCurve3D::setClosed ( bool  closed = true  ) 

Propriété closed.

void GLamCurve3D::setPoints ( double *  pts,
int  numPts 
)

Propriété points.

void GLamCurve3D::setRoughMode ( bool  roughMode = true  ) 

Propriété roughMode.

void GLamCurve3D::setSection ( const GLamPolygon obj  ) 

Section définie par copie des sommets (x,y) d'un objet de classe GLamPolygon ou de ses classes dérivées.

void GLamCurve3D::setSection ( double  diameter,
int  numSectors = 20 
)

Section de type polygone régulier de diamètre diameter avec numSectors facettes réparties régulièrement sur la circonférence.

void GLamCurve3D::setSection ( double *  pts,
int  numPts 
)

Section de type polygone quelconque défini par une liste sommets (x,y).

double GLamCurve3D::x ( int  numPoint  )  const [inline]

Propriété points.

double GLamCurve3D::y ( int  numPoint  )  const [inline]

Propriété points.

double GLamCurve3D::z ( int  numPoint  )  const [inline]

Propriété points.


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