Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Class Members | File Members

Exporter.cpp

Go to the documentation of this file.
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         //Make data
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                 /*cout << "Value:" << vertexs[i]->getCoordinates()->x << "," << vertexs[i]->getCoordinates()->y << "," << vertexs[i]->getCoordinates()->z << "\n";
00078                 cout << "Tmp: " << tmp << "\n";
00079                 cout << "Point: " << points << "\n";
00080                 system("PAUSE");*/
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                 /*cout << "Value:" << vertexs[i]->getCoordinates()->x << "," << vertexs[i]->getCoordinates()->y << "," << vertexs[i]->getCoordinates()->z << "\n";
00098                 cout << "Tmp: " << tmp << "\n";
00099                 cout << "Point: " << points << "\n";
00100                 system("PAUSE");*/
00101         }
00102         log::write("Exporter make xml");
00103         //Make XML doc
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 

Generated on Tue Apr 17 09:39:11 2007 for PCG Library by  doxygen 1.3.9.1