//
// File: x3d_mesh.cc
//
// (C) 2006-2008 Toby Breckon
//
// Licensed under the terms of the Lesser General Public License.
//
#include <string.h>
#include <time.h>
#include "timeval.h"
#include "x3d_mesh.h"
int X3DMesh::read(FILE *f, int (*update)(int pos),
void (*setTotal)(int size))
{
return 1;
}
void X3DMesh::write(FILE *f, const char *comment)
{
int n;
list<Triangle*>::iterator it;
list<Vertex*>::iterator iv;
Vertex v;
// get the time for the header (and remove newline)
time_t timer;
timer=time(NULL);
char * timestring = ctime(&timer);
timestring[strlen(timestring) - 1] = '\0';
fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
fprintf(f, "<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.0//EN\" \"http://www.web3d.org/specifications/x3d-3.0.dtd\">\n");
fprintf(f,"<X3D profile=\"Immersive\" version=\"3.0\">\n");
fprintf(f," <head>\n");
fprintf(f," <meta name=\"author\" content=\"*enter name of original author here*\"/>\n");
fprintf(f," <meta name=\"translator\" content=\"*if manually translating VRML-to-X3D, enter name of person translating here*\"/>\n");
fprintf(f," <meta name=\"translated\" content=\"%s\"/>\n", timestring);
fprintf(f," <meta name=\"version\" content=\"*enter version here*\"/>\n");
fprintf(f," <meta name=\"reference\" content=\"*enter reference citation or relative/online url here*\"/>\n");
fprintf(f," <meta name=\"copyright\" content=\"*enter copyright information here*\"/>\n");
fprintf(f," <meta name=\"keywords\" content=\"*enter keywords here*\"/>\n");
fprintf(f," <meta name=\"url\" content=\"*enter online url address for this file here*\"/>\n");
fprintf(f," <meta name=\"generator\" content=\"mview x3D exporter\"/>\n");
fprintf(f," </head>\n");
fprintf(f," <Scene>\n");
fprintf(f," <Group >\n");
fprintf(f," <Shape >\n");
fprintf(f," <Appearance >\n");
fprintf(f," </Appearance>\n");
fprintf(f," <IndexedFaceSet coordIndex=\" ");
n=0; // vertex numbers
for (iv=vertices->begin(); iv != vertices->end(); iv++)
{
(*iv)->number=++n;
}
// triangle output
for (it=triangles->begin(); it != triangles->end(); it++)
{
fprintf(f,"%d %d %d -1 ", ((*it)->vertices[0]->number) - 1,
((*it)->vertices[1]->number) - 1, ((*it)->vertices[2]->number) - 1);
}
fprintf(f,"\">\n");
fprintf(f,"<Coordinate point=\"");
n=0; // vertex output
for (iv=vertices->begin(); *iv != vertices->back(); iv++)
{
calcOriginalCoordinates(*iv, &v);
fprintf(f,"%f %f %f, ", v.x(), v.y(), v.z());
(*iv)->number=++n;
}
fprintf(f,"%f %f %f ", v.x(), v.y(), v.z());
fprintf(f," \" />\n");
fprintf(f," </IndexedFaceSet>\n");
fprintf(f," </Shape>\n");
fprintf(f," </Group>\n");
fprintf(f," </Scene>\n");
fprintf(f,"\n");
fprintf(f,"</X3D>\n");
}