#ifndef _VisibilityInfo_H__ #define _VisibilityInfo_H__ #include #include "VisibilityMesh.h" #include "HierarchyInterface.h" namespace GtpVisibility { /** Class storing visibility information. */ class VisibilityInfo { public: VisibilityInfo(const int visiblePixels, const int projectedPixels); 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 vrojectedPixels); protected: /** number of visible pixels. */ int mVisiblePixels; /** number of projected pixels */ int mProjectedPixels; }; /** Class storing the visibility information of a hierarchy node. */ class NodeInfo: public VisibilityInfo { public: NodeInfo(HierarchyNode *node, const int visiblePixels, const int projectedPixels); void SetNode(HierarchyNode *node); HierarchyNode *GetNode() const; //bool operator<(const NodeInfo& rhs) const {return mNode < rhs.mNode;} protected: /** Pointer to the hierarchy nnode. */ HierarchyNode *mNode; }; /** Class storing the visibility information of a mesh. */ class MeshInfo: public VisibilityInfo { public: MeshInfo(Mesh *mesh, const int visiblePixels, const int projectedPixels); Mesh *GetMesh() const; void SetMesh(Mesh *mesh); //bool operator<(const MeshInfo& rhs) const {return mMesh < rhs.mMesh;} //bool operator==(const MeshInfo& rhs) const {return mMesh == rhs.mMesh;} protected: /** Pointer to the mesh. */ Mesh *mMesh; }; /** Class storing the visibility information of a patch, i.e., parts of meshes having the same material properties. */ class PatchInfo: public VisibilityInfo { public: PatchInfo(Patch *Patch, const int visiblePixels, const int projectedPixels); Patch *GetPatch() const; void SetPatch(Patch *patch); protected: /** Pointer to the patch. */ Patch *mPatch; }; //TODO: this define shall be replaced by template typedef #define InfoContainer std::vector //#define InfoContainer std::set }; #endif