L'exemple ci-dessous envoit une courbe dans Narcisse, puis 10 courbes ensembles avec une configuration succinte associé.
On demande ensuite des coordonnées.
Enfin, on renvoit une courbe.
#ifndef lint static char sccsid[] = "%W% %G% P. Brochard"; #endif #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include "narcisse.h" /* ====> M A I N <==== */ int main(int argc,char** argv) { /* exemple de trace de courbes + configuration pour Narcisse */ #define nc 10 #define nt 1000 float x[nt]; float y[nt]; int nx[nc]; unsigned i = 0,j = 0,k = 0; unsigned pas = 2*nt/nc/(nc+1); SPXFILE* spx_file = NULL; /* declarations et init tableau de configuration */ SpxArg spx_arg[10]; unsigned n = 0; SpxInitArg(spx_arg,10); /* on remplit le tableau de configuration */ SpxSetArgInt(&spx_arg[n],"option_3d",127);n++; /* le mot cle "calcul_socket" debranche (0) ou rebranche (1) le trace automatique effectue par Narcisse lors des appels SpxSetValues, SpxMonoCourbe, SpxMulCourbe, SpxNonStruc4d, SpxRect3d, SpxRect4d, SpxTetra3d, SpxTetra4d */ SpxSetArgInt(&spx_arg[n],"calcul_socket",0);n++; SpxSetArgReel(&spx_arg[n],"courbe_label_x_min",0.91);n++; SpxSetArgChar(&spx_arg[n],"titre_valeur_gauche","yyy");n++; /* les tableaux sont remplis indices par indices ; les arguments sont : 1-> structure dans laquelle SpxSetArg* range les elements de configuration 2-> mot cle auquel on veut affecter une valeur 3-> valeur a mettre dans l'indice du tableau donne par le 4ieme argument 4-> indice */ SpxSetArgTabInt(&spx_arg[n],"texte_couleur",6,2); SpxSetArgTabInt(&spx_arg[n],"texte_couleur",3,0); SpxSetArgTabInt(&spx_arg[n],"texte_couleur",34,3);n++; SpxSetArgTabReel(&spx_arg[n],"texte_pos_x",0.01,2);n++; SpxSetArgTabChar(&spx_arg[n],"texte_valeur","essai texte",5); SpxSetArgTabChar(&spx_arg[n],"texte_valeur","essai texte2",2); n++; /* on ouvre un fichier (ici socket) */ spx_file = SpxOpen(" "); /* on envoit la configuration dans le fichier ouvert (ici socket) */ SpxSetValues(spx_file,spx_arg,n); /* on genere nc courbes */ for(i=0;i<nc;i++) { nx[i] = pas*i + pas; } for(i=0,k=0;i<nc;i++) { for(j=0;j<nx[i];j++,k++) { x[k] = j*j + 100 * i; y[k] = j; } } /*on envoit 1 courbe dans le fichier ouvert (ici socket)*/ SpxMonoCourbe(x,y,nx[0],spx_file); /* on nettoie le tableau de configuration */ SpxPurgeArg(spx_arg,10);n=0; /* on le remplit a nouveau pour declencher le trace avec Narcisse */ SpxSetArgInt(&spx_arg[n],"calcul_socket",1);n++; /* on envoit la configuration dans le fichier ouvert (ici socket) */ SpxSetValues(spx_file,spx_arg,n); /* on envoit toutes les courbes dans le fichier ouvert */ /* (ici socket)*/ SpxMulCourbe(x,y,nx,nc,spx_file); /* on synchronise (on attend que Narcisse ait fini pour garantir l'ordre de traitement par Narcisse) */ SpxSync(spx_file); /* on ferme le fichier */ SpxClose(spx_file); /* on nettoie le tableau de configuration */ SpxPurgeArg(spx_arg,10); /* on cherche une coordonnee de la courbe */ { unsigned i = 0; float x = 0,y = 0; SPXFILE* spx_file = SpcOpen(" "); SpxGetCoord2d(&x,&y,spx_file); printf(" coordonnees 2d %g %g\n",x,y); SpxGetCoord(&x,&y,spx_file); printf(" coordonnees %g %g\n",x,y); SpxSync(spx_file); SpxClose(spx_file); } /* on rouvre un fichier (ici socket) */ spx_file = SpxOpen(" "); /* on envoit 1 courbe dans le fichier ouvert (ici socket) */ SpxMonoCourbe(x,y,nx[0],spx_file); /* on synchronise et on ferme le fichier */ SpxSync(spx_file); SpxClose(spx_file); return 0; }