hpp-fcl 1.8.0
HPP fork of FCL -- The Flexible Collision Library
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
39#ifndef HPP_FCL_GEOMETRIC_SHAPES_UTILITY_H
40#define HPP_FCL_GEOMETRIC_SHAPES_UTILITY_H
41
42#include <vector>
44#include <hpp/fcl/BV/BV.h>
46
47namespace hpp
48{
49namespace fcl
50{
51
53namespace details
54{
56HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Box& box, const Transform3f& tf);
57HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Sphere& sphere, const Transform3f& tf);
58HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Capsule& capsule, const Transform3f& tf);
59HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Cone& cone, const Transform3f& tf);
60HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const Cylinder& cylinder, const Transform3f& tf);
61HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const ConvexBase& convex, const Transform3f& tf);
62HPP_FCL_DLLAPI std::vector<Vec3f> getBoundVertices(const TriangleP& triangle, const Transform3f& tf);
63}
65
66
68template<typename BV, typename S>
69inline void computeBV(const S& s, const Transform3f& tf, BV& bv)
70{
71 std::vector<Vec3f> convex_bound_vertices = details::getBoundVertices(s, tf);
72 fit(&convex_bound_vertices[0], (unsigned int)convex_bound_vertices.size(), bv);
73}
74
75template<>
76HPP_FCL_DLLAPI void computeBV<AABB, Box>(const Box& s, const Transform3f& tf, AABB& bv);
77
78template<>
79HPP_FCL_DLLAPI void computeBV<AABB, Sphere>(const Sphere& s, const Transform3f& tf, AABB& bv);
80
81template<>
82HPP_FCL_DLLAPI void computeBV<AABB, Capsule>(const Capsule& s, const Transform3f& tf, AABB& bv);
83
84template<>
85HPP_FCL_DLLAPI void computeBV<AABB, Cone>(const Cone& s, const Transform3f& tf, AABB& bv);
86
87template<>
88HPP_FCL_DLLAPI void computeBV<AABB, Cylinder>(const Cylinder& s, const Transform3f& tf, AABB& bv);
89
90template<>
91HPP_FCL_DLLAPI void computeBV<AABB, ConvexBase>(const ConvexBase& s, const Transform3f& tf, AABB& bv);
92
93template<>
94HPP_FCL_DLLAPI void computeBV<AABB, TriangleP>(const TriangleP& s, const Transform3f& tf, AABB& bv);
95
96template<>
97HPP_FCL_DLLAPI void computeBV<AABB, Halfspace>(const Halfspace& s, const Transform3f& tf, AABB& bv);
98
99template<>
100HPP_FCL_DLLAPI void computeBV<AABB, Plane>(const Plane& s, const Transform3f& tf, AABB& bv);
101
102
103
104template<>
105HPP_FCL_DLLAPI void computeBV<OBB, Box>(const Box& s, const Transform3f& tf, OBB& bv);
106
107template<>
108HPP_FCL_DLLAPI void computeBV<OBB, Sphere>(const Sphere& s, const Transform3f& tf, OBB& bv);
109
110template<>
111HPP_FCL_DLLAPI void computeBV<OBB, Capsule>(const Capsule& s, const Transform3f& tf, OBB& bv);
112
113template<>
114HPP_FCL_DLLAPI void computeBV<OBB, Cone>(const Cone& s, const Transform3f& tf, OBB& bv);
115
116template<>
117HPP_FCL_DLLAPI void computeBV<OBB, Cylinder>(const Cylinder& s, const Transform3f& tf, OBB& bv);
118
119template<>
120HPP_FCL_DLLAPI void computeBV<OBB, ConvexBase>(const ConvexBase& s, const Transform3f& tf, OBB& bv);
121
122template<>
123HPP_FCL_DLLAPI void computeBV<OBB, Halfspace>(const Halfspace& s, const Transform3f& tf, OBB& bv);
124
125template<>
126HPP_FCL_DLLAPI void computeBV<RSS, Halfspace>(const Halfspace& s, const Transform3f& tf, RSS& bv);
127
128template<>
129HPP_FCL_DLLAPI void computeBV<OBBRSS, Halfspace>(const Halfspace& s, const Transform3f& tf, OBBRSS& bv);
130
131template<>
132HPP_FCL_DLLAPI void computeBV<kIOS, Halfspace>(const Halfspace& s, const Transform3f& tf, kIOS& bv);
133
134template<>
135HPP_FCL_DLLAPI void computeBV<KDOP<16>, Halfspace>(const Halfspace& s, const Transform3f& tf, KDOP<16>& bv);
136
137template<>
138HPP_FCL_DLLAPI void computeBV<KDOP<18>, Halfspace>(const Halfspace& s, const Transform3f& tf, KDOP<18>& bv);
139
140template<>
141HPP_FCL_DLLAPI void computeBV<KDOP<24>, Halfspace>(const Halfspace& s, const Transform3f& tf, KDOP<24>& bv);
142
143template<>
144HPP_FCL_DLLAPI void computeBV<OBB, Plane>(const Plane& s, const Transform3f& tf, OBB& bv);
145
146template<>
147HPP_FCL_DLLAPI void computeBV<RSS, Plane>(const Plane& s, const Transform3f& tf, RSS& bv);
148
149template<>
150HPP_FCL_DLLAPI void computeBV<OBBRSS, Plane>(const Plane& s, const Transform3f& tf, OBBRSS& bv);
151
152template<>
153HPP_FCL_DLLAPI void computeBV<kIOS, Plane>(const Plane& s, const Transform3f& tf, kIOS& bv);
154
155template<>
156HPP_FCL_DLLAPI void computeBV<KDOP<16>, Plane>(const Plane& s, const Transform3f& tf, KDOP<16>& bv);
157
158template<>
159HPP_FCL_DLLAPI void computeBV<KDOP<18>, Plane>(const Plane& s, const Transform3f& tf, KDOP<18>& bv);
160
161template<>
162HPP_FCL_DLLAPI void computeBV<KDOP<24>, Plane>(const Plane& s, const Transform3f& tf, KDOP<24>& bv);
163
164
166HPP_FCL_DLLAPI void constructBox(const AABB& bv, Box& box, Transform3f& tf);
167
168HPP_FCL_DLLAPI void constructBox(const OBB& bv, Box& box, Transform3f& tf);
169
170HPP_FCL_DLLAPI void constructBox(const OBBRSS& bv, Box& box, Transform3f& tf);
171
172HPP_FCL_DLLAPI void constructBox(const kIOS& bv, Box& box, Transform3f& tf);
173
174HPP_FCL_DLLAPI void constructBox(const RSS& bv, Box& box, Transform3f& tf);
175
176HPP_FCL_DLLAPI void constructBox(const KDOP<16>& bv, Box& box, Transform3f& tf);
177
178HPP_FCL_DLLAPI void constructBox(const KDOP<18>& bv, Box& box, Transform3f& tf);
179
180HPP_FCL_DLLAPI void constructBox(const KDOP<24>& bv, Box& box, Transform3f& tf);
181
182HPP_FCL_DLLAPI void constructBox(const AABB& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
183
184HPP_FCL_DLLAPI void constructBox(const OBB& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
185
186HPP_FCL_DLLAPI void constructBox(const OBBRSS& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
187
188HPP_FCL_DLLAPI void constructBox(const kIOS& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
189
190HPP_FCL_DLLAPI void constructBox(const RSS& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
191
192HPP_FCL_DLLAPI void constructBox(const KDOP<16>& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
193
194HPP_FCL_DLLAPI void constructBox(const KDOP<18>& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
195
196HPP_FCL_DLLAPI void constructBox(const KDOP<24>& bv, const Transform3f& tf_bv, Box& box, Transform3f& tf);
197
198HPP_FCL_DLLAPI Halfspace transform(const Halfspace& a, const Transform3f& tf);
199
200HPP_FCL_DLLAPI Plane transform(const Plane& a, const Transform3f& tf);
201
202}
203
204} // namespace hpp
205
206#endif
A class describing the AABB collision structure, which is a box in 3D space determined by two diagona...
Definition: AABB.h:56
Center at zero point, axis aligned box.
Definition: geometric_shapes.h:103
Capsule It is where is the distance between the point x and the capsule segment AB,...
Definition: geometric_shapes.h:193
Cone The base of the cone is at and the top is at .
Definition: geometric_shapes.h:250
Base for convex polytope.
Definition: geometric_shapes.h:356
Cylinder along Z axis. The cylinder is defined at its centroid.
Definition: geometric_shapes.h:306
Half Space: this is equivalent to the Plane in ODE. The separation plane is defined as n * x = d; Poi...
Definition: geometric_shapes.h:461
KDOP class describes the KDOP collision structures. K is set as the template parameter,...
Definition: kDOP.h:90
Infinite plane.
Definition: geometric_shapes.h:531
Center at zero point sphere.
Definition: geometric_shapes.h:150
Simple transform class used locally by InterpMotion.
Definition: transform.h:59
Triangle stores the points instead of only indices of points.
Definition: geometric_shapes.h:76
A class describing the kIOS collision structure, which is a set of spheres.
Definition: kIOS.h:56
Definition: traversal_node_setup.h:852
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:69
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:54
void computeBV< AABB, Plane >(const Plane &s, 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: AABB.h:44
Oriented bounding box class.
Definition: OBB.h:55
Class merging the OBB and RSS, can handle collision and distance simultaneously.
Definition: OBBRSS.h:57
A class for rectangle sphere-swept bounding volume.
Definition: RSS.h:56