1 #include <fcl/geometry/bvh/BVH_model.h> 2 #include <fcl/narrowphase/collision.h> 3 #include <fcl/narrowphase/collision_object.h> 17 std::vector<std::vector<Eigen::Vector2d>> &hole_vertices,
18 std::vector<TriangleConstPtr> &mesh_triangles,
19 const Eigen::Vector2d &_center)
22 hole_vertices_ = hole_vertices;
23 mesh_triangles_ = mesh_triangles;
26 #if ENABLE_TRIANGULATION 28 std::vector<std::vector<Eigen::Vector2d>> &hole_vertices,
int triangulation_method,
29 triangulation::TriangulationQuality qual,
30 const Eigen::Vector2d &_center)
32 hole_vertices_ = hole_vertices;
35 triangulation::do_triangulate_aabb(vertices, mesh_triangles_);
37 if (!qual.use_quality) {
38 triangulation::do_triangulate(vertices, mesh_triangles_, triangulation_method);
40 triangulation::do_triangulateQuality(vertices, mesh_triangles_, triangulation_method, qual);
66 const Eigen::Vector2d &point2,
67 std::vector<LineSegment> &intersect)
const {
70 for (
auto &tri : mesh_triangles_) {
71 std::vector<Eigen::Vector2d> inters1;
72 for (
auto &segm : tri->segments()) {
73 res = segm.intersect(obj_segment, inters1) || res;
99 for (
auto &tri : mesh_triangles_) {
102 stream <<
"\\Polygon " << std::endl;
111 if (!this_boost || !other_boost) {
114 return boost_within(*(static_cast<const BoostPolygon *>(
122 fcl::BVHModel<fcl::AABB<FCL_PRECISION>> *model =
123 new fcl::BVHModel<fcl::AABB<FCL_PRECISION>>();
124 model->beginModel(mesh_triangles_.size(), mesh_triangles_.size() * 3);
125 fcl::Vector3<FCL_PRECISION> v3(0, 0, 0);
126 for (
auto &tr : mesh_triangles_) {
127 Eigen::Vector2d v2d = tr->v1();
128 fcl::Vector3<FCL_PRECISION> v1(v2d[0], v2d[1], 0);
130 fcl::Vector3<FCL_PRECISION> v2(v2d[0], v2d[1], 0);
132 fcl::Vector3<FCL_PRECISION> v3(v2d[0], v2d[1], 0);
133 model->addTriangle(v1, v2, v3);
146 return shared_ptr_this;
150 return mesh_triangles_;
156 return hole_vertices_;
159 #if ENABLE_SERIALIZER 166 return serialize::exportObject(*
this);
std::shared_ptr< BoostObjectInternal > getCollisionObject_boost(void) const
std::vector< Eigen::Vector2d > getVertices() const
bool rayTrace(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2, std::vector< LineSegment > &intersect) const override
std::vector< TriangleConstPtr > getTriangleMesh() const
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))
ShapeType type(void) const
Get shape type.
virtual void toString(std::ostringstream &stream) const
bool rayTracePostprocess(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2, std::vector< Eigen::Vector2d > inters1, std::vector< LineSegment > &intersect, const collision::CollisionObject *obj)
void invalidateCollisionEntityCache(void)
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
std::vector< std::vector< Eigen::Vector2d > > getHoleVertices() const
const BoostCollisionObject * get_boost_object_ptr(const CollisionObject *obj)
double radius() const
Get radius.
virtual void print(std::ostringstream &stream) const
Print all parameters of the shape.
virtual CollisionObjectConstPtr timeSlice(int time_idx, CollisionObjectConstPtr shared_ptr_this) const
Base prototype for the shape of an obstacle.
int serialize(const test::BroadphaseFailureCCObj &bf_object, std::ostream &output_stream, const char *format=SERIALIZER_DEFAULT_FORMAT)
bool isWithin(const Polygon &poly2) const
Polygon contains Triangles and Vertices.
bool boost_within(const BoostPolygon &polyg1, const BoostPolygon &polyg2)
Returns true if the BoostPolygon polyg1 is completely contained within the other BoostPolygon object ...
Eigen::Vector2d center() const
Get geometric center of shape.
BoostPolygon allows to use boost.Geometry functions for Polygon objects.