Program Listing for File MeshIO.hpp

Return to documentation for file (include/lvr2/io/meshio/MeshIO.hpp)

#pragma once

#include "lvr2/io/baseio/BaseIO.hpp"
#include "lvr2/types/MeshBuffer.hpp"
#include "lvr2/io/meshio/MaterialIO.hpp"
#include "lvr2/io/meshio/ClusterIO.hpp"
#include "lvr2/io/meshio/FaceIO.hpp"

namespace lvr2
{
namespace meshio
{

template <typename BaseIO>
class MeshIO
{
public:
    void saveMesh(
        const std::string mesh_name,
        const MeshBufferPtr mesh
    ) const;

    MeshBufferPtr loadMesh(
        const std::string& mesh_name
    ) const;

    std::vector<std::string> getAvailableMeshes() const;

private:
    void saveVertices(std::string mesh_name, MeshBufferPtr mesh) const;

    void loadVertices(std::string mesh_name, MeshBufferPtr mesh) const;

protected:

    BaseIO* m_baseIO = static_cast<BaseIO*>(this);
    MaterialIO<BaseIO>* m_materialIO = static_cast<MaterialIO<BaseIO>*>(m_baseIO);
    ClusterIO<BaseIO>* m_clusterIO = static_cast<ClusterIO<BaseIO>*>(m_baseIO);
    FaceIO<BaseIO>* m_faceIO = static_cast<FaceIO<BaseIO>*>(m_baseIO);

};
} // namespace meshio

template <typename FB>
struct FeatureConstruct<lvr2::meshio::MeshIO, FB>
{
    // Dependencies
    using dep1 = typename FeatureConstruct<lvr2::meshio::MaterialIO, FB>::type;
    using dep2 = typename FeatureConstruct<lvr2::meshio::ClusterIO, FB>::type;
    using dep3 = typename FeatureConstruct<lvr2::meshio::FaceIO, FB>::type;

            using deps = typename dep1::template Merge<dep2>::template Merge<dep3>;

            // Add the feature
            using type = typename deps::template add_features<lvr2::meshio::MeshIO>::type;
};


} // namespace lvr2

#include "MeshIO.tcc"