1#ifndef BulletShapeModel_h
2#define BulletShapeModel_h
17#include "BulletAllHitsRayCallback.h"
18#include "BulletClosestRayCallback.h"
19#include "BulletTargetShape.h"
20#include "BulletWorldManager.h"
52 std::vector<double> lookDirection);
54 const std::vector<double> &observerPos,
55 const bool &checkOcclusion =
true);
57 const std::vector<double> &observerPos,
58 const bool &checkOcclusion =
true);
81 virtual bool isVisibleFrom(
const std::vector<double> observerPos,
82 const std::vector<double> lookDirection);
88 QScopedPointer<BulletWorldManager> m_model;
96 btVector3
castLookDir(
const btVector3 &observer,
const btVector3 &lookdir)
const;
102 const btVector3 &sortPoint)
const;
104 const btVector3 &observer)
const;
Bullet ray tracing callback to return all intersections along a ray's path.
Bullet ray tracing callback for closest hit on target surface.
const BulletWorldManager & model() const
Returns a direct reference to the Bullet world that contains the target shape and can perform ray cas...
BulletClosestRayCallback m_intercept
!
void calculateSurfaceNormal()
compute the ellipsoid surface normal of the target
void updateShapeModel(const BulletClosestRayCallback &result)
Update shape model - carefully!
void calculateLocalNormal(QVector< double * > cornerNeighborPoints)
Compute the normal for a local region of surface points.
Distance localRadius(const Latitude &lat, const Longitude &lon)
Compute the radius of the body at a lat/lon point.
SurfacePoint makeSurfacePoint(const btVector3 &point) const
Convert a vector into a surface point.
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...
QVector< double > ellipsoidNormal()
Compute the true surface normal vector of an ellipsoid.
double getTolerance() const
Returns the occlusion tolerance in kilometers.
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.
BulletShapeModel()
Default constructor that creates a shape model without any internal model.
void calculateDefaultNormal()
Calculate the surface normal of the ellipsoid as the default.
btVector3 castLookDir(const btVector3 &observer, const btVector3 &lookdir) const
Compute the end point of a ray based on an observer and look direction.
QVector< BulletClosestRayCallback > sortHits(const BulletAllHitsRayCallback &hits, const btVector3 &sortPoint) const
Sort the hits in an AllHitsRayCallback based on distance to a point.
~BulletShapeModel()
Destructor.
virtual void clearSurfacePoint()
Clear the saved surface point and reset the saved intersection.
void setLocalNormalFromIntercept()
Set the normal vector to the intercept point normal.
btScalar maxDistance() const
!
bool isDEM() const
Indicates that this shape model is not from a DEM.
bool isOccluded(const BulletClosestRayCallback &hit, const btVector3 &observer) const
Check if an intersection is occluded from an observer.
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...
virtual void setSurfacePoint(const SurfacePoint &surfacePoint)
Set the internal surface point.
btVector3 pointToVector(const SurfacePoint &point) const
Convert a surface point into a vector.
void setTolerance(const double &tolerance)
Sets the occlusion tolerance.
Bullet Target Shape for planetary bodies.
Bullet World manager maintains a proper state for target bodies.
Distance measurement, usually in meters.
This class is designed to encapsulate the concept of a Latitude.
This class is designed to encapsulate the concept of a Longitude.
Container for cube-like labels.
ShapeModel()
Default constructor creates ShapeModel object, initializing name to an empty string,...
This class defines a body-fixed surface point.
This class is used to create and store valid Isis targets.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.