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
|