#ifndef _VisibilityInfo_H__ #define _VisibilityInfo_H__ #include //#include "VisibilityMesh.h" #include "HierarchyInterface.h" namespace GtpVisibility { /** Class storing visibility information. */ template class VisibilityInfo { public: VisibilityInfo(T source, const int visiblePixels, const int projectedPixels); /** set source of the info. */ void SetSource(T source); /** get source of the info. */ T GetSource() const; int GetVisiblePixels() const; int GetProjectedPixels() const; void SetVisiblePixels(int vis); void SetProjectedPixels(int vis); /** Computes ratio of visible to projected pixels. */ float ComputeRelativeVisibility(); /** Adds visibility to current visibility information. */ void AddVisibility(const VisibilityInfo &info); /** Adds visibility to current visibility information. */ void AddVisibility(const int visiblePixels, const int projectedPixels); bool operator<(const VisibilityInfo &b) const { return mSource < b.mSource; } bool operator==(const VisibilityInfo &b) const { return mSource == b.mSource; } protected: /** number of visible pixels. */ int mVisiblePixels; /** number of projected pixels */ int mProjectedPixels; T mSource; }; //----------------------------------------------------------------------- template T VisibilityInfo::GetSource() const { return mSource; } //----------------------------------------------------------------------- template void VisibilityInfo::SetSource(T source) { return mSource; } //----------------------------------------------------------------------- template VisibilityInfo::VisibilityInfo(T source, const int visiblePixels, const int projectedPixels): mSource(source), mProjectedPixels(projectedPixels), mVisiblePixels(visiblePixels) { } //----------------------------------------------------------------------- template int VisibilityInfo::GetVisiblePixels() const { return mVisiblePixels; } //----------------------------------------------------------------------- template int VisibilityInfo::GetProjectedPixels() const { return mProjectedPixels; } //----------------------------------------------------------------------- template void VisibilityInfo::SetVisiblePixels(int vis) { mVisiblePixels = vis; } //----------------------------------------------------------------------- template void VisibilityInfo::SetProjectedPixels(int vis) { mProjectedPixels = vis; } //----------------------------------------------------------------------- template float VisibilityInfo::ComputeRelativeVisibility() { if (!mProjectedPixels) return 0; return (float)mVisiblePixels / (float)mProjectedPixels; } //----------------------------------------------------------------------- template void VisibilityInfo::AddVisibility(const VisibilityInfo &info) { mVisiblePixels += info.GetVisiblePixels(); mProjectedPixels += info.GetProjectedPixels(); } //----------------------------------------------------------------------- template void VisibilityInfo::AddVisibility(const int visiblePixels, const int projectedPixels) { mVisiblePixels += visiblePixels; mProjectedPixels += projectedPixels; } template struct InfoContainer { typedef std::vector > Type; }; } // namespace GtpVisibility #endif