Surface Mesh Segmentation
 All Classes Namespaces Files Functions Typedefs Pages
AABB_traversal_traits.h
1 #ifndef CGAL_INTERNAL_SURFACE_MESH_SEGMENTATION_AABB_TRAVERSAL_TRAITS_H
2 #define CGAL_INTERNAL_SURFACE_MESH_SEGMENTATION_AABB_TRAVERSAL_TRAITS_H
3 
4 namespace CGAL{
5 
7 
13 //#define TRAITS_USE_COUNTER
14 template<typename AABBTraits, typename Query, typename Output_iterator>
15 class Listing_intersection_traits_ray_or_segment_triangle
16 {
17  typedef typename AABBTraits::FT FT;
18  typedef typename AABBTraits::Point Point;
19  typedef typename AABBTraits::Primitive Primitive;
20  typedef typename AABBTraits::Bounding_box Bounding_box;
21  typedef typename AABBTraits::Primitive::Id Primitive_id;
22  typedef typename AABBTraits::Point_and_primitive_id Point_and_primitive_id;
23  typedef typename AABBTraits::Object_and_primitive_id Object_and_primitive_id;
24  typedef ::CGAL::AABB_node<AABBTraits> Node;
25  typedef typename ::CGAL::AABB_tree<AABBTraits>::size_type size_type;
26 
27 public:
28  Listing_intersection_traits_ray_or_segment_triangle(Output_iterator out_it)
29  : m_out_it(out_it) {}
30 
31  bool go_further() const { return true; }
32 
33  void intersection(const Query& query, const Primitive& primitive)
34  {
35  //SL: using Kernel_traits is not bad in this context cause we expect a Ray/Segment from a CGAL Kernel here
36  typedef typename Kernel_traits<Query>::Kernel GeomTraits;
37  if ( GeomTraits().do_intersect_3_object()(query,primitive.datum()) ){
38  boost::optional<Object_and_primitive_id> intersection;
39  intersection = AABBTraits().intersection_object()(query, primitive);
40  if(intersection)
41  {
42  *m_out_it++ = *intersection;
43  }
44  }
45  }
46 
47  bool do_intersect(const Query& query, const Node& node) const
48  {
49  return AABBTraits().do_intersect_object()(query, node.bbox());
50  }
51 
52  #ifdef TRAITS_USE_COUNTER
53  static long true_inter_counter;
54  static long inter_counter;
55  static long do_inter_counter;
56  #endif
57 private:
58  Output_iterator m_out_it;
59 
60 };
61 
63 
64 } //namespace CGAL
65 #undef TRAITS_USE_COUNTER
66 #endif
67 
68