Apprendre à programmer en TCL sous Audela en 12 minutes

Apprendre à programmer en TCL sous Audela en 12 minutes


Je vous propose d'apprendre ce language à la base des scripts sous Audela en 12 leçons durant 12 minutes !
Télécharger le script des leçons ici.

Le sauver dans votre répertoire de Documents (and settings) par exemple.
Charger le script en mémoire : menu Fichier/Lancer script, puis naviguer sur votre disque jusqu'au fichier tutoriel_tcl.tcl.

Ce fichier de script possède l'extension .tcl : son contenu est du langage tcl.
Il contient plusieurs fonctions, c'est-à-dire une commande appelable par exemple depuis la console Audela.

  1. Executons la première fonction : elle s'appelle premier
    Code TCL de la fonction Console Audela
    #-- Affichage 1 :

    proc premier {} {

    #- Variables d'environnement d'Audela (chemin du rép images, tec.)

    global audace

    global conf

    set message "Hello world !"

    ::console::affiche_resultat "$message"

    }

    premier
    #

    Rien ne s'affiche : il manque un retour à la ligne à la fin du message à afficher.
    Tout ce qui est précédé d'un "#" dans le code sera du commentaire.
    Les noms de variables sont repérables avec un "$" devant.
  2. La deuxième fonction corrige le tir et s'appelle... deuxieme :
    Code TCL de la fonction Console Audela
    #-- Affichage 2 :

    proc second {} {

    #- Variables d'environnement d'Audela (chemin du rép images, etc.)

    global audace

    global conf

    set message "Hello world !"

    ::console::affiche_resultat "$message\n"

    }

    deuxieme
    # Hello world !
  3. troisieme : savoir compter
    Code TCL de la fonction Console Audela
    proc troisieme {} {

    #- Variables d'environnement d'Audela (chemin du rép images, tec.)

    global audace

    global conf

    set resultat [ expr 2+2 ]

    ::console::affiche_resultat "Je sais compter : 2+2=$resultat\n"

    }

    troisieme
    # Je sais compter : 2+2=4
  4. quatrieme : gérer un argument
    Code TCL de la fonction Console Audela
    proc quatrieme { args } {

    global audace conf

    ::console::affiche_resultat "Je sais saisir un argument : $args\n"

    }

    quatrieme Dupond
    # Je sais saisir un argument : Dupond
  5. cinquieme : manipuler une liste
    Code TCL de la fonction Console Audela
    proc cinquieme { args } {

    global audace conf

    set toto 1

    set titi 2

    set maliste [ list $toto $titi ]

    ::console::affiche_resultat "Contenu de la liste : $maliste\n"

    set element2 [ lindex $maliste 1 ]

    ::console::affiche_resultat "2ième élément de la liste : $element2\n"

    }

    cinquieme
    # Contenu de la liste : {1,2}
    # 2ième élément de la liste : 2
    Remarque : la numéroation des éléments d'une liste commence à 0. Celle des pixels d'une image commence à 1.
  6. sixieme : gérer plusieurs arguments
    Code TCL de la fonction Console Audela
    proc sixieme { args } {

    global audace conf

    set arg1 [ lindex $args 0 ]

    set arg2 [ lindex $args 1 ]

    ::console::affiche_resultat "Premier arg : $arg1 - 2ieme arg : $arg2\n"

    }

    sixieme Dupond Dupont
    # Premier arg : Dupond - 2ieme arg : Dupont
  7. septieme : charger une image dans AudACE et l'exploiter
    Code TCL de la fonction Console Audela
    proc septieme { args } {

    global audace conf

    set fichier [ lindex $args 0 ]

    ::console::affiche_resultat "Affichage de l'image...\n"

    loadima $fichier

    #- Largeur de l'image FITS contenue dans le mot clef NAXIS de l'entete du fichier FITS :

    buf$audace(bufNo) load "$audace(rep_images)/$fichier"

    set naxis1 [lindex [buf$audace(bufNo) getkwd "NAXIS1"] 1]

    ::console::affiche_resultat "Largeur de l'image : $naxis1\n"

    }

    septieme mon_fichier.fit
    #Affichage de l'image...
    #Largeur de l'image : 768
  8. huitieme : boucle conditionnelle
    Code TCL de la fonction Console Audela
    proc huitieme { args } {

    global audace conf

    set mavaleur 2

    if { $mavaleur==1 } {

      ::console::affiche_resultat "Mavaleur égale 1\n"

    } elseif { $mavaleur>=2 } {

      ::console::affiche_resultat "Mavaleur supérieure ou égale à 2\n"

    } else {

      ::console::affiche_resultat "Mavaleur autre\n"

    }

    }

    huitieme
    #Mavaleur supérieure ou égale à 2
  9. neufieme : boucle
    Code TCL de la fonction Console Audela
    proc neufieme { args } {

    global audace conf

    #-- Méthode 1 :

    set nb_elements [ llength $args ]

    for {set i 0} {$i<$nb_elements} {incr i} {

      set element [ lindex $args $i ]

      ::console::affiche_resultat "Élément $i de la liste : $element\n"

    }

    #-- Méthode 2 :

    set k 1

    foreach element $args {

      ::console::affiche_resultat "Élément $i de la liste : $element\n"

      incr k

    }

    }

    neufieme Toto Titi Tata
    #Élément 0 de la liste : Toto
    #Élément 1 de la liste : Titi
    #Élément 2 de la liste : Tata

    #Élément 1 de la liste : Toto
    #Élément 2 de la liste : Titi
    #Élément 3 de la liste : Tata
  10. dixieme : nourrir une liste
    Code TCL de la fonction Console Audela
    proc dixieme {} {

    global audace conf

    set n 10

    #-- maliste contiendra 11 valeurs x^2 :

    for {set i 0} {$i<=$n} {incr i} {

      lappend maliste [ expr pow($i,2) ]

    }

    #-- Affichage des éléments de la liste :

    set j 0

    foreach val $maliste {

      ::console::affiche_resultat "Le carré de $j est $val\n"

    }

    }

    dixieme
    #Le carré de 0 est 0
    #Le carré de 1 est 1
    ...
    #Le carré de 10 est 100
  11. onzieme : opération sur les images dans AudeLA
    Code TCL de la fonction Console Audela
    proc onzieme { args } {

    global audace conf

    set fichier1 [ lindex $args 0 ]

    set fichier2 [ lindex $args 1 ]

    ::console::affiche_resultat "Affichage de la 1iere image...\n"

    loadima $fichier1

    #- Soustraction des 2 images (de meme dimension) :

    ::console::affiche_resultat "Soustraction des 2 images...\n"

    buf$audace(bufNo) load "$audace(rep_images)/$fichier1"

    buf$audace(bufNo) sub "$audace(rep_images)/$fichier2" 0

    buf$audace(bufNo) save "$audace(rep_images)/soustraction_2images"

    ::console::affiche_resultat "Soustraction des 2 images sauvée sous soustraction_2images$conf(extension,defaut)\n"

    }

    onzieme fichier1.fit fichier2.fit
    #Affichage de la 1iere image...
    #Soustraction des 2 images...
    #Soustraction des 2 images sauvée sous soustraction_2images.fit
  12. douzieme : traitement d'un lot d'image présent dans le répertoire de travail : découpage d'une zone repérée par coin inf gauche te coin sup droit
    Code TCL de la fonction Console Audela
    proc douzieme {} {

    global audace conf

    set listefichiers [ lsort -dictionary [ glob -dir $audace(rep_images) -tail *$conf(extension,defaut) ] ]

    foreach fichier $listefichiers {

      ::console::affiche_resultat "Traitement de $fichier...\n"

      buf2 load $audace(rep_images)/$fichier

      buf2 window { 50 50 700 480 }

      buf2 save $audace(rep_images)/$fichier

    }

    }

    douzieme
    #Traitement de fichier1.fit
    #Traitement de fichier2.fit
    #Traitement de fichier3.fit



 Quelques scripts utiles :