QGIS/external/mdal/frmts/mdal_driver.hpp

84 lines
2.7 KiB
C++
Raw Normal View History

2018-12-14 14:59:53 +01:00
/*
MDAL - Mesh Data Abstraction Library (MIT License)
Copyright (C) 2018 Peter Petrik (zilolv at gmail dot com)
*/
#ifndef MDAL_DRIVER_HPP
#define MDAL_DRIVER_HPP
#include <string>
#include "mdal_data_model.hpp"
#include "mdal.h"
namespace MDAL
{
enum Capability
2018-12-14 14:59:53 +01:00
{
None = 0,
ReadMesh = 1 << 0, //! Can read mesh and all datasets stored in the mesh file
SaveMesh = 1 << 1, //! Can save the mesh
ReadDatasets = 1 << 2, //! Can read only datasets (groups) from existing mesh
WriteDatasetsOnVertices2D = 1 << 3, //! Can write datasets (groups) on MDAL_DataLocation::DataOnVertices2D
WriteDatasetsOnFaces2D = 1 << 4, //! Can write datasets (groups) on MDAL_DataLocation::DataOnFaces2D
WriteDatasetsOnVolumes3D = 1 << 5, //! Can write datasets (groups) on MDAL_DataLocation::DataOnVolumes3D
2018-12-14 14:59:53 +01:00
};
class Driver
{
public:
Driver( const std::string &name,
const std::string &longName,
const std::string &filters,
int capabilityFlags
2018-12-14 14:59:53 +01:00
);
virtual ~Driver();
virtual Driver *create() = 0;
std::string name() const;
std::string longName() const;
std::string filters() const;
bool hasCapability( Capability capability ) const;
bool hasWriteDatasetCapability( MDAL_DataLocation location ) const;
2018-12-14 14:59:53 +01:00
virtual bool canReadMesh( const std::string &uri );
virtual bool canReadDatasets( const std::string &uri );
2018-12-14 14:59:53 +01:00
2019-10-14 09:19:14 +02:00
//! returns the maximum vertices per face
virtual int faceVerticesMaximumCount() const;
2018-12-14 14:59:53 +01:00
// loads mesh
virtual std::unique_ptr< Mesh > load( const std::string &uri, MDAL_Status *status );
// loads datasets
virtual void load( const std::string &uri, Mesh *mesh, MDAL_Status *status );
2019-10-14 09:19:14 +02:00
// save mesh
virtual void save( const std::string &uri, Mesh *mesh, MDAL_Status *status );
// create new dataset group
virtual void createDatasetGroup(
Mesh *mesh,
const std::string &groupName,
MDAL_DataLocation dataLocation,
bool hasScalarData,
const std::string &datasetGroupFile );
// create new dataset from array
virtual void createDataset( DatasetGroup *group,
RelativeTimestamp time,
const double *values,
const int *active );
// persist to the file
// returns true on error, false on success
virtual bool persist( DatasetGroup *group );
2018-12-14 14:59:53 +01:00
private:
std::string mName;
std::string mLongName;
std::string mFilters;
int mCapabilityFlags;
2018-12-14 14:59:53 +01:00
};
} // namespace MDAL
#endif //MDAL_DRIVER_HPP