// modelle_einlesen.h

int convert_txt2bmf(char *name) //wie mit stlmodelexporter
{
 int err=1;
 char quellname[400]; mystrncpy(quellname,name,400);
 endung_ersetzen(name,".bmf");
 printf("converting \"%s\" to \"%s\" ...\n",quellname,name);//test
 printf("convert_txt2bmf() geht noch nicht\n");
 //TODO

 return err;
}

/* von tools/stlmodelexporter.cc ubernommen: * /
class Dreieck {
public:
 float normalen[3];
 float vertex1[3];
 float vertex2[3];
 float vertex3[3];
 uint16 attribut;
};

float scalefaktor = 1.0; //Skalierfaktor, beim Einlesen der Daten zu beruecksichtigen

void stl2bmf(FILE *fp1,FILE *fp2)
{
 int c;
 uint32 i;
 char kopfdaten[80];
 printf("STL-Datei wird nach BMF konvertiert...\n");//test
 for(i=0;i<5;i++) kopfdaten[i]=getc(fp1);
 bool asciiflag=(strncmp(kopfdaten,"solid",5)==0);
 Dreieck *dreiecke=NULL;
 uint32 numDreiecke=0;
 if(asciiflag)
  {
   //STL-Datei im ASCII-Format einlesen:
   for(;i<80-1 && (c=kopfdaten[i])!=0 && c!='\n'; i++) kopfdaten[i]=getc(fp1);
   kopfdaten[i]=0;
   char zeile[200], *pz;
   i=0;
   int vnr=0;
   while(getline(fp1,zeile,200))
    {
     float x,y,z;
     for(pz=zeile; *pz==' '; pz++) {} //Leerzeichen ueberlesen
     if(strncmp(pz,"endsolid",8)==0) break;
     if(strncmp(pz,"facet normal",12)==0)
      {
       sscanf(&pz[12],"%f %f %f",&x,&y,&z);
       //Umrechnung des Koordinatensystems von STL nach OpenGL:
       dreiecke[i].normalen[0]=y;
       dreiecke[i].normalen[1]=z;
       dreiecke[i].normalen[2]=x;
      }
     else if(strncmp(pz,"endfacet",8)==0)
      {
       i++;
       vnr=0;
      }
     //else if(strncmp(pz,"outer loop",10)==0) {}
     else if(strncmp(pz,"endloop",7)==0)
      {
       //TODO: ueberpruefen ob ev. mehrere "outer loop" .. "endloop" vorkommen
       numDreiecke++;
       vnr=0;
      }
     else if(strncmp(pz,"vertex",6)==0)
      {
       float xstl,zstl,ystl;
       sscanf(&pz[6],"%f %f %f",&xstl,&ystl,&zstl);
       // Umrechnung Koordinatensystem von STL zum Koordinatensystem von OpenGL:
       x = ystl*scalefaktor; //Achse x nach rechts in OpengGL, ist Achse y nach hinten in STL
       y = zstl*scalefaktor; //senkrechte Achse ist in OpenGL y, in STL aber z
       z = xstl*scalefaktor; //Achse z nach vorne in OpenGL, ist Achse x nach rechts in STL
       if(++vnr==1)
	{
	 dreiecke[i].vertex1[0]=x;
	 dreiecke[i].vertex1[1]=y;
	 dreiecke[i].vertex1[2]=z;
	}
       else if(vnr==2)
	{
	 dreiecke[i].vertex2[0]=x;
	 dreiecke[i].vertex2[1]=y;
	 dreiecke[i].vertex2[2]=z;
	}
       else if(vnr==3)
	{
	 dreiecke[i].vertex3[0]=x;
	 dreiecke[i].vertex3[1]=y;
	 dreiecke[i].vertex3[2]=z;
	}
       else printf("Fehler: zu viele Vertexe pro Dreieck\n");//test
      }
    }
  }
 else
  {
   //Binaere STL-Datei einlesen:
   for(;i<80;i++) kopfdaten[i]=getc(fp1);
   numDreiecke = input_uint32(fp1);
   dreiecke = new Dreieck[numDreiecke];
   for(i=0;i<numDreiecke;i++)
    {
     input_vektor(fp1,dreiecke[i].normalen, 1.0);
     input_vektor(fp1,dreiecke[i].vertex1, scalefaktor); //Einlesen mit Skalierung
     input_vektor(fp1,dreiecke[i].vertex2, scalefaktor);
     input_vektor(fp1,dreiecke[i].vertex3, scalefaktor);
     dreiecke[i].attribut = input_uint16(fp1);
    }
  }
 if(dreiecke==NULL) {printf("Fehler: keine Dreiecke eingelesen\n");}
 else
  {
   save_bmf(fp2,dreiecke,numDreiecke);
   delete[] dreiecke;
  }
}
*/
