hpp-fcl 2.4.1
HPP fork of FCL -- The Flexible Collision Library
Loading...
Searching...
No Matches
geometric_shapes_utility.h
Go to the documentation of this file.
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011-2014, Willow Garage, Inc.
5 * Copyright (c) 2014-2015, Open Source Robotics Foundation
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of Open Source Robotics Foundation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
38#ifndef HPP_FCL_GEOMETRIC_SHAPES_UTILITY_H
39#define HPP_FCL_GEOMETRIC_SHAPES_UTILITY_H
40
41#include <vector>
43#include <hpp/fcl/BV/BV.h>
45
46namespace hpp {
47namespace fcl {
48
50namespace details {
53HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Box& box,
54 const Transform3f& tf);
55HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Sphere& sphere,
56 const Transform3f& tf);
57HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Ellipsoid& ellipsoid,
58 const Transform3f& tf);
59HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Capsule& capsule,
60 const Transform3f& tf);
61HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Cone& cone,
62 const Transform3f& tf);
63HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Cylinder& cylinder,
64 const Transform3f& tf);
65HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const ConvexBase& convex,
66 const Transform3f& tf);
67HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const TriangleP& triangle,
68 const Transform3f& tf);
69} // namespace details
71
73template <typename BV, typename S>
74inline void computeBV(const S& s, const Transform3f& tf, BV& bv) {
75 std::vector<Vec3f> convex_bound_vertices = details::getBoundVertices(s, tf);
76 fit(&convex_bound_vertices[0], (unsigned int)convex_bound_vertices.size(),
77 bv);
78}
79
80template <>
82 AABB& bv);
83
84template <>
86 const Transform3f& tf, AABB& bv);
87
88template <>
90 const Transform3f& tf, AABB& bv);
91
92template <>
94 const Transform3f& tf, AABB& bv);
95
96template <>
98 AABB& bv);
99
100template <>
102 const Transform3f& tf, AABB& bv);
103
104template <>
106 const Transform3f& tf,
107 AABB& bv);
108
109template <>
111 const Transform3f& tf, AABB& bv);
112
113template <>
115 const Transform3f& tf, AABB& bv);
116
117template <>
119 const Transform3f& tf, AABB& bv);
120
121template <>
123 OBB& bv);
124
125template <>
127 const Transform3f& tf, OBB& bv);
128
129template <>
131 const Transform3f& tf, OBB& bv);
132
133template <>
135 OBB& bv);
136
137template <>
139 const Transform3f& tf, OBB& bv);
140
141template <>
143 const Transform3f& tf, OBB& bv);
144
145template <>
147 const Transform3f& tf, OBB& bv);
148
149template <>
151 const Transform3f& tf, RSS& bv);
152
153template <>
155 const Transform3f& tf,
156 OBBRSS& bv);
157
158template <>
160 const Transform3f& tf, kIOS& bv);
161
162template <>
163HPP_FCL_DLLAPI void computeBV<KDOP<16>, Halfspace>(const Halfspace& s,
164 const Transform3f& tf,
165 KDOP<16>& bv);
166
167template <>
168HPP_FCL_DLLAPI void computeBV<KDOP<18>, Halfspace>(const Halfspace& s,
169 const Transform3f& tf,
170 KDOP<18>& bv);
171
172template <>
173HPP_FCL_DLLAPI void computeBV<KDOP<24>, Halfspace>(const Halfspace& s,
174 const Transform3f& tf,
175 KDOP<24>& bv);
176
177template <>
179 OBB& bv);
180
181template <>
183 RSS& bv);
184
185template <>
187 const Transform3f& tf, OBBRSS& bv);
188
189template <>
191 const Transform3f& tf, kIOS& bv);
192
193template <>
194HPP_FCL_DLLAPI void computeBV<KDOP<16>, Plane>(const Plane& s,
195 const Transform3f& tf,
196 KDOP<16>& bv);
197
198template <>
199HPP_FCL_DLLAPI void computeBV<KDOP<18>, Plane>(const Plane& s,
200 const Transform3f& tf,
201 KDOP<18>& bv);
202
203template <>
204HPP_FCL_DLLAPI void computeBV<KDOP<24>, Plane>(const Plane& s,
205 const Transform3f& tf,
206 KDOP<24>& bv);
207
210HPP_FCL_DLLAPI void constructBox(const AABB& bv, Box& box, Transform3f& tf);
211
212HPP_FCL_DLLAPI void constructBox(const OBB& bv, Box& box, Transform3f& tf);
213
215
216HPP_FCL_DLLAPI void constructBox(const kIOS& bv, Box& box, Transform3f& tf);
217
218HPP_FCL_DLLAPI void constructBox(const RSS& bv, Box& box, Transform3f& tf);
219
221
223
225
226HPP_FCL_DLLAPI void constructBox(const AABB& bv, const Transform3f& tf_bv,
227 Box& box, Transform3f& tf);
228
229HPP_FCL_DLLAPI void constructBox(const OBB& bv, const Transform3f& tf_bv,
230 Box& box, Transform3f& tf);
231
232HPP_FCL_DLLAPI void constructBox(const OBBRSS& bv, const Transform3f& tf_bv,
233 Box& box, Transform3f& tf);
234
235HPP_FCL_DLLAPI void constructBox(const kIOS& bv, const Transform3f& tf_bv,
236 Box& box, Transform3f& tf);
237
238HPP_FCL_DLLAPI void constructBox(const RSS& bv, const Transform3f& tf_bv,
239 Box& box, Transform3f& tf);
240
241HPP_FCL_DLLAPI void constructBox(const KDOP<16>& bv, const Transform3f& tf_bv,
242 Box& box, Transform3f& tf);
243
244HPP_FCL_DLLAPI void constructBox(const KDOP<18>& bv, const Transform3f& tf_bv,
245 Box& box, Transform3f& tf);
246
247HPP_FCL_DLLAPI void constructBox(const KDOP<24>& bv, const Transform3f& tf_bv,
248 Box& box, Transform3f& tf);
249
251
253
254} // namespace fcl
255
256} // namespace hpp
257
258#endif
A class describing the AABB collision structure, which is a box in 3D space determined by two diagona...
Definition: AABB.h:54
Center at zero point, axis aligned box.
Definition: geometric_shapes.h:125
Capsule It is where is the distance between the point x and the capsule segment AB,...
Definition: geometric_shapes.h:333
Cone The base of the cone is at and the top is at .
Definition: geometric_shapes.h:414
Base for convex polytope.
Definition: geometric_shapes.h:581
Cylinder along Z axis. The cylinder is defined at its centroid.
Definition: geometric_shapes.h:501
Ellipsoid centered at point zero.
Definition: geometric_shapes.h:258
Half Space: this is equivalent to the Plane in ODE. The separation plane is defined as n * x = d; Poi...
Definition: geometric_shapes.h:729
KDOP class describes the KDOP collision structures. K is set as the template parameter,...
Definition: kDOP.h:92
Infinite plane.
Definition: geometric_shapes.h:810
Center at zero point sphere.
Definition: geometric_shapes.h:196
Simple transform class used locally by InterpMotion.
Definition: transform.h:54
Triangle stores the points instead of only indices of points.
Definition: geometric_shapes.h:71
A class describing the kIOS collision structure, which is a set of spheres.
Definition: kIOS.h:53
#define HPP_FCL_DLLAPI
Definition: config.hh:88
void computeBV< OBBRSS, Halfspace >(const Halfspace &s, const Transform3f &tf, OBBRSS &bv)
void computeBV(const S &s, const Transform3f &tf, BV &bv)
calculate a bounding volume for a shape in a specific configuration
Definition: geometric_shapes_utility.h:74
void constructBox(const AABB &bv, Box &box, Transform3f &tf)
construct a box shape (with a configuration) from a given bounding volume
void computeBV< OBB, Plane >(const Plane &s, const Transform3f &tf, OBB &bv)
void computeBV< AABB, ConvexBase >(const ConvexBase &s, const Transform3f &tf, AABB &bv)
void computeBV< OBB, Capsule >(const Capsule &s, const Transform3f &tf, OBB &bv)
void computeBV< OBB, Box >(const Box &s, const Transform3f &tf, OBB &bv)
void computeBV< AABB, TriangleP >(const TriangleP &s, const Transform3f &tf, AABB &bv)
void computeBV< RSS, Halfspace >(const Halfspace &s, const Transform3f &tf, RSS &bv)
void computeBV< AABB, Cylinder >(const Cylinder &s, const Transform3f &tf, AABB &bv)
void computeBV< AABB, Box >(const Box &s, const Transform3f &tf, AABB &bv)
void computeBV< OBBRSS, Plane >(const Plane &s, const Transform3f &tf, OBBRSS &bv)
void computeBV< OBB, ConvexBase >(const ConvexBase &s, const Transform3f &tf, OBB &bv)
void computeBV< RSS, Plane >(const Plane &s, const Transform3f &tf, RSS &bv)
void fit(Vec3f *ps, unsigned int n, BV &bv)
Compute a bounding volume that fits a set of n points.
Definition: BV_fitter.h:52
void computeBV< AABB, Plane >(const Plane &s, const Transform3f &tf, AABB &bv)
void computeBV< AABB, Ellipsoid >(const Ellipsoid &e, const Transform3f &tf, AABB &bv)
void computeBV< OBB, Cone >(const Cone &s, const Transform3f &tf, OBB &bv)
void computeBV< OBB, Halfspace >(const Halfspace &s, const Transform3f &tf, OBB &bv)
void computeBV< AABB, Cone >(const Cone &s, const Transform3f &tf, AABB &bv)
void computeBV< AABB, Sphere >(const Sphere &s, const Transform3f &tf, AABB &bv)
void computeBV< kIOS, Plane >(const Plane &s, const Transform3f &tf, kIOS &bv)
void computeBV< OBB, Sphere >(const Sphere &s, const Transform3f &tf, OBB &bv)
Halfspace transform(const Halfspace &a, const Transform3f &tf)
void computeBV< kIOS, Halfspace >(const Halfspace &s, const Transform3f &tf, kIOS &bv)
void computeBV< OBB, Cylinder >(const Cylinder &s, const Transform3f &tf, OBB &bv)
void computeBV< AABB, Capsule >(const Capsule &s, const Transform3f &tf, AABB &bv)
void computeBV< AABB, Halfspace >(const Halfspace &s, const Transform3f &tf, AABB &bv)
Main namespace.
Definition: broadphase_bruteforce.h:44
Class merging the OBB and RSS, can handle collision and distance simultaneously.
Definition: OBBRSS.h:54
Oriented bounding box class.
Definition: OBB.h:52
A class for rectangle sphere-swept bounding volume.
Definition: RSS.h:53