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
|
|
|
|
{
|
2019-01-04 18:18:34 +01:00
|
|
|
enum Capability
|
2018-12-14 14:59:53 +01:00
|
|
|
{
|
2019-11-29 15:15:01 +01:00
|
|
|
None = 0,
|
2020-03-09 05:59:51 +01:00
|
|
|
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,
|
2019-01-04 18:18:34 +01:00
|
|
|
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;
|
2019-01-04 18:18:34 +01:00
|
|
|
bool hasCapability( Capability capability ) const;
|
2019-11-29 15:15:01 +01:00
|
|
|
bool hasWriteDatasetCapability( MDAL_DataLocation location ) const;
|
2018-12-14 14:59:53 +01:00
|
|
|
|
2020-07-01 04:18:27 -04:00
|
|
|
virtual std::string writeDatasetOnFileSuffix() const;
|
2021-06-30 13:45:22 +02:00
|
|
|
virtual std::string saveMeshOnFileSuffix() const;
|
2020-07-01 04:18:27 -04:00
|
|
|
|
2019-11-29 15:15:01 +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;
|
|
|
|
|
2020-04-14 02:17:15 -04:00
|
|
|
// constructs loading uri / uris
|
|
|
|
virtual std::string buildUri( const std::string &meshFile );
|
2018-12-14 14:59:53 +01:00
|
|
|
// loads mesh
|
2020-04-14 02:17:15 -04:00
|
|
|
virtual std::unique_ptr< Mesh > load( const std::string &uri, const std::string &meshName = "" );
|
2018-12-14 14:59:53 +01:00
|
|
|
// loads datasets
|
2020-03-09 05:59:51 +01:00
|
|
|
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
|
|
|
|
2019-01-04 18:18:34 +01:00
|
|
|
// create new dataset group
|
|
|
|
virtual void createDatasetGroup(
|
|
|
|
Mesh *mesh,
|
|
|
|
const std::string &groupName,
|
2019-11-29 15:15:01 +01:00
|
|
|
MDAL_DataLocation dataLocation,
|
2019-01-04 18:18:34 +01:00
|
|
|
bool hasScalarData,
|
|
|
|
const std::string &datasetGroupFile );
|
|
|
|
|
2021-08-18 10:49:05 +02:00
|
|
|
// create new 2D dataset from array
|
2019-01-04 18:18:34 +01:00
|
|
|
virtual void createDataset( DatasetGroup *group,
|
2019-12-13 09:33:23 +01:00
|
|
|
RelativeTimestamp time,
|
2019-01-04 18:18:34 +01:00
|
|
|
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 );
|
|
|
|
|
2019-01-04 18:18:34 +01:00
|
|
|
// 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;
|
2019-01-04 18:18:34 +01:00
|
|
|
int mCapabilityFlags;
|
2018-12-14 14:59:53 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace MDAL
|
|
|
|
#endif //MDAL_DRIVER_HPP
|