00001 #include "Exporter.h"
00002 #include <iostream>
00003 #include <sstream>
00004 #include <tinyxml/tinyxml.h>
00005 #include <log.h>
00006
00007 using namespace functions;
00008
00009 Exporter::Exporter() {
00010
00011 }
00012
00033 void Exporter::exportModel(ReferenceModel* model, const char* filename) {
00034 log::write("Exporter::exportModel");
00035 log::write("exportModel-ref",*model);
00036 exportModel((ExampleModel*) model, filename);
00037 }
00038
00059 void Exporter::exportModel(ExampleModel* model, const char* filename) {
00060 log::write("exportModel-Ex",*model);
00061
00062 string coordIndex = "";
00063 string normalIndex = "";
00064 string points = "";
00065 string vectors = "";
00066 char tmp[100];
00067 log::write("Exporter get faces");
00068 vector<Face*> faces = model->getFaces();
00069 for(int i=0; i<(int)faces.size(); i++) {
00070 #ifndef __WINDOWS__
00071 sprintf(tmp,"%d, %d, %d,-1,",faces[i]->getVertex(0)->getIndex(),faces[i]->getVertex(1)->getIndex(),faces[i]->getVertex(2)->getIndex());
00072 #else
00073 sprintf_s(tmp,"%d, %d, %d,-1,",faces[i]->getVertex(0)->getIndex(),faces[i]->getVertex(1)->getIndex(),faces[i]->getVertex(2)->getIndex());
00074 #endif
00075 coordIndex.append(tmp);
00076 normalIndex.append(tmp);
00077
00078
00079
00080
00081 }
00082 log::write("Exporter get vertex");
00083 vector<Vertex*> vertexs = model->getVertexs();
00084 for(int i=0; i<(int)vertexs.size(); i++) {
00085 #ifndef __WINDOWS__
00086 sprintf(tmp,"%.4f %.4f %.4f,",vertexs[i]->getCoordinates()->x,vertexs[i]->getCoordinates()->y,vertexs[i]->getCoordinates()->z);
00087 #else
00088 sprintf_s(tmp,"%.4f %.4f %.4f,",vertexs[i]->getCoordinates()->x,vertexs[i]->getCoordinates()->y,vertexs[i]->getCoordinates()->z);
00089 #endif
00090 points.append(tmp);
00091 #ifndef __WINDOWS__
00092 sprintf(tmp,"%.4f %.4f %.4f,",vertexs[i]->getNormal()->x,vertexs[i]->getNormal()->y,vertexs[i]->getNormal()->z);
00093 #else
00094 sprintf_s(tmp,"%.4f %.4f %.4f,",vertexs[i]->getNormal()->x,vertexs[i]->getNormal()->y,vertexs[i]->getNormal()->z);
00095 #endif
00096 vectors.append(tmp);
00097
00098
00099
00100
00101 }
00102 log::write("Exporter make xml");
00103
00104 TiXmlDocument doc;
00105 TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "UTF-8", "" );
00106 doc.LinkEndChild( decl );
00107
00108 TiXmlElement * X3D = new TiXmlElement( "X3D" );
00109 X3D->SetAttribute("profile","Immersive");
00110 doc.LinkEndChild( X3D );
00111
00112 TiXmlElement * scene = new TiXmlElement( "Scene" );
00113 X3D->LinkEndChild( scene );
00114
00115 TiXmlElement * transform = new TiXmlElement( "Transform" );
00116 scene->LinkEndChild( transform );
00117
00118 TiXmlElement * shape = new TiXmlElement( "Shape" );
00119 transform->LinkEndChild( shape );
00120
00121 TiXmlElement * indexedFaceSet = new TiXmlElement( "IndexedFaceSet" );
00122 indexedFaceSet->SetAttribute("normalPerVertex","true");
00123 indexedFaceSet->SetAttribute("coordIndex",coordIndex.c_str());
00124 indexedFaceSet->SetAttribute("normalIndex",normalIndex.c_str());
00125 shape->LinkEndChild( indexedFaceSet );
00126
00127 TiXmlElement * coordinate = new TiXmlElement( "Coordinate" );
00128 coordinate->SetAttribute("point",points.c_str());
00129 indexedFaceSet->LinkEndChild( coordinate );
00130
00131 TiXmlElement * normal = new TiXmlElement( "Normal" );
00132 normal->SetAttribute("vector",vectors.c_str());
00133 indexedFaceSet->LinkEndChild( normal );
00134
00135 doc.SaveFile( filename );
00136 }
00137