diff --git a/tutorial/601_Serialization/CMakeLists.txt b/tutorial/601_Serialization/CMakeLists.txt new file mode 100644 index 000000000..f4cc5d341 --- /dev/null +++ b/tutorial/601_Serialization/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 2.6) +project(601_Serialization) + +include("../CMakeLists.shared") + +set(SOURCES +${PROJECT_SOURCE_DIR}/main.cpp +) + +add_executable(101_FileIO ${SOURCES} ${SHARED_SOURCES} ${TINYXML2_SOURCES}) +target_link_libraries(101_FileIO ${SHARED_LIBRARIES}) diff --git a/tutorial/601_Serialization/main.cpp b/tutorial/601_Serialization/main.cpp new file mode 100755 index 000000000..678634dbe --- /dev/null +++ b/tutorial/601_Serialization/main.cpp @@ -0,0 +1,58 @@ +#include +#include + +#include +#include + +Eigen::MatrixXd V; +Eigen::MatrixXi F; + +class State : public ::igl::XMLSerialization +{ +public: + State() : XMLSerialization("dummy") {} + + Eigen::MatrixXd V; + Eigen::MatrixXi F; + std::vector ids; + + // You have to define this function to + // register the fields you want to serialize + void InitSerialization() + { + xmlSerializer->Add(V , "V"); + xmlSerializer->Add(F , "F"); + xmlSerializer->Add(ids, "ids"); + } + +}; + +int main(int argc, char *argv[]) +{ + State state; + + // Load a mesh in OFF format + igl::readOFF("../shared/cube.off", state.V, state.F); + + // Save some integers in a vector + state.ids.push_back(6); + state.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); + + // 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"); + + // 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 << "ids: " << std::endl + << loaded_state.ids[0] << " " << loaded_state.ids[1] << std::endl; + +}