Table des matières
-
Ce document est conçu comme un recueil commenté d’exemples “simples”
de sorties graphiques obtenues avec le nouveau mode graphique de Scilab. Il
permet de découvrir l’existence de certaines commandes Scilab et leur domaine
d’utilisation, mais la lecture de ce document ne peut remplacer la lecture de l’aide
en ligne pour une utilisation optimale des commandes décrites. En particulier, ce
document décrit la plupart des entités graphiques (handle) mais seulement un petit
nombre des propriétés graphiques associées à chacune de ces entités. Ces propriétés
sont décrites de manières exhaustive dans l’aide en ligne de Scilab. |
1 Le “nouveau” mode graphique
Depuis sa création Scilab possède un certain nombre de possibilité d’affichages
graphiques dont la gestion a considérablement évoluée avec l’apparition d’un nouveau
mode graphique (voir [3] et [1]). D’un point de vue chronologique, les graphiques de
Scilab reposaient encore sur l’ancien mode graphique jusqu’aux versions 3.x, le nouveau
mode graphique n’étant encore qu’optionnel. Ensuite dans les versions 4.x de Scilab le
nouveau mode graphique est devenu le mode par défaut, mais une certaine compatibilité
avec les fonctionnalités de l’ancien mode graphique avait été conservée. À partir de la
version 5.0 l’ancien mode graphique est devenu totalement obsolète entraînant la
disparition de certaines fonctions très utilisées comme xset, xget, xdel ou
xbasc().
1.1 Les variables de type handle
Le nouveau mode graphique gère maintenant la mémorisation des entités graphiques
selon un modèle hiérarchique : chaque entité va posséder des propriétés ainsi que des
parents ou des descendants, certaines propriétés des descendants étant directement
hérités des propriétés du parent. Cette description est étroitement associée à un
nouveau type de variable Scilab : le type handle. Ce type de variable permet de
stocker les propriétés d’un objets graphique et de pointer vers ses descendants
(littéralement c’est un “pointeur”). Il y a plusieurs types à considérer dans l’ordre
hiérarchique :
- il y a d’abord le handle Figure, qui contient des informations sur la fenêtre
graphique (taille positionnement, mode d’affichage . . .)
- il y a ensuite le handle Axes, qui contient des informations sur les axes (échelles
et graduations qui apparaissent dans la fenêtre)
- viennent ensuite les objets graphiques de base qui composent la figure :
Polyline, Rectangle, Arc, Segs . . .qui peuvent aussi être agrégés grâce au
handle Compound pour former des objets plus complexes.
L’intérêt du nouveau mode graphique est de pouvoir modifier les propriétés de ces
différents objets après leur création (et tant que la fenêtre graphique n’a pas
été détruite ou effacée). Prenons l’exemple du graphique de démonstration de
plot2d :
-->plot2d()
Demo of plot2d()
========================================
x=(0:0.1:2*%pi)';
plot2d(x,[sin(x),sin(2*x),sin(3*x)],style=[-1,-2,3]);
-->get("current_figure")// handle figure courante (pas stocké)
ans =
Handle of type "Figure" with properties:
========================================
children: "Axes"
figure_style = "new"
figure_position = [27,35]
figure_size = [610,461]
axes_size = [610,461]
auto_resize = "on"
figure_name = "Scilab Graphic (%d)"
figure_id = 0
color_map= matrix 32x3
pixmap = "off"
pixel_drawing_mode = "copy"
immediate_drawing = "on"
background = -2
visible = "on"
rotation_style = "unary"
user_data = []
-->f=gcf();//figure courante (stocké dans f)
-->typeof(f)//type handle
ans =
handle
Pour agir sur la figure il faut d’abord récupérer son handle, c’est ce permet de faire la
commande get("current_axes"). Le contenu du handle s’affiche, ce qui donne une idée
de la quantité d’informations stockés dans une variable de type handle ! Pour pouvoir
manipuler le handle il est plus pratique de le stocker dans une variable, c’est ce qu’on fait
avec l’instruction f=gcf(), où gcf est un des nombreux raccourcis de la fonction
get :
- gcf() pour get("current_figure")
- gca() pour get("current_axes")
- gce() pour get("current_entities")
- gdf() pour get("default_figure")
- gda() pour get("default_axes")
Comme Scilab permet de gérer plusieurs fenêtres graphiques en même temps on
peut avoir besoin de sélectionner ou de modifier la fenêtre graphique courante
dont on veut récupérer le handle. On a pour cela plusieurs fonctions à notre
disposition :
- winsid permet de lister les fenêtres graphiques existantes
- xselect permet de mettre en avant la fenêtre graphique courante
- scf permet de définir une fenêtre comme fenêtre graphique courante via, par
exemple, son handle ou son numéro (récupéré par winsid) et, dans ce cas, on
peut ensuite récupérer son handle.
on pourra étudier les exemples suivants pour comprendre la manipulation de ces
fonctions :
-->clf()
-->plot2d();//fenêtre 0
Demo of plot2d()
========================================
x=(0:0.1:2*%pi)';
plot2d(x,[sin(x),sin(2*x),sin(3*x)],style=[-1,-2,3]);
-->id=winsid()//liste des fenêtres
id =
0.
-->old=id($)//numéro de la dernière fenêtre
old =
0.
-->new=old+1//numéro de la prochaine fenêtre
new =
1.
-->f=scf(new);//crée une nouvelle fenêtre (n=1)
-->plot3d();//s'affiche dans la nouvelle fenêtre courante (n=1)
Demo of plot3d()
========================================
t=-%pi:0.3:%pi;plot3d(t,t,sin(t)'*cos(t),35,45,'X@Y@Z',[2,2,4]);
-->winsid()//nouvelle liste des fenêtres
ans =
0. 1.
-->scf(old);//on change la fenêtre courante (n=0)
-->xselect()//mise en avant de la fenêtre courante (n=0)
-->delete(f)//destruction de la fenêtres de f (n=1)
1.2 Manipulations des propriétés d’un handle
Une variable de type handle est donc constituée de nombreuses propriétés dont il va
falloir récupérer ou modifier les valeurs pour modifier l’aspect d’un graphique.
Pour s’y retrouver Scilab possède une interface graphique pour naviguer dans
l’arborescence des pointeurs graphiques. On y accède depuis le menu « Editer»de la
fenêtre graphique, via l’onglet « propriété de la figure ». Reprenons l’exemple
de la figure de démonstration de plot2d. En naviguant dans l’arborescence
visible dans la partie gauche de l’éditeur (cf. FIG.1) on constate que la Figure
courante possède pour descendant un objet Axes qui possède pour descendant
une entité compound qui possède pour descendants trois objets Polyline qui
sont en fait les trois courbes sin