1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
pile_pos : PILE d'entiers
pile_hauteur : PILE de reels
buf : conteneur
x : reel
y : reel
y_buf : reel
buf <- conteneur_racine
pile_pos.empiler(0)/* la racine */
pile_hauteur.empiler(0)/* hauteur de dessin de la racine */
si buf.nbFils() <= 1
x <- #LONGUEUR_CONTENEUR#
sinon
x <- #HAUTEUR_CONTENEUR#
y_buf <- 0
resteConteneur = vrai
tant que resteConteneur=vrai faire/* au moins un élément */
pos : Entier;
pos <- pile_pos.depiler()
si pos < buf.nbFils()
pile_pos.empiler(pos+1)
pile_pos.empiler(0)/* prepare pour le prochain */
buf <- buf.fils(pos)
si buf.nbFils() <= 1
x <- x + #LONGUEUR_CONTENEUR# + H_espace
sinon
x <- x + #HAUTEUR_CONTENEUR# + H_espace
sinon /* on a lu tous les fils ou il y en a aucun */
si buf.nbFils() <= 1
/* Si on n'a pas de fils, on augmente la hauteur des container */
si buf.nbFils() = 0
/* on recupere la valeur de la hauteur -> si aucun ou un fils : hauteur courante */
y_buf = #HAUTEUR_CONTENEUR#+V_espace
pile_hauteur.empiler(y_buf)
y += y_buf/* y contient la hauteur courante, y_buf la hauteur à ajouter */
/* Si 1 fils, y reste inchange */
dessiner horizontalement buf d'une longueur de #LONGUEUR_CONTENEUR# et d'une hauteur de #HAUTEUR_CONTENEUR# à la position x et y (dessin de la pointe superieur droite)
x <- x - #LONGUEUR_CONTENEUR# - H_espace
sinon
hauteur_buf <- 0
Pour tous les fils de buf
hauteur_buf <- hauteur_buf + pile_hauteur.depiler()/* on empile les hauteurs de tous les fils */
pile_hauteur.empiler(hauteur_buf) /* rempile la hauteur du container courant (pour être utilisé par son père plus tard) */
dessiner vericalement buf d'une hauteur égale à hauteur_buf et d'une largeur de #HAUTEUR_CONTENEUR# à la position x et y (dessin de la pointe superieur droite)
x <- x - #HAUTEUR_CONTENEUR# - H_espace
si buf.aPere() = vrai
buf <- buf.pere()
sinon
resteConteneur = faux
|