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

RevLine 
[65]1#ifndef _VisibilityInfo_H__
2#define _VisibilityInfo_H__
3
4#include <vector>
5
6#include "VisibilityMesh.h"
7#include "HierarchyInterface.h"
8
9namespace GtpVisibility {
[316]10 
[145]11/** Class storing visibility information.
[71]12*/
[316]13template<typename T>
14class VisibilityInfo
[71]15{
16public:
[316]17        VisibilityInfo(T source, const int visiblePixels, const int projectedPixels);
[65]18
[316]19        /** set source of the info.
20        */
21        void SetSource(T source);
22        /** get source of the info.
23        */
24        T GetSource() const;
25
[145]26        int GetVisiblePixels() const;
27        int GetProjectedPixels() const;
[130]28
[145]29        void SetVisiblePixels(int vis);
30        void SetProjectedPixels(int vis);
31       
32        /** Computes ratio of visible to projected pixels. */
33        float ComputeRelativeVisibility();
[143]34
[145]35        /** Adds visibility to current visibility information.
36        */
[316]37        void AddVisibility(const VisibilityInfo<T> &info);
[150]38        /** Adds visibility to current visibility information.
39        */
[316]40        void AddVisibility(const int visiblePixels, const int projectedPixels);
[143]41
[145]42protected:
[150]43        /** number of visible pixels.
44        */
[145]45    int mVisiblePixels;
[150]46        /** number of projected pixels
47        */
[316]48        int mProjectedPixels;
49
50        T mSource;
[145]51};
52
[316]53//-----------------------------------------------------------------------
54template <typename T>
55T VisibilityInfo<T>::GetSource() const
56{
57        return mSource;
58}
[143]59
[316]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;
[141]104
[316]105        return (float)mVisiblePixels / (float)mProjectedPixels;
106}
107//-----------------------------------------------------------------------
108template <typename T>
109void VisibilityInfo<T>::AddVisibility(const VisibilityInfo<T> &info)
[71]110{
[316]111        mVisiblePixels += info.GetVisiblePixels();
112        mProjectedPixels += info.GetProjectedPixels();
113}
[65]114
[316]115//-----------------------------------------------------------------------
116template <typename T>
117void VisibilityInfo<T>::AddVisibility(const int visiblePixels, const int projectedPixels)
[159]118{
[316]119        mVisiblePixels += visiblePixels;
120        mProjectedPixels += projectedPixels;
121}
[159]122
[316]123typedef VisibilityInfo<Patch *> PatchInfo;
124typedef VisibilityInfo<Mesh *> MeshInfo;
125typedef VisibilityInfo<HierarchyNode *> NodeInfo;
[159]126
127
[316]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;
[65]137
[316]138} // namespace GtpVisibility
[65]139
140#endif
Note: See TracBrowser for help on using the repository browser.