Subject: CGAL users discussion list
List archive
- From: "Sebastien Loriot (GeometryFactory)" <>
- To:
- Subject: Re: [cgal-discuss] tree.all_intersections: get coordinates of the points
- Date: Tue, 18 Apr 2017 09:43:01 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-phdr: 9a23:Vrg+chIoc2pWYIXpxtmcpTZWNBhigK39O0sv0rFitYgeLv3xwZ3uMQTl6Ol3ixeRBMOAuq4C07KempujcFRI2YyGvnEGfc4EfD4+ouJSoTYdBtWYA1bwNv/gYn9yNs1DUFh44yPzahANS47xaFLIv3K98yMZFAnhOgppPOT1HZPZg9iq2+yo9ZDeZwpFiCChbb9uMR67sRjfus4KjIV4N60/0AHJonxGe+RXwWNnO1eelAvi68mz4ZBu7T1et+ou+MBcX6r6eb84TaFDAzQ9L281/szrugLdQgaJ+3ART38ZkhtMAwjC8RH6QpL8uTb0u+ZhxCWXO9D9QLYpUjqg8qhrUgflhjoZOT438G/Xjc9+gqxVrx2upRNw34HabZqJNPd9ZK7RYc8WSGRDU8tXSidPApm8b4wKD+cZM+pWspfyqEAUohulGQmsBf3gyjlVjXHw2q06yeUhEQba3Ac9G94AsWrbrNLwNKgMTeC11qnJwzXZYPxKxTf975LIcxAkrf2CQLl9dtHRyU0oFwPfj1WQrpDlMymQ1uQJqGWb4O9gWviui24jsQ1+vj+vxsI1h4TPm4kbxFfE9SBjz4Y0I921UFJ0YdG+H5tUrS2aMJF2QswkTmp1uyg60qULtJy0cSQQ1Zgr2R7SZ+aEfoSW+B7uVPudLS96iX9mYr6zmRm//Em6xuHhUsS53kxGoyhFn9TKq3sDzQbc6tKdRft45kqh2SiA1wTU6uxcJEA7j6vbK5o4zr8+k5ofrV3PHiH2lUnrlqOWeUIk+u+n6+TjfLrqvIOTN4hxig3mM6QunNKwAfggPwUMUGWX4/mw2KPj8EHjQ7hGkOc6n6nEvJzCIMQUvK+5Awtb0oY57Ba/Ci+r0M8cnXkANlJFeRWHj5TzN1HLJPD1Fvi/g1G2nzdqw/DKJKHuApLILnTbirfuYa5961JAyAo01d1Q+51UBasFIP7qR0DxtcfYAQMkMwyv2ObqE85914MbWWKXGKCVKqLSsVmS5uIuOeaAfoEVuCyuY8QisvXhhHt8lV4GdrSyxrMWbmq5F7JoORa3e33p1506HG0DpRY/QeqirFqYUDlPLzadUqU56y0hGayvBpvEXJHsyvTVxyO8BJxReiZDDniDFH7pc8OPXPJaO3HaGdNojjFRDevpcIQmzxz77AI=
- Organization: GeometryFactory
The intersection type in this case is either a segment (line coplanar with a face, or edge on the line) or a point.
As in the example you copy-pasted, you need to first get the
intersection type before printing it (the part using boost::get).
Best,
Sebastien.
On 04/14/2017 04:03 PM, Edouard rivière wrote:
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.