Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
geometry
mesh_elements.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Point Cloud Library (PCL) - www.pointclouds.org
5
* Copyright (c) 2009-2012, Willow Garage, Inc.
6
* Copyright (c) 2012-, Open Perception, Inc.
7
*
8
* All rights reserved.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
*
14
* * Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* * Redistributions in binary form must reproduce the above
17
* copyright notice, this list of conditions and the following
18
* disclaimer in the documentation and/or other materials provided
19
* with the distribution.
20
* * Neither the name of the copyright holder(s) nor the names of its
21
* contributors may be used to endorse or promote products derived
22
* from this software without specific prior written permission.
23
*
24
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
* POSSIBILITY OF SUCH DAMAGE.
36
*
37
* $Id$
38
*
39
*/
40
41
#pragma once
42
43
#include <pcl/geometry/mesh_indices.h>
44
45
namespace
pcl
{
46
namespace
geometry
{
47
template
<
class
DerivedT,
class
MeshTraitsT,
class
MeshTagT>
48
class
MeshBase
;
49
50
template
<
class
MeshT>
51
class
MeshIO
;
52
}
// End namespace geometry
53
}
// End namespace pcl
54
55
////////////////////////////////////////////////////////////////////////////////
56
// Vertex
57
////////////////////////////////////////////////////////////////////////////////
58
59
namespace
pcl
{
60
namespace
geometry
{
61
/** \brief A vertex is a node in the mesh.
62
* \author Martin Saelzle
63
* \ingroup geometry
64
*/
65
class
Vertex {
66
private
:
67
using
HalfEdgeIndex =
pcl::geometry::HalfEdgeIndex
;
68
69
/** \brief Constructor.
70
* \param[in] idx_outgoing_half_edge Index to the outgoing half-edge. Defaults to an
71
* invalid index.
72
*/
73
explicit
Vertex(
const
HalfEdgeIndex& idx_outgoing_half_edge =
HalfEdgeIndex
())
74
: idx_outgoing_half_edge_(idx_outgoing_half_edge)
75
{}
76
77
/** \brief Index to the outgoing half-edge. The vertex is considered to be deleted if
78
* it stores an invalid outgoing half-edge index. */
79
HalfEdgeIndex idx_outgoing_half_edge_;
80
81
template
<
class
DerivedT,
class
MeshTraitsT,
class
MeshTagT>
82
friend
class
pcl::geometry::MeshBase
;
83
84
template
<
class
MeshT>
85
friend
class
pcl::geometry::MeshIO
;
86
};
87
}
// End namespace geometry
88
}
// End namespace pcl
89
90
////////////////////////////////////////////////////////////////////////////////
91
// HalfEdge
92
////////////////////////////////////////////////////////////////////////////////
93
94
namespace
pcl
{
95
namespace
geometry {
96
/** \brief An edge is a connection between two vertices. In a half-edge mesh the edge is
97
* split into two half-edges with opposite orientation. Each half-edge stores the index
98
* to the terminating vertex, the next half-edge, the previous half-edge and the face it
99
* belongs to. The opposite half-edge is accessed implicitly.
100
* \author Martin Saelzle
101
* \ingroup geometry
102
*/
103
class
HalfEdge {
104
private
:
105
using
VertexIndex =
pcl::geometry::VertexIndex
;
106
using
HalfEdgeIndex =
pcl::geometry::HalfEdgeIndex
;
107
using
FaceIndex =
pcl::geometry::FaceIndex
;
108
109
/** \brief Constructor.
110
* \param[in] idx_terminating_vertex Index to the terminating vertex. Defaults to an
111
* invalid index.
112
* \param[in] idx_next_half_edge Index to the next half-edge.
113
* Defaults to an invalid index.
114
* \param[in] idx_prev_half_edge Index to the
115
* previous half-edge. Defaults to an invalid index.
116
* \param[in] idx_face Index to the
117
* face. Defaults to an invalid index.
118
*/
119
explicit
HalfEdge(
const
VertexIndex& idx_terminating_vertex =
VertexIndex
(),
120
const
HalfEdgeIndex& idx_next_half_edge =
HalfEdgeIndex
(),
121
const
HalfEdgeIndex& idx_prev_half_edge =
HalfEdgeIndex
(),
122
const
FaceIndex& idx_face =
FaceIndex
())
123
: idx_terminating_vertex_(idx_terminating_vertex)
124
, idx_next_half_edge_(idx_next_half_edge)
125
, idx_prev_half_edge_(idx_prev_half_edge)
126
, idx_face_(idx_face)
127
{}
128
129
/** \brief Index to the terminating vertex. The half-edge is considered to be deleted
130
* if it stores an invalid terminating vertex index. */
131
VertexIndex idx_terminating_vertex_;
132
133
/** \brief Index to the next half-edge. */
134
HalfEdgeIndex idx_next_half_edge_;
135
136
/** \brief Index to the previous half-edge. */
137
HalfEdgeIndex idx_prev_half_edge_;
138
139
/** \brief Index to the face. The half-edge is considered to be on the boundary if it
140
* stores an invalid face index. */
141
FaceIndex idx_face_;
142
143
template
<
class
DerivedT,
class
MeshTraitsT,
class
MeshTagT>
144
friend
class
pcl::geometry::MeshBase
;
145
146
template
<
class
MeshT>
147
friend
class
pcl::geometry::MeshIO
;
148
};
149
}
// End namespace geometry
150
}
// End namespace pcl
151
152
////////////////////////////////////////////////////////////////////////////////
153
// Face
154
////////////////////////////////////////////////////////////////////////////////
155
156
namespace
pcl
{
157
namespace
geometry {
158
/** \brief A face is a closed loop of edges.
159
* \author Martin Saelzle
160
* \ingroup geometry
161
*/
162
class
Face {
163
private
:
164
using
HalfEdgeIndex =
pcl::geometry::HalfEdgeIndex
;
165
166
/** \brief Constructor.
167
* \param[in] inner_half_edge_idx Index to the outgoing half-edge. Defaults to an
168
* invalid index
169
*/
170
explicit
Face(
const
HalfEdgeIndex& idx_inner_half_edge =
HalfEdgeIndex
())
171
: idx_inner_half_edge_(idx_inner_half_edge)
172
{}
173
174
/** \brief Index to the inner half-edge. The face is considered to be deleted if it
175
* stores an invalid inner half-edge index. */
176
HalfEdgeIndex idx_inner_half_edge_;
177
178
template
<
class
DerivedT,
class
MeshTraitsT,
class
MeshTagT>
179
friend
class
pcl::geometry::MeshBase
;
180
181
template
<
class
MeshT>
182
friend
class
pcl::geometry::MeshIO
;
183
};
184
}
// End namespace geometry
185
}
// End namespace pcl
pcl::geometry::MeshBase
Base class for the half-edge mesh.
Definition
mesh_base.h:96
pcl::geometry::MeshIO
Read / write the half-edge mesh from / to a file.
Definition
mesh_io.h:60
pcl::geometry::HalfEdgeIndex
pcl::detail::MeshIndex< struct HalfEdgeIndexTag > HalfEdgeIndex
Index used to access elements in the half-edge mesh.
Definition
mesh_indices.h:199
pcl::geometry::FaceIndex
pcl::detail::MeshIndex< struct FaceIndexTag > FaceIndex
Index used to access elements in the half-edge mesh.
Definition
mesh_indices.h:211
pcl::geometry::VertexIndex
pcl::detail::MeshIndex< struct VertexIndexTag > VertexIndex
Index used to access elements in the half-edge mesh.
Definition
mesh_indices.h:193
pcl::geometry
Definition
geometry.h:57
pcl
Definition
convolution.h:46