GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
gmDiscontinuityAccessor.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2014 by Carlos Augusto Teixera Mendes
4** All rights reserved.
5**
6** This file is part of the "GeMA" software. It's use should respect
7** the terms in the license agreement that can be found together
8** with this source code.
9** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11** A PARTICULAR PURPOSE.
12**
13************************************************************************/
14
25#ifndef _GEMA_DISCONTINUITY_ACCESSOR_H_
26#define _GEMA_DISCONTINUITY_ACCESSOR_H_
27
28#include "gmAccessorProxy.h"
29
30#include "gmDiscontinuity.h"
32#include "gmSurfaceCellIntersection.h"
33#include <unitConverter.h>
34#include "gmDiscontinuitySet.h"
35
36#include <assert.h>
37
38
48{
49public:
52
53 // Wrapped functions. For descriptions, see GmValueAccessor documentation
54 const double* value(const GmDiscontinuity* d) const
55 {
56 return _ac->value(queryIndex(d));
57 }
58
59 double scalarValue(const GmDiscontinuity* d) const
60 {
61 return _ac->scalarValue(queryIndex(d));
62 }
63
64 void matrixValue(const GmDiscontinuity* d, GmCRMatrix& mat) const
65 {
66 _ac->matrixValue(queryIndex(d), mat);
67 }
68
69 void vectorValue(const GmDiscontinuity* d, GmCRVector& vec) const
70 {
71 _ac->vectorValue(queryIndex(d), vec);
72 }
73
74 bool setValue (const GmDiscontinuity* d, const double* value) { return _ac->setValue(queryIndex(d), value); }
75 bool setScalarValue (const GmDiscontinuity* d, double value) { return _ac->setScalarValue(queryIndex(d), value); }
76 bool setScalarValueAtDim(const GmDiscontinuity* d, int dim, double value) { return _ac->setScalarValueAtDim(queryIndex(d), dim, value); }
77 bool setValueAsDef (const GmDiscontinuity* d) { return _ac->setValueAsDef(queryIndex(d)); }
78 bool setFunctionValue (const GmDiscontinuity* d, GmUserFunction* functionDef) { Q_UNUSED(d); Q_UNUSED(functionDef); return logUserFunctionError(); }
79 bool setFunctionValue (const GmDiscontinuity* d, GmUserFunctionEvaluator* functionEval) { Q_UNUSED(d); Q_UNUSED(functionEval); return logUserFunctionError(); }
80
81 QString valueStr(const GmDiscontinuity* d, bool evalFunctions, bool printDefAsNil,
82 int fieldWidth = 0, char format = 'g', int precision = -1) const
83 {
84 return _ac->valueStr(queryIndex(d), evalFunctions, printDefAsNil, fieldWidth, format, precision, NULL);
85 }
86
87 bool setFunctionFromName(const GmDiscontinuity* d, QString userFunctionId, QString& err)
88 {
89 Q_UNUSED(d); Q_UNUSED(userFunctionId);
90 err = QObject::tr("Discontinuity accessor does not accept function values.");
91 return false;
92 }
93
94 bool setValueFromVariant(const GmDiscontinuity* d, const QVariant& v, bool acceptMissingDimension, QString& err)
95 {
96 return _ac->setValueFromVariant(queryIndex(d), v, acceptMissingDimension, err);
97 }
98
99 bool isDefValue(const GmDiscontinuity* d) const { return _ac->isDefValue(queryIndex(d)); }
100 bool isFunction(const GmDiscontinuity* d) const { return _ac->isFunction(queryIndex(d)); }
101 QString functionId(const GmDiscontinuity* d) const { return _ac->functionId(queryIndex(d)); }
102
103protected:
106 {
107 // We can only log a message if the accessor is a GmValueAccessorBase instance
108 GmValueAccessorBase* bac = dynamic_cast<GmValueAccessorBase*>(_ac);
109 if(bac)
110 gmWarnMsg(bac->_logger, QObject::tr("Discontinuity accessor does not accept function values."));
111 return false;
112 }
113
115 virtual int queryIndex(const GmDiscontinuity* d) const = 0;
116};
117
120{
121public:
124
125protected:
127 virtual int queryIndex(const GmDiscontinuity* d) const { assert(d); return d->index(); }
128};
129
132{
133public:
135 GmPropertyDiscontinuityAccessor(GmValueAccessor* ac, int psetIndex) : GmDiscontinuityAccessor(ac), _pset(psetIndex) {}
136
137protected:
139 virtual int queryIndex(const GmDiscontinuity* d) const { assert(d); return d->propertyIndex(_pset); }
140
141private:
142 int _pset;
143};
144
145
152{
153public:
155 : _dim(dim), _unit(desiredUnit), _conv(conv), _convData(NULL)
156 {
157 if(conv)
158 _convData = new GmTLBuffer<double, true>(dim);
159 }
160
163 {
164 delete _conv;
165 delete _convData;
166 }
167
173 Unit unit() const { return Unit(_unit); }
174
176 bool hasUnitConversion() const { return _conv; }
177
179 int valueSize() const { return _dim; }
180
191 const double* value(const GmCompact2DSegmentCellIntersection* ci, int i) const
192 {
193 const double* p = ci->rawCartCoord(i);
194 return _conv ? _conv->convertArray(p, _dim, _convData->localBuffer()) : p;
195 }
196
201 {
202 vec.setMemory(value(ci, i), valueSize());
203 }
204
205private:
206 int _dim;
210};
211
212
219{
220public:
221 GmCell3DIntersectionCoordAccessor(const GmDiscontinuitySet* ds, int size, UnitConverter* conv, QString desiredUnit)
222 : _ds(ds), _size(size), _unit(desiredUnit), _conv(conv), _convData(NULL)
223 {
224 assert(ds);
225 assert(size > 0);
226 if (conv)
227 _convData = new GmTLBuffer<double, true>(_size);
228 }
229
232 {
233 delete _conv;
234 delete _convData;
235 }
236
242 Unit unit() const { return Unit(_unit); }
243
245 bool hasUnitConversion() const { return _conv; }
246
248 int valueSize() const { return _size; }
249
259 const double* value(const Gm3DSurfaceCellIntersection* ci, int i) const
260 {
261 const double* p = _ds->consolidated3DPoints()[ci->pointId[i]].memptr();
262 return _conv ? _conv->convertArray(p, _size, _convData->localBuffer()) : p;
263 }
264
268 void vectorValue(const Gm3DSurfaceCellIntersection* ci, int i, GmCRVector& vec) const
269 {
270 vec.setMemory(value(ci, i), valueSize());
271 }
272
273private:
275 int _size;
279};
280
281
282
283#endif
284
Helper class with common code for several classes that wrap a value accessor, provinding a slitly dif...
Definition gmAccessorProxy.h:39
Extends GmDiscontinuityAccessor to handle attribute accessors.
Definition gmDiscontinuityAccessor.h:120
GmAttributeDiscontinuityAccessor(GmValueAccessor *ac)
Constructor. Takes ownership of the accessor.
Definition gmDiscontinuityAccessor.h:123
virtual int queryIndex(const GmDiscontinuity *d) const
A virtual function that given a cell returns the index that should be accessed.
Definition gmDiscontinuityAccessor.h:127
An auxiliary matrix WRAPPER that binds the matrix to a CONST memory area with data already inicialize...
Definition gmMatrix.h:102
An auxiliary vector WRAPPER that binds the vector to a CONST memory area with data already initialize...
Definition gmVector.h:72
void setMemory(const double *data, int nlin)
Exchanges the memory area used by the vector. Same caveats explained in the class documentation apply...
Definition gmVector.h:102
A simple accessor used to access 3d surface cell intersection data with possible unit conversion from...
Definition gmDiscontinuityAccessor.h:219
~GmCell3DIntersectionCoordAccessor()
Destructor.
Definition gmDiscontinuityAccessor.h:231
GmTLBuffer< double, true > * _convData
Per thread local buffer used to store converted data. Null if _conv == NULL.
Definition gmDiscontinuityAccessor.h:278
QString _unit
The unit in which data is being returned.
Definition gmDiscontinuityAccessor.h:276
bool hasUnitConversion() const
Returns true if this accessor perfroms unit conversions, false if not.
Definition gmDiscontinuityAccessor.h:245
int _size
The coordinate size.
Definition gmDiscontinuityAccessor.h:275
int valueSize() const
Returns the size of the array returned by value()
Definition gmDiscontinuityAccessor.h:248
const GmDiscontinuitySet * _ds
The discontinuity set.
Definition gmDiscontinuityAccessor.h:274
Unit unit() const
Returns the unit in which data returned by the accessor is expressed.
Definition gmDiscontinuityAccessor.h:242
const double * value(const Gm3DSurfaceCellIntersection *ci, int i) const
Returns the coordinate value associated with the givenc segment cell intersection object 'ci'....
Definition gmDiscontinuityAccessor.h:259
void vectorValue(const Gm3DSurfaceCellIntersection *ci, int i, GmCRVector &vec) const
Similar to value(), but returning the result as a CONST vector. Bear in mind that the resulting vecto...
Definition gmDiscontinuityAccessor.h:268
UnitConverter * _conv
Unit converter.
Definition gmDiscontinuityAccessor.h:277
A (much more) compact version of GmSegmentCellIntersection for 2d intersections only....
Definition gmSegmentCellIntersection.h:109
const double * rawCartCoord(int i) const
Same as cartCoord(i) but returning a pointer to the internal buffer. No cdata copy to construct a GmV...
Definition gmSegmentCellIntersection.h:168
The GmDiscontinuityAccessor class is a proxy object to a value accesor implementing a more convenient...
Definition gmDiscontinuityAccessor.h:48
virtual int queryIndex(const GmDiscontinuity *d) const =0
A virtual function that given a discontinuity returns the index that should be accessed.
bool logUserFunctionError()
Logs an error since discontinuity accessors can not work with functions.
Definition gmDiscontinuityAccessor.h:105
GmDiscontinuityAccessor(GmValueAccessor *ac)
Constructor. Takes ownership of the accessor.
Definition gmDiscontinuityAccessor.h:51
The geometric representation for a single discontinuity from the Discontinuity set....
Definition gmDiscontinuity.h:38
int index() const
Returns this discontinuity index in the father set.
Definition gmDiscontinuity.h:44
virtual int propertyIndex(int propertySet) const
Given a property set number, returns the line of the property set that contains property values for t...
Definition gmDiscontinuity.h:65
Base interface for providing discontinuity geometry information for spatial indices.
Definition gmDiscontinuitySet.h:59
Extends GmDiscontinuityAccessor to handle property accessors.
Definition gmDiscontinuityAccessor.h:132
virtual int queryIndex(const GmDiscontinuity *d) const
A virtual function that given a cell returns the index that should be accessed.
Definition gmDiscontinuityAccessor.h:139
GmPropertyDiscontinuityAccessor(GmValueAccessor *ac, int psetIndex)
Constructor. Takes ownership of the accessor.
Definition gmDiscontinuityAccessor.h:135
A simple accessor used to access 2d segment cell intersection data with possible unit conversion from...
Definition gmDiscontinuityAccessor.h:152
const double * value(const GmCompact2DSegmentCellIntersection *ci, int i) const
Returns the coordinate value associated with the givenc segment cell intersection object 'ci'....
Definition gmDiscontinuityAccessor.h:191
GmTLBuffer< double, true > * _convData
Per thread local buffer used to store converted data. Null if _conv == NULL.
Definition gmDiscontinuityAccessor.h:209
QString _unit
The unit in which data is being returned.
Definition gmDiscontinuityAccessor.h:207
Unit unit() const
Returns the unit in which data returned by the accessor is expressed.
Definition gmDiscontinuityAccessor.h:173
int valueSize() const
Returns the size of the array returned by value()
Definition gmDiscontinuityAccessor.h:179
~GmSegmentCell2DIntersectionCoordAccessor()
Destructor.
Definition gmDiscontinuityAccessor.h:162
bool hasUnitConversion() const
Returns true if this accessor perfroms unit conversions, false if not.
Definition gmDiscontinuityAccessor.h:176
int _dim
The coordinate dimension.
Definition gmDiscontinuityAccessor.h:206
void vectorValue(const GmCompact2DSegmentCellIntersection *ci, int i, GmCRVector &vec) const
Similar to value(), but returning the result as a CONST vector. Bear in mind that the resulting vecto...
Definition gmDiscontinuityAccessor.h:200
UnitConverter * _conv
Unit converter.
Definition gmDiscontinuityAccessor.h:208
A class similar to GmTLS that creates a buffer for each possible thread in the GmThreadManager,...
Definition gmThreadLocalBuffer.h:106
Class responsible for evaluating a UserFunction over a node / cell.
Definition gmUserFunction.h:160
Class used to store the definition of a user function and its parameters.
Definition gmUserFunction.h:82
An implementation of basic attributes and functions that should be common for most value accessor imp...
Definition gmValueAccessor.h:367
const GmLogCategory & _logger
The logger object used to report errors while accessing or setting data.
Definition gmValueAccessor.h:409
Interface class for accessing and setting values from an "indexable" collection of values.
Definition gmValueAccessor.h:60
Implementation of the GmAccessorProxy class Moved from gmCellAccessor.h.
#define GMC_API_EXPORT
Macro for controlling if the class is being exported (GEMA_CORE_LIB defined) or imported (GEMA_CORE_L...
Definition gmCoreConfig.h:35
Declaration of the GmDiscontinuity class.
Implementation of the GmDiscontinuitySet class.
Declaration of the GmSegmentCellIntersection class & friends.
QString tr(const char *sourceText, const char *disambiguation, int n)
Definition gmSurfaceCellIntersection.h:27
QVector< int > pointId
List of points ids in the global point list.
Definition gmSurfaceCellIntersection.h:31