Auteur Sujet: TCO avec Processing 4.2  (Lu 17891 fois)

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
TCO avec Processing 4.2
« le: avril 17, 2023, 09:28:05 pm »
Bonjour à tous,
j'ai en projet un petit réseau industriel où j'aimerais pouvoir associer ma multimaus Roco (10764) + Arduino + TCO Processing (sur mon Ordinateur), pas à pas.
Je suis novice en la matière, mais j'ai commencé timidement mon TCO avec Processing et voici mes deux questions:
1) quelqu'un pourrait-il me dire comment je peux assigner un feu violet fixe avec un heurtoir (Butoir) ?
Pour info, dans certains triages, gares et zones industrielles, des heurtoirs se voyaient équipés d'un feu violet fixe, souvent placé sur la traverse du haut ou derrière le heurtoir, du fait de la fréquentation importante des trains marchandises en général, et souvent de nuit.
2) et comment faire une barre de signal jaune ou rouge (de moindre taille) avec manoeuvre par clic dans un pavé droit (indication de présence d'un train (rouge) ou voie libre (jaune)) ?
D'avance je vous remercie, et désolé si je n'ai pas employé les bons termes.
Cordialement
Dominique,

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #1 le: avril 18, 2023, 07:34:01 am »
Bonjour

C'est tout à fait possible.

Pour pouvoir vous répondre j'ai besoin de savoir de quelle version de TCO en Processing vous êtes parti (référence de l'article sur le site).

Cordialement

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #2 le: avril 18, 2023, 01:19:34 pm »
bonjour Pierre,
merci beaucoup de pouvoir m'aider,
j'ai utilisé ceci avec Processing 4.2:

// Fabrication de TCOs pour l'article "TCOs en Processing"
// version 1.1 du 26 decembre 2017
// Pierre Lecouffe

et j'ai ajouté quelques nouveautés (butoir, signal entre autres dans les articles de Denis citant Pierre et Dominique)

Mon tableau comporte les onglets suivants:
Tco 1 (constantes et variables); Formes; Paves; TCO.

Cordialement Dominique



Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #3 le: avril 18, 2023, 06:13:00 pm »
Bonjour

Dans la version 2.1 (avec le deuxième article) il y a des butoirs PaveButoirDroit et PaveButoirBiais (et aussi des signaux).
J'ai rajouté des butoirs avec des feux violets : PaveButoirDroitFeu et PaveButoirBiaisFeu.
Voir le code ci dessous :

class PaveButoirDroit extends Pave {
  PaveButoirDroit() { // constructeur
    super(new FormeSimple(9,2, 7,2, 7,7, 9,7),
          new FormeSimple(7,3, 0,3, 0,6, 7,6));
  }
}

class PaveButoirDroitFeu extends PaveButoirDroit {
  void dessiner() {
    super.dessiner();
    pushStyle();
    strokeWeight(ZOOM/2);
    stroke(VIOLET);
    point(8,4.5);
    popStyle();
  }
}

class PaveButoirBiaisFeu extends PaveButoirBiais {
  void dessiner() {
    super.dessiner();
    pushStyle();
    strokeWeight(ZOOM/2);
    stroke(VIOLET);
    point(6.8,2.2);
    popStyle();
  }
}

class PaveButoirBiais extends Pave {
  PaveButoirBiais() { // constructeur
    super(new FormeSimple(4,1, 5.75,-0.75, 9.75,3.25, 8,5),
          new FormeSimple(-1,8, 5,2, 7,4, 1,10));
  }
}

class FormeSimple extends Forme {
  FormeSimple(float... xys) { // constructeur
    vertex(xys);
  }
}
Il faut aussi une FormeSimple.

Je regarderais les signaux.

Cordialement

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #4 le: avril 18, 2023, 08:30:58 pm »
Bonsoir Pierre,
le rendu est magnifique,
effectivement j'avais également copié les "butoirs" et "signaux" dans l'onglet "Paves" de la version 2.1, ainsi que l'ajout de "forme simple" dans l'onglet "Formes".
Encore merci beaucoup d'avoir répondu au débutant que je suis,
Cordialement
Dominique,

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #5 le: avril 19, 2023, 10:09:16 am »
Bonjour
comment faire une barre de signal jaune ou rouge (de moindre taille) avec manoeuvre par clic dans un pavé droit (indication de présence d'un train (rouge) ou voie libre (jaune)) ?
Je ne vois pas très bien de quoi il s'agit.

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #6 le: avril 19, 2023, 01:13:33 pm »
Bonjour Pierre,
Un gestionnaire en C++ pour votre réseau (3) nous parle des itinéraires où l'on peut voir au paragraphe "Mise en œuvre" le schéma d'un TCO virtuel. Sur le quai B, au "PaveDroit" il y a un signal carré fermé et au milieu du "rail" un cercle jaune.
Pourrais-t 'on le remplacer par un petit rectangle jaune centré (laissant apparaître un peu le rail "Gris-Foncé" de chaque côté) avec possibilité de le manœuvrer par clic de souris laissant apparaître un petit rectangle rouge (principe des signaux case "Rouge" feu "Vert").
Le but: "JAUNE", zone non occupée et "ROUGE", zone occupée, par un train, une loco ou et des wagons.
Probablement par la suite la possibilité du traçage d'itinéraires. Sauf erreur de ma part, on peut le nommé comme canton libre (jaune) ou canton occupé (rouge). Ce qui se rapproche de la réalité.
D'avance, merci de votre compréhension pour le novice que je suis, j'ai lu l'article qui était très intéressant, mais côté pratique pour moi pas facile.
Cordialement,
Dominique,

 

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #7 le: avril 19, 2023, 05:33:55 pm »
Bonjour

Voila un paveDroitZone, comme sur les TCOs sncf (cela pourrait aussi se faire sur des PaveSignal).

class PaveDroitZone extends PaveDroit {
  boolean occupe=false;
 
  Pave manoeuvrer(boolean b) { occupe=!occupe; return this; }

  void dessiner() {
    super.dessiner();
    pushStyle();
    strokeWeight(ZOOM/3); strokeCap(SQUARE);
    if (occupe) stroke(ROUGE); else stroke(JAUNE);
    line(1,4.5, 8,4.5);
    popStyle();
  }
}
En cliquant dessus il change de couleur.

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #8 le: avril 19, 2023, 05:56:12 pm »
Bonjour Pierre,
que du bonheur, les nombreux novices comme moi vont se régaler.
Je me permets une nouvelle question; j'ai ceci en "Pave":

class PaveSignal extends Pave {
  int feu;                                        // couleur du feu pour le tco

  PaveSignal(int f) {                            // constructeur
    super(new FormeSimple(3.4,3, 3.4,0.4, 6,0.4, 6,-1, 9,-1, 9,2, 6,2, 6,0.6, 3.6,0.6, 3.6,3),
          new FormeFeu(),
          new FormeDroit()); // RPL par FormeBiais
    feu=f;
  }

  void dessiner() {
    formes[0].dessiner(GRIS_FONCE);              // cible et mat
    formes[1].dessiner(feu);                     // feu
    formes[2].dessiner(couleur);                 // voie
                                                 // for (Forme f : retraits) f.dessiner(GRIS_FOND);// dessin des retraits
  }
 
  Pave manoeuvrer(boolean b) {                   // pour manoeuvres par clic
    switch (feu) {
      case ROUGE:  feu=VERT; break;
      case VERT:   feu=ROUGE; break;
      case VIOLET: feu=BLANC; break;
      case BLANC:  feu=VIOLET ; break;
      case ROUGE_FONCE:  feu=JAUNE; break;
      case JAUNE:   feu=ROUGE_FONCE; break;
     
    }
    return this;
  }
}

De ce fait, j'ai remplacé les termes "PaveSignal" par "PaveBiaisSignal", afin de pouvoir mettre un signal pour un PaveBiais mais il n'est pas reconnu dans l'onglet "TCO"
J'ai dû faire une grosse erreur, qu'en pensez-vous?
Cordialement Dominique,


Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #9 le: avril 20, 2023, 08:40:30 am »
Bonjour

Le problème est plus compliqué que vous pensez. Il faut tout tourner de 45°, les 3 formes du constructeur :
- la première est une liste de coordonnées (x,y) du dessin du mat et de la cible
- la deuxième est un rond pour le feu, cela pourrait être fait comme pour le feu du butoir avec un point
- la troisième c'est facile en utilisant la forme Biais

Je ne l'ai pas fait pour l'article car c'est assez fastidieux à faire, mais vous pouvez essayer.

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #10 le: avril 20, 2023, 10:18:27 am »
Bonjour Pierre,
parfois on ne se rend pas compte de certaines difficultés de la programmation. Vous avez une telle facilité de faire et une grande gentillesse à répondre aux personnes comme moi, "chapeau". Mais j'ai trouvé la solution, j'ai ajouté un "PaveDroit" de "Signal" et c'est bon.
....autres questions;
1/
passage à niveau:
création d'un signal rouge clignotant (case ROUGE feu=GRIS; break; mon feu rouge se trouve à droite au lieu de gauche et le clignotant rouge, je ne sais pas le faire si cela est possible. Il me manquera juste le bouton poussoir de commande "PN" sur le tco (il me semble qu'il y a un article).

class PaveSignalPn extends Pave {
  int feu;                                        // couleur du feu pour le tco

  PaveSignalPn(int f) {                            // constructeur
    super(new FormeSimple(),                       // coordonnées de la cible
          new FormeFeu(),
          new FormeDroit());
    feu=f;
  }

  void dessiner() {
    formes[1].dessiner(GRIS_FONCE);              // cible
    formes[1].dessiner(feu);                    // feu
    formes[2].dessiner(couleur);                 // voie
                                                 // for (Forme f : retraits) f.dessiner(GRIS_FOND);// dessin des retraits
  }
 
  Pave manoeuvrer(boolean b) {                   // pour manoeuvres par clic
    switch (feu) {
      case ROUGE:  feu=GRIS; break;
      case GRIS:   feu=ROUGE; break;
     
    }
    return this;
  }
}

2/
j'ai mis en jaune l'aiguille déviée (autre forme), cela me semble plus lisible et les butoirs sont aussi jaunes (autre forme)
est-il possible de mettre les butoirs en noir ?

  Pave manoeuvrer() { manoeuvrer(false); return this; }                    // manoeuvre des aiguilles simples
  Pave manoeuvrer(boolean b) { return this; }                              // manoeuvre des aiguilles doubles (TJD TJS triple)
 
  void dessiner() { int l;                                                 // dessin du pave
    l=formes.length;                                                       // le nombre de formes
    for (int i=0; i<l; i++) {                                              // pour toutes les formes
      if (i==l-1) formes.dessiner(GRIS);                                // la derniere forme (gris ou autre)     
      else        formes.dessiner(JAUNE);                               // les autres formes (Jaune)
    }
  }
 
  void colorer(int c) { couleur=c; }                                       // coloration du pave (pour occupation et itineraires)
}


Cordialement
Dominique


Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #11 le: avril 20, 2023, 04:06:46 pm »
Bonjour à tous,
en complément du "PaveDroitZone" réalisé par Pierre et utilisable sur la ligne, j'ai fait celui qui est utilisable pour la colonne:

class PaveDroitColonneZone extends PaveDroit {
  boolean occupe=false;
 
  Pave manoeuvrer(boolean b) { occupe=!occupe; return this; }

  void dessiner() {
    super.dessiner();
    pushStyle();
    strokeWeight(ZOOM/3); strokeCap(SQUARE);
    if (occupe) stroke(ROUGE); else stroke(JAUNE);  // couleur des signaux
    line(4.5,1, 4.5,8);
    popStyle();
  }
}

Si cela peut aider,
Cordialement
Dominique

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #12 le: avril 20, 2023, 06:14:09 pm »
Bonjour

Pour le clignotement mettre ceci :
boolean cli=false; // bascule
int temps=0; // ancien temps

void draw() {
  if (millis()-temps>=500) { cli=!cli; temps=millis(); } // bascule toutes les 1/2 secondes (500 ms)
  // ...
au début du draw()

Utilisation if (cli) ...JAUNE...; else ...ROUGE...;

Pierre

Dom59

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #13 le: avril 20, 2023, 07:48:22 pm »
bonjour Pierre,
j'ai mis la formule concernant le clic mais j'ai dû zapper quelque chose ... dans l'onglet "Paves",

class PaveSignalPn extends Pave {
  int feuPn;                                        // couleur du feu pour le tco

  PaveSignalPn(int f) {                            // constructeur
    super(new FormeSimple(),                       // coordonnées de la cible
          new FormeFeu(),
          new FormeDroit());
    feuPn=f;
  }

  void dessiner() {
    formes[1].dessiner(GRIS_FONCE);              // cible
    formes[1].dessiner(feuPn);                    // feu
    formes[2].dessiner(couleur);                 // voie
                                                 // for (Forme f : retraits) f.dessiner(GRIS_FOND);// dessin des retraits
  }
 
   boolean cli=false;           // bascule
 int temps=0;                  // ancien temps

 void draw() {
  if (millis()-temps>=500) { cli=!cli; temps=millis(); }       // bascule toutes les 1/2 secondes (500 ms)
  // ...
   
 }
 
  Pave manoeuvrer(boolean b) {                   // pour manoeuvres par clic
    switch (feuPn) {
      case ROUGE:  feuPn=GRIS; break;
      case GRIS:   feuPn=ROUGE; break;
     
    }
    return this;
  }
}

Cordialement
 Dominique,


Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : TCO avec Processing 4.2
« Réponse #14 le: avril 21, 2023, 09:50:32 am »
Bonjour

C'est la fonction draw() du premier onglet qui doit être légèrement modifiée avec le code fourni.

Pour faire clignoter le feu :

  if(cli) formes[1].dessiner(GRIS);  else formes[1].dessiner(feuPn);                    // feu

ou

  formes[1].dessiner(cli?GRIS:feuPn);   // feu

Pour éteindre le feu :   feuPn=GRIS    dans manoeuvrer()
Pour allumer le feu :   feuPn=couleur   dans manoeuvrer()

Pierre