GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/hpp/fcl/shape/convex.h Lines: 1 1 100.0 %
Date: 2024-02-09 12:57:42 Branches: 0 0 - %

Line Branch Exec Source
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
36
/** \author Jia Pan */
37
38
#ifndef HPP_FCL_SHAPE_CONVEX_H
39
#define HPP_FCL_SHAPE_CONVEX_H
40
41
#include <hpp/fcl/shape/geometric_shapes.h>
42
43
namespace hpp {
44
namespace fcl {
45
46
/// @brief Convex polytope
47
/// @tparam PolygonT the polygon class. It must have method \c size() and
48
///         \c operator[](int i)
49
template <typename PolygonT>
50
class Convex : public ConvexBase {
51
 public:
52
  /// @brief Construct an uninitialized convex object
53
55658
  Convex() : ConvexBase(), polygons(NULL), num_polygons(0) {}
54
55
  /// @brief Constructing a convex, providing normal and offset of each polytype
56
  /// surface, and the points and shape topology information \param ownStorage
57
  /// whether this class owns the pointers of points and
58
  ///                    polygons. If owned, they are deleted upon destruction.
59
  /// \param points_ list of 3D points
60
  /// \param num_points_ number of 3D points
61
  /// \param polygons_ \copydoc Convex::polygons
62
  /// \param num_polygons_ the number of polygons.
63
  /// \note num_polygons_ is not the allocated size of polygons_.
64
  Convex(bool ownStorage, Vec3f* points_, unsigned int num_points_,
65
         PolygonT* polygons_, unsigned int num_polygons_);
66
67
  /// @brief Copy constructor
68
  /// Only the list of neighbors is copied.
69
  Convex(const Convex& other);
70
71
  ~Convex();
72
73
  /// @brief An array of PolygonT object.
74
  /// PolygonT should contains a list of vertices for each polygon,
75
  /// in counter clockwise order.
76
  PolygonT* polygons;
77
  unsigned int num_polygons;
78
79
  /// based on http://number-none.com/blow/inertia/bb_inertia.doc
80
  Matrix3f computeMomentofInertia() const;
81
82
  Vec3f computeCOM() const;
83
84
  FCL_REAL computeVolume() const;
85
86
  ///
87
  /// @brief Set the current Convex from a list of points and polygons.
88
  ///
89
  /// \param ownStorage whether this class owns the pointers of points and
90
  ///                    polygons. If owned, they are deleted upon destruction.
91
  /// \param points list of 3D points
92
  /// \param num_points number of 3D points
93
  /// \param polygons \copydoc Convex::polygons
94
  /// \param num_polygons the number of polygons.
95
  /// \note num_polygons is not the allocated size of polygons.
96
  ///
97
  void set(bool ownStorage, Vec3f* points, unsigned int num_points,
98
           PolygonT* polygons, unsigned int num_polygons);
99
100
  ///  @brief Clone (deep copy).
101
  virtual Convex<PolygonT>* clone() const;
102
103
 protected:
104
  void fillNeighbors();
105
};
106
107
}  // namespace fcl
108
109
}  // namespace hpp
110
111
#include <hpp/fcl/shape/details/convex.hxx>
112
113
#endif