MDAL
mdal_driver.hpp
1 /*
2  MDAL - Mesh Data Abstraction Library (MIT License)
3  Copyright (C) 2018 Peter Petrik (zilolv at gmail dot com)
4 */
5 
6 #ifndef MDAL_DRIVER_HPP
7 #define MDAL_DRIVER_HPP
8 
9 #include <string>
10 #include "mdal_data_model.hpp"
11 #include "mdal.h"
12 
13 namespace MDAL
14 {
15  enum Capability
16  {
17  None = 0,
18  ReadMesh = 1 << 0,
19  SaveMesh = 1 << 1,
20  ReadDatasets = 1 << 2,
21  WriteDatasetsOnVertices = 1 << 3,
22  WriteDatasetsOnFaces = 1 << 4,
23  WriteDatasetsOnVolumes = 1 << 5,
24  WriteDatasetsOnEdges = 1 << 6,
25  };
26 
27  class Driver
28  {
29  public:
30  Driver( const std::string &name,
31  const std::string &longName,
32  const std::string &filters,
33  int capabilityFlags
34  );
35  virtual ~Driver();
36 
37  virtual Driver *create() = 0;
38 
39  std::string name() const;
40  std::string longName() const;
41  std::string filters() const;
42  bool hasCapability( Capability capability ) const;
43  bool hasWriteDatasetCapability( MDAL_DataLocation location ) const;
44 
45  virtual std::string writeDatasetOnFileSuffix() const;
46  virtual std::string saveMeshOnFileSuffix() const;
47 
48  virtual bool canReadMesh( const std::string &uri );
49  virtual bool canReadDatasets( const std::string &uri );
50 
52  virtual int faceVerticesMaximumCount() const;
53 
54  // constructs loading uri / uris
55  virtual std::string buildUri( const std::string &meshFile );
56  // loads mesh
57  virtual std::unique_ptr< Mesh > load( const std::string &uri, const std::string &meshName = "" );
58  // loads datasets
59  virtual void load( const std::string &uri, Mesh *mesh );
60  // save mesh
61  virtual void save( const std::string &fileName, const std::string &meshName, Mesh *mesh );
62 
63  // create new dataset group
64  virtual void createDatasetGroup(
65  Mesh *mesh,
66  const std::string &groupName,
67  MDAL_DataLocation dataLocation,
68  bool hasScalarData,
69  const std::string &datasetGroupFile );
70 
71  // create new 2D dataset from array
72  virtual void createDataset( DatasetGroup *group,
73  RelativeTimestamp time,
74  const double *values,
75  const int *active );
76 
77  // create new 3D dataset from array
78  virtual void createDataset( DatasetGroup *group,
79  RelativeTimestamp time,
80  const double *values,
81  const int *verticalLevelCount,
82  const double *verticalExtrusion );
83 
84  // persist to the file
85  // returns true on error, false on success
86  virtual bool persist( DatasetGroup *group );
87 
88  private:
89  std::string mName;
90  std::string mLongName;
91  std::string mFilters;
92  int mCapabilityFlags;
93  };
94 
95 } // namespace MDAL
96 #endif //MDAL_DRIVER_HPP
Definition: mdal_data_model.hpp:137
Definition: mdal_driver.hpp:28
virtual int faceVerticesMaximumCount() const
returns the maximum vertices per face
Definition: mdal_driver.cpp:75
Definition: mdal_data_model.hpp:238
Definition: mdal_datetime.hpp:18