QGIS/external/mdal/frmts/mdal_driver.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

97 lines
3.4 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
WriteDatasetsOnVertices = 1 << 3, //!< Can write datasets (groups) on MDAL_DataLocation::DataOnVertices
WriteDatasetsOnFaces = 1 << 4, //!< Can write datasets (groups) on MDAL_DataLocation::DataOnFaces
WriteDatasetsOnVolumes = 1 << 5, //!< Can write datasets (groups) on MDAL_DataLocation::DataOnVolumes
WriteDatasetsOnEdges = 1 << 6, //!< Can write datasets (groups) on MDAL_DataLocation::DataOnEdges
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 std::string writeDatasetOnFileSuffix() const;
2021-06-30 13:45:22 +02:00
virtual std::string saveMeshOnFileSuffix() const;
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;
// constructs loading uri / uris
virtual std::string buildUri( const std::string &meshFile );
2018-12-14 14:59:53 +01:00
// loads mesh
virtual std::unique_ptr< Mesh > load( const std::string &uri, const std::string &meshName = "" );
2018-12-14 14:59:53 +01:00
// loads datasets
virtual void load( const std::string &uri, Mesh *mesh );
2019-10-14 09:19:14 +02:00
// save mesh
2021-08-18 10:49:05 +02:00
virtual void save( const std::string &fileName, const std::string &meshName, Mesh *mesh );
2019-10-14 09:19:14 +02:00
// create new dataset group
virtual void createDatasetGroup(
Mesh *mesh,
const std::string &groupName,
MDAL_DataLocation dataLocation,
bool hasScalarData,
const std::string &datasetGroupFile );
2021-08-18 10:49:05 +02:00
// create new 2D dataset from array
virtual void createDataset( DatasetGroup *group,
RelativeTimestamp time,
const double *values,
const int *active );
2021-08-18 10:49:05 +02:00
// create new 3D dataset from array
virtual void createDataset( DatasetGroup *group,
RelativeTimestamp time,
const double *values,
const int *verticalLevelCount,
const double *verticalExtrusion );
// 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