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

jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007 - 12 nov. 2006 à 13:08
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 12 nov. 2006 à 16:50
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

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
12 nov. 2006 à 15:13
Utilise les fonction de la stl (librairie standard du c++) avec les deques ou les listes qui utilise les templates.
++
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
12 nov. 2006 à 15:33
Mais comment l utiliser? Je sais que je doit utiliser cette librairie ... mais avec toutes mes imbrication de class, je vois pas comment!
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
12 nov. 2006 à 16:50
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);

@+
Rejoignez-nous