Liste chainée de class dans une class...

Signaler
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007
-
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
Bonjour,

Je fait un programme en API sans MFC,
J'ai une class du genre:

class VERTEX                            // Build our Vertex Class
{
public:
    GLfloat pt[12];                        // 3D coordinates x, y
                                        // hauteur
};

// CLASS GROUPANT LES 4 SOMMETS DE LA FACE
class QUAD                                // Build our Quads Structure
{
public:
    int num_pts;
    bool visible;
    int type;
    GLdouble* bottom;
    GLdouble* top;
    VERTEX* vertex;
};

// CLASS D'UN COUCHE
class LAYER                                // Build our LAYER Class
{
public:
    int num_quads;
    bool visible, existe;
    float hauteur, zstart, h, penetration;
    char* nom_cif;
    char* nom_couche;
    vec4 color;
    QUAD* quad;   

    LAYER()
    {
        this->num_quads=0;
        this->zstart = 0.0;
        this->hauteur = 0.0;
        this->h = 0.0;
        this->color.set(0, 0, 0, 1.0);
        this->visible=true;
        this->nom_cif = ";";
        this->nom_couche = ";";
    }

    void SetLayer(char* _nom_cif, char* _nom_couche, float z, float h, float p, float r, float g, float b, float a)
    {
        this->nom_cif = _nom_cif;
        this->nom_couche = _nom_couche;
        this->num_quads=0;
        this->zstart = z;
        this->hauteur = h;
        this->penetration=p;
        this->h = h;
        this->color.set(r, g, b, a);
        this->visible=true;
        this->existe=true;
    }

   
    void AddValue(int _type, int _num_pts, float* _tab_pts, int _symbole, int _top_symbole, bool _visible)
    {

        this->quad[num_quads].type        = _type;
        this->quad[num_quads].num_pts    =_num_pts;
        this->quad[num_quads].bottom    = new GLdouble[_num_pts*3];
        this->quad[num_quads].top        = new GLdouble[_num_pts*3];
        this->quad[num_quads].vertex    = new VERTEX[_num_pts];
        this->quad[num_quads].top_symbole    = _top_symbole;
        this->quad[num_quads].symbole    = _symbole;
       
        for(int s=0; s<_num_pts; s++)
        {
            this->quad[num_quads].bottom[s*3] = _tab_pts[s*2];
            this->quad[num_quads].bottom[s*3+1] = this->zstart;
            this->quad[num_quads].bottom[s*3+2] = _tab_pts[s*2+1];
           
            this->quad[num_quads].top[s*3] = _tab_pts[s*2];
            this->quad[num_quads].top[s*3+1] = this->zstart + this->h;
            this->quad[num_quads].top[s*3+2] = _tab_pts[s*2+1];

        }
        for(int c=0; c<_num_pts; c++)
        {
            for(int i=0; i<2; i++)
            {
                int    d=c+i;
                if(d==_num_pts)
                    d=0;
                this->quad[num_quads].vertex[c].pt[i*3]=this->quad[num_quads].bottom[d*3];
                this->quad[num_quads].vertex[c].pt[i*3+1]=this->quad[num_quads].bottom[d*3+1];
                this->quad[num_quads].vertex[c].pt[i*3+2]=this->quad[num_quads].bottom[d*3+2];

                this->quad[num_quads].vertex[c].pt[11-i*3]=this->quad[num_quads].top[d*3+2];
                this->quad[num_quads].vertex[c].pt[11-i*3-1]=this->quad[num_quads].top[d*3+1];
                this->quad[num_quads].vertex[c].pt[11-i*3-2]=this->quad[num_quads].top[d*3];
            }
        }
        this->quad[num_quads].visible=_visible;
        this->num_quads= this->num_quads+1;
    }

    void Del(int _num)
    {
        delete this->quad;
        this->num_quads=0;
        this->quad = new QUAD[_num];
    }
    ~LAYER()
    {}
};

Seulement je ne sais pas combien de quad j'ai au depart! Il sont entré au fur et a mesure!
Est ce que c'est possible de faire une list chainée du type CList mais sans MFC de mon quad ? Si oui comment?
J'ai vu des exemples de list chainée, mais pour une structure ausi complexe ue la mienne je vois pas coment faire!

Merci pour votre aide!

3 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
22
Utilise les fonction de la stl (librairie standard du c++) avec les deques ou les listes qui utilise les templates.
++
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

Mais comment l utiliser? Je sais que je doit utiliser cette librairie ... mais avec toutes mes imbrication de class, je vois pas comment!
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut;

#include <list>

// CLASS D'UN COUCHE
class LAYER                                // Build our LAYER Class
{
public:
    int num_quads;
    bool visible, existe;
    float hauteur, zstart, h, penetration;
    char* nom_cif;
    char* nom_couche;
    vec4 color;
    std::list<QUAD*> l_quad;
    // etc...
}

pour ajouter un quad:
QUAD* val = new QUAD;
l_quad.push_back(val);

@+