6 #ifndef MDAL_MEMORY_DATA_MODEL_HPP
7 #define MDAL_MEMORY_DATA_MODEL_HPP
16 #include "mdal_data_model.hpp"
24 double x = std::numeric_limits<double>::quiet_NaN();
25 double y = std::numeric_limits<double>::quiet_NaN();
36 typedef std::vector<size_t> Face;
37 typedef std::vector<Vertex> Vertices;
38 typedef std::vector<Edge> Edges;
39 typedef std::vector<Face> Faces;
50 size_t scalarData(
size_t indexStart,
size_t count,
double *buffer )
override;
51 size_t vectorData(
size_t indexStart,
size_t count,
double *buffer )
override;
54 size_t activeData(
size_t indexStart,
size_t count,
int *buffer )
override;
72 assert( supportsActiveFlag() );
73 assert( mActive.size() > index );
74 mActive[index] = stat;
77 void setActive(
const int *activeBuffer );
79 int active(
size_t index )
const
81 assert( supportsActiveFlag() );
82 assert( mActive.size() > index );
83 return mActive[index];
86 void setScalarValue(
size_t index,
double value )
88 assert( mValues.size() > index );
89 assert( group()->isScalar() );
90 mValues[index] = value;
93 void setVectorValue(
size_t index,
double x,
double y )
95 assert( mValues.size() > 2 * index + 1 );
96 assert( !group()->isScalar() );
97 mValues[2 * index] = x;
98 mValues[2 * index + 1] = y;
101 void setValueX(
size_t index,
double x )
103 assert( mValues.size() > 2 * index );
104 assert( !group()->isScalar() );
106 mValues[2 * index] = x;
109 void setValueY(
size_t index,
double x )
111 assert( mValues.size() > 2 * index + 1 );
112 assert( !group()->isScalar() );
113 mValues[2 * index + 1] = x;
116 double valueX(
size_t index )
const
118 assert( mValues.size() > 2 * index + 1 );
119 assert( !group()->isScalar() );
120 return mValues[2 * index];
123 double valueY(
size_t index )
const
125 assert( mValues.size() > 2 * index + 1 );
126 assert( !group()->isScalar() );
127 return mValues[2 * index + 1];
130 double scalarValue(
size_t index )
const
132 assert( mValues.size() > index );
133 assert( group()->isScalar() );
134 return mValues[index];
144 return mValues.data();
161 std::vector<double> mValues;
170 std::vector<int> mActive;
180 size_t maxVerticalLevelCount,
181 const int *verticalLevelCounts,
182 const double *verticalExtrusions
188 void setScalarValue(
size_t index,
double value )
190 assert( mValues.size() > index );
191 assert( group()->isScalar() );
192 mValues[index] = value;
195 void setVectorValue(
size_t index,
double x,
double y )
197 assert( mValues.size() > 2 * index + 1 );
198 assert( !group()->isScalar() );
199 mValues[2 * index] = x;
200 mValues[2 * index + 1] = y;
203 void setValueX(
size_t index,
double x )
205 assert( mValues.size() > 2 * index );
206 assert( !group()->isScalar() );
208 mValues[2 * index] = x;
211 void setValueY(
size_t index,
double x )
213 assert( mValues.size() > 2 * index + 1 );
214 assert( !group()->isScalar() );
215 mValues[2 * index + 1] = x;
218 double valueX(
size_t index )
const
220 assert( mValues.size() > 2 * index + 1 );
221 assert( !group()->isScalar() );
222 return mValues[2 * index];
225 double valueY(
size_t index )
const
227 assert( mValues.size() > 2 * index + 1 );
228 assert( !group()->isScalar() );
229 return mValues[2 * index + 1];
232 double scalarValue(
size_t index )
const
234 assert( mValues.size() > index );
235 assert( group()->isScalar() );
236 return mValues[index];
239 void updateIndices();
248 return mValues.data();
252 size_t verticalLevelData(
size_t indexStart,
size_t count,
double *buffer )
override;
253 size_t faceToVolumeData(
size_t indexStart,
size_t count,
int *buffer )
override;
254 size_t scalarVolumesData(
size_t indexStart,
size_t count,
double *buffer )
override;
255 size_t vectorVolumesData(
size_t indexStart,
size_t count,
double *buffer )
override;
266 std::vector<double> mValues;
273 std::vector<int> mFaceToVolume;
280 std::vector<int> mVerticalLevelCounts;
287 std::vector<double> mVerticalExtrusions;
295 size_t faceVerticesMaximumCount,
296 const std::string &uri );
300 std::unique_ptr<MDAL::MeshVertexIterator> readVertices()
override;
301 std::unique_ptr<MDAL::MeshEdgeIterator> readEdges()
override;
302 std::unique_ptr<MDAL::MeshFaceIterator> readFaces()
override;
304 const Vertices &vertices()
const {
return mVertices;}
305 const Faces &faces()
const {
return mFaces;}
306 const Edges &edges()
const {
return mEdges;}
317 size_t verticesCount()
const override {
return mVertices.size();}
318 size_t edgesCount()
const override {
return mEdges.size();}
319 size_t facesCount()
const override {
return mFaces.size();}
320 BBox extent()
const override;
321 void addVertices(
size_t vertexCount,
double *coordinates )
override;
322 void addFaces(
size_t faceCount,
size_t driverMaxVerticesPerFace,
int *faceSizes,
int *vertexIndices )
override;
323 void addEdges(
size_t edgeCount,
int *startVertexIndices,
int *endVertexIndices )
override;
325 bool isEditable()
const override {
return true;}
340 size_t next(
size_t vertexCount,
double *coordinates )
override;
343 size_t mLastVertexIndex = 0;
352 size_t next(
size_t edgeCount,
353 int *startVertexIndices,
354 int *endVertexIndices )
override;
357 size_t mLastEdgeIndex = 0;
366 size_t next(
size_t faceOffsetsBufferLen,
367 int *faceOffsetsBuffer,
368 size_t vertexIndicesBufferLen,
369 int *vertexIndicesBuffer )
override;
372 size_t mLastFaceIndex = 0;
Definition: mdal_data_model.hpp:97
Definition: mdal_data_model.hpp:113
Definition: mdal_data_model.hpp:137
The MemoryDataset stores all the data in the memory.
Definition: mdal_memory_data_model.hpp:45
void activateFaces(MDAL::MemoryMesh *mesh)
Loop through all faces and activate those which has all 4 values on vertices valid Dataset must suppo...
Definition: mdal_memory_data_model.cpp:44
size_t scalarData(size_t indexStart, size_t count, double *buffer) override
For DataOnVertices or DataOnFaces.
Definition: mdal_memory_data_model.cpp:92
double * values()
Returns pointer to internal buffer with values Never null, already allocated for vector datasets in f...
Definition: mdal_memory_data_model.hpp:142
size_t activeData(size_t indexStart, size_t count, int *buffer) override
Returns 0 for datasets that does not support active flags.
Definition: mdal_memory_data_model.cpp:31
size_t vectorData(size_t indexStart, size_t count, double *buffer) override
For DataOnVertices or DataOnFaces.
Definition: mdal_memory_data_model.cpp:106
void setActive(size_t index, int stat)
Sets active flag for index.
Definition: mdal_memory_data_model.hpp:70
Definition: mdal_memory_data_model.hpp:174
size_t vectorVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_memory_data_model.cpp:206
double * values()
Returns pointer to internal buffer with values Never null, already allocated for vector datasets in f...
Definition: mdal_memory_data_model.hpp:246
size_t faceToVolumeData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_memory_data_model.cpp:179
size_t scalarVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_memory_data_model.cpp:192
size_t verticalLevelCountData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_memory_data_model.cpp:153
size_t verticalLevelData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_memory_data_model.cpp:166
Definition: mdal_memory_data_model.hpp:347
Definition: mdal_memory_data_model.hpp:361
Definition: mdal_memory_data_model.hpp:335
Definition: mdal_memory_data_model.hpp:291
void setFaces(Faces faces)
Sets all faces using std::move if possible.
Definition: mdal_memory_data_model.cpp:252
void setVertices(Vertices vertices)
Sets all vertices using std::move if possible.
Definition: mdal_memory_data_model.cpp:246
MemoryMesh(const std::string &driverName, size_t faceVerticesMaximumCount, const std::string &uri)
Constructs an empty mesh.
Definition: mdal_memory_data_model.cpp:220
void setEdges(Edges edges)
Sets all edges using std::move if possible.
Definition: mdal_memory_data_model.cpp:257
Definition: mdal_data_model.hpp:217
Definition: mdal_data_model.hpp:227
Definition: mdal_data_model.hpp:209
Definition: mdal_data_model.hpp:238
Definition: mdal_data_model.hpp:24
Definition: mdal_memory_data_model.hpp:31
Definition: mdal_memory_data_model.hpp:23