Subject: CGAL users discussion list
List archive
- From: Edouard rivière <>
- To:
- Subject: [cgal-discuss] tree.all_intersections: get coordinates of the points
- Date: Fri, 14 Apr 2017 16:03:17 +0200
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-phdr: 9a23:hmoMZxFtGfpYnQUP0tgiYZ1GYnF86YWxBRYc798ds5kLTJ78pM6wAkXT6L1XgUPTWs2DsrQf2raQ6/iocFdDyK7JiGoFfp1IWk1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZrKeTpAI7SiNm82/yv95HJbQhFgDWwbaluIBmqsA7cqtQYjYx+J6gr1xDHuGFIe+NYxWNpIVKcgRPx7dqu8ZBg7ipdpesv+9ZPXqvmcas4S6dYDCk9PGAu+MLrrxjDQhCR6XYaT24bjwBHAwnB7BH9Q5fxri73vfdz1SWGIcH7S60/VDK/5KlpVRDokj8KOT43/m/Ul8J+kr5UrQm7qBBj2YPZep2ZOOZ8c67bYNgURXBBXsFUVyFZDY2zcowPD/cbMuZCsobyv0EOrRqgBQmtHeTv0CFHjWLx0K0g0uQhDwDG0xI6H90QrnvZt9r1NKIIXuC0yKnE1ynMb/RT2Trk7oXDbx4vofaJXb1qcMrRz1EiGB/KjlqKrYzpJTSV1v4Cs2Wd8uFuVvqvhnY5pw1tpjWj3MQhh4nTio4L11zJ+z91zYYrKdC+VUV1e8SrEIFKuCGfL4Z2Qt0tQ2VvuCsiz70Jo5+7fCwTxJQ5xB7Td+WLc4aI7x79TuqRLjB4hHVqeLK7mRm+61Svyur5VsWs0VZKqDRKksXUu3wTyxDe7tKLR/h980u7xzqDyg7e5vtELEwqjabbLoQuwr80lpodq0TDGSr2lV3sjK+XaEUk+/an6/75bbr4vZKcOIp0hRv/MqQqgMCwHeM4Mg0WU2iB5eu8zKHj/VH+QLhSkvI2nbPWsJTDKcsGp665GBNa0ps46xakFDqmy9QZnXwfLF1fYh6Hjo7pO0vPIP/iF/u/jU6sw39XwKXNMbTlR5nMNXPei6zJfLBn6kcaxhBg48pY4sd5BrYcKej/bVXwqt1YFBJxZxa13efqEthw/owbUGOLRKSeNfWB4hez+uszLrzUN8cuszHnJq196g==
Hi,
I try to use CGAL to perform line/mesh intersection, so I began with the examples in the documentation. I compiled the '3D Fast intersection and Distance Computation' (http://doc.cgal.org/latest/AABB_tree/AABB_tree_2AABB_polyhedron_facet_intersection_example_8cpp-example.html) that works fine.
Then I tried to retrieve the coordinates of all intersection points obtained after tree.all_intersections(segment_query, std::back_inserter(intersections));
by using this code :
for(std::list<Segment_intersection>::iterator it = intersections.begin(); it!=intersections.end(); it++) {
std::cout << *it << std::endl;
}
I get error message 'error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>'
Is it possible to get some help at this point ?
best regards
// Author(s) : Camille Wormser, Pierre Alliez #include <iostream> #include <list> #include <CGAL/Simple_cartesian.h> #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/Polyhedron_3.h> #include <CGAL/boost/graph/graph_traits_Polyhedron_3.h>
#include <CGAL/AABB_face_graph_triangle_primitive.h>
typedef CGAL::Simple_cartesian<double> K; typedef K::Point_3 Point; typedef K::Plane_3 Plane; typedef K::Vector_3 Vector; typedef K::Segment_3 Segment; typedef K::Ray_3 Ray; typedef CGAL::Polyhedron_3<K> Polyhedron; typedef CGAL::AABB_face_graph_triangle_primitive<Polyhedron> Primitive; typedef CGAL::AABB_traits<K, Primitive> Traits; typedef CGAL::AABB_tree<Traits> Tree; typedef boost::optional< Tree::Intersection_and_primitive_id<Segment>::Type > Segment_intersection; typedef boost::optional< Tree::Intersection_and_primitive_id<Plane>::Type > Plane_intersection; typedef Tree::Primitive_id Primitive_id; int main() {
Point p(1.0, 0.0, 0.0);
Point q(0.0, 1.0, 0.0);
Point r(0.0, 0.0, 1.0);
Point s(0.0, 0.0, 0.0);
Polyhedron polyhedron;
polyhedron.make_tetrahedron(p, q, r, s);
// constructs AABB tree
Tree tree(faces(polyhedron).first, faces(polyhedron).second, polyhedron);
// constructs segment query
Point a(-0.2, 0.2, -0.2);
Point b(1.3, 0.2, 1.3);
Segment segment_query(a,b);
// tests intersections with segment query
if(tree.do_intersect(segment_query))
std::cout << "intersection(s)" << std::endl;
else
std::cout << "no intersection" << std::endl;
// computes #intersections with segment query
std::cout << tree.number_of_intersected_primitives(segment_query)
<< " intersection(s)" << std::endl;
// computes first encountered intersection with segment query
// (generally a point)
Segment_intersection intersection =
tree.any_intersection(segment_query);
if(intersection)
{
// gets intersection object
const Point* p = boost::get<Point>(&(intersection->first));
if(p)
std::cout << "intersection object is a point " << *p << std::endl;
}
// computes all intersections with segment query (as pairs object - primitive_id)
std::list<Segment_intersection> intersections;
tree.all_intersections(segment_query, std::back_inserter(intersections));
// show all intersection ???
// computes all intersected primitives with segment query as primitive ids
std::list<Primitive_id> primitives;
tree.all_intersected_primitives(segment_query, std::back_inserter(primitives));
// constructs plane query
Vector vec(0.0,0.0,1.0);
Plane plane_query(a,vec);
// computes first encountered intersection with plane query
// (generally a segment)
Plane_intersection plane_intersection = tree.any_intersection(plane_query);
if(plane_intersection)
{
if(boost::get<Segment>(&(plane_intersection->first)))
std::cout << "intersection object is a segment" << std::endl;
}
return EXIT_SUCCESS;
}
- [cgal-discuss] tree.all_intersections: get coordinates of the points, Edouard rivière, 04/14/2017
- Re: [cgal-discuss] tree.all_intersections: get coordinates of the points, Sebastien Loriot (GeometryFactory), 04/18/2017
- Re: [cgal-discuss] tree.all_intersections: get coordinates of the points, Edouard rivière, 04/21/2017
- Re: [cgal-discuss] tree.all_intersections: get coordinates of the points, Sebastien Loriot (GeometryFactory), 04/18/2017
Archive powered by MHonArc 2.6.18.