Conscience Core
CscWorldElementsFactory.h
Go to the documentation of this file.
1 //
2 // CscWorldElementsFactory.hpp
3 // ConscienceRobotManager
4 //
5 // Created by Louis Grignon on 11/01/2022.
6 // Copyright © 2022 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscDaeWorldElementsFactory_hpp
10 #define CscDaeWorldElementsFactory_hpp
11 
12 #include "CscCommon.h"
13 #include "Axiomes/Csc3dTypes.h"
14 
19 
21 
23 
25 public:
27  if (instance == nullptr) {
29  }
30 
31  return instance;
32  }
33 
34  CscWorldObject *createObject(const CscWorldElementModelSourceSpec &modelSource,
35  CscPoint3d *position,
36  float mass,
37  CscPoint3d *rotation = new CscPoint3d(0, 0, 0),
39  const string &name = "");
40 
42  string id;
43  string name;
44  string provider;
45 
46  string toString() const;
47  };
48 
49  optional<CscPlaceIdNameAndProvider> tryParsePlaceIdNameAndProviderFromFilename(const string &filename);
50 
51  CscWorldPlace *createPlace(const CscWorldElementModelSourceSpec &modelSource,
52  CscPoint3d *position,
53  float mass,
54  CscPoint3d *rotation = new CscPoint3d(0, 0, 0));
55 
56  CscWorldPlace *createPlace(const CscWorldElementModelSourceSpec &modelSource,
57  const CscPlaceIdNameAndProvider &placeIdNameAndProvider,
58  CscPoint3d *position,
59  float mass,
60  CscPoint3d *rotation = new CscPoint3d(0, 0, 0));
61 
62 private:
63  inline static CscWorldElementsFactory *instance = nullptr;
64 
65  struct WorldElementData {
66  vector<CscWorldElementPart *> *const parts;
67  vector<CscPoint3d *> *const positions;
68  vector<CscPoint3d *> *const normals;
69  vector<CscPolygon *> *const polygons;
70  vector<const CscLocationTag *> *const locationTags;
71  const double minX;
72  const double minY;
73  const double minZ;
74  const double maxX;
75  const double maxY;
76  const double maxZ;
77 
78  WorldElementData(vector<CscWorldElementPart *> *parts,
79  vector<CscPoint3d *> *positions,
80  vector<CscPoint3d *> *normals,
81  vector<CscPolygon *> *polygons,
82  vector<const CscLocationTag *> *locationTags,
83  double minX,
84  double minY,
85  double minZ,
86  double maxX,
87  double maxY,
88  double maxZ)
89  : parts(parts),
90  positions(positions),
91  normals(normals),
92  polygons(polygons),
93  locationTags(locationTags),
94  minX(minX),
95  minY(minY),
96  minZ(minZ),
97  maxX(maxX),
98  maxY(maxY),
99  maxZ(maxZ) {
100  }
101 
102  double getWidth() { return maxX - minX; }
103  double getHeight() { return maxY - minY; }
104  double getLength() { return maxZ - minZ; }
105  };
106 
107  unique_ptr<CscLogger> logger = CscLogger::getForCategory("CscWorldElementsFactory");
108 
109  WorldElementData *loadDaeData(const string &daeFilePath);
110  WorldElementData *loadGltfData(const fs::path &filePath);
111 
112  // TODO implement a temporary cache with timed expiration to avoid loading memory with objects
113  map<fs::path, WorldElementData *> objectsDataCacheByFilename;
114 };
115 
116 }
117 
118 #endif /* CscDaeWorldElementsFactory_hpp */
conscience_core::core_objects::exchange::common::CscWorldElementsFactory::CscPlaceIdNameAndProvider::name
string name
Definition: CscWorldElementsFactory.h:43
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
CscWorldObject
Definition: CscWorldObject.h:26
conscience_core::core_objects::exchange::common::CscWorldElementsFactory::CscPlaceIdNameAndProvider::id
string id
Definition: CscWorldElementsFactory.h:42
conscience_core::core_objects::exchange::common::CscWorldElementsFactory::CscPlaceIdNameAndProvider::provider
string provider
Definition: CscWorldElementsFactory.h:44
Csc3dElementModelResolver.h
conscience_core::core_objects::element_3d
Definition: CommandParseContext.h:19
logger
static std::unique_ptr< CscLogger > logger
Definition: gltfHelpers.cpp:6
CscWorldObject.h
BOUNDING_BOX
@ BOUNDING_BOX
Definition: CscPhysicsType.h:22
conscience_core::core_objects::exchange::common::CscWorldElementsFactory
Definition: CscWorldElementsFactory.h:24
conscience_core::core_objects::exchange::common
Definition: CscWorldElementsFactory.cpp:27
CscPhysicsType
CscPhysicsType
Definition: CscPhysicsType.h:12
CscCommon.h
Csc3dTypes.h
conscience_core::core_objects::element_3d::CscWorldElementModelSourceSpec
Definition: Csc3dElementModelResolver.h:56
conscience_core::core_objects::exchange::common::CscWorldElementsFactory::getInstance
static CscWorldElementsFactory * getInstance()
Definition: CscWorldElementsFactory.h:26
conscience_server::entities::instance
ServerEntities * instance
Definition: ServerEntities.cpp:39
CscWorldPlace.h
CscWorldPlace
Definition: CscWorldPlace.h:43
conscience_core::core_objects::exchange::common::CscWorldElementsFactory::CscPlaceIdNameAndProvider
Definition: CscWorldElementsFactory.h:41
CscPhysicsType.h