Isis 3 Programmer Reference
BulletShapeModel.h
1 #ifndef BulletShapeModel_h
2 #define BulletShapeModel_h
3 
8 /* SPDX-License-Identifier: CC0-1.0 */
9 #include "ShapeModel.h"
10 
11 #include <vector>
12 
13 #include <QList>
14 #include <QMap>
15 
16 #include "Intercept.h"
17 #include "BulletAllHitsRayCallback.h"
18 #include "BulletClosestRayCallback.h"
19 #include "BulletTargetShape.h"
20 #include "BulletWorldManager.h"
21 #include "Target.h"
22 
23 namespace Isis {
24  class Target;
25 
35  class BulletShapeModel : public ShapeModel {
36  public:
37  // Constructors
39  BulletShapeModel(Target *target, Pvl &pvl);
40  BulletShapeModel(const QString &shapefile, Target *target, Pvl &pvl);
41  BulletShapeModel(BulletTargetShape *shape, Target *target, Pvl &pvl);
43 
44  // Destructor
46 
47  double getTolerance() const;
48  void setTolerance(const double &tolerance);
49 
50  // Intersect the shape model
51  bool intersectSurface(std::vector<double> observerPos,
52  std::vector<double> lookDirection);
53  virtual bool intersectSurface(const Latitude &lat, const Longitude &lon,
54  const std::vector<double> &observerPos,
55  const bool &checkOcclusion = true);
56  virtual bool intersectSurface(const SurfacePoint &surfpt,
57  const std::vector<double> &observerPos,
58  const bool &checkOcclusion = true);
59 
60  virtual void setSurfacePoint(const SurfacePoint &surfacePoint);
61  virtual void clearSurfacePoint();
62 
63  // Calculate the default normal of the current intersection point
65 
66  bool isDEM() const;
67 
68  // Calculate the surface normal of the current intersection point
70  void calculateLocalNormal(QVector<double *> cornerNeighborPoints);
72 
73  Distance localRadius(const Latitude &lat, const Longitude &lon);
74 
76 
77  const BulletWorldManager &model() const;
78 
79 
80  // Determine if the internal intercept is occluded from the observer/lookdir
81  virtual bool isVisibleFrom(const std::vector<double> observerPos,
82  const std::vector<double> lookDirection);
83 
84  private:
85  // Disallow copying because ShapeModel is not copyable
86  Q_DISABLE_COPY(BulletShapeModel)
87 
88  QScopedPointer<BulletWorldManager> m_model;
90  double m_tolerance;
94  btScalar maxDistance() const;
95 
96  btVector3 castLookDir(const btVector3 &observer, const btVector3 &lookdir) const;
97  btVector3 latlonToVector(const Latitude &lat, const Longitude &lon) const;
98  btVector3 pointToVector(const SurfacePoint &point) const;
99  SurfacePoint makeSurfacePoint(const btVector3 &point) const;
100 
102  const btVector3 &sortPoint) const;
103  bool isOccluded(const BulletClosestRayCallback &hit,
104  const btVector3 &observer) const;
105 
106  void updateShapeModel(const BulletClosestRayCallback &result);
107 
108 
109  };
110 }
111 
112 #endif
Isis::BulletShapeModel::calculateSurfaceNormal
void calculateSurfaceNormal()
compute the ellipsoid surface normal of the target
Definition: BulletShapeModel.cpp:539
Isis::BulletShapeModel::BulletShapeModel
BulletShapeModel()
Default constructor that creates a shape model without any internal model.
Definition: BulletShapeModel.cpp:53
Isis::BulletShapeModel::m_intercept
BulletClosestRayCallback m_intercept
! Tolerance of occlusion check in kilometers.
Definition: BulletShapeModel.h:92
Isis::Latitude
This class is designed to encapsulate the concept of a Latitude.
Definition: Latitude.h:51
Isis::BulletShapeModel::clearSurfacePoint
virtual void clearSurfacePoint()
Clear the saved surface point and reset the saved intersection.
Definition: BulletShapeModel.cpp:388
Isis::BulletShapeModel::~BulletShapeModel
~BulletShapeModel()
Destructor.
Definition: BulletShapeModel.cpp:159
Isis::BulletShapeModel::isOccluded
bool isOccluded(const BulletClosestRayCallback &hit, const btVector3 &observer) const
Check if an intersection is occluded from an observer.
Definition: BulletShapeModel.cpp:342
Isis::BulletShapeModel::updateShapeModel
void updateShapeModel(const BulletClosestRayCallback &result)
Update shape model - carefully!!
Definition: BulletShapeModel.cpp:716
Isis::BulletShapeModel::pointToVector
btVector3 pointToVector(const SurfacePoint &point) const
Convert a surface point into a vector.
Definition: BulletShapeModel.cpp:661
Isis::BulletAllHitsRayCallback
Bullet ray tracing callback to return all intersections along a ray's path.
Definition: BulletAllHitsRayCallback.h:30
Isis::BulletShapeModel::setLocalNormalFromIntercept
void setLocalNormalFromIntercept()
Set the normal vector to the intercept point normal.
Definition: BulletShapeModel.cpp:436
Isis::Pvl
Container for cube-like labels.
Definition: Pvl.h:119
Isis::BulletShapeModel::latlonToVector
btVector3 latlonToVector(const Latitude &lat, const Longitude &lon) const
Convert a pair of latitude and longitude values into a unit vector pointing from the origin of the bo...
Definition: BulletShapeModel.cpp:644
Isis::BulletWorldManager
Bullet World manager maintains a proper state for target bodies.
Definition: BulletWorldManager.h:41
Isis::Distance
Distance measurement, usually in meters.
Definition: Distance.h:34
Isis::Longitude
This class is designed to encapsulate the concept of a Longitude.
Definition: Longitude.h:40
Isis::BulletShapeModel::setTolerance
void setTolerance(const double &tolerance)
Sets the occlusion tolerance.
Definition: BulletShapeModel.cpp:177
Isis::BulletShapeModel::isVisibleFrom
virtual bool isVisibleFrom(const std::vector< double > observerPos, const std::vector< double > lookDirection)
Check if the saved intercept is visible from a observer with a given look direction.
Definition: BulletShapeModel.cpp:470
Isis::BulletShapeModel::model
const BulletWorldManager & model() const
Returns a direct reference to the Bullet world that contains the target shape and can perform ray cas...
Definition: BulletShapeModel.cpp:598
Isis::BulletShapeModel::calculateLocalNormal
void calculateLocalNormal(QVector< double * > cornerNeighborPoints)
Compute the normal for a local region of surface points.
Definition: BulletShapeModel.cpp:516
Isis::BulletShapeModel::calculateDefaultNormal
void calculateDefaultNormal()
Calculate the surface normal of the ellipsoid as the default.
Definition: BulletShapeModel.cpp:531
Isis::BulletShapeModel::castLookDir
btVector3 castLookDir(const btVector3 &observer, const btVector3 &lookdir) const
Compute the end point of a ray based on an observer and look direction.
Definition: BulletShapeModel.cpp:626
Isis::BulletShapeModel::ellipsoidNormal
QVector< double > ellipsoidNormal()
Compute the true surface normal vector of an ellipsoid.
Definition: BulletShapeModel.cpp:559
Isis::BulletShapeModel::localRadius
Distance localRadius(const Latitude &lat, const Longitude &lon)
Compute the radius of the body at a lat/lon point.
Definition: BulletShapeModel.cpp:410
Isis::BulletShapeModel::isDEM
bool isDEM() const
Indicates that this shape model is not from a DEM.
Definition: BulletShapeModel.cpp:456
Isis::ShapeModel
Define shapes and provide utilities for Isis targets.
Definition: ShapeModel.h:62
Isis::BulletShapeModel::makeSurfacePoint
SurfacePoint makeSurfacePoint(const btVector3 &point) const
Convert a vector into a surface point.
Definition: BulletShapeModel.cpp:675
Isis::BulletTargetShape
Bullet Target Shape for planetary bodies.
Definition: BulletTargetShape.h:33
Isis::BulletShapeModel
Shape model that uses the Bullet library to perform ray tracing.
Definition: BulletShapeModel.h:35
Isis::BulletShapeModel::m_tolerance
double m_tolerance
! Bullet collision world that contains the representation of the body.
Definition: BulletShapeModel.h:90
Isis::BulletShapeModel::intersectSurface
bool intersectSurface(std::vector< double > observerPos, std::vector< double > lookDirection)
This method computes a DEM intercept point given an observer location and look direction using the Bu...
Definition: BulletShapeModel.cpp:193
Isis::BulletShapeModel::maxDistance
btScalar maxDistance() const
! The results of the last ray cast.
Definition: BulletShapeModel.cpp:610
QVector
This is free and unencumbered software released into the public domain.
Definition: Calculator.h:18
Isis::BulletShapeModel::sortHits
QVector< BulletClosestRayCallback > sortHits(const BulletAllHitsRayCallback &hits, const btVector3 &sortPoint) const
Sort the hits in an AllHitsRayCallback based on distance to a point.
Definition: BulletShapeModel.cpp:692
Isis::BulletClosestRayCallback
Bullet ray tracing callback for closest hit on target surface.
Definition: BulletClosestRayCallback.h:33
Isis::BulletShapeModel::getTolerance
double getTolerance() const
Returns the occlusion tolerance in kilometers.
Definition: BulletShapeModel.cpp:167
Isis::Target
This class is used to create and store valid Isis targets.
Definition: Target.h:63
Isis::BulletShapeModel::setSurfacePoint
virtual void setSurfacePoint(const SurfacePoint &surfacePoint)
Set the internal surface point.
Definition: BulletShapeModel.cpp:379
Isis::SurfacePoint
This class defines a body-fixed surface point.
Definition: SurfacePoint.h:132
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16