16 #ifndef __TY_REFLECTION_PATH_FINDER__
17 #define __TY_REFLECTION_PATH_FINDER__
22 #include <gtest/gtest_prod.h>
47 virtual std::unique_ptr<TYAbstractReflectionPathFinder>
instanciate()
const = 0;
59 virtual bool setup(
size_t maxOrder,
const std::deque<TYSIntersection>& tabIntersect,
98 std::unique_ptr<TYAbstractReflectionPathFinder>
instanciate()
const override;
100 bool setup(
size_t maxOrder,
const std::deque<TYSIntersection>& tabIntersect,
const OPoint3D& source,
129 bool setupScene(
const std::deque<TYSIntersection>& tabIntersect,
const OPoint3D& sourcePoint,
316 FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_horizontalPlane1);
317 FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_horizontalPlane2);
318 FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_nonHorizontalPlane);
base class for shapes (Cylindre, Mesh, Sphere, Triangle,...)
Class hosting all the informations needed for ray tracing. It contains the function to launch the ray...
Interface for multiple reflection paths computation algorithms.
TYAbstractReflectionPathFinder()=default
virtual std::unique_ptr< TYAbstractReflectionPathFinder > instanciate() const =0
Instanciate a new reflection path finder of the same type.
virtual TYReflectionPath popPath()=0
Give the last computed reflection path, and remove it from the set of remaining paths.
virtual ~TYAbstractReflectionPathFinder()=default
virtual bool remainingPaths() const =0
Tell if some paths remain in the set of remaining paths.
virtual bool setup(size_t maxOrder, const std::deque< TYSIntersection > &tabIntersect, const OPoint3D &source, const OPoint3D &receptor)=0
Set the scene to be treated by the path finder.
Reflection path finder relying on ray-tracing using the AcousticRaytracer module.
std::unique_ptr< TYAbstractReflectionPathFinder > instanciate() const override
Instanciate a new TYReflectionPathFinderART. The configuration of the former path finder (number of r...
void computeRaytracing()
Perform raytracing simulation.
void setupConfiguration(size_t maxOrder)
Setup ART' Simulation configuration.
bool processIntersectingSegment(const TYSIntersection &inter)
Process an intersecting segment in EL-plane to add equivalent faces in the AcousticRaytracer' simulat...
std::unique_ptr< Solver > _pSolver
bool setup(size_t maxOrder, const std::deque< TYSIntersection > &tabIntersect, const OPoint3D &source, const OPoint3D &receptor) override
Set the scene to be treated by the path finder.
std::unordered_map< const Shape *, const TYSIntersection * > _shapeToTYSIntersection
Shape * addOrientedTriangle(const OPoint3D &p1, const OPoint3D &p2, const OPoint3D &p3, const OVector3D &vExt)
Add an oriented triangle to the AcousticRaytracer' simulation scene. The vertices (v1 = p1,...
void setupAcceleratingDataStructure()
Setup accelerating data-structure using ART' Simulation configuration.
Simulation _ARTSimulation
bool remainingPaths() const override
Tell if some paths remain in the set of remaining paths.
FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_horizontalPlane1)
bool setupScene(const std::deque< TYSIntersection > &tabIntersect, const OPoint3D &sourcePoint, const OPoint3D &receptorPoint)
Build an AcousticRaytracer scene containing one source, one receptor, and a collection of faces....
void buildQuadranglePointsFromInter(const TYSIntersection &inter, OPoint3D &p1Top, OPoint3D &p1Bottom, OPoint3D &p2Top, OPoint3D &p2Bottom) const
Compute points forming a quadrangle from an intersecting segment in EL-plane. Points are obtained by ...
FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_nonHorizontalPlane)
std::deque< TYReflectionPath > _paths
bool isPathAlreadyFound(const TYReflectionPath &path) const
Check if a path has already been found.
bool processTopoIntersectingSegment(const TYSIntersection &inter)
Process a topography intersecting segment in EL-plane to add equivalent faces in the AcousticRaytrace...
void buildReflectionPaths(const OPoint3D &source, const OPoint3D &receptor)
Build reflection paths from valid rays found by the solver. For each sequence of reflecting barriers,...
TYReflectionPathFinderART()=default
TYReflectionPath popPath() override
Give the last computed reflection path, and remove it from the set of remaining paths.
OVector3D computeELPlaneNormal(const OPoint3D &source, const OPoint3D &receptor)
Compute a normal vector of the EL-plane Hypothesis: source and receptor are not aligned along a verti...
bool processInfraIntersectingSegment(const TYSIntersection &inter)
Process an infrastructure intersecting segment in EL-plane to add equivalent faces in the AcousticRay...
void setupSolver()
Setup ART' simulation solver.
FRIEND_TEST(test_ReflectionPathFinderART, computeELPlaneNormal_horizontalPlane2)
std::set< std::vector< const TYSIntersection * > > _foundSequences
bool isPathValid(const TYReflectionPath &path)
Check if a path is valid. In plus of validation performed during raytracing, it has to be verified:
bool isLastSegmentIntersectingSceneElement(const TYReflectionPath &path)
Check if the last segment of a path intersects a scene element.
void addOrientedQuadrangle(const OPoint3D &p1Top, const OPoint3D &p1Bottom, const OPoint3D &p2Top, const OPoint3D &p2Bottom, const OVector3D vExt, const TYSIntersection &sourceInter)
Add an oriented quadrangle to the AcousticRaytracer' simulation scene. The quadrangle is oriented usi...
Data-structure representing a reflection path It stores all needed data to build a TYChemin.
std::deque< OPoint3D > reflectionPoints
std::vector< const TYSIntersection * > reflectingSegments
Data structure for intersections.