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

Last change on this file since 2852 was 2831, checked in by ldelgass, 12 years ago

Refactor texture classes, misc. cleanups, cut down on header pollution -- still
need to fix header deps in Makefile.in

  • Property svn:eol-style set to native
File size: 6.5 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2#ifndef _UNIRECT_H
3#define _UNIRECT_H
4
5#include <float.h>
6
7#include <rappture.h>
8
9#include "Trace.h"
10
11namespace Rappture {
12
13class Unirect2d;
14
15class Unirect3d
16{
17public:
18    Unirect3d(float xMin, float xMax, size_t xNum,
19              float yMin, float yMax, size_t yNum,
20              float zMin, float zMax, size_t zNum,
21              size_t nValues, float *values, size_t nComponents) :
22        _xNum(xNum), _yNum(yNum), _zNum(zNum),
23        _nValues(nValues),
24        _nComponents(nComponents),
25        _xMin(xMin), _xMax(xMax),
26        _yMin(yMin), _yMax(yMax),
27        _zMin(zMin), _zMax(zMax),
28        _xValueMin(FLT_MAX), _xValueMax(-FLT_MAX),
29        _yValueMin(FLT_MAX), _yValueMax(-FLT_MAX),
30        _zValueMin(FLT_MAX), _zValueMax(-FLT_MAX),
31        _magMin(DBL_MAX), _magMax(-DBL_MAX),
32        _xUnits(NULL), _yUnits(NULL), _zUnits(NULL), _vUnits(NULL),
33        _values(NULL),
34        _initialized(false)
35    {
36        _initialized = true;
37    }
38
39    Unirect3d(size_t nComponents = 1) :
40        _nValues(0),
41        _nComponents(nComponents),
42        _xValueMin(FLT_MAX), _xValueMax(-FLT_MAX),
43        _yValueMin(FLT_MAX), _yValueMax(-FLT_MAX),
44        _zValueMin(FLT_MAX), _zValueMax(-FLT_MAX),
45        _magMin(DBL_MAX), _magMax(-DBL_MAX),
46        _xUnits(NULL), _yUnits(NULL), _zUnits(NULL), _vUnits(NULL),
47        _values(NULL),
48        _initialized(false)
49    {
50        _nComponents = nComponents;
51    }
52
53    ~Unirect3d()
54    {
55        if (_values != NULL) {
56            free(_values);
57        }
58        if (_xUnits != NULL) {
59            free(_xUnits);
60        }
61        if (_yUnits != NULL) {
62            free(_yUnits);
63        }
64        if (_zUnits != NULL) {
65            free(_zUnits);
66        }
67        if (_vUnits != NULL) {
68            free(_vUnits);
69        }
70    }
71
72    size_t xNum()
73    {
74        return _xNum;
75    }
76
77    size_t yNum()
78    {
79        return _yNum;
80    }
81
82    size_t zNum()
83    {
84        return _zNum;
85    }
86
87    float xMin()
88    {
89        return _xMin;
90    }
91
92    float yMin()
93    {
94        return _yMin;
95    }
96
97    float zMin()
98    {
99        return _zMin;
100    }
101
102    float xMax()
103    {
104        return _xMax;
105    }
106
107    float yMax()
108    {
109        return _yMax;
110    }
111
112    float zMax()
113    {
114        return _zMax;
115    }
116
117    float xValueMin()
118    {
119        return _xValueMin;
120    }
121
122    float yValueMin()
123    {
124        return _yValueMin;
125    }
126
127    float zValueMin()
128    {
129        return _zValueMin;
130    }
131
132    float xValueMax()
133    {
134        return _xValueMax;
135    }
136
137    float yValueMax()
138    {
139        return _yValueMax;
140    }
141
142    float zValueMax()
143    {
144        return _zValueMax;
145    }
146
147    size_t nComponents()
148    {
149        return _nComponents;
150    }
151
152    const char *xUnits()
153    {
154        return _xUnits;
155    }
156
157    const char *yUnits()
158    {
159        return _yUnits;
160    }
161    const char *zUnits()
162    {
163        return _zUnits;
164    }
165
166    const char *vUnits()
167    {
168        return _vUnits;
169    }
170
171    const float *values()
172    {
173        return _values;
174    }
175
176    double magMin()
177    {
178        if (_magMin == DBL_MAX) {
179            GetVectorRange();
180        }
181        TRACE("magMin=%g %g\n", _magMin, DBL_MAX);
182        return _magMin;
183    }
184
185    double magMax()
186    {
187        if (_magMax == -DBL_MAX) {
188            GetVectorRange();
189        }
190        TRACE("magMax=%g %g\n", _magMax, -DBL_MAX);
191        return _magMax;
192    }
193
194    const float *SaveValues()
195    {
196        float *values;
197        values = _values;
198        _values = NULL;
199        _nValues = 0;
200        return values;
201    }
202
203    size_t nValues()
204    {
205        return _nValues;
206    }
207
208    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
209
210    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
211
212    bool ImportDx(Rappture::Outcome &result, size_t nComponents,
213                  size_t length, char *string);
214
215    bool Convert(Unirect2d *dataPtr);
216
217    bool Resample(Rappture::Outcome &context, size_t nSamples = 30);
218
219    bool isInitialized()
220    {
221        return _initialized;
222    }
223
224private:
225    void GetVectorRange();
226
227    size_t _xNum, _yNum, _zNum;
228    size_t _nValues;
229    size_t _nComponents;
230    float _xMin, _xMax, _yMin, _yMax, _zMin, _zMax;
231    float _xValueMin, _xValueMax;
232    float _yValueMin, _yValueMax;
233    float _zValueMin, _zValueMax;
234    double _magMin, _magMax;            /* Range of magnitudes of vector
235                                         * data. */
236    char *_xUnits;
237    char *_yUnits;
238    char *_zUnits;
239    char *_vUnits;
240
241    float *_values;
242    bool _initialized;
243};
244
245class Unirect2d
246{
247public:
248    Unirect2d(size_t nComponents = 1) :
249        _xNum(0), _yNum(0),
250        _nValues(0),
251        _nComponents(nComponents),
252        _xUnits(NULL), _yUnits(NULL), _vUnits(NULL),
253        _values(NULL),
254        _initialized(false)
255    {
256    }
257
258    ~Unirect2d()
259    {
260        if (_values != NULL) {
261            free(_values);
262        }
263        if (_xUnits != NULL) {
264            free(_xUnits);
265        }
266        if (_yUnits != NULL) {
267            free(_yUnits);
268        }
269        if (_vUnits != NULL) {
270            free(_vUnits);
271        }
272    }
273
274    size_t xNum()
275    {
276        return _xNum;
277    }
278
279    size_t yNum()
280    {
281        return _yNum;
282    }
283
284    float xMin()
285    {
286        return _xMin;
287    }
288
289    float yMin()
290    {
291        return _yMin;
292    }
293
294    float xMax()
295    {
296        return _xMax;
297    }
298
299    float yMax()
300    {
301        return _yMax;
302    }
303
304    const char *xUnits()
305    {
306        return _xUnits;
307    }
308
309    const char *yUnits()
310    {
311        return _yUnits;
312    }
313
314    const char *vUnits()
315    {
316        return _vUnits;
317    }
318
319    float *values()
320    {
321        return _values;
322    }
323
324    float xValueMin()
325    {
326        return _xValueMin;
327    }
328
329    float yValueMin()
330    {
331        return _yValueMin;
332    }
333
334    float xValueMax()
335    {
336        return _xValueMax;
337    }
338
339    float yValueMax()
340    {
341        return _yValueMax;
342    }
343
344    size_t nComponents()
345    {
346        return _nComponents;
347    }
348
349    float *transferValues()
350    {
351        float *values;
352        values = _values;
353        _values = NULL;
354        _nValues = 0;
355        return values;
356    }
357
358    size_t nValues()
359    {
360        return _nValues;
361    }
362
363    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
364   
365    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
366   
367    bool isInitialized()
368    {
369        return _initialized;
370    }
371
372private:
373    size_t _xNum, _yNum;
374    size_t _nValues;
375    size_t _nComponents;
376
377    float _xMin, _xMax;
378    float _yMin, _yMax;
379    float _xValueMin, _xValueMax;
380    float _yValueMin, _yValueMax;
381
382    char *_xUnits;
383    char *_yUnits;
384    char *_vUnits;
385
386    float *_values;
387    bool _initialized;
388};
389
390}
391
392#endif
393
Note: See TracBrowser for help on using the repository browser.