#include <stdio.h>
#include "graphic3d.h"
#include "util.h"


/***************************************************************/
/*               Comparaison des 2 points 3D                   */
/***************************************************************/
int CmpPoint3d( point3d_t *p1, point3d_t *p2 )
{
  return ( (p1->x == p2->x) &&
	   (p1->y == p2->y) &&
	   (p1->z == p2->z) );
}

void AffichListPoint3d( point3d_t *list, int nb )
{
  int i;

  for (i=0; i<nb; i++) {
    printf(" sommet %d : %f %f %f\n", i, list[i].x, list[i].y, list[i].z);
  }
}


/***************************************************************/
/* Recherche d'un point 3D dans une liste de points            */
/***************************************************************/
int RechPoint3d( point3d_t *list, int nb, point3d_t *pt )
{
  int cherche=1;
  int i=0, ind=-1;
  point3d_t *pointeur=list;

  /*  AffichListPoint3d(list, nb);
      printf("Point a chercher : %f %f %f\n", pt->x, pt->y, pt->z);*/
  
  while ( cherche && i<nb ) 
  {
    if ( CmpPoint3d( pointeur, pt ) ) 
	{
     ind = i;
     cherche = 0;
    }
    else 
	{
      i++; pointeur++;
    }
  }
  return ind;
}


/***************************************************************/
/* Transformation d'une liste de triangles en coordonnees 3D   */
/* en une liste de triangles en indices des sommets dans une   */
/* liste de sommets                                            */
/***************************************************************/
void ListCoord2Ind( triangle_t *lcoor, int nb_tri,
		    point3d_t *sommets, int *nb_smt, triangleInd_t *lind  )
{
  int i, j;
  int ind;
  
  *nb_smt = 0;
  printf("Traitement des triangles ");
  for ( i=0; i<nb_tri; i++ ) 
  {
    putchar('.');fflush(stdout);
    for ( j=0; j<3; j++ ) 
	{
      ind = RechPoint3d( sommets, *nb_smt, &(lcoor[i][j]) );
      if ( ind == -1 ) 
	  {
		CopyPoint3d( sommets+*nb_smt, &(lcoor[i][j]) );

		lind[i][j] = *nb_smt;
		(*nb_smt)++;
      }
      else lind[i][j] = ind;
    }
  }
  printf("\n");
}
