1 #ifndef CGAL_INTERNAL_SURFACE_MESH_SEGMENTATION_AABB_TRAVERSAL_TRAITS_H
2 #define CGAL_INTERNAL_SURFACE_MESH_SEGMENTATION_AABB_TRAVERSAL_TRAITS_H
14 template<
typename AABBTraits,
typename Query,
typename Output_iterator>
15 class Listing_intersection_traits_ray_or_segment_triangle
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;
28 Listing_intersection_traits_ray_or_segment_triangle(Output_iterator out_it)
31 bool go_further()
const {
return true; }
33 void intersection(
const Query& query,
const Primitive& primitive)
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);
42 *m_out_it++ = *intersection;
47 bool do_intersect(
const Query& query,
const Node& node)
const
49 return AABBTraits().do_intersect_object()(query, node.bbox());
52 #ifdef TRAITS_USE_COUNTER
53 static long true_inter_counter;
54 static long inter_counter;
55 static long do_inter_counter;
58 Output_iterator m_out_it;
65 #undef TRAITS_USE_COUNTER