source: trunk/packages/vizservers/nanovis/Unirect.h @ 2406

Last change on this file since 2406 was 2096, checked in by ldelgass, 13 years ago

Normalize line endings, set eol-style to native on *.cpp, *.h files

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1
2#ifndef _UNIRECT_H
3#define _UNIRECT_H
4#include <rappture.h>
5#include "Trace.h"
6
7namespace Rappture {
8
9class Unirect2d;
10
11class Unirect3d {
12    size_t _xNum, _yNum, _zNum;
13    size_t _nValues;
14    size_t _nComponents;
15    float _xMin, _xMax, _yMin, _yMax, _zMin, _zMax;
16    float _xValueMin, _xValueMax;
17    float _yValueMin, _yValueMax;
18    float _zValueMin, _zValueMax;
19    double _magMin, _magMax;            /* Range of magnitudes of vector
20                                         * data. */
21    char *_xUnits;
22    char *_yUnits;
23    char *_zUnits;
24    char *_vUnits;
25
26    float *_values;
27    bool _initialized;
28    void GetVectorRange(void);
29
30public:
31    Unirect3d(float xMin, float xMax, size_t xNum,
32              float yMin, float yMax, size_t yNum,
33              float zMin, float zMax, size_t zNum,
34              size_t nValues, float *values, size_t nComponents) :
35        _xNum(xNum), _yNum(yNum), _zNum(zNum),
36        _nValues(nValues),
37        _nComponents(nComponents),
38        _xMin(xMin),         _xMax(xMax),
39        _yMin(yMin),         _yMax(yMax),
40        _zMin(zMin),         _zMax(zMax),
41        _xValueMin(FLT_MAX), _xValueMax(-FLT_MAX),
42        _yValueMin(FLT_MAX), _yValueMax(-FLT_MAX),
43        _zValueMin(FLT_MAX), _zValueMax(-FLT_MAX),
44        _magMin(DBL_MAX),    _magMax(-DBL_MAX),
45        _xUnits(NULL), _yUnits(NULL), _zUnits(NULL), _vUnits(NULL),
46        _values(NULL),
47        _initialized(false)
48    {
49        _initialized = true;
50    }
51
52    Unirect3d(size_t nComponents = 1) :
53        _nValues(0),
54        _nComponents(nComponents),
55        _xValueMin(FLT_MAX), _xValueMax(-FLT_MAX),
56        _yValueMin(FLT_MAX), _yValueMax(-FLT_MAX),
57        _zValueMin(FLT_MAX), _zValueMax(-FLT_MAX),
58        _magMin(DBL_MAX),    _magMax(-DBL_MAX),
59        _xUnits(NULL), _yUnits(NULL), _zUnits(NULL), _vUnits(NULL),
60        _values(NULL),
61        _initialized(false)
62    {
63        _nComponents = nComponents;
64    }
65    ~Unirect3d(void) {
66        if (_values != NULL) {
67            free(_values);
68        }
69        if (_xUnits != NULL) {
70            free(_xUnits);
71        }
72        if (_yUnits != NULL) {
73            free(_yUnits);
74        }
75        if (_zUnits != NULL) {
76            free(_zUnits);
77        }
78        if (_vUnits != NULL) {
79            free(_vUnits);
80        }
81    }
82    size_t xNum(void) {
83        return _xNum;
84    }
85    size_t yNum(void) {
86        return _yNum;
87    }
88    size_t zNum(void) {
89        return _zNum;
90    }
91    float xMin(void) {
92        return _xMin;
93    }
94    float yMin(void) {
95        return _yMin;
96    }
97    float zMin(void) {
98        return _zMin;
99    }
100    float xMax(void) {
101        return _xMax;
102    }
103    float yMax(void) {
104        return _yMax;
105    }
106    float zMax(void) {
107        return _zMax;
108    }
109    float xValueMin(void) {
110        return _xValueMin;
111    }
112    float yValueMin(void) {
113        return _yValueMin;
114    }
115    float zValueMin(void) {
116        return _zValueMin;
117    }
118    float xValueMax(void) {
119        return _xValueMax;
120    }
121    float yValueMax(void) {
122        return _yValueMax;
123    }
124    float zValueMax(void) {
125        return _zValueMax;
126    }
127    size_t nComponents(void) {
128        return _nComponents;
129    }
130    const char *xUnits(void) {
131        return _xUnits;
132    }
133    const char *yUnits(void) {
134        return _yUnits;
135    }
136    const char *zUnits(void) {
137        return _zUnits;
138    }
139    const char *vUnits(void) {
140        return _vUnits;
141    }
142    const float *values(void) {
143        return _values;
144    }
145    double magMin(void) {
146        if (_magMin == DBL_MAX) {
147            GetVectorRange();
148        }
149        TRACE("magMin=%g %g\n", _magMin, DBL_MAX);
150        return _magMin;
151    }
152    double magMax(void) {
153        if (_magMax == -DBL_MAX) {
154            GetVectorRange();
155        }
156        TRACE("magMax=%g %g\n", _magMax, -DBL_MAX);
157        return _magMax;
158    }
159    const float *SaveValues(void) {
160        float *values;
161        values = _values;
162        _values = NULL;
163        _nValues = 0;
164        return values;
165    }
166    size_t nValues(void) {
167        return _nValues;
168    }
169    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
170    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
171
172    bool ImportDx(Rappture::Outcome &result, size_t nComponents,
173                  size_t length, char *string);
174    bool Convert(Unirect2d *dataPtr);
175    bool Resample(Rappture::Outcome &context, size_t nSamples = 30);
176    bool isInitialized(void) {
177        return _initialized;
178    }
179};
180
181class Unirect2d {
182    size_t _xNum, _yNum;
183    size_t _nValues;
184    size_t _nComponents;
185
186    float _xMin, _xMax;
187    float _yMin, _yMax;
188    float _xValueMin, _xValueMax;
189    float _yValueMin, _yValueMax;
190
191    char *_xUnits;
192    char *_yUnits;
193    char *_vUnits;
194
195    float *_values;
196    bool _initialized;
197
198public:
199    Unirect2d(size_t nComponents = 1) {
200        _values = NULL;
201        _initialized = false;
202        _xNum = _yNum = 0;
203        _nValues = 0;
204        _xUnits = _yUnits = _vUnits = NULL;
205        _nComponents = nComponents;
206    }
207    ~Unirect2d(void) {
208        if (_values != NULL) {
209            free(_values);
210        }
211        if (_xUnits != NULL) {
212            free(_xUnits);
213        }
214        if (_yUnits != NULL) {
215            free(_yUnits);
216        }
217        if (_vUnits != NULL) {
218            free(_vUnits);
219        }
220    }
221    size_t xNum(void) {
222        return _xNum;
223    }
224    size_t yNum(void) {
225        return _yNum;
226    }
227    float xMin(void) {
228        return _xMin;
229    }
230    float yMin(void) {
231        return _yMin;
232    }
233    float xMax(void) {
234        return _xMax;
235    }
236    float yMax(void) {
237        return _yMax;
238    }
239    const char *xUnits(void) {
240        return _xUnits;
241    }
242    const char *yUnits(void) {
243        return _yUnits;
244    }
245    const char *vUnits(void) {
246        return _vUnits;
247    }
248    float *values(void) {
249        return _values;
250    }
251    float xValueMin(void) {
252        return _xValueMin;
253    }
254    float yValueMin(void) {
255        return _yValueMin;
256    }
257    float xValueMax(void) {
258        return _xValueMax;
259    }
260    float yValueMax(void) {
261        return _yValueMax;
262    }
263    size_t nComponents(void) {
264        return _nComponents;
265    }
266    float *transferValues(void) {
267        float *values;
268        values = _values;
269        _values = NULL;
270        _nValues = 0;
271        return values;
272    }
273    size_t nValues(void) {
274        return _nValues;
275    }
276    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
277    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
278    bool isInitialized(void) {
279        return _initialized;
280    }
281};
282
283}
284
285#endif /*_UNIRECT_H*/
286
Note: See TracBrowser for help on using the repository browser.