Collision Checker
polygon.h
Go to the documentation of this file.
1 #ifndef POLYGON_H_
2 #define POLYGON_H_
3 
4 #include <iostream>
5 #include <memory>
6 #include <sstream>
7 #include <vector>
8 
12 
13 namespace collision {
14 
15 class Polygon;
16 
17 class ShapeGroup;
18 
19 typedef std::shared_ptr<ShapeGroup> ShapeGroupPtr;
20 typedef std::shared_ptr<const ShapeGroup> ShapeGroupConstPtr;
21 
22 typedef std::shared_ptr<Polygon> PolygonPtr;
23 typedef std::shared_ptr<const Polygon> PolygonConstPtr;
24 
30  public:
31  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
32 
33  Polygon(std::vector<Eigen::Vector2d> &vertices,
34  std::vector<std::vector<Eigen::Vector2d>> &hole_vertices,
35  std::vector<TriangleConstPtr> &mesh_triangles,
36  const Eigen::Vector2d &_center = Eigen::Vector2d(0, 0));
37 #if ENABLE_TRIANGULATION
38  Polygon(std::vector<Eigen::Vector2d> &vertices,
39  std::vector<std::vector<Eigen::Vector2d>> &hole_vertices, int triangulation_method,
40  triangulation::TriangulationQuality qual =
41  triangulation::TriangulationQuality(),
42  const Eigen::Vector2d &_center = Eigen::Vector2d(0, 0));
43  /*Polygon(std::vector<Eigen::Vector2d> &vertices, int triangulation_method,
44  triangulation::TriangulationQuality qual =
45  triangulation::TriangulationQuality(),
46  const Eigen::Vector2d &_center = Eigen::Vector2d(0, 0));
47  */
48 #endif
49 
50  Polygon(const Polygon &copy);
51 
52  Polygon *clone() const;
53 
54  ShapeType type(void) const;
55 
56  bool rayTrace(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2,
57  std::vector<LineSegment> &intersect) const override;
58 
59  virtual ~Polygon() {}
60 
61  bool isWithin(const Polygon &poly2) const;
62 
64  const override {
65  return this;
66  }
67 
68  virtual void toString(std::ostringstream &stream) const;
69  virtual void print(std::ostringstream &stream) const;
71  int time_idx, CollisionObjectConstPtr shared_ptr_this) const;
72 
73  ShapeGroupConstPtr getTrapezoids() const;
74 
75  std::vector<TriangleConstPtr> getTriangleMesh() const;
76  std::vector<Eigen::Vector2d> getVertices() const;
77  std::vector<std::vector<Eigen::Vector2d>> getHoleVertices() const;
78 
79  virtual CollisionObjectType getCollisionObjectType() const override {
81  }
82 
83 #if ENABLE_SERIALIZER
84  serialize::ICollisionObjectExport *exportThis(void) const override;
85 #endif
86 
87  private:
88  static constexpr ShapeType type_ = TYPE_POLYGON;
89  fcl::CollisionGeometry<FCL_PRECISION> *createFCLCollisionGeometry(
90  void) const override;
91  fcl::CollisionObject<FCL_PRECISION> *createFCLCollisionObject(
92  const std::shared_ptr<fcl::CollisionGeometry<FCL_PRECISION>> &)
93  const override;
94 
95  std::vector<Eigen::Vector2d> vertices_;
96  std::vector<std::vector<Eigen::Vector2d>> hole_vertices_;
97  std::vector<TriangleConstPtr> mesh_triangles_;
98 };
99 
100 } // namespace collision
101 
102 #endif
std::vector< Eigen::Vector2d > getVertices() const
Definition: polygon.cc:153
bool rayTrace(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2, std::vector< LineSegment > &intersect) const override
Definition: polygon.cc:65
std::vector< TriangleConstPtr > getTriangleMesh() const
Definition: polygon.cc:149
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Polygon(std::vector< Eigen::Vector2d > &vertices, std::vector< std::vector< Eigen::Vector2d >> &hole_vertices, std::vector< TriangleConstPtr > &mesh_triangles, const Eigen::Vector2d &_center=Eigen::Vector2d(0, 0))
Definition: polygon.cc:16
virtual CollisionObjectType getCollisionObjectType() const override
Definition: polygon.h:79
ShapeType type(void) const
Get shape type.
Definition: polygon.cc:92
virtual void toString(std::ostringstream &stream) const
Definition: polygon.cc:96
ShapeGroup can contain simple shapes.
Definition: shape_group.h:33
virtual const solvers::solverBoost::ISolverEntity_Boost * getBoostInterface() const override
Definition: polygon.h:63
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
std::shared_ptr< const Polygon > PolygonConstPtr
Definition: polygon.h:23
std::vector< std::vector< Eigen::Vector2d > > getHoleVertices() const
Definition: polygon.cc:155
Polygon * clone() const
Definition: polygon.cc:81
std::shared_ptr< const ShapeGroup > ShapeGroupConstPtr
Definition: polygon.h:20
virtual ~Polygon()
Definition: polygon.h:59
std::shared_ptr< ShapeGroup > ShapeGroupPtr
Definition: polygon.h:17
virtual void print(std::ostringstream &stream) const
Print all parameters of the shape.
Definition: polygon.cc:94
ShapeType
Definition: shape.h:13
virtual CollisionObjectConstPtr timeSlice(int time_idx, CollisionObjectConstPtr shared_ptr_this) const
Definition: polygon.cc:144
Base prototype for the shape of an obstacle.
Definition: shape.h:25
std::shared_ptr< Polygon > PolygonPtr
Definition: polygon.h:22
bool isWithin(const Polygon &poly2) const
Definition: polygon.cc:105
Polygon contains Triangles and Vertices.
Definition: polygon.h:29
ShapeGroupConstPtr getTrapezoids() const