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;
}