00001 /* 00002 * EllipseIterator.hpp 00003 * 00004 * Created on: Dec 2, 2015 00005 * Author: Péter Fankhauser 00006 * Institute: ETH Zurich, ANYbotics 00007 */ 00008 00009 #pragma once 00010 00011 #include "grid_map_core/GridMap.hpp" 00012 #include "grid_map_core/iterators/SubmapIterator.hpp" 00013 00014 #include <Eigen/Core> 00015 00016 #include <memory> 00017 00018 namespace grid_map { 00019 00024 class EllipseIterator 00025 { 00026 public: 00027 00035 EllipseIterator(const GridMap& gridMap, const Position& center, const Length& length, const double rotation = 0.0); 00036 00042 EllipseIterator& operator =(const EllipseIterator& other); 00043 00048 bool operator !=(const EllipseIterator& other) const; 00049 00054 const Index& operator *() const; 00055 00060 EllipseIterator& operator ++(); 00061 00066 bool isPastEnd() const; 00067 00072 const Size& getSubmapSize() const; 00073 00074 private: 00075 00080 bool isInside() const; 00081 00090 void findSubmapParameters(const Position& center, const Length& length, const double rotation, 00091 Index& startIndex, Size& bufferSize) const; 00092 00094 Position center_; 00095 00097 Eigen::Array2d semiAxisSquare_; 00098 00100 Eigen::Matrix2d transformMatrix_; 00101 00103 std::shared_ptr<SubmapIterator> internalIterator_; 00104 00106 Length mapLength_; 00107 Position mapPosition_; 00108 double resolution_; 00109 Size bufferSize_; 00110 Index bufferStartIndex_; 00111 00112 public: 00113 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 00114 }; 00115 00116 } /* namespace */