Conscience Core
CscDaeParser.h
Go to the documentation of this file.
1 //
2 // CscDaeParser.hpp
3 // ConscienceRobotManager
4 //
5 // Created by Thomas Mercier on 18/05/2020.
6 // Copyright © 2020 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscDaeParser_h
10 #define CscDaeParser_h
11 
12 #include "CscCommon.h"
13 #include <fstream>
14 
15 #include "CscDaeGeometries.h"
16 #include "CscDaeNodes.h"
17 #include "../../CscWorldElementParts.h"
19 
20 using std::stringstream, std::to_string, std::ifstream;
21 using namespace conscience_utils;
22 using namespace conscience_core::bridging;
23 
25 
26 
27  struct DaeSource {
28  const string sourceId;
29  string dataTypes; // Position, Normals Or Texture
30 
34  vector< vector<CscPoint3d*> > *data = new vector<vector<CscPoint3d*>>();
35  int stride; // How Data Is Represented (X,Y,Z) for a Point or (S,T) for Texture
36  int offsetInIndex = -1;
37 
38  DaeSource(const string & sourceId): sourceId(sourceId) {
39  }
40 
42  for (const vector<CscPoint3d*> & points : *data) {
43  deleteItems(points);
44  }
45 
46  delete data;
47  }
48  };
49 
50 
51  class CscDaeParser{
52 
53  public:
54  string fileName;
55 
56  vector<CscDaeGeometries *> geometries;
57  vector<CscDaeNode *> child;
58 
59  vector<vector<string>> sceneLocalisations;
60 
61  CscDaeParser(const fs::path &filePath);
62  virtual ~CscDaeParser();
63 
64  /* Info */
65  string tool, upAxis, unit;
67  float minX, minY, minZ;
68  float maxX, maxY, maxZ;
69  float centerX, centerZ;
70 
71  vector<CscWorldElementPart *> * getPartsFromWord(const string & word);
72 
73  vector<CscPoint3d*> * collectPositionsRecursively(CscDaeNode *node, vector<CscPoint3d*> * collector = new vector<CscPoint3d*>) const;
74  vector<CscPoint3d*> * collectNormalsRecursively(CscDaeNode *node, vector<CscPoint3d*> * collector = new vector<CscPoint3d*>) const;
75  vector<CscPolygon*> * collectPolygonsRecursively(CscDaeNode *node, vector<CscPolygon*> * collector = new vector<CscPolygon*>) const;
76 
80  vector<CscDaeNode *> * collectNodesMatchingNameRecursively(CscDaeNode *node, const string & namePart, vector<CscDaeNode *> * collector = new vector<CscDaeNode *>()) const;
81 
82  void getSceneLocalisationFromWord(string word);
83 
84  private:
85  unique_ptr<CscLogger> logger;
86 
87  map<string, DaeSource*> sources;
88  string currentSourceId = "NULL";
89 
90  void getHeadingInfo(const string &daeContent);
91  void getLibraryVisualScenesInfo(const string &daeContent);
92  void getLibraryNodesInfo(const string &daeContent);
93  void getLibraryGeometriesInfo(const string &daeContent);
94 
95  string extractDaePart(const string &daeContent, const string &tagName) const;
96 
100  vector<CscDaeNode *> * collectNodesFromWordRecursively(CscDaeNode *node, const string & word, vector<CscDaeNode *> * collector = new vector<CscDaeNode *>()) const;
101 
105  vector<CscDaeNode *> * collectNodesFromGeometryWordRecursively(CscDaeNode *node, const string & word, vector<CscDaeNode *> * collector = new vector<CscDaeNode *>()) const;
106 
107  void logParsedNodes();
108  CscKeyDirectories *keyDirectories = CscKeyDirectories::getInstance();
109  };
110 }
111 
112 #endif /* CscDaeParser_h */
113 
conscience_core::bridging
Definition: CscCoreObjectsJsonEncoder.cpp:13
conscience_core::core_objects::exchange::dae::DaeSource::dataTypes
string dataTypes
Definition: CscDaeParser.h:29
nlohmann::to_string
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:26470
conscience_core::core_objects::exchange::dae::DaeSource::sourceId
const string sourceId
Definition: CscDaeParser.h:28
conscience_core::core_objects::exchange::dae::CscDaeParser::fileName
string fileName
Definition: CscDaeParser.h:54
conscience_core::core_objects::exchange::dae::CscDaeParser::sceneLocalisations
vector< vector< string > > sceneLocalisations
Definition: CscDaeParser.h:59
conscience_core::core_objects::exchange::dae::CscDaeParser::maxZ
float maxZ
Definition: CscDaeParser.h:68
CscDaeNodes.h
conscience_core::core_objects::exchange::dae::DaeSource::stride
int stride
Definition: CscDaeParser.h:35
conscience_core::core_objects::exchange::dae::DaeSource
Definition: CscDaeParser.h:27
conscience_core::core_objects::exchange::dae::CscDaeNode
Definition: CscDaeNodes.h:23
conscience_core::core_objects::exchange::dae::DaeSource::~DaeSource
~DaeSource()
Definition: CscDaeParser.h:41
logger
static std::unique_ptr< CscLogger > logger
Definition: gltfHelpers.cpp:6
conscience_core::core_objects::exchange::dae::CscDaeParser::centerZ
float centerZ
Definition: CscDaeParser.h:69
CscKeyDirectories.h
conscience_core::core_objects::exchange::dae
Definition: CscDaeGeometries.cpp:11
CscDaeGeometries.h
conscience_core::bridging::CscKeyDirectories
Definition: CscKeyDirectories.h:13
CscCommon.h
conscience_core::core_objects::exchange::dae::CscDaeParser::minZ
float minZ
Definition: CscDaeParser.h:67
conscience_core::core_objects::exchange::dae::CscDaeParser::upAxis
string upAxis
Definition: CscDaeParser.h:65
conscience_utils
Definition: CscEntityReflexion.h:50
conscience_core::core_objects::exchange::dae::CscDaeParser::valueToConvertIntoMeters
float valueToConvertIntoMeters
Definition: CscDaeParser.h:66
conscience_core::core_objects::exchange::dae::CscDaeParser::geometries
vector< CscDaeGeometries * > geometries
Definition: CscDaeParser.h:56
deleteItems
#define deleteItems(vectorOfItems)
Definition: conscience_util.h:33
conscience_core::core_objects::exchange::dae::DaeSource::DaeSource
DaeSource(const string &sourceId)
Definition: CscDaeParser.h:38
conscience_core::core_objects::exchange::dae::CscDaeParser
Definition: CscDaeParser.h:51
conscience_core::core_objects::exchange::dae::CscDaeParser::child
vector< CscDaeNode * > child
Definition: CscDaeParser.h:57