image

 . Description: Scilab est un logiciel libre de calcul numérique développé depuis 1990 par l'INRIA
   et l'ENPC. Il est actuellement maintenu et développé par le Consortium Scilab. Il inclut des
   centaines de fonctions mathématiques et il est disribué avec une vingtaine de boîtes à outils.
   Scilab embarque un interpréteur Tcl-Tk qui lui permet d'évaluer des commandes.
   Il dispose aussi d'un éditeur (Scipad) développé avec Tcl-Tk.
 . Plate-forme: Linux, Solaris, HP-UX, IRIX, FreeBSD et Win 9x/NT/2000/XP
 . Licence: Opensource spécifique
 . Site: http://www.scilab.org/

GS (051217) Voici un exemple simple de l'utilisation de Tcl-Tk avec Scilab. L'interpréteur Tcl-Tk n'est pas directement accessible en ligne de commande au prompt de Scilab. En fait Scilab évalue des commandes à l'aide de la fonction ScilabEval [1].

Il y a 3 fichiers (run.sce, distance.sci, gui.tcl).

On utilise la fonction Scilab TK_EvalFile pour afficher l'interface graphique. Celle-ci fait appel à une fonction Scilab qui recalcule une distance (function distance()) à chaque fois que l'on bouge un des sliders.

Pour faire un test, il suffit de placer les 3 fichiers dans un même répertoire. Ensuite on lance Scilab et on va dans le répertoire où se trouve les fichiers en entrant au prompt de Scilab:

  cd <le répertoire>

Ensuite on entre la commande:

  exec ('run.sce')

et l'interface doit s'afficher.


Le fichier run.sce:

  // run.sce
  exec distance.sci;
  TK_EvalFile('gui.tcl');

Le fichier distance.sci:

  // distance.sci
  function dist = distance(x,y,z)
    dist = sqrt(x*x + y*y + z*z)
  endfunction

Et le code Tcl-Tk:

  # gui.tcl
  global x y z dist

  set x 10
  set y 10
  set z 10
  set dist " "

  toplevel .w
  scale .w.scx -from 0 -to 200 -length 200 -resolution 1 -label "X" \
               -orient horiz -bd 1 -showvalue true -variable x \
               -command ComputeDistance
  scale .w.scy -from 0 -to 200 -length 200 -resolution 1 -label "Y" \
               -orient horiz -bd 1 -showvalue true -variable y \
               -command ComputeDistance
  scale .w.scz -from 0 -to 200 -length 200 -resolution 1 -label "Z" \
               -orient horiz -bd 1 -showvalue true -variable z \
               -command ComputeDistance

  label .w.lt -text Distance
  label .w.ldist -textvariable dist -bg lightblue
  eval pack [winfo children .w]

  proc ComputeDistance {w} {
    global x y z dist
    ScilabEval "dist = distance($x,$y,$z);TK_SetVar('dist',string(dist));"
  }