LOCODUINO

TCOs en Processing (1)

. Par : Pierre59

Dans l’article Processing pour nos trains on a vu comment faire des pavés pour TCO en Processing. On va généraliser ici cette méthode pour réaliser (à la demande) des TCOs. Pour faire cela proprement, on va utiliser la programmation objet. Trois objets sont nécessaires : un objet Forme qui gère les dessins élémentaires (droit, courbe, …) un (…)

Retourner à l'article

Vous répondez à :

TCOs en Processing (1) 21 décembre 2021 21:07, par Sylvain

Merci pour votre réponse,
je vous prepare cela demain
Cordialement
Sylvain

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

21 Messages

  • TCOs en Processing 5 janvier 2018 16:50, par Christian

    Cet article m’a permis de tracer le TCO de mon réseau en moins d’une heure, et celui-ci fait 11 lignes et 21 colonnes. Mon réseau est sur deux niveaux et contient 1 TJD et 7 aiguillages.

    Je vous aurais bien montré le résultat mais il ne semble pas y avoir moyen de copier une image ici, donc je le ferai dans le forum.

    Pour ceux qui veulent en faire autant, il suffit de modifier le programme que Pierre59 a fourni et :

    • changer le nombre de lignes et de colonnes dans le premier onglet
    • changer le titre du TCO dans le setup (éventuellement)
    • construire ligne par ligne le TCO en modifiant dans l’onglet TCO (cela va plus vite si on utilise le petit programme Aide1 (ouvert en simultané) pour réaliser les copier-coller qui donnent les bons pavés bien orientés).

    C’est hyper facile !

    Répondre

  • TCOs en Processing 8 janvier 2018 20:20, par trimarco232

    Bonjour,
    j’ai essayé l’exemple 1_1
    j’obtiens l’erreur "The value of the parameter b is not used"
    concernant la ligne :
    Pave manoeuvrer(boolean b) { return this; } // manoeuvre des aiguilles doubles (TJD TJS triple)

    qui veut bien m’aider, merci ?

    Répondre

  • TCOs en Processing 9 janvier 2018 09:00, par Pierre59

    Bonjour

    Ce n’est pas une erreur, juste un avertissement du compilateur (warning) sur fond orange, les erreurs sont sur fond rouge.

    En fait cette méthode sera redéfinie dans les aiguillages et dans certains cas le booléen servira.

    Pierre

    Répondre

    • TCOs en Processing 12 janvier 2018 21:58, par trimarco232

      Bonjour,
      merci Pierre pour ta réponse !

      en fait je me suis fait abuser car j’ai trouvé l’avertissement dans l’onglet "Erreurs"
      l’erreur, la vraie, est indiquée dans l’onglet "console" :
      ERROR : transport error 202 : listen failed : Permission denied
      ERROR : JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
      ERROR : JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
      JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197) : No transports initialized [debugInit.c:750]
      Using startup command : C :\Users\ // etc.

      j’ai la même erreur avec un sketch vide ... ce n’est donc pas lié à ton sketch, c’est déjà ça

      pour info, je suis sous vista, j’ai essayé avec la version 3.3.5 de processing : pareil ...

      je suis en train train de souquer ferme pour trouver la parade

      Répondre

  • TCOs en Processing 13 janvier 2018 11:48, par Pierre59

    Bonjour

    Apparemment c’est un problème de réseau. Processing cherche à se connecter à quelque chose ?

    Pierre

    Répondre

  • TCOs en Processing 14 octobre 2018 03:23, par John

    Where can I download the TCO editing program ?

    Répondre

  • TCOs en Processing 14 octobre 2018 08:55, par Pierre59

    I have no TCOs editor yet, they are "hand coded", but DDEF is working on :

    http://forum.locoduino.org/index.ph...

    Pierre

    Répondre

  • TCOs en Processing 7 février 2019 17:49, par luchet

    Bonjour
    Dans le fichier Pave d’Aide1 se trouve l’instruction suivante

    int[] SYMROT={0,3,2,1}; // table pour mes paves
    et plus loin dans ce programme on utilise rot et sym

    Pouvez vous me donner une explication sur ces variables

    Dans votre document il n’en est pas fait référence
    Merci

    Répondre

    • TCOs en Processing 7 février 2019 18:13, par Pierre59

      Bonjour

      Le tableau SYMROT sert à calculer une forme "canonique" des symétries des rotations.

      Sur un pave on peut faire des symétrie et des rotations en nombre quelconque et ordre quelconque, autrement dit on peut mélanger les symétrie et les rotations. Mais c’est deux opérations ne sont pas commutatives : une symétrie puis une rotation ne donne pas dans tous les cas la même chose qu’une rotation puis une symétrie.

      C’est pour cela qu’on calcule une forme canonique des transformations sous la forme la plus simple possible, une symétrie éventuelle suivie de rotations éventuelles, c’est cette forme canonique qui est affichée.

      Pierre

      Répondre

  • TCOs en Processing 23 février 2019 11:14, par Luchet

    Bonjour
    Dans le fichier Pave d’Aide1 se trouve la méthode

    void simplifier() {
      rot=rot%2; 
      if (sym && rot==1) { 
        sym=false; 
        rot=0;
      }
    } // 2 cas 

    et aussi dans d’autre Pavé
    mais je ne vois pas a quel endroit du programme celle-ci est appelée ??
    Pouvez vous m’éclairer a ce sujet
    Merci d’avance

    ( j’étudie ligne a ligne vos programmes pour bien les comprendre

    Répondre

    • TCOs en Processing 23 février 2019 17:59, par Pierre59

      Bonjour

      Tout se passe dans l’onglet Paves.

      Si si ! la méthode simplifier() est bien appelée, cela se fait à la ligne 27, qui appelle la méthode simplifier() de la ligne 24, bon c’est un peu plus compliqué. On est en programmation objets, la méthode simplifier() de la ligne 24 est abstraite, ce qui veut dire qu’elle n’est pas définie, mais toutes les classes concrètes qui héritent de la classe Pave doivent implémenter cette méthode, c’est le cas de toutes les classes Pavexxx (PaveDroit, PaveBiais, …). Quand la ligne 27 appelle la méthode simplifier() on appelle en fait la méthode simplifier() de l’objet concerné. Ainsi si l’objet est un PavéDroit c’est sa méthode de la ligne 64 qui est effectivement appelée, si c’est un PaveBiais c’est sa méthode de la ligne 72 qui est effectivement appelée, …

      Cela aurait pratiquement le même effet si à la ligne 24 on écrivait :
      void simplifier() {}
      la méthode est alors implémentée (elle ne fait rien), mais elle est redéfinie dans tous les pavés.

      On a ici un des mécanismes fondamentaux de la programmation objet.

      Cordialement

      Pierre59

      Répondre

  • TCOs en Processing (1) 20 décembre 2021 19:02, par Sylvain

    Bonjour et felicitation pour votre travail,
    je viens de realiser le shema de mon reseau avec la methode construire.
    Maintenant je souhaite lier l’ action de l’ aiguillage du tco a un arduino mais je n’ arrive pas a retourver la variable correspondant au clic du paves de l aiguillage 1 ou de l’ aiguillage 2 ....ect .

    Je ne connais pas la programmation "Objet" je pense que cela se passe la dans le 1er onglet :

    void mouseClicked() int l,c ; ; Pave p ;
    l=(mouseY-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la ligne
    c=(mouseX-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la colonne
    if (l<0 || l>=LIGNES || c<0 || c>=COLONNES) return ; // pas dans tco
    p=tco.paves[c][l] ; // obtension du pave
    if (p !=null) p.manoeuvrer(mouseButton==RIGHT) ; // manoeuvre des aiguilles

    mais quand je mets "println(p) ;" une valeur type : essai_tco$PaveAiguilleDroite@31d24cdf
    Est la je suis perdu car je ne sais pas comment l’ exploiter ou si il y a moyen de reprendre la variable p d’ une maniere plus simple ou je suis completement en erreur

    Bref un petit coup de pouce serait le bien venu

    Merci d’ avance
    Sylvain

    Répondre

  • TCOs en Processing (1) 20 décembre 2021 20:59, par Sylvain

    j’ ai reussi a avoir les coordonnées des paves en modifiant cette partie de code :

    void mouseClicked() int x,y ; int l,c ; ; Pave p ;
    l=(mouseY-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la ligne
    c=(mouseX-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la colonne
    x=mouseX ; y=mouseY ;
    println(x+" "+y+" "+l+" "+c) ;

    maintenant j ai les coordonnées des paves en pixel et en nb de lignes et colonnes
    je progresse tout doucement

    Répondre

  • TCOs en Processing (1) 21 décembre 2021 11:51, par Pierre59

    Bonjour

    Cet article n’a pas été prévu pour commander effectivement des aiguilles.

    Mais avec quelques modifications simples c’est tout à fait possible.

    Je vais vous aider, mais avant j’aimerais que vous envoyez une image de votre TCO pour voir quelles sont les aiguilles utilisées et leur nombre.

    Codialement

    Pierre

    Répondre

  • TCOs en Processing (1) 21 décembre 2021 21:07, par Sylvain

    Merci pour votre réponse,
    je vous prepare cela demain
    Cordialement
    Sylvain

    Répondre

  • TCOs en Processing (1) 22 décembre 2021 15:32, par Sylvain

    Bonjour,
    ci joint copie du de l’ image de mon TCO

    J’ ai ajouté des symboles de capteurs

    class FormeCapteur extends Forme
    FormeCapteur() // constructeur
    vertex(3,2, 6,2, 6,7, 3,7) ;

    et

    class PaveCapteur extends Pave
    int feu ; // couleur du capteur pour le tco

    PaveCapteur(int f) // constructeur
    super(
    new FormeCapteur(),
    new FormeDroit()) ;
    feu=f ;

    void dessiner()
    formes[0].dessiner(feu) ; // feu
    formes[1].dessiner(couleur) ; //voie

    Pave manoeuvrer(boolean b) // pour manoeuvres par clic
    switch (feu)
    case ORANGE : feu=VIOLET ; break ;
    case VIOLET : feu=ORANGE ; break ;

    return this ;

    Souhaitant réaliser une communication type serie avec un Arduino(4 caracteres comprenant un prefix ) je pense identifier
    les elements selectionné a partir de leurs coordonnées l,c à la suite de ces lignes :

    void mouseClicked() int x,y ; int l,c ; ; Pave p ;
    l=(mouseY-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la ligne
    c=(mouseX-BORDURE)/TAILLE_CASE/(int)ZOOM ; // calcul de la colonne
    x=mouseX ; y=mouseY ;

    if (l<0 || l>=LIGNES || c<0 || c>=COLONNES) return ; // pas dans tco
    p=tco.paves[c][l] ; // obtension du pave
    if (p !=null) p.manoeuvrer(mouseButton==RIGHT) ; // manoeuvre des aiguilles et signaux

    println(x " " y " " l " " c) ;
    println(p) ;

    avec des conditions type : if l==4 && c==4

    Je ne sais pas si cette methode est correcte ?

    Cordialement
    Sylvain

    Voir en ligne : TCO

    Répondre

    • TCOs en Processing (1) 22 décembre 2021 16:01, par Pierre59

      Bonjour

      J’ai eu un peu de mal à visionner le réseau.

      Voici la méthode pour les aiguilles (il faut utiliser la version 1.1) :

      • il faut ajouter une variable dans la classe PaveAiguilleSimple pour mémoriser le numéro (ou le nom de l’aiguille, par exemple avec un entier, ajouter un paramètre au constructeur et ajouter une écriture sur la ligne série dans la méthode manoeuvrer(...)

      abstract class PaveAiguilleSimple extends Pave
      int no ;
      PaveAiguilleSimple(int n,Forme... ps) super(ps) ; no=n ; // constructeur

      Pave manoeuvrer(boolean b) Forme f ;
      f=formes[0] ; formes[0]=formes[1] ; formes[1]=f ; return this ; // permutation
      serial.write(no) ; // A METTRE EN FORME !!!

      • ajouter un paramètre au constructeur :

      class PaveAiguilleDroite extends PaveAiguilleSimple
      PaveAiguilleDroite(int n) super(n,new FormeArc45(),new FormeDroit()) ; // constructeur

      • de même :

      class PaveAiguilleBiaise extends PaveAiguilleSimple
      PaveAiguilleBiaise(int n) super(n,new FormeArc45().rotation(2),new FormeBiais()) ;

      • dans le dessin du tco ajouter les bons numéros dans les appels des constructeurs d’aiguilles

      Voila c’est tout

      Cordialement

      Pierre

      Répondre

  • TCOs en Processing (1) 23 décembre 2021 12:29, par Sylvain

    Bonjour et surtout merci pour aide,
    j’ ai repris le code selon votre message, malheureusement j’ ai du loupé quelque chose.
    en remplacant le "serial.write(no)" par un "println (no) pour comprendre le fonctionnemnt j’ ai une erreur :
    "unexpected token :no"

    copie de la partie de code :

    abstract class PaveAiguilleSimple extends Pave @ // regroupement des aiguilles simples
    int no ;
    PaveAiguilleSimple(int n,Forme... ps) @ super(ps) ;no=n ; // constructeur
    @
    Pave manoeuvrer(boolean b) @Forme f ; f=formes[0] ; formes[0]=formes[1] ; formes[1]=f ; return this ;@
    // permutation
    println (no) ;

    @

    et copie du code coté "construire tco" pour aiguille n°1 :

    paves[c++][l]=new PaveAiguilleDroite(1).rotation(2) ;

    j’ai forcement faux quelque part, ou je n’ ai pas compris le fonctionnement
    lorsque je place mon "println (no) comme cela :
    PaveAiguilleSimple(int n,Forme... ps) @ super(ps) ;no=n ; // constructeur
    println (no) ;
    @

    j’ ai tous mes n° d’aiguilles qui s’ affiche en fixe mais c’ est pas cela que l’on souhaite c’ est seulement le n° de l’ aiguille manoeuvré si j’ ai bien compris le code

    Si part bonheur vous pouviez me consacrer encore un peu de temps.

    Ps : les symboles accolades ne s’ affichent pas je les ai remplace par des "@"

    Cordialement
    Sylvain

    Répondre

    • TCOs en Processing (1) 23 décembre 2021 13:06, par Pierre59

      Bonjour

      C’est une erreur de ma part, il faut mettre le println (no) avant le return this

      L’absence d’accolades est très perturbant !

      Pierre

      Répondre

  • TCOs en Processing (1) 23 décembre 2021 13:14, par Sylvain

    Nikel , ca marche
    Vous n’ avez pas a vous excuser c’est deja tres gentil de m’ aider
    Je vous remercie encore et je vous souhaite de bonnes fêtes de fin d’ année
    Cordialement
    Sylvain

    Répondre

Rubrique Programmation

Les derniers articles

Les articles les plus lus