1 /*
2  MDAL - Mesh Data Abstraction Library (MIT License)
3  Copyright (C) 2020 Runette Software Ltd
4 */
5 
6 #ifndef MDAL_PLY_HPP
7 #define MDAL_PLY_HPP
8 
9 #include <string>
10 #include <memory>
11 
12 #include "mdal_data_model.hpp"
13 #include "mdal_memory_data_model.hpp"
14 #include "mdal.h"
15 #include "mdal_driver.hpp"
16 
17 
18 namespace MDAL
19 {
20   /**
21    * PLY format specification : http://gamma.cs.unc.edu/POWERPLANT/papers/ply.pdf
22    */
23   class DriverPly : public Driver
24   {
25     public:
26       DriverPly();
27       ~DriverPly() override;
28       DriverPly *create() override;
29 
30       bool canReadMesh( const std::string &uri ) override;
faceVerticesMaximumCount() const31       int faceVerticesMaximumCount() const override {return 100;}
32 
33       std::unique_ptr< Mesh > load( const std::string &meshFile, const std::string &meshName = "" ) override;
34       void save( const std::string &fileName, const std::string &meshName, Mesh *mesh ) override;
35       bool persist( DatasetGroup *group ) override;
36 
37       std::string saveMeshOnFileSuffix() const override;
38 
39     private:
40       std::shared_ptr<DatasetGroup> addDatasetGroup( MDAL::Mesh *mesh, const std::string &name, const MDAL_DataLocation location, bool isScalar );
41       void addDataset2D( MDAL::DatasetGroup *group, const std::vector<double> &values );
42       void addDataset3D( MDAL::DatasetGroup *group,
43                          const std::vector<double> &values,
44                          const std::vector<int> &valueIndexes,
45                          const std::vector<double> &levels,
46                          const std::vector<int> &levelIndexes );
47 
48   };
49 
50 } // namespace MDAL
51 #endif //MDAL_PLY_HPP
52