Point Cloud Library (PCL)
1.7.1
Main Page
Modules
Namespaces
Classes
geometry
include
pcl
geometry
organized_index_iterator.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2010, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of Willow Garage, Inc. nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*
34
*/
35
36
#ifndef __PCL_ORGANIZED_INDEX_ITERATOR__
37
#define __PCL_ORGANIZED_INDEX_ITERATOR__
38
39
namespace
pcl
40
{
41
/** \brief base class for iterators on 2-dimensional maps like images/organized clouds etc.
42
* \author Suat Gedikli <gedikli@willowgarage.com>
43
* \ingroup geometry
44
*/
45
class
OrganizedIndexIterator
46
{
47
public
:
48
/** \brief constructor
49
* \param[in] width the width of the image/organized cloud
50
*/
51
OrganizedIndexIterator
(
unsigned
width);
52
53
/** \brief virtual destructor*/
54
virtual
~OrganizedIndexIterator
();
55
56
/** \brief go to next pixel/point in image/cloud*/
57
virtual
void
operator ++
() = 0;
58
59
/** \brief go to next pixel/point in image/cloud*/
60
virtual
void
operator ++
(
int
);
61
62
/** \brief returns the pixel/point index in the linearized memory of the image/cloud
63
* \return the pixel/point index in the linearized memory of the image/cloud
64
*/
65
unsigned
operator*
()
const
;
66
67
/** \brief returns the pixel/point index in the linearized memory of the image/cloud
68
* \return the pixel/point index in the linearized memory of the image/cloud
69
*/
70
virtual
unsigned
getIndex
()
const
;
71
72
/** \brief returns the row index (y-coordinate) of the current pixel/point
73
* \return the row index (y-coordinate) of the current pixel/point
74
*/
75
virtual
unsigned
getRowIndex
()
const
;
76
77
/** \brief returns the col index (x-coordinate) of the current pixel/point
78
* \return the col index (x-coordinate) of the current pixel/point
79
*/
80
virtual
unsigned
getColumnIndex
()
const
;
81
82
/** \brief return whether the current visited pixel/point is valid or not.
83
* \return true if the current pixel/point is within the points to be iterated over, false otherwise
84
*/
85
virtual
bool
isValid
()
const
= 0;
86
87
/** \brief resets the iterator to the beginning of the line
88
*/
89
virtual
void
reset
() = 0;
90
91
protected
:
92
/** \brief the width of the image/cloud*/
93
unsigned
width_
;
94
95
/** \brief the index of the current pixel/point*/
96
unsigned
index_
;
97
};
98
99
////////////////////////////////////////////////////////////////////////////////
100
////////////////////////////////////////////////////////////////////////////////
101
////////////////////////////////////////////////////////////////////////////////
102
103
////////////////////////////////////////////////////////////////////////////////
104
inline
OrganizedIndexIterator::OrganizedIndexIterator
(
unsigned
width)
105
: width_ (width)
106
, index_ (0)
107
{
108
}
109
110
////////////////////////////////////////////////////////////////////////////////
111
inline
OrganizedIndexIterator::~OrganizedIndexIterator
()
112
{
113
}
114
115
////////////////////////////////////////////////////////////////////////////////
116
inline
void
117
OrganizedIndexIterator::operator++
(
int
)
118
{
119
return
operator ++
();
120
}
121
122
////////////////////////////////////////////////////////////////////////////////
123
inline
unsigned
124
pcl::OrganizedIndexIterator::operator *
()
const
125
{
126
return
index_;
127
}
128
129
////////////////////////////////////////////////////////////////////////////////
130
inline
unsigned
131
pcl::OrganizedIndexIterator::getIndex
()
const
132
{
133
return
index_;
134
}
135
136
////////////////////////////////////////////////////////////////////////////////
137
/** \brief default implementation. Should be overloaded
138
*/
139
inline
unsigned
140
pcl::OrganizedIndexIterator::getRowIndex
()
const
141
{
142
return
index_ / width_;
143
}
144
145
////////////////////////////////////////////////////////////////////////////////
146
inline
unsigned
147
pcl::OrganizedIndexIterator::getColumnIndex
()
const
148
{
149
return
index_ % width_;
150
}
151
}
// namespace pcl
152
153
#endif // __PCL_ORGANIZED_INDEX_ITERATOR__