Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
geometry
get_boundary.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 <vector>
44
45
namespace
pcl
{
46
namespace
geometry
{
47
/**
48
* \brief Get a collection of boundary half-edges for the input mesh.
49
* \param[in] mesh The input mesh.
50
* \param[out] boundary_he_collection Collection of boundary half-edges. Each element in
51
* the vector is one connected boundary. The whole boundary is the union of all
52
* elements.
53
* \param [in] expected_size If you already know the size of the longest
54
* boundary you can tell this here. Defaults to 3 (minimum possible boundary).
55
* \author Martin Saelzle
56
* \ingroup geometry
57
*/
58
template
<
class
MeshT>
59
void
60
getBoundBoundaryHalfEdges
(
61
const
MeshT& mesh,
62
std::vector<typename MeshT::HalfEdgeIndices>& boundary_he_collection,
63
const
std::size_t expected_size = 3)
64
{
65
using
Mesh
= MeshT;
66
using
HalfEdgeIndex
=
typename
Mesh::HalfEdgeIndex;
67
using
HalfEdgeIndices =
typename
Mesh::HalfEdgeIndices;
68
using
IHEAFC =
typename
Mesh::InnerHalfEdgeAroundFaceCirculator;
69
70
boundary_he_collection.clear();
71
72
HalfEdgeIndices boundary_he;
73
boundary_he.reserve(expected_size);
74
std::vector<bool> visited(mesh.sizeEdges(),
false
);
75
IHEAFC circ, circ_end;
76
77
for
(
HalfEdgeIndex
i(0); i <
HalfEdgeIndex
(mesh.sizeHalfEdges()); ++i) {
78
if
(mesh.isBoundary(i) && !visited[
pcl::geometry::toEdgeIndex
(i).get()]) {
79
boundary_he.clear();
80
81
circ = mesh.getInnerHalfEdgeAroundFaceCirculator(i);
82
circ_end = circ;
83
do
{
84
visited[
pcl::geometry::toEdgeIndex
(circ.getTargetIndex()).
get
()] =
true
;
85
boundary_he.push_back(circ.getTargetIndex());
86
}
while
(++circ != circ_end);
87
88
boundary_he_collection.push_back(boundary_he);
89
}
90
}
91
}
92
93
}
// End namespace geometry
94
}
// End namespace pcl
Mesh
Definition
surface.h:14
pcl::detail::MeshIndex::get
int get() const
Get the index.
Definition
mesh_indices.h:101
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::getBoundBoundaryHalfEdges
void getBoundBoundaryHalfEdges(const MeshT &mesh, std::vector< typename MeshT::HalfEdgeIndices > &boundary_he_collection, const std::size_t expected_size=3)
Get a collection of boundary half-edges for the input mesh.
Definition
get_boundary.h:60
pcl::geometry
Definition
geometry.h:57
pcl::geometry::toEdgeIndex
EdgeIndex toEdgeIndex(const HalfEdgeIndex &index)
Convert the given half-edge index to an edge index.
Definition
mesh_indices.h:224
pcl
Definition
convolution.h:46