Subversion Repositories public iLand

Rev

Rev 40 | Rev 51 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 40 Rev 47
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/stampcontainer.h':
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/stampcontainer.h':
2
#ifndef STAMPCONTAINER_H
2
#ifndef STAMPCONTAINER_H
3
#define STAMPCONTAINER_H
3
#define STAMPCONTAINER_H
4
4
5
#include "stamp.h"
5
#include "stamp.h"
6
#include "grid.h"
6
#include "grid.h"
7
7
8
/** Collection of @class Stamp for one tree species.
8
/** Collection of @class Stamp for one tree species.
9
  Per species several stamps are stored (different BHD, different HD relations). This class
9
  Per species several stamps are stored (different BHD, different HD relations). This class
10
  encapsulates storage and access to these stamps. The design goal is to deliver high
10
  encapsulates storage and access to these stamps. The design goal is to deliver high
11
  access speeds for the "stamp()" method.
11
  access speeds for the "stamp()" method.
12
  Use getStamp(bhd, hd) or getStamp(bhd, height) to access. */
12
  Use getStamp(bhd, hd) or getStamp(bhd, height) to access. */
13
class StampContainer
13
class StampContainer
14
{
14
{
15
public:
15
public:
16
    StampContainer();
16
    StampContainer();
17
    ~StampContainer();
17
    ~StampContainer();
18
    void useLookup(const bool use) { m_useLookup = use; }
18
    void useLookup(const bool use) { m_useLookup = use; }
19
    /// addStamp() add a pre-allocated stamp @param stamp to internal collection. Caller must allocate stamp on the heap,
19
    /// addStamp() add a pre-allocated stamp @param stamp to internal collection. Caller must allocate stamp on the heap,
20
    /// freeing is done by this class.
20
    /// freeing is done by this class.
21
    int addStamp(Stamp* stamp, const float bhd, const float hd_value);
-
 
-
 
21
    int addStamp(Stamp* stamp, const float bhd, const float hd_value, const float crown_radius_m);
22
    int addReaderStamp(Stamp *stamp, const float crown_radius_m);
22
    int addReaderStamp(Stamp *stamp, const float crown_radius_m);
23
    const Stamp* stamp(const float bhd_cm, const float height_m) const;
23
    const Stamp* stamp(const float bhd_cm, const float height_m) const;
24
    const Stamp* readerStamp(const float crown_radius_m) const; ///< retrieve reader-stamp. @param radius of crown in m. @return the appropriate stamp or NULL if not found.
24
    const Stamp* readerStamp(const float crown_radius_m) const; ///< retrieve reader-stamp. @param radius of crown in m. @return the appropriate stamp or NULL if not found.
25
    const int count() const { return m_stamps.count(); }
25
    const int count() const { return m_stamps.count(); }
26
    /// save the content of the StampContainer to the output stream (binary encoding)
26
    /// save the content of the StampContainer to the output stream (binary encoding)
27
    void save(QDataStream &out);
27
    void save(QDataStream &out);
28
    /// load the content of the StampContainer to the output stream (binary encoding)
28
    /// load the content of the StampContainer to the output stream (binary encoding)
29
    void load(QDataStream &in);
29
    void load(QDataStream &in);
30
30
31
    /** factory creation function for stamps of different size.
31
    /** factory creation function for stamps of different size.
32
        newStamp() creates new Stamp-Objects on the heap with a given type (see @enum Stamp::StampType).*/
32
        newStamp() creates new Stamp-Objects on the heap with a given type (see @enum Stamp::StampType).*/
33
    static Stamp* newStamp(const Stamp::StampType type);
33
    static Stamp* newStamp(const Stamp::StampType type);
-
 
34
    /** this functions attaches the appropriate reader (dep. on crown radius) to each stamp of the container.
-
 
35
        The reader-stamp is returned by a call to the reader()-function of the Stamp itself.
-
 
36
        @param Container holding the reader stamps.*/
-
 
37
    void attachReaderStamps(const StampContainer &source);
34
38
35
    QString dump();
39
    QString dump();
36
40
37
private:
41
private:
38
    static const int cBHDclassWidth;
42
    static const int cBHDclassWidth;
39
    static const int cHDclassWidth;
43
    static const int cHDclassWidth;
40
    static const int cBHDclassLow; ///< bhd classes start with 2: class 0 = 2..6, class1 = 6..10
44
    static const int cBHDclassLow; ///< bhd classes start with 2: class 0 = 2..6, class1 = 6..10
41
    static const int cHDclassLow; ///< hd classes offset is 40: class 0 = 40-50, class 1 = 50-60
45
    static const int cHDclassLow; ///< hd classes offset is 40: class 0 = 40-50, class 1 = 50-60
42
    static const int cBHDclassCount; ///< class count, 50: highest class = 50*4 +- 2 = 198 - 202
46
    static const int cBHDclassCount; ///< class count, 50: highest class = 50*4 +- 2 = 198 - 202
43
    static const int cHDclassCount; ///< class count. highest class: 140-150
47
    static const int cHDclassCount; ///< class count. highest class: 140-150
44
    struct StampItem {
48
    struct StampItem {
45
        Stamp* stamp;
49
        Stamp* stamp;
46
        float bhd;
50
        float bhd;
47
        float hd;
51
        float hd;
-
 
52
        float crown_radius;
48
    };
53
    };
49
    inline int getKey(const float bhd, const float hd_value);
54
    inline int getKey(const float bhd, const float hd_value);
50
    int m_maxBhd;
55
    int m_maxBhd;
51
    bool m_useLookup; // use lookup table?
56
    bool m_useLookup; // use lookup table?
52
    QList<StampItem> m_stamps;
57
    QList<StampItem> m_stamps;
53
    Grid<Stamp*> m_lookup;
58
    Grid<Stamp*> m_lookup;
54
};
59
};
55
60
56
#endif // STAMPCONTAINER_H
61
#endif // STAMPCONTAINER_H
57
 
62