Updated serialization tutorial

Former-commit-id: d622021349
This commit is contained in:
schuellc
2015-02-02 15:56:43 +01:00
parent e4a4e37c39
commit d8ac2b7189
10 changed files with 158 additions and 80 deletions
+43 -26
View File
@@ -1,17 +1,14 @@
#include <igl/readOFF.h>
#include <iostream>
#include <igl/xml/XMLSerializer.h>
#include <igl/xml/XMLSerialization.h>
#include <igl/serialize.h>
#include <igl/xml/serialize_xml.h>
Eigen::MatrixXd V;
Eigen::MatrixXi F;
class State : public ::igl::XMLSerialization
struct State : public igl::Serializable
{
public:
State() : XMLSerialization("dummy") {}
Eigen::MatrixXd V;
Eigen::MatrixXi F;
std::vector<int> ids;
@@ -20,39 +17,59 @@ public:
// register the fields you want to serialize
void InitSerialization()
{
xmlSerializer->Add(V , "V");
xmlSerializer->Add(F , "F");
xmlSerializer->Add(ids, "ids");
this->Add(V , "V");
this->Add(F , "F");
this->Add(ids, "ids");
}
};
int main(int argc, char *argv[])
{
State state;
std::string binaryFile = "binData";
std::string xmlFile = "data.xml";
bool b = true;
unsigned int num = 10;
std::vector<float> vec = {0.1f,0.002f,5.3f};
// use overwrite = true for first serialization to create a new file
igl::serialize(b,"B",binaryFile,true);
// appends serialization to existing file
igl::serialize(num,"Number",binaryFile);
igl::serialize(vec,"VectorName",binaryFile);
// deserialize back to variables
igl::deserialize(b,"B",binaryFile);
igl::deserialize(num,"Number",binaryFile);
igl::deserialize(vec,"VectorName",binaryFile);
State stateIn, stateOut;
// Load a mesh in OFF format
igl::readOFF("../shared/2triangles.off", state.V, state.F);
igl::readOFF("../../shared/2triangles.off",stateIn.V,stateIn.F);
// Save some integers in a vector
state.ids.push_back(6);
state.ids.push_back(7);
stateIn.ids.push_back(6);
stateIn.ids.push_back(7);
// Serialize to XML the state of the application
::igl::XMLSerializer serializer_save("601_Serialization");
serializer_save.Add(state,"State");
serializer_save.Save("temp.xml",true);
// Serialize the state of the application
igl::serialize(stateIn,"State",binaryFile,true);
// Load the state from the same XML file
State loaded_state;
::igl::XMLSerializer serializer_load("601_Serialization");
serializer_load.Add(loaded_state,"State");
serializer_load.Load("temp.xml");
igl::deserialize(stateOut,"State",binaryFile);
// Plot the state
std::cout << "Vertices: " << std::endl << loaded_state.V << std::endl;
std::cout << "Faces: " << std::endl << loaded_state.F << std::endl;
std::cout << "Vertices: " << std::endl << stateOut.V << std::endl;
std::cout << "Faces: " << std::endl << stateOut.F << std::endl;
std::cout << "ids: " << std::endl
<< loaded_state.ids[0] << " " << loaded_state.ids[1] << std::endl;
<< stateOut.ids[0] << " " << stateOut.ids[1] << std::endl;
// XML serialization
// binary = false, overwrite = true
igl::serialize_xml(vec,"VectorXML",xmlFile,false,true);
// binary = true, overwrite = false
igl::serialize_xml(vec,"VectorBin",xmlFile,true,false);
igl::deserialize_xml(vec,"VectorXML",xmlFile);
igl::deserialize_xml(vec,"VectorBin",xmlFile);
}