Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] tree.all_intersections: get coordinates of the points

Subject: CGAL users discussion list

List archive

[cgal-discuss] tree.all_intersections: get coordinates of the points


Chronological Thread 
  • 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;

}




Archive powered by MHonArc 2.6.18.

Top of Page