Le module modxdraw
Le module modxdraw fournit une interface simple (pour ne pas dire simplissime)
avec X11. Sur Ensibull, ce module est permanent.
Exemple d'utilisation:
(draw_createwindow "toto" 500 600 10 100 (new_window))
(draw_line 10 10 100 60 3) ;; couleur initiale - noir
(draw_flush) ;; vider buffer - le dessin apparait completement
(draw_filledrect 110 70 220 140)
(draw_ellipse 200 250 20 20 4.0 100 1)
(draw_text 310 420 "Ceci est un exemple") ;; police 6x11
(draw_line 310 422 424 422 1)
(draw_rect 305 405 430 425 2)
(draw_flush)
(draw_clearwindow)
(draw_set_color 0) ;; pour le blanc
Si on veut travailler avec plusieurs fenêtres, il faut appeler
draw_createwindow plusieurs fois, en gardant le résultat.
Avec draw_changewindow on peut modifier la fenêtre courante dans
laquelle travaillent toutes les fonctions du module.
(define fen1 (draw_createwindow "toto" 500 600 10 100 (new_window)))
(define fen2 (draw_createwindow "titi" 400 500 100 100 (new_window)))
;; fen2 est la fenêtre courante
...
(draw_changewindow fen1) ; on passe à fen1
etc.
========================================
Les fonctions définies en Scheme sont le reflêt exact des prototypes C
ci-après. Voir plus loin pour une expliquation des paramètres.
int new_window (void);
int draw_createwindow (char *, int, int, int, int, int);
int draw_changewindow (int);
int draw_clearwindow (void);
int draw_closewindow (void);
int draw_pixel (int, int);
int draw_line (int, int, int, int, int);
int draw_cross (int, int, int, int);
int draw_rect (int, int, int, int, int);
int draw_circle (int, int, int, int);
int draw_ellipse (int, int, int, int, double, int, int);
int draw_int (int, int, int);
int draw_text (int, int, char *);
int draw_filledrect (int, int, int, int);
int draw_erasepixel (int, int);
int draw_eraseline (int, int, int, int, int);
int draw_eraserect (int, int, int, int, int);
int draw_eraseellipse (int, int, int, int, double, int, int);
int draw_bary (BARY *, int, int);
void draw_set_color (int);
int draw_modenormal (void);
int draw_modexor (void);
int draw_modeor (void);
void draw_flush (void);
void draw_xsync (void);
ScVal draw_cursor_coord (void);
NB: fichiers Ravi.
Le module modxdraw est généré à partir de $RAVIREP/Modules/Src/modxdraw.ph
Il utilise des bibliothèques généré à partir de $RAVIHOME/LibSrc,
cf. le répertoire $RAVIHOME/LibSrc/Xgraphics2.
Le module modxdraw est une adaptation pour Ravi d'un module utilisé
depuis fort longtemps au Lifia; son histoire remonte à Emmanuel Arbogast.
Les commentaires ci-après donnent toutes les informations nécessaires
pour l'emploi sous Scheme. Il s'agit du fichier
$RAVIHOME/LibSrc/Xgraphics2/Include/xdraw.h
/**********************************************************************/
/* File xdraw.h */
/**********************************************************************/
/* libxgraphics.a is a library developped for quickly displaying simple
* monochrome graphics under X Windows.
* It was developped by Emmanuel Arbogast, as an extension on a
* package called tgif (Trivial Graphic Interface Functions).
*
* This file provided for non ANSI C compiler, such as SUN cc.
*
* Changelog:
* 12/7/90: first installed on helios (LIFIA).
**************************************************************************/
#include <vision/ary.h>
/*************************************************************************/
/* Definitions */
/*************************************************************************/
#define FALSE 0
#define TRUE !FALSE
#define UNUSED FALSE
#define WHITE 0
#define BLACK 1
#define RED 2
#define GREEN 3
#define BLUE 4
#define YELLOW 5
#define MAGENTA 6
#define CYAN 7
#define NB_TGIF_COLORS 8
#ifndef boolean
#define boolean int
#endif
/* +--------------------------------------+
| +--------------------------> x |
| | |
| | |
| | |
| | (repere fenetre par defaut) |
| | |
| | |
|\/ y |
+--------------------------------------+
*/
typedef struct {
int x;
int y;
} Point2D;
/*************************************************************************/
/* Fonctions externes */
/*************************************************************************/
/* Prochain index de fenetre utilisable */
extern int new_window();
/* Creation d'une fenetre graphique */
extern int draw_createwindow (/*
char *titlestr, // Titre de la fenetre
int width, // largeur fenetre en pixel
int height, // hauteur fenetre en pixel
int x, // coordonnee pixel en x
int y, // coordonnee pixel en x
int index // numero de la fenetre */);
/* Change de fenetre courante */
extern boolean draw_changewindow (/*
int WantedWinIndex */); /* numero de la nouvelle fenetre
courante */
/* Effacement complet de la fenetre courante */
extern boolean draw_clearwindow ();
/* Fermeture definitive de la fenetre courante */
extern boolean draw_closewindow ();
/* Affiche un pixel */
extern boolean draw_pixel (/* int x, // coordonnee pixel en x du point
int y */); /* coordonnee pixel en y du point */
/* Affiche une ligne pleine entre deux points */
extern boolean draw_line (/* int x1, // coordonnee pixel en x du point 1
int y1, // coordonnee pixel en y du point 1
int x2, // coordonnee pixel en x du point 2
int y2, // coordonnee pixel en y du point 2
int thickness // epaisseur de la ligne */);
/* Affiche une croix */
extern boolean draw_cross (/* int x, // coordonnee pixel en x du centre
int y, // coordonnee pixel en y du centre
int length, // longueur du trait
int thickness */); /* epaisseur des lignes */
/* Affiche le contour d'un rectangle */
extern boolean draw_rect (/* int x1, // coordonnee pixel en x du coin
haut-gauche
int y1, // coordonnee pixel en y du coin
haut-gauche
int x2, // coordonnee pixel en x du coin
bas-droit
int y2, // coordonnee pixel en y du coin
bas-droit
int thickness */); /* epaisseur des traits */
/* Affiche le contour d'un cercle */
extern boolean draw_circle (/* int x, // coordonnee pixel en x du centre
int y, // coordonnee pixel en y du centre
int rayon, // Rayon du cercle
int thickness */); /* epaisseur du trait */
/* Affiche le contour d'une ellipse */
extern boolean draw_ellipse (/* int x, // coordonnee pixel en x du centre
int y, // coordonnee pixel en y du centre
int a, // Taille en pixel du grand axe
int b, // Taille en pixel du petit axe
double theta, // Angle en radian entre l'axe
des x et le grand axe
int N, // nombre de segments pour
l'approximation
int thickness */); /* Epaisseur du trait */
/* Affiche un entier */
extern boolean draw_int(/* int x1, // coordonnee pixel en x
int x2, // coordonnee pixel en x
int num // numero a afficher */);
/* Affiche du texte */
extern boolean draw_text (/* int x, // coordonnee pixel en x du coin
bas-gauche du texte
int y, // coordonnee pixel en y du coin
bas-gauche du texte
char* TextToWrite */); /* Texte a afficher */
/* Affiche un rectangle plein */
extern boolean draw_filledrect (/* int x1, // coordonnee pixel en x du coin
haut-gauche
int y1, // coordonnee pixel en y du coin
haut-gauche
int x2, // coordonnee pixel en x du coin
bas-droit
int y2 // coordonnee pixel en y du coin
bas-droit */);
/* Efface un pixel precedemment trace */
extern boolean draw_erasepixel(/* int x, // coordonnee pixel en x du point
int y // coordonnee pixel y du point */);
/* Efface une ligne precedemment tracee */
extern boolean draw_eraseline (/*int x1, // coordonnee pixel en x du point 1
int y1, // coordonnee pixel en y du point 1
int x2, // coordonnee pixel en x du point 2
int y2, // coordonnee pixel en y du point 2
int thickness // epaisseur de la ligne */);
/* Efface le contour d'un rectangle precedemment trace */
extern boolean draw_eraserect (/*int x1, // coordonnee pixel en x du coin
haut-gauche
int y1, // coordonnee pixel en y du coin
haut-gauche
int x2, // coordonnee pixel en x du coin
bas-droit
int y2, // coordonnee pixel en y du coin
bas-droit
int thickness */); /* epaisseur des traits */
/* Efface une ellipse precedemment tracee */
extern boolean draw_eraseellipse (/*int x, // coordonnee pixel en x du centre
int y, // coordonnee pixel en y du centre
int a, // Taille en pixel du grand axe
int b, // Taille en pixel du petit axe
double theta, // Angle en radian entre axe
des x et le grand axe
int N, // nombre de segments pour
l'approximation
int thickness // Epaisseur du trait */);
/* Recupere les coordonnees souris au prochain click d'un des boutons */
/* Le Point2D* retourne a ete alloue dynamiquement, et doit etre detruit
par les soins de l'utilisateur */
extern Point2D* get_cursor_coord();
/* Affiche une image de unsigned char */
extern boolean draw_bary (/* BARY* bary, // Image a afficher
int x, // Coordonnee x du point
// haut-gauche ou afficher
int y // Coordonnee y du point
// haut-gauche ou afficher */);
/**********************************************************************/
/* Changement de modes graphiques: normal, ou, ou_exclusif et couleur */
/**********************************************************************/
/* Changement de couleur du contexte graphique courant */
extern void draw_set_color(/*int color*/);
/* Passage en mode normal (trace par mise a 1 des pixels) */
extern boolean draw_modenormal();
/* Passage en mode ou exclusif (ou excusif avec le pixel deja sur ecran) */
/* Un affichage double en mode xor restaure le contexte d'avant => nop */
extern boolean draw_modexor ();
/* Passage en mode ou (ou avec le pixel deja sur ecran) */
extern boolean draw_modeor ();
#endif
|