Isis Developer Reference
EmbreeShapeModel.h
Go to the documentation of this file.
1#ifndef EmbreeShapeModel_h
2#define EmbreeShapeModel_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include "ShapeModel.h"
10
11#include <vector>
12
13#include <embree3/rtcore.h>
14
15#include <QMap>
16#include <QVector>
17
18#include "Distance.h"
19#include "EmbreeTargetShape.h"
20#include "EmbreeTargetManager.h"
21#include "SurfacePoint.h"
22#include "Target.h"
23
24namespace Isis {
25 class Target;
26
38 public:
39 // Constructors
41 EmbreeShapeModel(Target *target, Pvl &pvl,
42 EmbreeTargetManager *targetManager);
43 EmbreeShapeModel(Target *target, const QString &shapefile,
44 EmbreeTargetManager *targetManager);
45
46 // Destructor
47 virtual ~EmbreeShapeModel();
48
49 // Intersect the shape model
50 virtual bool intersectSurface(std::vector<double> observerPos,
51 std::vector<double> lookDirection);
52 virtual bool intersectSurface(const Latitude &lat, const Longitude &lon,
53 const std::vector<double> &observerPos,
54 const bool &backCheck = true);
55 virtual bool intersectSurface(const SurfacePoint &surfpt,
56 const std::vector<double> &observerPos,
57 const bool &backCheck = true);
58
59 virtual void clearSurfacePoint();
60
61 virtual bool isDEM() const;
62
63 double getTolerance() const;
64 void setTolerance(const double &tolerance);
65
66 // Calculate the default normal of the current intersection point
67 virtual void calculateDefaultNormal();
68 // Calculate the surface normal of the current intersection point
69 virtual void calculateLocalNormal(QVector<double *> cornerNeighborPoints);
70 virtual void calculateSurfaceNormal();
71 QVector<double> ellipsoidNormal();
72
73 virtual double incidenceAngle(const std::vector<double> &uB);
74
75 virtual Distance localRadius(const Latitude &lat, const Longitude &lon);
76
77 // Determine if the internal intercept is occluded from the observer/lookdir
78 virtual bool isVisibleFrom(const std::vector<double> observerPos,
79 const std::vector<double> lookDirection);
80
81 private:
82 // Disallow copying because ShapeModel is not copyable
83 Q_DISABLE_COPY(EmbreeShapeModel)
84
85 void updateIntersection(const RayHitInformation hitInfo);
86 RTCMultiHitRay latlonToRay(const Latitude &lat, const Longitude &lon) const;
87 RTCMultiHitRay pointToRay(const SurfacePoint &point) const;
88 QVector< RayHitInformation > sortHits(RTCMultiHitRay &ray,
89 LinearAlgebra::Vector &observer);
90
91 EmbreeTargetShape *m_targetShape;
95 EmbreeTargetManager *m_targetManager;
99 double m_tolerance;
100 QString m_shapeFile;
102 };
103};
104
105#endif
Distance measurement, usually in meters.
Definition Distance.h:34
General purpose Embree ray tracing model.
Definition EmbreeShapeModel.h:37
QVector< double > ellipsoidNormal()
Compute the true surface normal vector of an ellipsoid.
Definition EmbreeShapeModel.cpp:547
virtual bool isVisibleFrom(const std::vector< double > observerPos, const std::vector< double > lookDirection)
Check if the current internalized surface point is visible from an observer position and look directi...
Definition EmbreeShapeModel.cpp:450
virtual bool intersectSurface(std::vector< double > observerPos, std::vector< double > lookDirection)
This method computes an intercept point given an observer location and look direction using the Embre...
Definition EmbreeShapeModel.cpp:162
virtual Distance localRadius(const Latitude &lat, const Longitude &lon)
Determine radius at a given lat/lon grid point.
Definition EmbreeShapeModel.cpp:404
virtual void calculateDefaultNormal()
Return the surface normal of the ellipsoid as the default.
Definition EmbreeShapeModel.cpp:516
virtual void clearSurfacePoint()
Flag that the ShapeModel does not have a surface point or normal.
Definition EmbreeShapeModel.cpp:385
void setTolerance(const double &tolerance)
Set the tolerance used when checking if the stored surface point is visible.
Definition EmbreeShapeModel.cpp:749
virtual void calculateSurfaceNormal()
Return the surface normal of the ellipsoid.
Definition EmbreeShapeModel.cpp:525
virtual ~EmbreeShapeModel()
Destructor that notifies the target shape manager that the target shape is no longer in use.
Definition EmbreeShapeModel.cpp:146
double getTolerance() const
Get the tolerance used when checking if the stored surface point is visible.
Definition EmbreeShapeModel.cpp:736
virtual double incidenceAngle(const std::vector< double > &uB)
Computes and returns incidence angle, in degrees, given the illuminator position.
Definition EmbreeShapeModel.cpp:599
virtual bool isDEM() const
Indicates that this shape model is not from a DEM.
Definition EmbreeShapeModel.cpp:435
virtual void calculateLocalNormal(QVector< double * > cornerNeighborPoints)
Compute the normal for a local region of surface points.
Definition EmbreeShapeModel.cpp:502
EmbreeShapeModel()
Default constructor sets type to a TIN.
Definition EmbreeShapeModel.cpp:33
Class for managing the construction and destruction of EmbreeTargetShapes.
Definition EmbreeTargetManager.h:37
Embree Target Shape for planetary bodies.
Definition EmbreeTargetShape.h:139
This class is designed to encapsulate the concept of a Latitude.
Definition Latitude.h:51
boost::numeric::ublas::vector< double > Vector
Definition for an Isis::LinearAlgebra::Vector of doubles.
Definition LinearAlgebra.h:132
This class is designed to encapsulate the concept of a Longitude.
Definition Longitude.h:40
Container for cube-like labels.
Definition Pvl.h:119
Define shapes and provide utilities for Isis targets.
Definition ShapeModel.h:66
This class defines a body-fixed surface point.
Definition SurfacePoint.h:132
This class is used to create and store valid Isis targets.
Definition Target.h:63
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
Struct for capturing multiple intersections when using embree::rtcintersectscene.
Definition EmbreeTargetShape.h:44
Container that holds the body fixed intersection point and unit surface normal for a hit.
Definition EmbreeTargetShape.h:118