Subversion Repositories public iLand

Rev

Rev 647 | Rev 671 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 647 Rev 648
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/layeredgrid.h':
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/layeredgrid.h':
2
#ifndef LAYEREDGRID_H
2
#ifndef LAYEREDGRID_H
3
#define LAYEREDGRID_H
3
#define LAYEREDGRID_H
4
4
5
#include "grid.h"
5
#include "grid.h"
6
6
7
/** LayeredGrid
7
/** LayeredGrid
8

8

9
  */
9
  */
10
10
11
class LayeredGridBase
11
class LayeredGridBase
12
{
12
{
13
public:
13
public:
14
    // access to properties
14
    // access to properties
15
    virtual int sizeX() const=0;
15
    virtual int sizeX() const=0;
16
    virtual int sizeY() const=0;
16
    virtual int sizeY() const=0;
17
    virtual QRectF metricRect() const=0;
17
    virtual QRectF metricRect() const=0;
18
    virtual QRectF cellRect(const QPoint &p) const=0;
18
    virtual QRectF cellRect(const QPoint &p) const=0;
19
    // available variables
19
    // available variables
20
    virtual const QStringList names() const=0;
20
    virtual const QStringList names() const=0;
21
    // statistics
21
    // statistics
22
    /// retrieve min and max of variable 'index'
22
    /// retrieve min and max of variable 'index'
23
    virtual void range(double &rMin, double &rMax, const int index) const=0;
23
    virtual void range(double &rMin, double &rMax, const int index) const=0;
24
24
25
    // data access functions
25
    // data access functions
26
    virtual double value(const float x, const float y, const int index) const = 0;
26
    virtual double value(const float x, const float y, const int index) const = 0;
-
 
27
    virtual double value(const QPointF &world_coord, const int index) const = 0;
27
    virtual double value(const int ix, const int iy, const int index) const = 0;
28
    virtual double value(const int ix, const int iy, const int index) const = 0;
28
    virtual double value(const int grid_index, const int index) const = 0;
29
    virtual double value(const int grid_index, const int index) const = 0;
29
};
30
};
30
31
31
template <class T>
32
template <class T>
32
class LayeredGrid: public LayeredGridBase
33
class LayeredGrid: public LayeredGridBase
33
{
34
{
34
public:
35
public:
35
    LayeredGrid(const Grid<T>& grid) { mGrid = &grid; }
36
    LayeredGrid(const Grid<T>& grid) { mGrid = &grid; }
36
    LayeredGrid() { mGrid = 0; }
37
    LayeredGrid() { mGrid = 0; }
37
    QRectF cellRect(const QPoint &p) const { return mGrid->cellRect(p); }
38
    QRectF cellRect(const QPoint &p) const { return mGrid->cellRect(p); }
38
    QRectF metricRect() const { return mGrid->metricRect(); }
39
    QRectF metricRect() const { return mGrid->metricRect(); }
39
    int sizeX() const { return mGrid->sizeX(); }
40
    int sizeX() const { return mGrid->sizeX(); }
40
    int sizeY() const { return mGrid->sizeY();}
41
    int sizeY() const { return mGrid->sizeY();}
41
42
42
    virtual double value(const T& data, const int index) const = 0;
43
    virtual double value(const T& data, const int index) const = 0;
43
    double value(const T* ptr, const int index) const { return value(mGrid->constValueAtIndex(mGrid->indexOf(ptr)), index);  }
44
    double value(const T* ptr, const int index) const { return value(mGrid->constValueAtIndex(mGrid->indexOf(ptr)), index);  }
44
    double value(const int grid_index, const int index) const { return value(mGrid->constValueAtIndex(grid_index), index); }
45
    double value(const int grid_index, const int index) const { return value(mGrid->constValueAtIndex(grid_index), index); }
45
    double value(const float x, const float y, const int index) const { return value(mGrid->constValueAt(x,y), index); }
46
    double value(const float x, const float y, const int index) const { return value(mGrid->constValueAt(x,y), index); }
-
 
47
    double value(const QPointF &world_coord, const int index) const { return value(mGrid->constValueAt(world_coord), index); }
46
    double value(const int ix, const int iy, const int index) const { return value(mGrid->constValueAtIndex(ix, iy), index); }
48
    double value(const int ix, const int iy, const int index) const { return value(mGrid->constValueAtIndex(ix, iy), index); }
47
    void range(double &rMin, double &rMax, const int index) const { rMin=9999999999.; rMax=-99999999999.;
49
    void range(double &rMin, double &rMax, const int index) const { rMin=9999999999.; rMax=-99999999999.;
48
                                                              for (int i=0;i<mGrid->count(); ++i) {
50
                                                              for (int i=0;i<mGrid->count(); ++i) {
49
                                                                  rMin=qMin(rMin, value(i, index));
51
                                                                  rMin=qMin(rMin, value(i, index));
50
                                                                  rMax=qMax(rMax, value(i,index));}}
52
                                                                  rMax=qMax(rMax, value(i,index));}}
51
53
52
protected:
54
protected:
53
    const Grid<T> *mGrid;
55
    const Grid<T> *mGrid;
54
};
56
};
55
57
56
#endif // LAYEREDGRID_H
58
#endif // LAYEREDGRID_H
57
 
59