
#ifndef __ZONES_H__
#define __ZONES_H__


#include "calculQr.h"
#include "tirages.h"


/******************************************************************************/
/* VARIABLE DE ZONES DE MATLAB                                                */
/*                                                                            */
/* Variable qui stocke, pour chaque zone de la texture, la forme de ses con-  */
/* tours, les informations sur son motif et la loi de ses multiplieurs. Dans  */
/* l'en-tete, on stocke egalement la limite entre les motifs de type shaper et*/
/* les autres dans la liste des tirages.                                      */
/******************************************************************************/

typedef struct { /* en-tete de la liste */
  unsigned char nb_zones,nb_formes,nb_ellipses,nb_shapers_quelconques;
  long indice_debut_non_shaper;
} en_tete_t;

typedef struct { /* en-tete d'une zone */
  long nb_cases_zone;
  unsigned short nb_points_controle;
  char masque,mort;
} info_zone_t;

typedef struct { /* en-tete du motif d'une zone */
  unsigned char motif,angle;
  unsigned short numero_fonction;
  long nb_parametres;
} info_motif_t;


/******************************************************************************/
/* STRUCTURE DE ZONE                                                          */
/*                                                                            */
/* Informations lues/a ecrire dans la variable Matlab des zones pour une zone */
/* donnee.                                                                    */
/******************************************************************************/

typedef struct {
  long nb_elements;
  long nb_points_controle;
  double *points_x;
  double *points_y;
  spline_t spline;
  double inf_x,sup_x,inf_y,sup_y;
  motif_t motif;
  angle_t angle;
  numero_fonction_t numero_fonction;
  long numero_motif;
  loi_t loi;
  char masque,mort;
} zone_t;


/******************************************************************************/
/* PROTOTYPES                                                                 */
/******************************************************************************/

void parametres_formes(motif_t,angle_t,forme_t *);
long lire_liste_zones(en_tete_t *,zone_t **,forme_t **,ellipse_t **,shaper_t **);
void construire_liste_zones(long,long,long,long,long,zone_t *,forme_t *,
                            ellipse_t *,shaper_t *,mxArray **,en_tete_t **);
void liberer_forme(forme_t,motif_t);
void liberer_memoire_zones(en_tete_t *,zone_t *,forme_t *,ellipse_t *,shaper_t *,char);
void supprimer_zone(zone_t *,long *,long,forme_t *,long *,ellipse_t *,long *,shaper_t *,
                    long *,tirage_t *,long,char);
void cadre_zones(zone_t *,long *,double,double,double,double,forme_t *,long *,
                 ellipse_t *,long *,shaper_t *,long *,tirage_t *,long);


#endif

