16 #ifndef DIFFRACTION_PATH_SELECTOR 17 #define DIFFRACTION_PATH_SELECTOR 40 vector< boost::shared_ptr<Event> > *events = r->getEvents();
49 Source *pSource = r->getSource();
52 vec3 current_pos = origin;
55 vector< boost::shared_ptr<Event> >::reverse_iterator rit = events->rbegin();
56 while(rit != events->rend())
58 cumul_distance += (*rit)->getPosition().distance(current_pos);
67 decimal direct_distance= origin.distance( (*rit)->getPosition());
68 cumul_delta += ( cumul_distance - direct_distance );
74 origin = (*rit)->getPosition();
84 current_pos = (*rit)->getPosition();
92 cumul_distance += current_pos.distance( pSource->
getPosition() );
96 cumul_delta += ( cumul_distance - direct_distance );
108 virtual void insert(T* r,
unsigned long long& replace) {
return; }
112 vector< boost::shared_ptr<Event> > *events = r->getEvents();
114 if (events->size() == 0) {
return true; }
121 Source *pSource = r->getSource();
124 vec3 current_pos = origin;
127 vector< boost::shared_ptr<Event> >::reverse_iterator rit = events->rbegin();
128 while(rit != events->rend())
130 cumul_distance += (*rit)->getPosition().distance(current_pos);
139 decimal direct_distance= origin.distance( (*rit)->getPosition());
140 cumul_delta += ( cumul_distance - direct_distance );
146 origin = (*rit)->getPosition();
156 current_pos = (*rit)->getPosition();
164 cumul_distance += current_pos.distance( pSource->
getPosition() );
168 cumul_delta += ( cumul_distance - direct_distance );
192 return typeid(
this).
name();
200 #endif // DIFFRACTION_PATH_SELECTOR virtual void insert(T *r, unsigned long long &replace)
Select the ray.
vec3 getPosition()
Get the center of the bounding box.
void setMaximumDelta(double _maximumDelta)
Set maximumDelta.
bool deletable
Flag to know if the selector may be deleted or not.
base_vec3< decimal > vec3
virtual const char * getSelectorName()
Return the class type of the selector.
virtual bool insertWithTest(T *r)
Select the ray if it respects the criteria of this Selector.
double maximumDelta
Maximal path length difference between rays produced by diffraction.
DiffractionPathSelector(double _maximumDelta=8)
Constructor.
Base class for Selector (used to keep or disable rays according different criterias) ...
virtual SELECTOR_RESPOND canBeInserted(T *r, unsigned long long &replace)
Check if the ray respects the criteria of this Selector and return a SELECTOR_RESPOND.
: Rejects rays if the cumulative length added by the diffractions events in comparison to the length ...
vec3 getPosition()
Get the position of the Source.
double getMaximumDelta()
Get maximumDelta.
void setIsDeletable(bool _isDeletable)
Set deletable flag.
Receptor inherits from a Sphere Shape.
virtual Selector< T > * Copy()
Copy Selector.