@ Pierre,
Oui, on peut décrire entièrement un réseau à l'aide de tables. Et heureusement...
Dans mon éditeur, je fais un dessin et je sauve dans DES tables.
Cela me permet de mémoriser le dessin du réseau pour pouvoir faire une sauvegarde entre deux séances de dessin dans l'éditeur
Mais ces mêmes tables me permettent de récupérer le parcours du réseau dans mon gestionnaire.
Dans ma première version, je sauvais tous les pavés dans une seule table. Ça marchait, mais l'objet Pave() récupérait des infos un peu partout et avait une liste de variables dingue.
Depuis, je fais plusieurs tables :1°) Une table pavés, nécessaire, mais plus petite.
2°) Une table par type de forme. J'ai trois formes :
- Une forme D qui est un segment de droite
- Une forme C qui est une courbe qui ressemble à un C
- Une forme S qui est une courbe qui ressemble à un S
Je reviendrais sur les détails
3°) Une table qui me dit ce qu'il y a dans la palette et où dans la palette. Evidemment, elle ne sert que pour l'éditeur puisqu'il n'y a pas de palette dans le gestionnaire.
4°) Une table de tous les connecteurs entre les pavés, nécessaire dans l'éditeur
5°) Je ne l'ai pas encore, mais je pense qu'il faut une table des connecteurs entre les zones. Dans un gestionnaire, on ne s'occupe pas des pavés qui constituent les zones. Ce qui sert, ce sont les connecteurs d'extrémité de zones.
Dans Processing (je ne t'apprends rien, mais c'est pour les autres), on n'a droit qu'à 3 types : Entier (Int), flottant (Float et c'est "nouveau") et Caractères (String). Pas de booléens.
Fort heureusement, le format .tsv (Tabulation Separated Values) et le même que le format natif d'Excel, ce qui fait qu'on peut lire sans problème les .tsv dans Excel. Cela simplifie grandement la mise à jour et les vérifications.
Revenons sur les détails des formes :
Table D :ID_pave alpha0 alpha1 baseG0x baseG0y baseG0z baseG1x baseG1y baseG1z cible0 cible1 cib_v0 cib_v1 butoir0 butoir1 meca0 meca1 t_cib0 t_cib1
ID_pave = identifiant
alpha0 ou 1 = angle de l'extrémité 0 ou 1 du segment de droite
baseG0 x, y ou z = coordonnées absolues de l'extrémité 0 du segment
baseG1 x, y ou z = coordonnées absolues de l'extrémité 1 du segment
cible 0 ou 1 = la valeur donne l'affichage C, S, A, VL...
cib_v0 ou 1 = cible 0 ou 1 visible. Dans un dépôt, on y respecte la sécurité avec des vrais agents. Là, c'est avec une cible invisible.
butoir0 ou 1 = présence d'un butoir à l'extrémité 0 ou 1
meca0 ou 1 = signal mécanique (ou lumineux) à l'extrémité 0 ou 1
t_cib0 ou 1 = type de cible (A, C, F, H, ...) à l'extrémité 0 ou 1
Table C :Une courbe C peut avoir 2 types :
- La courbe C "cercle" qui est une courbe en 3 morceaux : un segment de droite, un arc de cercle, un segment de droite. Eventuellement, les segments de droite sont de longueur
nulle et on a un vrai cercle.
- La courbe C "parabole" qui est en un seul morceau et qui sert aux raccordement paraboliques, avec affichage simultané de la "parabole" et de "droite + cercle" pour qu'on puisse
voir ce qu'on choisit
ID_pave alpha0 alpha1 baseG0x baseG0y baseG0z baseG1x baseG1y baseG1z baseG2x baseG2y baseG2z baseG3x baseG3y baseG3z baseG4x baseG4y baseG4z baseG5x baseG5y baseG5z cercle1 parabo1 rayonc1 ratioc1 centr1x centr1y centr1z cercle2 parabo2 rayonc2 ratioc2 centr2x centr2y centr2z cible0 cible1 cib_v0 cib_v1 butoir0 butoir1 meca0 meca1 t_cib0 t_cib1
Je ne détaille pas tout, simplement qu'il faut 4 paramètres pour dessiner une courbe de Bezier cubique (l'arc de cercle) + 2 points pour les segments de droite, soit 6 points de BaseG0 à baseG5. J'ai aussi l'affichage sur les pupitres des centres des cercles suivant qu'on est coté 1 ou 2 (je ne rentre pas dans les détails).
Mais quand on dessine à l'échelle, il faut tout savoir.
Table S :Une courbe S est formé de 2 courbes C tête bêche, soit 4 types : cercle - cercle, cercle -parabole, parabole - cercle, parabole - parabole.
Tout est modifiable à la souris : point d'inflexion, centre des cercles.
ID_pave alpha0 alpha1 baseG0x baseG0y baseG0z baseG1x baseG1y baseG1z baseG2x baseG2y baseG2z baseG3x baseG3y baseG3z baseG4x baseG4y baseG4z baseG5x baseG5y baseG5z baseG6x baseG6y baseG6z baseG7x baseG7y baseG7z baseG8x baseG8y baseG8z baseG9x baseG9y baseG9z basG10x basG10y basG10z cercle1 parabo1 rayonc1 ratioc1 centr1x centr1y centr1z cercle2 parabo2 rayonc2 ratioc2 centr2x centr2y centr2z ptBleux ptBleuy ptBleuz cible0 cible1 cib_v0 cib_v1 butoir0 butoir1 meca0 meca1 t_cib0 t_cib1
On voit bien sur ces exemples que, si ces infos sont utiles pour le dessin du TCO dans le gestionnaire, ça ne sert à rien dans le gestionnaire lui-même.
Table des connecteurs :X0x X0y X0z pave0 cote_p0 form_p0 alpha0 pave1 cote_p1 form_p1 alpha1 atelier retrait
X0x, y et z = coordonnées absolues du connecteur
pave0 = indice du pavé côté 0
cote0 = côté du pave0 relié au coté 0 du connecteur
forme0 = forme du pave0 reliée au côté 0 du connecteur
alpha0 = angle du côté 0 du pave0 du côté 0 du connecteur (vous suivez
)
Pareil pour le côté 1 du connecteur avec le pave1.
atelier = si ce pavé est dessiné dans l'atelier, sur le TCO ou dans la palette
retrait = si c'est une coupure de rail
Table Pavé :ID_pave X0x X0y X0z v_devie v_limit ID_zone manoeuv type poids ligne00 ligne01 ligne10 ligne11 ligne20 ligne21 ligne30 ligne31 ligne40 ligne41 ligne50 ligne51 ligne60 ligne61 ligne70 ligne71
Les premiers sont évidents, les lignes correspondent aux lignes où on retrouve le pavé dans la table des connecteurs. C'est utile pour "remonter" dans la table des connecteurs quand on construit un itinéraire.
Voilà voilà...
Denis