INET Framework for OMNeT++/OMNEST
inet::SpatialGrid::LineSegmentIterator Class Reference

#include <SpatialGrid.h>

Public Member Functions

 LineSegmentIterator (const SpatialGrid *spatialGrid, const LineSegment &lineSegment, const Triplet< double > &voxelSizes, const Triplet< int > &numVoxels)
 
LineSegmentIteratoroperator++ ()
 
const Triplet< int > & getMatrixIndices () const
 
bool end () const
 

Protected Attributes

Triplet< int > index
 
Triplet< int > endPoint
 
Triplet< int > step
 
Triplet< double > tDelta
 
Triplet< double > tExit
 
bool reachedEnd
 

Constructor & Destructor Documentation

◆ LineSegmentIterator()

inet::SpatialGrid::LineSegmentIterator::LineSegmentIterator ( const SpatialGrid spatialGrid,
const LineSegment lineSegment,
const Triplet< double > &  voxelSizes,
const Triplet< int > &  numVoxels 
)
185 {
186  reachedEnd = false;
187  Coord p0 = lineSegment.getPoint1();
188  Coord p1 = lineSegment.getPoint2();
189  Coord segmentDirection = p1 - p0;
190  Triplet<double> point0 = Triplet<double>(p0.x - spatialGrid->constraintAreaMin.x, p0.y - spatialGrid->constraintAreaMin.y, p0.z - spatialGrid->constraintAreaMin.z);
191  Triplet<double> direction = Triplet<double>(segmentDirection.x, segmentDirection.y, segmentDirection.z);
192  index = spatialGrid->coordToMatrixIndices(p0);
193  endPoint = spatialGrid->coordToMatrixIndices(p1);
194  for (int i = 0; i < 3; i++) {
195  tDelta[i] = voxelSizes[i] / std::abs(direction[i]);
196  double ithdirection = direction[i];
197  if (ithdirection > 0)
198  step[i] = 1;
199  else if (ithdirection < 0)
200  step[i] = -1;
201  else
202  step[i] = 0;
203  if (ithdirection != 0) {
204  double d = point0[i] - index[i] * voxelSizes[i];
205  if (step[i] > 0)
206  d = voxelSizes[i] - d;
207  ASSERT(d >= 0 && d <= voxelSizes[i]);
208  tExit[i] = d / std::abs(ithdirection);
209  }
210  else
212  }
213 }

Member Function Documentation

◆ end()

bool inet::SpatialGrid::LineSegmentIterator::end ( ) const
inline
75 { return reachedEnd; }

Referenced by inet::SpatialGrid::lineSegmentQuery().

◆ getMatrixIndices()

const Triplet<int>& inet::SpatialGrid::LineSegmentIterator::getMatrixIndices ( ) const
inline
74 { return index; }

◆ operator++()

SpatialGrid::LineSegmentIterator & inet::SpatialGrid::LineSegmentIterator::operator++ ( )
216 {
217  if (index.x != endPoint.x || index.y != endPoint.y || index.z != endPoint.z) {
218  int axis = 0;
219  if (tExit.x < tExit.y) {
220  if (tExit.x < tExit.z)
221  axis = 0;
222  else
223  axis = 2;
224  }
225  else if (tExit.y < tExit.z)
226  axis = 1;
227  else
228  axis = 2;
229  index[axis] += step[axis];
230  tExit[axis] += tDelta[axis];
231  }
232  else
233  reachedEnd = true;
234  return *this;
235 }

Member Data Documentation

◆ endPoint

Triplet<int> inet::SpatialGrid::LineSegmentIterator::endPoint
protected

Referenced by LineSegmentIterator().

◆ index

Triplet<int> inet::SpatialGrid::LineSegmentIterator::index
protected

Referenced by LineSegmentIterator().

◆ reachedEnd

bool inet::SpatialGrid::LineSegmentIterator::reachedEnd
protected

Referenced by LineSegmentIterator().

◆ step

Triplet<int> inet::SpatialGrid::LineSegmentIterator::step
protected

Referenced by LineSegmentIterator().

◆ tDelta

Triplet<double> inet::SpatialGrid::LineSegmentIterator::tDelta
protected

Referenced by LineSegmentIterator().

◆ tExit

Triplet<double> inet::SpatialGrid::LineSegmentIterator::tExit
protected

Referenced by LineSegmentIterator().


The documentation for this class was generated from the following files:
inet::SpatialGrid::Triplet::y
T y
Definition: SpatialGrid.h:31
inet::SpatialGrid::LineSegmentIterator::reachedEnd
bool reachedEnd
Definition: SpatialGrid.h:69
inet::SpatialGrid::LineSegmentIterator::tDelta
Triplet< double > tDelta
Definition: SpatialGrid.h:67
inet::SpatialGrid::voxelSizes
Triplet< double > voxelSizes
Definition: SpatialGrid.h:85
inet::SpatialGrid::LineSegmentIterator::index
Triplet< int > index
Definition: SpatialGrid.h:64
inet::SpatialGrid::Triplet::x
T x
Definition: SpatialGrid.h:30
inet::sctp::max
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
inet::SpatialGrid::Triplet::z
T z
Definition: SpatialGrid.h:32
inet::SpatialGrid::LineSegmentIterator::step
Triplet< int > step
Definition: SpatialGrid.h:66
inet::SpatialGrid::LineSegmentIterator::tExit
Triplet< double > tExit
Definition: SpatialGrid.h:68
inet::SpatialGrid::LineSegmentIterator::endPoint
Triplet< int > endPoint
Definition: SpatialGrid.h:65