source: GTP/trunk/Lib/Vis/Preprocessing/src/Intersectable.h @ 850

Revision 850, 2.0 KB checked in by mattausch, 18 years ago (diff)
Line 
1#ifndef __INTERSECTABLE_H
2#define __INTERSECTABLE_H
3
4#include "AxisAlignedBox3.h"
5#include "Pvs.h"
6
7struct VssRayContainer;
8
9class Intersectable {
10public:
11  // last mail id -> warning not thread safe!
12  // both mailId and mailbox should be unique for each thread!!!
13  static int sMailId;
14  static int sReservedMailboxes;
15  int mMailbox;
16 
17  // unique object Id
18  int mId;
19 
20  // universal counter
21  int mCounter;
22       
23  // object based pvs
24  KdPvs mKdPvs;
25 
26  enum { MESH_INSTANCE, TRANSFORMED_MESH_INSTANCE, SPHERE, VIEW_CELL, OGRE_MESH_INSTANCE };
27 
28  Intersectable():mMailbox(0) {}
29
30        void SetId(const int id) { mId = id; }
31        int GetId() { return mId; }
32       
33
34        static void NewMail(const int reserve = 1) {
35                sMailId += sReservedMailboxes;
36                sReservedMailboxes = reserve;
37        }
38       
39        void Mail() { mMailbox = sMailId; }
40        bool Mailed() const { return mMailbox == sMailId; }
41
42        void Mail(const int mailbox) { mMailbox = sMailId + mailbox; }
43        bool Mailed(const int mailbox) const { return mMailbox == sMailId + mailbox; }
44
45        int IncMail() { return ++mMailbox - sMailId; }
46
47
48    virtual AxisAlignedBox3 GetBox() = 0;
49        virtual int CastRay(Ray &ray) = 0;
50       
51        virtual bool IsConvex() = 0;
52        virtual bool IsWatertight() = 0;
53        virtual float IntersectionComplexity() = 0;
54 
55        virtual int NumberOfFaces() const = 0;
56        virtual int Type() const = 0;
57
58        virtual int GetRandomSurfacePoint(Vector3 &point, Vector3 &normal) = 0;
59
60        virtual int GetRandomVisibleSurfacePoint(Vector3 &point,
61                                                                                         Vector3 &normal,
62                                                                                         const Vector3 &viewpoint,
63                                                                                         const int maxTries) = 0;
64 
65        virtual ostream &Describe(ostream &s) = 0;
66       
67        virtual int GenerateSilhouetteRays(const int nrays,
68                                                                           const AxisAlignedBox3 &originBox,
69                                                                           const AxisAlignedBox3 &directionBox, VssRayContainer &rays)
70        {
71                return 0;
72        }
73
74        static bool GreaterCounter(const Intersectable *a,
75                                                         const Intersectable *b)
76        {
77                return a->mCounter > b->mCounter;
78        }
79};
80
81
82#endif
Note: See TracBrowser for help on using the repository browser.