Subversion Repositories public iLand

Rev

Rev 22 | Rev 27 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 22 Rev 25
Line 26... Line 26...
26
    const int sizeY() const { return mSizeY; }
26
    const int sizeY() const { return mSizeY; }
27
    const float metricSizeX() const { return mSizeX*mCellsize; }
27
    const float metricSizeX() const { return mSizeX*mCellsize; }
28
    const float metricSizeY() const { return mSizeY*mCellsize; }
28
    const float metricSizeY() const { return mSizeY*mCellsize; }
29
    const float cellsize() const { return mCellsize; }
29
    const float cellsize() const { return mCellsize; }
30
    // query
30
    // query
31
    T& valueAtIndex(const QPoint& pos); /// value at position defined by indices (x,y)
-
 
32
    T& valueAt(const QPointF& posf); /// value at position defined by metric coordinates
-
 
-
 
31
    T& valueAtIndex(const QPoint& pos); ///< value at position defined by indices (x,y)
-
 
32
    T& valueAt(const QPointF& posf); ///< value at position defined by metric coordinates
33
    QPoint indexAt(const QPointF& pos) { return QPoint(int((pos.x()-mOffset.x()) / mCellsize),  int((pos.y()-mOffset.y())/mCellsize)); } /// get index of value at position pos (metric)
33
    QPoint indexAt(const QPointF& pos) { return QPoint(int((pos.x()-mOffset.x()) / mCellsize),  int((pos.y()-mOffset.y())/mCellsize)); } /// get index of value at position pos (metric)
34
    bool isIndexValid(const QPoint& pos) { return (pos.x()>=0 && pos.x()<mSizeX && pos.y()>=0 && pos.y()<mSizeY); } /// get index of value at position pos (index)
34
    bool isIndexValid(const QPoint& pos) { return (pos.x()>=0 && pos.x()<mSizeX && pos.y()>=0 && pos.y()<mSizeY); } /// get index of value at position pos (index)
35
    void validate(QPoint &pos) { pos.setX( qMax(qMin(pos.x(), mSizeX-1), 0) );  pos.setY( qMax(qMin(pos.y(), mSizeY-1), 0) );} /// ensure that "pos" is a valid key. if out of range, pos is set to minimum/maximum values.
35
    void validate(QPoint &pos) { pos.setX( qMax(qMin(pos.x(), mSizeX-1), 0) );  pos.setY( qMax(qMin(pos.y(), mSizeY-1), 0) );} /// ensure that "pos" is a valid key. if out of range, pos is set to minimum/maximum values.
36
    QPointF getCellCoordinates(const QPoint &pos) { return QPointF( (pos.x()+0.5)*mCellsize+mOffset.x(), (pos.y()+0.5)*mCellsize + mOffset.y());} /// get metric coordinates of the cells center
36
    QPointF getCellCoordinates(const QPoint &pos) { return QPointF( (pos.x()+0.5)*mCellsize+mOffset.x(), (pos.y()+0.5)*mCellsize + mOffset.y());} /// get metric coordinates of the cells center
37
    inline  T* begin() { return mData; } /// get "iterator" pointer
-
 
38
    inline  T* end() { return &(mData[mCount]); } /// get iterator end-pointer
-
 
-
 
37
    inline  T* begin() { return mData; } ///< get "iterator" pointer
-
 
38
    inline  T* end() { return &(mData[mCount]); } ///< get iterator end-pointer
-
 
39
    QPoint indexOf(T* element); ///< retrieve index (x/y) of the pointer element. returns -1/-1 if element is not valid.
39
40
40
41
41
private:
42
private:
42
    T* mData;
43
    T* mData;
43
    QPointF mOffset;
44
    QPointF mOffset;
Line 96... Line 97...
96
    if (mOffset.y()+cellsize*dy<rect.bottom())
97
    if (mOffset.y()+cellsize*dy<rect.bottom())
97
        dy++;
98
        dy++;
98
    return setup(cellsize, dx, dy);
99
    return setup(cellsize, dx, dy);
99
}
100
}
100
101
-
 
102
template <class T>
-
 
103
QPoint Grid<T>::indexOf(T* element)
-
 
104
{
-
 
105
    QPoint result(-1,-1);
-
 
106
    if (element==NULL || element<mData || element>=end())
-
 
107
        return result;
-
 
108
    int idx = element - mData;
-
 
109
    result.setX( idx / mSizeX);
-
 
110
    result.setY( idx % mSizeX);
-
 
111
    return result;
-
 
112
}
101
113
102
#endif // GRID_H
114
#endif // GRID_H