Newer
Older
Import / research / 3d-z-maps / mview-0.3.3 / mview / list_mesh.cpp
//
//    File: list_mesh.cc
//
//    (C) 2000-2008 Helmut Cantzler
//
//    Licensed under the terms of the Lesser General Public License.
//

#include "list_mesh.h"

int ListMesh::read(FILE *f, int (*updateProgress)(int pos),
		   void (*setTotal)(int size))
{
  char filename[101];
  FILE *file;
  Mesh *mesh;

  do    // Reads till end of the line
    {
      filename[0]=fgetc(f);
    }
  while (filename[0] != EOF && filename[0] != '\n');

  // check if there are some comments
  filename[0]=fgetc(f);
  while (filename[0] != EOF && filename[0] == '#')
    {
      do    // Reads till end of the line
	{
	  filename[0]=fgetc(f);
	}
      while (filename[0] != EOF && filename[0] != '\n');

      filename[0]=fgetc(f);
    }
  ungetc(filename[0], f);

  while (fscanf(f,"%100s\n", filename) == 1)
    if ((file = fopen(filename,"r")) == NULL)
      fprintf(stderr, "Can't open %s for reading\n", filename);
    else
      {
	//printf(" Filename: %s  Type: %d\n", filename, Mesh::type(file));
	mesh=NULL;

	switch (Mesh::type(file))
	  {
          case LIST_MESH:
	    mesh = new ListMesh();
	    break;
	  case P_MESH:
	    mesh = new PMesh();
	    break;
	  case OBJ_MESH:
	    mesh = new OBJMesh();
	    break;
	  case VTK_MESH:
	    mesh = new VTKMesh();
	    break;
	  case GTS_MESH:
	    mesh = new GTSMesh();
	    break;
	  case GEOMVIEW_MESH:
	    mesh = new GeomviewMesh();
	    break;
	  case PLY_MESH:
	    mesh = new PLYMesh();
	    break;	
	  case VRML1_MESH:
	    mesh = new Vrml1Mesh();
	    break;
	  case VRML2_MESH:
	    mesh = new Vrml2Mesh();
	    break;
	  case FEATURES_MESH:
	    mesh = new FeatureMesh();
	    break;
	  default:
	    fprintf(stderr, "Not supported mesh type\n");
	  }

	if (mesh != NULL)
	  {
	    if (mesh->read(file, (int (*)(int)) updateProgress,
			   (void (*)(int)) setTotal) != 0)
	      {
		delete mesh;
		fclose(file);
		return 1;
	      }

	    addMesh(mesh);

	    delete mesh;
	  }

	fclose(file);
      }

  return 0;
}

void ListMesh::write(FILE *f, const char *comment)
{
}