source: trunk/VUT/GtpVisibility/include/VisibilityInfo.h @ 316

Revision 316, 3.5 KB checked in by mattausch, 19 years ago (diff)

queries are realized as templates

Line 
1#ifndef _VisibilityInfo_H__
2#define _VisibilityInfo_H__
3
4#include <vector>
5
6#include "VisibilityMesh.h"
7#include "HierarchyInterface.h"
8
9namespace GtpVisibility {
10 
11/** Class storing visibility information.
12*/
13template<typename T>
14class VisibilityInfo
15{
16public:
17        VisibilityInfo(T source, const int visiblePixels, const int projectedPixels);
18
19        /** set source of the info.
20        */
21        void SetSource(T source);
22        /** get source of the info.
23        */
24        T GetSource() const;
25
26        int GetVisiblePixels() const;
27        int GetProjectedPixels() const;
28
29        void SetVisiblePixels(int vis);
30        void SetProjectedPixels(int vis);
31       
32        /** Computes ratio of visible to projected pixels. */
33        float ComputeRelativeVisibility();
34
35        /** Adds visibility to current visibility information.
36        */
37        void AddVisibility(const VisibilityInfo<T> &info);
38        /** Adds visibility to current visibility information.
39        */
40        void AddVisibility(const int visiblePixels, const int projectedPixels);
41
42protected:
43        /** number of visible pixels.
44        */
45    int mVisiblePixels;
46        /** number of projected pixels
47        */
48        int mProjectedPixels;
49
50        T mSource;
51};
52
53//-----------------------------------------------------------------------
54template <typename T>
55T VisibilityInfo<T>::GetSource() const
56{
57        return mSource;
58}
59
60//-----------------------------------------------------------------------
61template <typename T>
62void VisibilityInfo<T>::SetSource(T source)
63{
64        return mSource;
65}
66
67//-----------------------------------------------------------------------
68template <typename T>
69VisibilityInfo<T>::VisibilityInfo(T source, const int visiblePixels, const int projectedPixels):
70mSource(source), mProjectedPixels(projectedPixels), mVisiblePixels(visiblePixels)
71{
72}
73
74//-----------------------------------------------------------------------
75template <typename T>
76int VisibilityInfo<T>::GetVisiblePixels() const
77{
78        return mVisiblePixels;
79}
80//-----------------------------------------------------------------------
81template <typename T>
82int VisibilityInfo<T>::GetProjectedPixels() const
83{
84        return mProjectedPixels;
85}
86//-----------------------------------------------------------------------
87template <typename T>
88void VisibilityInfo<T>::SetVisiblePixels(int vis)
89{
90        mVisiblePixels = vis;
91}
92//-----------------------------------------------------------------------
93template <typename T>
94void VisibilityInfo<T>::SetProjectedPixels(int vis)
95{
96        mProjectedPixels = vis;
97}
98//-----------------------------------------------------------------------
99template <typename T>
100float VisibilityInfo<T>::ComputeRelativeVisibility()
101{
102        if (!mProjectedPixels)
103                return 0;
104
105        return (float)mVisiblePixels / (float)mProjectedPixels;
106}
107//-----------------------------------------------------------------------
108template <typename T>
109void VisibilityInfo<T>::AddVisibility(const VisibilityInfo<T> &info)
110{
111        mVisiblePixels += info.GetVisiblePixels();
112        mProjectedPixels += info.GetProjectedPixels();
113}
114
115//-----------------------------------------------------------------------
116template <typename T>
117void VisibilityInfo<T>::AddVisibility(const int visiblePixels, const int projectedPixels)
118{
119        mVisiblePixels += visiblePixels;
120        mProjectedPixels += projectedPixels;
121}
122
123typedef VisibilityInfo<Patch *> PatchInfo;
124typedef VisibilityInfo<Mesh *> MeshInfo;
125typedef VisibilityInfo<HierarchyNode *> NodeInfo;
126
127
128template<class T>
129struct InfoContainer
130{
131        typedef std::vector<VisibilityInfo<T> > Type;
132};
133
134typedef std::vector<PatchInfo> PatchInfoContainer;
135typedef std::vector<MeshInfo> MeshInfoContainer;
136typedef std::vector<NodeInfo> NodeInfoContainer;
137
138} // namespace GtpVisibility
139
140#endif
Note: See TracBrowser for help on using the repository browser.