Isis 3 Programmer Reference
BulletAllHitsRayCallback.cpp
Go to the documentation of this file.
1 
24 #include <cmath>
25 
26 #include <QScopedPointer>
27 #include <QString>
28 #include <QVector>
29 
30 
32 #include "Constants.h"
33 #include "IException.h"
34 #include "SurfacePoint.h"
35 
36 #include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
37 
38 namespace Isis {
39 
40 
46  btCollisionWorld::AllHitsRayResultCallback(btVector3(0,0,0), btVector3(0,0,0)),
47  m_rayHits() {
48  m_flags = (btTriangleRaycastCallback::kF_KeepUnflippedNormal |
49  btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest);
50  }
51 
52 
61  const btVector3 &lookdir,
62  const bool cullBackfacers) :
63  btCollisionWorld::AllHitsRayResultCallback(observer, lookdir),
64  m_rayHits() {
65  m_flags = (btTriangleRaycastCallback::kF_KeepUnflippedNormal |
66  btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest);
67  if ( cullBackfacers ) {
68  m_flags |= btTriangleRaycastCallback::kF_FilterBackfaces;
69  }
70  }
71 
72 
77 
78 
87  return ( hasHit() );
88  }
89 
90 
97  return ( m_rayHits.size() );
98  }
99 
100 
107  return ( AllHitsRayResultCallback::m_rayFromWorld );
108  }
109 
110 
117  return ( AllHitsRayResultCallback::m_rayToWorld );
118  }
119 
120 
129  btAssert( index >= 0 );
130  btAssert( index < size() );
131  return ( m_rayHits[index]);
132  }
133 
134 
147  btScalar BulletAllHitsRayCallback::addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace) {
148  btCollisionWorld::AllHitsRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
149  m_rayHits.push_back(BulletClosestRayCallback(observer(), lookdir(), *this, rayResult, normalInWorldSpace));
150  return (rayResult.m_hitFraction);
151  }
152 } // namespace Isis
153 
154 
155 
virtual ~BulletAllHitsRayCallback()
Destroy this callback.
virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace)
Add a local intersection result to this callback during ray casting.
btVector3 observer() const
Return the beginning of the ray.
btVector3 lookdir() const
Return the end of the ray.
Bullet ray tracing callback for closest hit on target surface.
const BulletClosestRayCallback & hit(const int &index=0) const
Return a callback for the intersection at a given index.
QVector< BulletClosestRayCallback > m_rayHits
List of ray hits.
int size() const
Returns the number of intersections found.
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
bool isValid() const
Checks if the callback is valid/has a valid intersection.
BulletAllHitsRayCallback()
Default constructor.