right up left contents index
Précédent: "Exemples d'appels"
Suivant: "Deuxième exemple"
Haut: "Exemples d'appels"

Premier exemple

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;
}
right up left contents index
Précédent: "Exemples d'appels"
Suivant: "Deuxième exemple"
Haut: "Exemples d'appels"