* Now dispatching on Ambient_dimension

* incorporated result_type == Object to remove more ifdefs
This commit is contained in:
Philipp Möller 2011-11-09 11:35:04 +00:00
parent d316908076
commit c2bfb68112
32 changed files with 161 additions and 712 deletions

View File

@ -23,7 +23,10 @@
#include <CGAL/Kernel_traits.h> #include <CGAL/Kernel_traits.h>
#include <CGAL/Object.h> #include <CGAL/Object.h>
#include <CGAL/assertions.h>
#include <CGAL/Dimension.h>
#include <boost/type_traits/is_same.hpp>
#include <boost/variant.hpp> #include <boost/variant.hpp>
// The macro CGAL_INTERSECTION_VERSION controls which version of the // The macro CGAL_INTERSECTION_VERSION controls which version of the
@ -38,29 +41,42 @@
#define CGAL_INTERSECTION_VERSION 2 #define CGAL_INTERSECTION_VERSION 2
#endif #endif
#define CGAL_INTERSECTION_TRAITS_2(A, B, R1, R2, DIMTAG) \ #if CGAL_INTERSECTION_VERSION < 2
#define CGAL_INTERSECTION_TRAITS_2(A, B, R1, R2)
#define CGAL_INTERSECTION_TRAITS_3(A, B, R1, R2, R3)
#else
#define CGAL_INTERSECTION_TRAITS_2(A, B, R1, R2) \
template<typename K> \ template<typename K> \
struct Intersection_traits<K, typename K::A, typename K::B> { \ struct Intersection_traits<K, typename K::A, typename K::B> { \
typedef typename boost::variant<typename K::R1, typename K::R2 > \ typedef typename boost::variant<typename K::R1, typename K::R2 > \
variant_type; \ variant_type; \
typedef typename boost::optional< variant_type > result_type; \ typedef typename boost::optional< variant_type > result_type; \
typedef internal::DIMTAG Dim_tag; \
}; };
#define CGAL_INTERSECTION_TRAITS_3(A, B, R1, R2, R3, DIMTAG) \ #define CGAL_INTERSECTION_TRAITS_3(A, B, R1, R2, R3) \
template<typename K> \ template<typename K> \
struct Intersection_traits<K, typename K::A, typename K::B> { \ struct Intersection_traits<K, typename K::A, typename K::B> { \
typedef typename boost::variant<typename K::R1, typename K::R2, \ typedef typename boost::variant<typename K::R1, typename K::R2, \
typename K::R3> variant_type; \ typename K::R3> variant_type; \
typedef typename boost::optional< variant_type > result_type; \ typedef typename boost::optional< variant_type > result_type; \
typedef internal::DIMTAG Dim_tag; \
}; };
#endif
namespace CGAL { namespace CGAL {
// only declarationn // only declarationn
template<typename, typename, typename> template<typename, typename, typename>
struct Intersection_traits {}; struct Intersection_traits {
// This defaults to Object, if we use VERSION < 2 and to nothing
// otherwise.
#if CGAL_INTERSECTION_VERSION < 2
typedef CGAL::Object result_type;
#endif
};
// alias // alias
template<typename K, typename A, typename B> template<typename K, typename A, typename B>
@ -141,61 +157,44 @@ const T* intersect_get(const boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)> & v) {
return boost::get<T>(&v); return boost::get<T>(&v);
} }
// tags for dispatch
struct Intersection_dim_two {};
struct Intersection_dim_three {};
struct Intersection_dim_d {};
template<typename A, typename B> template<typename A, typename B>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type
#endif intersection_impl(const A& a, const B& b, CGAL::Dimension_tag<2>) {
intersection_impl(const A& a, const B& b, Intersection_dim_two) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().intersect_2_object()(a, b); return Kernel().intersect_2_object()(a, b);
} }
template<typename A, typename B> template<typename A, typename B>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type
#endif intersection_impl(const A& a, const B& b, Dimension_tag<3>) {
intersection_impl(const A& a, const B& b, Intersection_dim_three) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().intersect_3_object()(a, b); return Kernel().intersect_3_object()(a, b);
} }
template<typename A, typename B> template<typename A, typename B>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, B>::result_type
#endif intersection_impl(const A& a, const B& b, Dynamic_dimension_tag) {
intersection_impl(const A& a, const B& b, Intersection_dim_d) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().intersect_d_object()(a, b); return Kernel().intersect_d_object()(a, b);
} }
template<typename A, typename B> template<typename A, typename B>
inline bool inline bool
do_intersect_impl(const A& a, const B& b, Intersection_dim_two) { do_intersect_impl(const A& a, const B& b, CGAL::Dimension_tag<2>) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().do_intersect_2_object()(a, b); return Kernel().do_intersect_2_object()(a, b);
} }
template<typename A, typename B> template<typename A, typename B>
inline bool inline bool
do_intersect_impl(const A& a, const B& b, Intersection_dim_three) { do_intersect_impl(const A& a, const B& b, Dimension_tag<3>) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().do_intersect_3_object()(a, b); return Kernel().do_intersect_3_object()(a, b);
} }
template<typename A, typename B> template<typename A, typename B>
inline bool inline bool
do_intersect_impl(const A& a, const B& b, Intersection_dim_d) { do_intersect_impl(const A& a, const B& b, Dynamic_dimension_tag) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().do_intersect_d_object()(a, b); return Kernel().do_intersect_d_object()(a, b);
} }
@ -204,23 +203,20 @@ do_intersect_impl(const A& a, const B& b, Intersection_dim_d) {
template<typename A, typename B> template<typename A, typename B>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename Kernel_traits<A>::Kernel, A, B>::result_type typename IT< typename Kernel_traits<A>::Kernel, A, B>::result_type
#endif
intersection(const A& a, const B& b) { intersection(const A& a, const B& b) {
typedef typename Kernel_traits<A>::Kernel Kernel; CGAL_static_assertion_msg( (boost::is_same<typename A::Ambient_dimension, typename B::Ambient_dimension>::value),
typedef IT<Kernel, A, B> Traits; "intersection with objects of different dimensions not supported");
return internal::intersection_impl(a, b, typename Traits::Dim_tag()); return internal::intersection_impl(a, b, typename A::Ambient_dimension());
} }
template<typename A, typename B> template<typename A, typename B>
inline bool inline
bool
do_intersect(const A& a, const B& b) { do_intersect(const A& a, const B& b) {
typedef typename Kernel_traits<A>::Kernel Kernel; CGAL_static_assertion_msg((boost::is_same<typename A::Ambient_dimension, typename B::Ambient_dimension>::value),
typedef IT<Kernel, A, B> Traits; "do_intersect with objects of different dimensions not supported");
return internal::do_intersect_impl(a, b, typename Traits::Dim_tag()); return internal::do_intersect_impl(a, b, typename A::Ambient_dimension());
} }
} // CGAL } // CGAL

View File

@ -27,31 +27,34 @@
#include <boost/optional.hpp> #include <boost/optional.hpp>
#include <vector> #include <vector>
#if !(CGAL_INTERSECTION_VERSION < 2)
namespace CGAL { namespace CGAL {
CGAL_INTERSECTION_TRAITS_2(Line_2, Line_2, Point_2, Line_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Line_2, Line_2, Point_2, Line_2)
CGAL_INTERSECTION_TRAITS_2(Segment_2, Line_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Segment_2, Line_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Line_2, Segment_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Line_2, Segment_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Segment_2, Segment_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Segment_2, Segment_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Ray_2, Line_2, Point_2, Ray_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Ray_2, Line_2, Point_2, Ray_2)
CGAL_INTERSECTION_TRAITS_2(Line_2, Ray_2, Point_2, Ray_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Line_2, Ray_2, Point_2, Ray_2)
CGAL_INTERSECTION_TRAITS_2(Ray_2, Segment_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Ray_2, Segment_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Segment_2, Ray_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Segment_2, Ray_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_3(Ray_2, Ray_2, Point_2, Segment_2, Ray_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_3(Ray_2, Ray_2, Point_2, Segment_2, Ray_2)
CGAL_INTERSECTION_TRAITS_2(Triangle_2, Line_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Triangle_2, Line_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Line_2, Triangle_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Line_2, Triangle_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Triangle_2, Segment_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Triangle_2, Segment_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Segment_2, Triangle_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Segment_2, Triangle_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Triangle_2, Ray_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Ray_2, Triangle_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Triangle_2, Ray_2, Point_2, Segment_2, Intersection_dim_two)
CGAL_INTERSECTION_TRAITS_2(Ray_2, Triangle_2, Point_2, Segment_2, Intersection_dim_two)
template<typename K> template<typename K>
struct Intersection_traits<K, typename K::Triangle_2, typename K::Triangle_2> { struct Intersection_traits<K, typename K::Triangle_2, typename K::Triangle_2> {
@ -59,17 +62,16 @@ struct Intersection_traits<K, typename K::Triangle_2, typename K::Triangle_2> {
boost::variant< typename K::Point_2, typename K::Segment_2, boost::variant< typename K::Point_2, typename K::Segment_2,
typename K::Triangle_2, typename std::vector< typename K::Point_2 > > variant_type; typename K::Triangle_2, typename std::vector< typename K::Point_2 > > variant_type;
typedef typename boost::optional< variant_type > result_type; typedef typename boost::optional< variant_type > result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Line_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Line_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Line_2, Iso_rectangle_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Line_2, Iso_rectangle_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Segment_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Segment_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Segment_2, Iso_rectangle_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Segment_2, Iso_rectangle_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Ray_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Iso_rectangle_2, Ray_2, Point_2, Segment_2)
CGAL_INTERSECTION_TRAITS_2(Ray_2, Iso_rectangle_2, Point_2, Segment_2, Intersection_dim_two) CGAL_INTERSECTION_TRAITS_2(Ray_2, Iso_rectangle_2, Point_2, Segment_2)
// undocumented // undocumented
@ -78,21 +80,18 @@ template<typename K>
struct Intersection_traits<K, typename K::Iso_rectangle_2, typename K::Iso_rectangle_2> { struct Intersection_traits<K, typename K::Iso_rectangle_2, typename K::Iso_rectangle_2> {
typedef typename boost::variant<typename K::Iso_rectangle_2> variant_type; typedef typename boost::variant<typename K::Iso_rectangle_2> variant_type;
typedef boost::optional<variant_type> result_type; typedef boost::optional<variant_type> result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K, typename B> template<typename K, typename B>
struct Intersection_traits<K, typename K::Point_2, B> { struct Intersection_traits<K, typename K::Point_2, B> {
typedef typename boost::variant<typename K::Point_2> variant_type; typedef typename boost::variant<typename K::Point_2> variant_type;
typedef boost::optional<variant_type> result_type; typedef boost::optional<variant_type> result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K, typename A> template<typename K, typename A>
struct Intersection_traits<K, A, typename K::Point_2> { struct Intersection_traits<K, A, typename K::Point_2> {
typedef typename boost::variant<typename K::Point_2> variant_type; typedef typename boost::variant<typename K::Point_2> variant_type;
typedef boost::optional<variant_type> result_type; typedef boost::optional<variant_type> result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -102,7 +101,6 @@ struct Intersection_traits<K, typename K::Iso_rectangle_2, typename K::Triangle_
typename K::Point_2, typename K::Point_2,
typename std::vector< typename K::Point_2 > > variant_type; typename std::vector< typename K::Point_2 > > variant_type;
typedef typename boost::optional < variant_type > result_type; typedef typename boost::optional < variant_type > result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -119,7 +117,6 @@ struct Intersection_traits<K, typename K::Circle_2, typename K::Circle_2>
typename std::pair< typename K::Circular_arc_point_2, typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
@ -131,7 +128,6 @@ struct Intersection_traits<K, typename K::Circular_arc_2, typename K::Circular_a
typename std::pair< typename K::Circular_arc_point_2, typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -142,7 +138,6 @@ struct Intersection_traits<K, typename K::Line_arc_2, typename K::Line_arc_2>
typename std::pair< typename K::Circular_arc_point_2, typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -152,7 +147,6 @@ struct Intersection_traits<K, typename K::Line_arc_2, typename K::Circle_2>
boost::variant< typename std::pair< typename K::Circular_arc_point_2, boost::variant< typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -167,7 +161,6 @@ struct Intersection_traits<K, typename K::Line_arc_2, typename K::Circular_arc_2
boost::variant< typename std::pair< typename K::Circular_arc_point_2, boost::variant< typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -183,7 +176,6 @@ struct Intersection_traits<K, typename K::Line_arc_2, typename K::Line_2>
typename std::pair< typename K::Circular_arc_point_2, typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -198,7 +190,6 @@ struct Intersection_traits<K, typename K::Line_2, typename K::Circular_arc_2>
boost::variant< typename std::pair< typename K::Circular_arc_point_2, boost::variant< typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -228,7 +219,6 @@ struct Intersection_traits<K, typename K::Line_2, typename K::Circle_2>
boost::variant< typename std::pair< typename K::Circular_arc_point_2, boost::variant< typename std::pair< typename K::Circular_arc_point_2,
unsigned int > > unsigned int > >
result_type; result_type;
typedef internal::Intersection_dim_two Dim_tag;
}; };
template<typename K> template<typename K>
@ -236,8 +226,9 @@ struct Intersection_traits<K, typename K::Circle_2, typename K::Line_2> :
public Intersection_traits<K, typename K::Line_2, typename K::Circle_2> public Intersection_traits<K, typename K::Line_2, typename K::Circle_2>
{}; {};
} // namespace CGAL } // namespace CGAL
#endif
#endif /* CGAL_INTERSECTION_TRAITS_2_H */ #endif /* CGAL_INTERSECTION_TRAITS_2_H */

View File

@ -318,12 +318,8 @@ Triangle_2_Triangle_2_pair<K>::intersection_point() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Triangle_2, typename K::Triangle_2>::result_type <K, typename K::Triangle_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Triangle_2 &tr1, intersection(const typename K::Triangle_2 &tr1,
const typename K::Triangle_2 &tr2, const typename K::Triangle_2 &tr2,
const K&) const K&)

View File

@ -33,12 +33,8 @@ namespace CGAL {
namespace internal { namespace internal {
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Iso_rectangle_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Iso_rectangle_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection( intersection(
const typename K::Iso_rectangle_2 &irect1, const typename K::Iso_rectangle_2 &irect1,
const typename K::Iso_rectangle_2 &irect2, const typename K::Iso_rectangle_2 &irect2,

View File

@ -184,12 +184,8 @@ intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Line_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Line_2 &line, intersection(const typename K::Line_2 &line,
const typename K::Iso_rectangle_2 &iso, const typename K::Iso_rectangle_2 &iso,
const K&) const K&)
@ -209,12 +205,8 @@ intersection(const typename K::Line_2 &line,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Line_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Iso_rectangle_2 &iso, intersection(const typename K::Iso_rectangle_2 &iso,
const typename K::Line_2 &line, const typename K::Line_2 &line,
const K& k) const K& k)

View File

@ -70,12 +70,8 @@ inline bool do_intersect(
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Line_2>::result_type <K, typename K::Line_2, typename K::Line_2>::result_type
#endif
intersection(const typename K::Line_2 &line1, intersection(const typename K::Line_2 &line1,
const typename K::Line_2 &line2, const typename K::Line_2 &line2,
const K&) const K&)

View File

@ -160,12 +160,8 @@ intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Triangle_2>::result_type <K, typename K::Line_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Line_2 &line, intersection(const typename K::Line_2 &line,
const typename K::Triangle_2 &tr, const typename K::Triangle_2 &tr,
const K&) const K&)
@ -186,12 +182,8 @@ intersection(const typename K::Line_2 &line,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Triangle_2>::result_type <K, typename K::Line_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Triangle_2 &tr, intersection(const typename K::Triangle_2 &tr,
const typename K::Line_2 &line, const typename K::Line_2 &line,
const K& k) const K& k)

View File

@ -54,12 +54,8 @@ do_intersect(const typename K::Iso_rectangle_2 &iso,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Point_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Point_2 &pt, intersection(const typename K::Point_2 &pt,
const typename K::Iso_rectangle_2 &iso, const typename K::Iso_rectangle_2 &iso,
const K& k) const K& k)
@ -74,12 +70,8 @@ intersection(const typename K::Point_2 &pt,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Point_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Iso_rectangle_2 &iso, intersection(const typename K::Iso_rectangle_2 &iso,
const typename K::Point_2 &pt, const typename K::Point_2 &pt,
const K& k) const K& k)

View File

@ -52,12 +52,8 @@ do_intersect(const typename K::Line_2 &line,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Line_2>::result_type <K, typename K::Point_2, typename K::Line_2>::result_type
#endif
intersection(const typename K::Point_2 &pt, intersection(const typename K::Point_2 &pt,
const typename K::Line_2 &line, const typename K::Line_2 &line,
const K& k) const K& k)
@ -69,12 +65,8 @@ intersection(const typename K::Point_2 &pt,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Point_2>::result_type <K, typename K::Line_2, typename K::Point_2>::result_type
#endif
intersection(const typename K::Line_2 &line, intersection(const typename K::Line_2 &line,
const typename K::Point_2 &pt, const typename K::Point_2 &pt,
const K& k) const K& k)

View File

@ -46,13 +46,10 @@ typename CGAL::Intersection_traits
intersection(const typename K::Point_2 &pt1, intersection(const typename K::Point_2 &pt1,
const typename K::Point_2 &pt2) const typename K::Point_2 &pt2)
{ {
typedef typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Point_2>::result_type result_type;
if (pt1 == pt2) { if (pt1 == pt2) {
return result_type(pt1); return intersection_return<K, typename K::Point_2, typename K::Point_2>(pt1);
} }
return result_type(); return intersection_return<K, typename K::Point_2, typename K::Point_2>();
} }
}// namespace internal }// namespace internal

View File

@ -56,12 +56,8 @@ do_intersect(const typename K::Ray_2 &ray,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Ray_2>::result_type <K, typename K::Point_2, typename K::Ray_2>::result_type
#endif
intersection(const typename K::Point_2 &pt, intersection(const typename K::Point_2 &pt,
const typename K::Ray_2 &ray, const typename K::Ray_2 &ray,
const K& k) const K& k)
@ -73,12 +69,8 @@ intersection(const typename K::Point_2 &pt,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Point_2>::result_type <K, typename K::Ray_2, typename K::Point_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray, intersection(const typename K::Ray_2 &ray,
const typename K::Point_2 &pt, const typename K::Point_2 &pt,
const K& k) const K& k)

View File

@ -56,12 +56,8 @@ do_intersect(const typename K::Segment_2 &seg,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Point_2, typename K::Segment_2>::result_type <K, typename K::Point_2, typename K::Segment_2>::result_type
#endif
intersection(const typename K::Point_2 &pt, intersection(const typename K::Point_2 &pt,
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const K& k) const K& k)
@ -74,12 +70,8 @@ intersection(const typename K::Point_2 &pt,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Point_2>::result_type <K, typename K::Segment_2, typename K::Point_2>::result_type
#endif
intersection( const typename K::Segment_2 &seg, intersection( const typename K::Segment_2 &seg,
const typename K::Point_2 &pt, const typename K::Point_2 &pt,
const K& k) const K& k)

View File

@ -127,12 +127,8 @@ intersection_point() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Point_2, typename K::Triangle_2> typename Intersection_traits<K, typename K::Point_2, typename K::Triangle_2>
::result_type ::result_type
#endif
intersection(const typename K::Point_2 &pt, intersection(const typename K::Point_2 &pt,
const typename K::Triangle_2 &tr, const typename K::Triangle_2 &tr,
const K&) const K&)
@ -150,12 +146,8 @@ intersection(const typename K::Point_2 &pt,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Point_2, typename K::Triangle_2> typename Intersection_traits<K, typename K::Point_2, typename K::Triangle_2>
::result_type ::result_type
#endif
intersection(const typename K::Triangle_2 &tr, intersection(const typename K::Triangle_2 &tr,
const typename K::Point_2 &pt, const typename K::Point_2 &pt,
const K&k) const K&k)

View File

@ -79,12 +79,8 @@ inline bool do_intersect(const typename K::Iso_rectangle_2 &p2,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Ray_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray, intersection(const typename K::Ray_2 &ray,
const typename K::Iso_rectangle_2 &iso, const typename K::Iso_rectangle_2 &iso,
const K& ) const K& )
@ -103,12 +99,8 @@ intersection(const typename K::Ray_2 &ray,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Ray_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Iso_rectangle_2 &iso, intersection(const typename K::Iso_rectangle_2 &iso,
const typename K::Ray_2 &ray, const typename K::Ray_2 &ray,
const K& k) const K& k)

View File

@ -71,12 +71,8 @@ inline bool do_intersect(
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits typename Intersection_traits
<K, typename K::Ray_2, typename K::Line_2>::result_type <K, typename K::Ray_2, typename K::Line_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray, intersection(const typename K::Ray_2 &ray,
const typename K::Line_2 &line, const typename K::Line_2 &line,
const K&) const K&)
@ -97,12 +93,8 @@ intersection(const typename K::Ray_2 &ray,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits typename Intersection_traits
<K, typename K::Line_2, typename K::Ray_2>::result_type <K, typename K::Line_2, typename K::Ray_2>::result_type
#endif
intersection(const typename K::Line_2 &line, intersection(const typename K::Line_2 &line,
const typename K::Ray_2 &ray, const typename K::Ray_2 &ray,
const K& k) const K& k)

View File

@ -233,12 +233,8 @@ Ray_2_Ray_2_pair<K>::intersection_ray() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Ray_2>::result_type <K, typename K::Ray_2, typename K::Ray_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray1, intersection(const typename K::Ray_2 &ray1,
const typename K::Ray_2 &ray2, const typename K::Ray_2 &ray2,
const K&) const K&)

View File

@ -236,12 +236,8 @@ Ray_2_Segment_2_pair<K>::intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Segment_2>::result_type <K, typename K::Ray_2, typename K::Segment_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray, intersection(const typename K::Ray_2 &ray,
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const K&) const K&)
@ -261,12 +257,8 @@ intersection(const typename K::Ray_2 &ray,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Segment_2>::result_type <K, typename K::Ray_2, typename K::Segment_2>::result_type
#endif
intersection(const typename K::Segment_2 &seg, intersection(const typename K::Segment_2 &seg,
const typename K::Ray_2 &ray, const typename K::Ray_2 &ray,
const K& k) const K& k)

View File

@ -142,12 +142,8 @@ intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Triangle_2>::result_type <K, typename K::Ray_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Ray_2 &ray, intersection(const typename K::Ray_2 &ray,
const typename K::Triangle_2&tr, const typename K::Triangle_2&tr,
const K&) const K&)
@ -167,12 +163,8 @@ intersection(const typename K::Ray_2 &ray,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Ray_2, typename K::Triangle_2>::result_type <K, typename K::Ray_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Triangle_2&tr, intersection(const typename K::Triangle_2&tr,
const typename K::Ray_2 &ray, const typename K::Ray_2 &ray,
const K& k) const K& k)

View File

@ -74,12 +74,8 @@ inline bool do_intersect(
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Segment_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection( intersection(
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const typename K::Iso_rectangle_2 &iso, const typename K::Iso_rectangle_2 &iso,
@ -100,12 +96,8 @@ intersection(
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Iso_rectangle_2>::result_type <K, typename K::Segment_2, typename K::Iso_rectangle_2>::result_type
#endif
intersection(const typename K::Iso_rectangle_2 &iso, intersection(const typename K::Iso_rectangle_2 &iso,
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const K& k) const K& k)

View File

@ -69,12 +69,8 @@ inline bool do_intersect(
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Line_2>::result_type <K, typename K::Segment_2, typename K::Line_2>::result_type
#endif
intersection(const typename K::Segment_2 &seg, intersection(const typename K::Segment_2 &seg,
const typename K::Line_2 &line, const typename K::Line_2 &line,
const K&) const K&)
@ -94,12 +90,8 @@ intersection(const typename K::Segment_2 &seg,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Line_2, typename K::Segment_2>::result_type <K, typename K::Line_2, typename K::Segment_2>::result_type
#endif
intersection(const typename K::Line_2 &line, intersection(const typename K::Line_2 &line,
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const K& k) const K& k)

View File

@ -431,12 +431,8 @@ Segment_2_Segment_2_pair<K>::intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Segment_2>::result_type <K, typename K::Segment_2, typename K::Segment_2>::result_type
#endif
intersection(const typename K::Segment_2 &seg1, intersection(const typename K::Segment_2 &seg1,
const typename K::Segment_2 &seg2, const typename K::Segment_2 &seg2,
const K&) const K&)

View File

@ -153,12 +153,8 @@ intersection_segment() const
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Triangle_2>::result_type <K, typename K::Segment_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Segment_2 &seg, intersection(const typename K::Segment_2 &seg,
const typename K::Triangle_2&tr, const typename K::Triangle_2&tr,
const K&) const K&)
@ -178,12 +174,8 @@ intersection(const typename K::Segment_2 &seg,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits typename CGAL::Intersection_traits
<K, typename K::Segment_2, typename K::Triangle_2>::result_type <K, typename K::Segment_2, typename K::Triangle_2>::result_type
#endif
intersection(const typename K::Triangle_2&tr, intersection(const typename K::Triangle_2&tr,
const typename K::Segment_2 &seg, const typename K::Segment_2 &seg,
const K& k) const K& k)

View File

@ -34,11 +34,7 @@
namespace CGAL{ namespace CGAL{
namespace internal { namespace internal {
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2 typename Intersection_traits<R, typename R::Triangle_2, typename R::Iso_rectangle_2>::result_type
CGAL::Object
#else
typename Intersection_traits<R, typename R::Triangle_2, typename R::Iso_rectangle_2>::result_type
#endif
intersection(const Triangle_2<R> &t, const Iso_rectangle_2<R> &r, const R& rr) intersection(const Triangle_2<R> &t, const Iso_rectangle_2<R> &r, const R& rr)
{ {
typedef typename R::FT FT; typedef typename R::FT FT;
@ -152,18 +148,10 @@ namespace internal {
if(position[next][j]) // if it's a second point direction if(position[next][j]) // if it's a second point direction
{ {
//test for intersection //test for intersection
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<R, Segment, Segment>::result_type typename Intersection_traits<R, Segment, Segment>::result_type
#endif
v = internal::intersection(Segment(p[index], p[next]), s[j], rr); v = internal::intersection(Segment(p[index], p[next]), s[j], rr);
if(v) { if(v) {
#if CGAL_INTERSECTION_VERSION < 2 if(const Point *p_obj = intersect_get<Point>(v))
if(const Point *p_obj = object_cast<Point>(v))
#else
if(const Point *p_obj = boost::get<Point>(&*v))
#endif
{ {
//intersection found //intersection found
outside = true; outside = true;
@ -180,18 +168,10 @@ namespace internal {
if(position[index][j]) //watch only the first point directions if(position[index][j]) //watch only the first point directions
{ {
//test for intersection //test for intersection
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<R, Segment, Segment>::result_type typename Intersection_traits<R, Segment, Segment>::result_type
#endif
v = internal::intersection(Segment(p[index], p[next]), s[j], rr); v = internal::intersection(Segment(p[index], p[next]), s[j], rr);
if(v) { if(v) {
#if CGAL_INTERSECTION_VERSION < 2 if(const Point *p_obj = intersect_get<Point>(v))
if(const Point *p_obj = object_cast<Point>(v))
#else
if(const Point *p_obj = boost::get<Point>(&*v))
#endif
{ {
//intersection found //intersection found
outside = false; outside = false;
@ -224,19 +204,11 @@ namespace internal {
if(position[next][j]) if(position[next][j])
{ {
//test for intersection //test for intersection
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<R, Segment, Segment> typename Intersection_traits<R, Segment, Segment>
::result_type ::result_type
#endif
v = internal::intersection(Segment(p[index], p[next]), s[j]); v = internal::intersection(Segment(p[index], p[next]), s[j]);
if(v) { if(v) {
#if CGAL_INTERSECTION_VERSION < 3 if(const Point *p_obj = intersect_get<Point>(v))
if(const Point *p_obj = object_cast<Point>(&*v))
#else
if(const Point *p_obj = boost::get<Point>(&*v))
#endif
//found the second intersection //found the second intersection
{ {
outside = true; outside = true;

View File

@ -24,50 +24,52 @@
#include <CGAL/Intersection_traits.h> #include <CGAL/Intersection_traits.h>
#include <CGAL/Bbox_3.h> #include <CGAL/Bbox_3.h>
#if !(CGAL_INTERSECTION_VERSION < 2)
namespace CGAL { namespace CGAL {
CGAL_INTERSECTION_TRAITS_2(Line_3, Line_3, Point_3, Line_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Line_3, Point_3, Line_3)
CGAL_INTERSECTION_TRAITS_2(Line_3, Plane_3, Point_3, Line_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Plane_3, Point_3, Line_3)
CGAL_INTERSECTION_TRAITS_2(Plane_3, Line_3, Point_3, Line_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Plane_3, Line_3, Point_3, Line_3)
CGAL_INTERSECTION_TRAITS_2(Line_3, Ray_3, Point_3, Ray_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Ray_3, Point_3, Ray_3)
CGAL_INTERSECTION_TRAITS_2(Ray_3, Line_3, Point_3, Ray_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Ray_3, Line_3, Point_3, Ray_3)
CGAL_INTERSECTION_TRAITS_2(Line_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Segment_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Segment_3, Line_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Line_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Line_3, Triangle_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Triangle_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Triangle_3, Line_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Triangle_3, Line_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Plane_3, Plane_3, Line_3, Plane_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Plane_3, Plane_3, Line_3, Plane_3)
CGAL_INTERSECTION_TRAITS_2(Plane_3, Ray_3, Point_3, Ray_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Plane_3, Ray_3, Point_3, Ray_3)
CGAL_INTERSECTION_TRAITS_2(Ray_3, Plane_3, Point_3, Ray_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Ray_3, Plane_3, Point_3, Ray_3)
CGAL_INTERSECTION_TRAITS_2(Plane_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Plane_3, Segment_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Segment_3, Plane_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Plane_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Plane_3, Sphere_3, Point_3, Circle_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Plane_3, Sphere_3, Point_3, Circle_3)
CGAL_INTERSECTION_TRAITS_2(Sphere_3, Plane_3, Point_3, Circle_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Sphere_3, Plane_3, Point_3, Circle_3)
CGAL_INTERSECTION_TRAITS_3(Plane_3, Triangle_3, Point_3, Segment_3, Triangle_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_3(Plane_3, Triangle_3, Point_3, Segment_3, Triangle_3)
CGAL_INTERSECTION_TRAITS_3(Triangle_3, Plane_3, Point_3, Segment_3, Triangle_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_3(Triangle_3, Plane_3, Point_3, Segment_3, Triangle_3)
CGAL_INTERSECTION_TRAITS_3(Ray_3, Ray_3, Point_3, Ray_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_3(Ray_3, Ray_3, Point_3, Ray_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Ray_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Ray_3, Segment_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Segment_3, Ray_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Ray_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Ray_3, Triangle_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Ray_3, Triangle_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Triangle_3, Ray_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Triangle_3, Ray_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Segment_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Segment_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Segment_3, Triangle_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Triangle_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Triangle_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Triangle_3, Segment_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_3(Sphere_3, Sphere_3, Point_3, Circle_3, Sphere_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_3(Sphere_3, Sphere_3, Point_3, Circle_3, Sphere_3)
template<typename K> template<typename K>
struct Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3> { struct Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3> {
@ -75,22 +77,21 @@ struct Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3> {
boost::variant< typename K::Point_3, typename K::Segment_3, typename K::Triangle_3, boost::variant< typename K::Point_3, typename K::Segment_3, typename K::Triangle_3,
typename std::vector< typename K::Point_3 > > variant_type; typename std::vector< typename K::Point_3 > > variant_type;
typedef typename boost::optional< variant_type > result_type; typedef typename boost::optional< variant_type > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
// !!! undocumented !!! // !!! undocumented !!!
// Segment_3 Iso_cuboid_3 // Segment_3 Iso_cuboid_3
CGAL_INTERSECTION_TRAITS_2(Segment_3, Iso_cuboid_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Segment_3, Iso_cuboid_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Segment_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Segment_3, Point_3, Segment_3)
// Line_3 Iso_cuboid_3 // Line_3 Iso_cuboid_3
CGAL_INTERSECTION_TRAITS_2(Line_3, Iso_cuboid_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Line_3, Iso_cuboid_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Line_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Line_3, Point_3, Segment_3)
// Ray_3 Iso_cuboid_3 // Ray_3 Iso_cuboid_3
CGAL_INTERSECTION_TRAITS_2(Ray_3, Iso_cuboid_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Ray_3, Iso_cuboid_3, Point_3, Segment_3)
CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Ray_3, Point_3, Segment_3, Intersection_dim_three) CGAL_INTERSECTION_TRAITS_2(Iso_cuboid_3, Ray_3, Point_3, Segment_3)
// Iso_cuboid_3 Iso_cuboid_3, variant of one // Iso_cuboid_3 Iso_cuboid_3, variant of one
template<typename K> template<typename K>
@ -98,7 +99,6 @@ struct Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Iso_cuboid_3
typedef typename typedef typename
boost::variant< typename K::Iso_cuboid_3 > variant_type; boost::variant< typename K::Iso_cuboid_3 > variant_type;
typedef typename boost::optional< variant_type > result_type; typedef typename boost::optional< variant_type > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
// Intersections with BBox returns the same for Ray_3, Line_3 and Segment_3 // Intersections with BBox returns the same for Ray_3, Line_3 and Segment_3
@ -108,7 +108,6 @@ struct Intersection_traits<K, CGAL::Bbox_3, typename K::Line_3> {
typedef typename typedef typename
boost::variant< typename K::Segment_3, typename K::Point_3 > variant_type; boost::variant< typename K::Segment_3, typename K::Point_3 > variant_type;
typedef typename boost::optional< variant_type > result_type; typedef typename boost::optional< variant_type > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
template<typename K> template<typename K>
@ -151,7 +150,6 @@ struct Intersection_traits<K, typename K::Circle_3, typename K::Plane_3> {
typedef typename boost::variant< std::pair< typename K::Circular_arc_point_3, typedef typename boost::variant< std::pair< typename K::Circular_arc_point_3,
unsigned int >, unsigned int >,
typename K::Circle_3 > result_type; typename K::Circle_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
template<typename K> template<typename K>
@ -164,7 +162,6 @@ struct Intersection_traits<K, typename K::Circle_3, typename K::Sphere_3> {
typedef typename boost::variant< std::pair< typename K::Circular_arc_point_3, typedef typename boost::variant< std::pair< typename K::Circular_arc_point_3,
unsigned int >, unsigned int >,
typename K::Circle_3 > result_type; typename K::Circle_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
template<typename K> template<typename K>
@ -176,7 +173,6 @@ template<typename K>
struct Intersection_traits<K, typename K::Circle_3, typename K::Circle_3> { struct Intersection_traits<K, typename K::Circle_3, typename K::Circle_3> {
typedef typename boost::variant< std::pair <typename K::Circular_arc_point_3, unsigned int >, typedef typename boost::variant< std::pair <typename K::Circular_arc_point_3, unsigned int >,
typename K::Circle_3 > result_type; typename K::Circle_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
// Circle_3 Circle_3 // Circle_3 Circle_3
@ -184,7 +180,6 @@ template<typename K>
struct Intersection_traits<K, typename K::Circle_3, typename K::Line_3> { struct Intersection_traits<K, typename K::Circle_3, typename K::Line_3> {
typedef typename boost::variant< typedef typename boost::variant<
std::pair <typename K::Circular_arc_point_3, unsigned int > > result_type; std::pair <typename K::Circular_arc_point_3, unsigned int > > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
template<typename K> template<typename K>
@ -198,7 +193,6 @@ struct Intersection_traits<K, typename K::Circular_arc_3, typename K::Circular_a
typename K::Circle_3, typename K::Circle_3,
std::pair <typename K::Circular_arc_point_3, unsigned int >, std::pair <typename K::Circular_arc_point_3, unsigned int >,
typename K::Circular_arc_3 > result_type; typename K::Circular_arc_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
// Circular_arc_3 Plane_3 // Circular_arc_3 Plane_3
@ -207,7 +201,6 @@ struct Intersection_traits<K, typename K::Circular_arc_3, typename K::Plane_3> {
typedef typename boost::variant< typedef typename boost::variant<
std::pair <typename K::Circular_arc_point_3, unsigned int >, std::pair <typename K::Circular_arc_point_3, unsigned int >,
typename K::Circular_arc_3 > result_type; typename K::Circular_arc_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
template<typename K> template<typename K>
@ -220,11 +213,12 @@ struct Intersection_traits<K, typename K::Line_arc_3, typename K::Line_arc_3> {
typedef typename boost::variant< typedef typename boost::variant<
std::pair <typename K::Circular_arc_point_3, unsigned int >, std::pair <typename K::Circular_arc_point_3, unsigned int >,
typename K::Line_arc_3 > result_type; typename K::Line_arc_3 > result_type;
typedef internal::Intersection_dim_three Dim_tag;
}; };
} // namespace } // namespace
#endif // !(CGAL_INTERSECTION_VERSION < 2)
#endif /* CGAL_INTERSECTION_TRAITS_3_H */ #endif /* CGAL_INTERSECTION_TRAITS_3_H */

View File

@ -26,17 +26,14 @@
#include <CGAL/wmult.h> #include <CGAL/wmult.h>
#include <boost/next_prior.hpp> #include <boost/next_prior.hpp>
#include <CGAL/Intersection_traits_3.h>
namespace CGAL { namespace CGAL {
namespace internal { namespace internal {
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
intersection(const typename K::Plane_3 &plane, intersection(const typename K::Plane_3 &plane,
const typename K::Line_3 &line, const typename K::Line_3 &line,
const K&) const K&)
@ -70,11 +67,7 @@ intersection(const typename K::Plane_3 &plane,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
intersection(const typename K::Line_3 &line, intersection(const typename K::Line_3 &line,
const typename K::Plane_3 &plane, const typename K::Plane_3 &plane,
const K& k) const K& k)
@ -83,11 +76,7 @@ intersection(const typename K::Line_3 &line,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Plane_3>::result_type
#endif
intersection(const typename K::Plane_3 &plane1, intersection(const typename K::Plane_3 &plane1,
const typename K::Plane_3 &plane2, const typename K::Plane_3 &plane2,
const K&) const K&)
@ -159,10 +148,16 @@ intersection(const typename K::Plane_3 &plane1,
const typename K::Plane_3 &plane3, const typename K::Plane_3 &plane3,
const K& k) const K& k)
{ {
typedef typename boost::optional< typedef
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename boost::optional<
boost::variant<typename K::Point_3, boost::variant<typename K::Point_3,
typename K::Line_3, typename K::Line_3,
typename K::Plane_3> > result_type; typename K::Plane_3> >
#endif
result_type;
typedef typename K::Point_3 Point_3; typedef typename K::Point_3 Point_3;
@ -171,61 +166,45 @@ intersection(const typename K::Plane_3 &plane1,
// Intersection between plane1 and plane2 can either be // Intersection between plane1 and plane2 can either be
// a line, a plane, or empty. // a line, a plane, or empty.
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Plane_3, Plane_3>::result_type typename Intersection_traits<K, Plane_3, Plane_3>::result_type
#endif
o12 = internal::intersection(plane1, plane2, k); o12 = internal::intersection(plane1, plane2, k);
if(o12) { if(o12) {
if(const Line_3* l = intersect_get<Line_3>(o12)) { if(const Line_3* l = intersect_get<Line_3>(o12)) {
// either point or line // either point or line
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Plane_3, Line_3>::result_type typename Intersection_traits<K, Plane_3, Line_3>::result_type
#endif
v = internal::intersection(plane3, *l, k); v = internal::intersection(plane3, *l, k);
if(v) { if(v) {
// don't use intersect get, we don't have traits and can't if(const Point_3* p = intersect_get<Point_3>(v))
// use intersect_return. #if CGAL_INTERSECTION_VERSION < 2
#if CGAL_INTERSECTION_VERSION < 2
if(const Point_3* p = object_cast<Point_3>(&v))
return make_object(*p); return make_object(*p);
else if(const Line_3* l = object_cast<Line_3>(&v)) #else
return make_object(*l);
#else
if(const Point_3* p = boost::get<Point_3>(&*v))
return result_type(*p); return result_type(*p);
else if(const Line_3* l = boost::get<Line_3>(&*v)) #endif
else if(const Line_3* l = intersect_get<Line_3>(v))
#if CGAL_INTERSECTION_VERSION < 2
return make_object(*l);
#else
return result_type(*l); return result_type(*l);
#endif #endif
} }
#if CGAL_INTERSECTION_VERSION < 2 } else if(const Plane_3 *pl = intersect_get<Plane_3>(o12)) {
} else if(const Plane_3 *pl = object_cast<Plane_3>(&o12)) {
#else
} else if(const Plane_3 *pl = boost::get<Plane_3>(&(*o12))) {
#endif
// either line or plane // either line or plane
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Plane_3, Plane_3>::result_type typename Intersection_traits<K, Plane_3, Plane_3>::result_type
#endif
v = internal::intersection(plane3, *pl, k); v = internal::intersection(plane3, *pl, k);
if(v) { if(v) {
#if CGAL_INTERSECTION_VERSION < 2 if(const Plane_3* p = intersect_get<Plane_3>(v))
if(const Plane_3* p = object_cast<Plane_3>(&v)) #if CGAL_INTERSECTION_VERSION < 2
return make_object(*p); return make_object(*p);
else if(const Line_3* l = object_cast<Line_3>(&v)) #else
return make_object(*l);
#else
if(const Plane_3* p = boost::get<Plane_3>(&*v))
return result_type(*p); return result_type(*p);
else if(const Line_3* l = boost::get<Line_3>(&*v)) #endif
else if(const Line_3* l = intersect_get<Line_3>(v))
#if CGAL_INTERSECTION_VERSION < 2
return make_object(*l);
#else
return result_type(*l); return result_type(*l);
#endif #endif
} }
} }
} }
@ -276,11 +255,7 @@ do_intersect(const typename K::Line_3 &line,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type
#endif
intersection(const typename K::Line_3 &l1, intersection(const typename K::Line_3 &l1,
const typename K::Line_3 &l2, const typename K::Line_3 &l2,
const K&) const K&)
@ -338,11 +313,7 @@ do_intersect(const typename K::Line_3 &l1,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type
#endif
intersection_collinear_segments(const typename K::Segment_3 &s1, intersection_collinear_segments(const typename K::Segment_3 &s1,
const typename K::Segment_3 &s2, const typename K::Segment_3 &s2,
const K& k) const K& k)
@ -381,13 +352,9 @@ intersection_collinear_segments(const typename K::Segment_3 &s1,
template<class K> template<class K>
struct L_p_visitor : public boost::static_visitor< struct L_p_visitor : public boost::static_visitor<
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename Intersection_traits<K, typename K::Segment_3,
typename K::Segment_3>::result_type typename K::Segment_3>::result_type
#endif >
>
{ {
typedef typename Intersection_traits<K, typename K::Segment_3, typedef typename Intersection_traits<K, typename K::Segment_3,
@ -397,46 +364,30 @@ CGAL::Object
const typename K::Segment_3& s1; const typename K::Segment_3& s1;
const typename K::Segment_3& s2; const typename K::Segment_3& s2;
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
result_type result_type
#endif
operator()(const typename K::Point_3& p) const { operator()(const typename K::Point_3& p) const {
typename K::Collinear_are_ordered_along_line_3 cln_order=K().collinear_are_ordered_along_line_3_object(); typename K::Collinear_are_ordered_along_line_3 cln_order=K().collinear_are_ordered_along_line_3_object();
if ( cln_order(s1[0],p,s1[1]) && cln_order(s2[0],p,s2[1]) ) if ( cln_order(s1[0],p,s1[1]) && cln_order(s2[0],p,s2[1]) )
return result_type(p); return intersection_return<K, typename K::Segment_3, typename K::Segment_3>(p);
else else
return result_type(); return intersection_return<K, typename K::Segment_3, typename K::Segment_3>();
} }
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
result_type result_type
#endif
operator()(const typename K::Line_3&) const { operator()(const typename K::Line_3&) const {
return intersection_collinear_segments(s1,s2,K()); return intersection_collinear_segments(s1,s2,K());
} }
}; };
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Segment_3 &s1, intersection(const typename K::Segment_3 &s1,
const typename K::Segment_3 &s2, const typename K::Segment_3 &s2,
const K&) const K&)
{ {
CGAL_precondition(! s1.is_degenerate () && ! s2.is_degenerate () ); CGAL_precondition(! s1.is_degenerate () && ! s2.is_degenerate () );
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(s1.supporting_line(),s2.supporting_line(), K()); v = internal::intersection(s1.supporting_line(),s2.supporting_line(), K());
if(v) { if(v) {
@ -488,22 +439,14 @@ do_intersect(const typename K::Segment_3 &s1,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Line_3 &l, intersection(const typename K::Line_3 &l,
const typename K::Segment_3 &s, const typename K::Segment_3 &s,
const K& k) const K& k)
{ {
CGAL_precondition(! l.is_degenerate () && ! s.is_degenerate () ); CGAL_precondition(! l.is_degenerate () && ! s.is_degenerate () );
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(l,s.supporting_line(), K()); v = internal::intersection(l,s.supporting_line(), K());
if(v) { if(v) {
@ -520,11 +463,7 @@ intersection(const typename K::Line_3 &l,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Segment_3 &s, intersection(const typename K::Segment_3 &s,
const typename K::Line_3 &l, const typename K::Line_3 &l,
const K& k) const K& k)
@ -584,22 +523,14 @@ Ray_3_has_on_collinear_Point_3(
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Ray_3>::result_type
#endif
intersection(const typename K::Line_3 &l, intersection(const typename K::Line_3 &l,
const typename K::Ray_3 &r, const typename K::Ray_3 &r,
const K& k) const K& k)
{ {
CGAL_precondition(! l.is_degenerate () && ! r.is_degenerate () ); CGAL_precondition(! l.is_degenerate () && ! r.is_degenerate () );
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(l,r.supporting_line(), k); v = internal::intersection(l,r.supporting_line(), k);
if(v) { if(v) {
@ -614,11 +545,7 @@ intersection(const typename K::Line_3 &l,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Line_3>::result_type
#endif
intersection(const typename K::Ray_3 &r, intersection(const typename K::Ray_3 &r,
const typename K::Line_3 &l, const typename K::Line_3 &l,
const K& k) const K& k)
@ -655,22 +582,14 @@ do_intersect(const typename K::Ray_3 &r,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Ray_3>::result_type
#endif
intersection(const typename K::Segment_3 &s, intersection(const typename K::Segment_3 &s,
const typename K::Ray_3 &r, const typename K::Ray_3 &r,
const K& k) const K& k)
{ {
CGAL_precondition(! s.is_degenerate () && ! r.is_degenerate () ); CGAL_precondition(! s.is_degenerate () && ! r.is_degenerate () );
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Segment_3>::result_type
#endif
v = internal::intersection(r.supporting_line(),s, K()); v = internal::intersection(r.supporting_line(),s, K());
if(v) { if(v) {
@ -708,11 +627,7 @@ intersection(const typename K::Segment_3 &s,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Ray_3 &r, intersection(const typename K::Ray_3 &r,
const typename K::Segment_3 &s, const typename K::Segment_3 &s,
const K& k) const K& k)
@ -755,22 +670,14 @@ do_intersect(const typename K::Ray_3 &r,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Ray_3>::result_type
#endif
intersection(const typename K::Ray_3 &r1, intersection(const typename K::Ray_3 &r1,
const typename K::Ray_3 &r2, const typename K::Ray_3 &r2,
const K& k) const K& k)
{ {
CGAL_precondition(! r1.is_degenerate () && ! r2.is_degenerate () ); CGAL_precondition(! r1.is_degenerate () && ! r2.is_degenerate () );
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Ray_3>::result_type
#endif
v = internal::intersection(r1.supporting_line(),r2, k); v = internal::intersection(r1.supporting_line(),r2, k);
if(v) { if(v) {
@ -829,11 +736,7 @@ do_intersect(const typename K::Ray_3 &r1,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Sphere_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Sphere_3>::result_type
#endif
intersection(const typename K::Plane_3 &p, intersection(const typename K::Plane_3 &p,
const typename K::Sphere_3 &s, const typename K::Sphere_3 &s,
const K&) const K&)
@ -889,11 +792,7 @@ do_intersect(const typename K::Sphere_3 &s,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Sphere_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Sphere_3, typename K::Plane_3>::result_type
#endif
intersection(const typename K::Sphere_3 &s, intersection(const typename K::Sphere_3 &s,
const typename K::Plane_3 &p, const typename K::Plane_3 &p,
const K& k) const K& k)
@ -903,11 +802,7 @@ intersection(const typename K::Sphere_3 &s,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Sphere_3, typename K::Sphere_3>::result_type typename Intersection_traits<K, typename K::Sphere_3, typename K::Sphere_3>::result_type
#endif
intersection(const typename K::Sphere_3 &s1, intersection(const typename K::Sphere_3 &s1,
const typename K::Sphere_3 &s2, const typename K::Sphere_3 &s2,
const K& k) const K& k)
@ -923,11 +818,7 @@ intersection(const typename K::Sphere_3 &s1,
Plane_3 p = K().construct_radical_plane_3_object()(s1,s2); Plane_3 p = K().construct_radical_plane_3_object()(s1,s2);
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Sphere_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Sphere_3, typename K::Plane_3>::result_type
#endif
v = intersection(p, s1, k); v = intersection(p, s1, k);
@ -958,22 +849,14 @@ do_intersect(const typename K::Sphere_3 &s1,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Ray_3>::result_type
#endif
intersection(const typename K::Plane_3 &plane, intersection(const typename K::Plane_3 &plane,
const typename K::Ray_3 &ray, const typename K::Ray_3 &ray,
const K& k) const K& k)
{ {
typedef typename K::Point_3 Point_3; typedef typename K::Point_3 Point_3;
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(plane, ray.supporting_line(), k); v = internal::intersection(plane, ray.supporting_line(), k);
if(v) { if(v) {
@ -993,11 +876,7 @@ intersection(const typename K::Plane_3 &plane,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Plane_3>::result_type
#endif
intersection(const typename K::Ray_3 &ray, intersection(const typename K::Ray_3 &ray,
const typename K::Plane_3 &plane, const typename K::Plane_3 &plane,
const K& k) const K& k)
@ -1015,12 +894,8 @@ do_intersect(const typename K::Plane_3 &plane,
{ {
typedef typename K::Point_3 Point_3; typedef typename K::Point_3 Point_3;
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3> typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>
::result_type ::result_type
#endif
line_intersection = internal::intersection(plane, ray.supporting_line(), k); line_intersection = internal::intersection(plane, ray.supporting_line(), k);
if(!line_intersection) if(!line_intersection)
@ -1044,11 +919,7 @@ do_intersect(const typename K::Ray_3 &ray,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Plane_3 &plane, intersection(const typename K::Plane_3 &plane,
const typename K::Segment_3 &seg, const typename K::Segment_3 &seg,
const K& k) const K& k)
@ -1076,11 +947,7 @@ intersection(const typename K::Plane_3 &plane,
{ {
// intersection object should be a point, but rounding errors // intersection object should be a point, but rounding errors
// could lead to a line. In such case, return seg. // could lead to a line. In such case, return seg.
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(plane, seg.supporting_line(), k); v = internal::intersection(plane, seg.supporting_line(), k);
if(v) { if(v) {
if(const typename K::Point_3* p = intersect_get<typename K::Point_3>(v)) if(const typename K::Point_3* p = intersect_get<typename K::Point_3>(v))
@ -1098,11 +965,7 @@ intersection(const typename K::Plane_3 &plane,
{ {
// intersection object should be a point, but rounding errors // intersection object should be a point, but rounding errors
// could lead to a line. In such case, return seg. // could lead to a line. In such case, return seg.
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
v = internal::intersection(plane, seg.supporting_line(), k); v = internal::intersection(plane, seg.supporting_line(), k);
if(v) { if(v) {
if(const typename K::Point_3* p = intersect_get<typename K::Point_3>(v)) if(const typename K::Point_3* p = intersect_get<typename K::Point_3>(v))
@ -1122,11 +985,7 @@ intersection(const typename K::Plane_3 &plane,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Plane_3>::result_type
#endif
intersection(const typename K::Segment_3 &seg, intersection(const typename K::Segment_3 &seg,
const typename K::Plane_3 &plane, const typename K::Plane_3 &plane,
const K& k) const K& k)
@ -1168,21 +1027,13 @@ do_intersect(const typename K::Segment_3 &seg,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Plane_3 &plane, intersection(const typename K::Plane_3 &plane,
const typename K::Triangle_3 &tri, const typename K::Triangle_3 &tri,
const K& k) const K& k)
{ {
typedef typedef
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Line_3>::result_type
#endif
pl_res; pl_res;
typename K::Construct_vertex_3 vertex_on = typename K::Construct_vertex_3 vertex_on =
@ -1277,11 +1128,7 @@ intersection(const typename K::Plane_3 &plane,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Plane_3>::result_type
#endif
intersection(const typename K::Triangle_3 &triangle, intersection(const typename K::Triangle_3 &triangle,
const typename K::Plane_3 &plane, const typename K::Plane_3 &plane,
const K& k) const K& k)
@ -1290,11 +1137,7 @@ intersection(const typename K::Triangle_3 &triangle,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, Bbox_3>::result_type typename Intersection_traits<K, typename K::Line_3, Bbox_3>::result_type
#endif
intersection(const typename K::Line_3 &line, intersection(const typename K::Line_3 &line,
const Bbox_3 &box, const Bbox_3 &box,
const K&) const K&)
@ -1317,11 +1160,7 @@ intersection(const typename K::Line_3 &line,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Bbox_3, typename K::Line_3>::result_type typename Intersection_traits<K, Bbox_3, typename K::Line_3>::result_type
#endif
intersection(const Bbox_3 &box, intersection(const Bbox_3 &box,
const typename K::Line_3 &line, const typename K::Line_3 &line,
const K& k) const K& k)
@ -1331,11 +1170,7 @@ intersection(const Bbox_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, Bbox_3>::result_type typename Intersection_traits<K, typename K::Ray_3, Bbox_3>::result_type
#endif
intersection(const typename K::Ray_3 &ray, intersection(const typename K::Ray_3 &ray,
const Bbox_3 &box, const Bbox_3 &box,
const K&) const K&)
@ -1358,11 +1193,7 @@ intersection(const typename K::Ray_3 &ray,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Bbox_3, typename K::Ray_3>::result_type typename Intersection_traits<K, Bbox_3, typename K::Ray_3>::result_type
#endif
intersection(const Bbox_3 &box, intersection(const Bbox_3 &box,
const typename K::Ray_3 &ray, const typename K::Ray_3 &ray,
const K& k) const K& k)
@ -1373,11 +1204,7 @@ intersection(const Bbox_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, Bbox_3>::result_type typename Intersection_traits<K, typename K::Segment_3, Bbox_3>::result_type
#endif
intersection(const typename K::Segment_3 &seg, intersection(const typename K::Segment_3 &seg,
const Bbox_3 &box, const Bbox_3 &box,
const K&) const K&)
@ -1400,11 +1227,7 @@ intersection(const typename K::Segment_3 &seg,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, Bbox_3, typename K::Segment_3>::result_type typename Intersection_traits<K, Bbox_3, typename K::Segment_3>::result_type
#endif
intersection(const Bbox_3 &box, intersection(const Bbox_3 &box,
const typename K::Segment_3 &seg, const typename K::Segment_3 &seg,
const K& k) const K& k)
@ -1414,11 +1237,7 @@ intersection(const Bbox_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Iso_cuboid_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Iso_cuboid_3>::result_type
#endif
intersection(const typename K::Line_3 &line, intersection(const typename K::Line_3 &line,
const typename K::Iso_cuboid_3 &box, const typename K::Iso_cuboid_3 &box,
const K&) const K&)
@ -1481,11 +1300,7 @@ intersection(const typename K::Line_3 &line,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Line_3>::result_type
#endif
intersection(const typename K::Iso_cuboid_3 &box, intersection(const typename K::Iso_cuboid_3 &box,
const typename K::Line_3 &line, const typename K::Line_3 &line,
const K& k) const K& k)
@ -1496,11 +1311,7 @@ intersection(const typename K::Iso_cuboid_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Iso_cuboid_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Iso_cuboid_3>::result_type
#endif
intersection(const typename K::Ray_3 &ray, intersection(const typename K::Ray_3 &ray,
const typename K::Iso_cuboid_3 &box, const typename K::Iso_cuboid_3 &box,
const K&) const K&)
@ -1562,11 +1373,7 @@ intersection(const typename K::Ray_3 &ray,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Ray_3>::result_type typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Ray_3>::result_type
#endif
intersection(const typename K::Iso_cuboid_3 &box, intersection(const typename K::Iso_cuboid_3 &box,
const typename K::Ray_3 &ray, const typename K::Ray_3 &ray,
const K& k) const K& k)
@ -1576,11 +1383,7 @@ intersection(const typename K::Iso_cuboid_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Iso_cuboid_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Iso_cuboid_3>::result_type
#endif
intersection(const typename K::Segment_3 &seg, intersection(const typename K::Segment_3 &seg,
const typename K::Iso_cuboid_3 &box, const typename K::Iso_cuboid_3 &box,
const K&) const K&)
@ -1642,11 +1445,7 @@ intersection(const typename K::Segment_3 &seg,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Segment_3>::result_type
#endif
intersection(const typename K::Iso_cuboid_3 &box, intersection(const typename K::Iso_cuboid_3 &box,
const typename K::Segment_3 &seg, const typename K::Segment_3 &seg,
const K& k) const K& k)
@ -1656,11 +1455,7 @@ intersection(const typename K::Iso_cuboid_3 &box,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Iso_cuboid_3>::result_type typename Intersection_traits<K, typename K::Iso_cuboid_3, typename K::Iso_cuboid_3>::result_type
#endif
intersection( intersection(
const typename K::Iso_cuboid_3 &icub1, const typename K::Iso_cuboid_3 &icub1,
const typename K::Iso_cuboid_3 &icub2, const typename K::Iso_cuboid_3 &icub2,

View File

@ -61,13 +61,9 @@ void intersection_coplanar_triangles_cutoff(
Orientation or_prev=orientations[prev],or_curr=orientations[&curr]; Orientation or_prev=orientations[prev],or_curr=orientations[&curr];
if ( (or_prev==POSITIVE && or_curr==NEGATIVE) || (or_prev==NEGATIVE && or_curr==POSITIVE) ) if ( (or_prev==POSITIVE && or_curr==NEGATIVE) || (or_prev==NEGATIVE && or_curr==POSITIVE) )
{ {
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<Kernel, typename Kernel::Line_3, typename Intersection_traits<Kernel, typename Kernel::Line_3,
typename Kernel::Line_3> typename Kernel::Line_3>
::result_type ::result_type
#endif
obj = intersection(Line_3(p,q),Line_3(*prev,curr),k); obj = intersection(Line_3(p,q),Line_3(*prev,curr),k);
// assert "not empty" // assert "not empty"
CGAL_kernel_assertion(obj); CGAL_kernel_assertion(obj);
@ -92,11 +88,7 @@ void intersection_coplanar_triangles_cutoff(
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3>::result_type
#endif
intersection_coplanar_triangles( intersection_coplanar_triangles(
const typename K::Triangle_3& t1, const typename K::Triangle_3& t1,
const typename K::Triangle_3& t2, const typename K::Triangle_3& t2,
@ -133,12 +125,8 @@ intersection_coplanar_triangles(
template<typename K> template<typename K>
struct Triangle_Line_visitor { struct Triangle_Line_visitor {
#if CGAL_INTERSECTION_VERSION < 2
typedef CGAL::Object result_type;
#else
typedef typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3 > typedef typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3 >
::result_type result_type; ::result_type result_type;
#endif
result_type result_type
operator()(const typename K::Point_3& p, const typename K::Segment_3&) const { operator()(const typename K::Point_3& p, const typename K::Segment_3&) const {
@ -157,11 +145,7 @@ struct Triangle_Line_visitor {
result_type result_type
operator()(const typename K::Segment_3& s1, const typename K::Segment_3& s2) const { operator()(const typename K::Segment_3& s1, const typename K::Segment_3& s2) const {
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Segment_3>::result_type
#endif
v = intersection_collinear_segments(s1,s2,K()); v = intersection_collinear_segments(s1,s2,K());
if(v) { if(v) {
@ -176,11 +160,7 @@ struct Triangle_Line_visitor {
}; };
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Triangle_3>::result_type
#endif
intersection( intersection(
const typename K::Triangle_3& t1, const typename K::Triangle_3& t1,
const typename K::Triangle_3& t2, const typename K::Triangle_3& t2,
@ -188,11 +168,7 @@ intersection(
{ {
CGAL_precondition(!t1.is_degenerate() && !t2.is_degenerate()); CGAL_precondition(!t1.is_degenerate() && !t2.is_degenerate());
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Plane_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Plane_3, typename K::Plane_3>::result_type
#endif
v = internal::intersection(t1.supporting_plane(), t2.supporting_plane(), k); v = internal::intersection(t1.supporting_plane(), t2.supporting_plane(), k);
if(!v) { if(!v) {
@ -208,11 +184,7 @@ intersection(
if(const typename K::Line_3* line=intersect_get<typename K::Line_3>(v)) { if(const typename K::Line_3* line=intersect_get<typename K::Line_3>(v)) {
//The supporting planes of the triangles intersect along a line. //The supporting planes of the triangles intersect along a line.
typedef typedef
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Line_3>::result_type
#endif
Triangle_Line_Inter; Triangle_Line_Inter;
Triangle_Line_Inter inter1 = intersection_coplanar(t1,*line,k); Triangle_Line_Inter inter1 = intersection_coplanar(t1,*line,k);
@ -226,15 +198,15 @@ intersection(
Triangle_Line_visitor<K> vis; Triangle_Line_visitor<K> vis;
if(const typename K::Point_3* p1 = intersect_get<typename K::Point_3>(inter1)) { if(const typename K::Point_3* p1 = intersect_get<typename K::Point_3>(inter1)) {
if(const typename K::Point_3* p2 = intersect_get<typename K::Point_3>(inter2)) { if(const typename K::Point_3* p2 = intersect_get<typename K::Point_3>(inter2)) {
vis(*p1, *p2); return vis(*p1, *p2);
} else if(const typename K::Segment_3* s2 = intersect_get<typename K::Segment_3>(inter2)) { } else if(const typename K::Segment_3* s2 = intersect_get<typename K::Segment_3>(inter2)) {
vis(*p1, *s2); return vis(*p1, *s2);
} }
} else if(const typename K::Segment_3* s1 = intersect_get<typename K::Segment_3>(inter1)) { } else if(const typename K::Segment_3* s1 = intersect_get<typename K::Segment_3>(inter1)) {
if(const typename K::Point_3* p2 = intersect_get<typename K::Point_3>(inter2)) { if(const typename K::Point_3* p2 = intersect_get<typename K::Point_3>(inter2)) {
vis(*s1, *p2); return vis(*s1, *p2);
} else if(const typename K::Segment_3* s2 = intersect_get<typename K::Segment_3>(inter2)) { } else if(const typename K::Segment_3* s2 = intersect_get<typename K::Segment_3>(inter2)) {
vis(*s1, *s2); return vis(*s1, *s2);
} }
} }
#else #else

View File

@ -109,11 +109,7 @@ t3l3_intersection_coplanar_aux(const typename K::Point_3& a,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Line_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Line_3>::result_type
#endif
intersection_coplanar(const typename K::Triangle_3 &t, intersection_coplanar(const typename K::Triangle_3 &t,
const typename K::Line_3 &l, const typename K::Line_3 &l,
const K & k ) const K & k )
@ -314,11 +310,7 @@ intersection_coplanar(const typename K::Triangle_3 &t,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type
#endif
t3l3_intersection_aux(const typename K::Triangle_3 &t, t3l3_intersection_aux(const typename K::Triangle_3 &t,
const typename K::Line_3 &l, const typename K::Line_3 &l,
const K&) const K&)
@ -327,11 +319,7 @@ t3l3_intersection_aux(const typename K::Triangle_3 &t,
// k.intersect_3_object(); // k.intersect_3_object();
// The intersection between a Line and Plane is either Point or Line // The intersection between a Line and Plane is either Point or Line
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>::result_type
#endif
v = internal::intersection(l,t.supporting_plane(), K()); v = internal::intersection(l,t.supporting_plane(), K());
// Intersection should be a point (because of orientation test done before) // Intersection should be a point (because of orientation test done before)
@ -348,11 +336,7 @@ t3l3_intersection_aux(const typename K::Triangle_3 &t,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Triangle_3 &t, intersection(const typename K::Triangle_3 &t,
const typename K::Line_3 &l, const typename K::Line_3 &l,
const K& k) const K& k)
@ -428,11 +412,7 @@ intersection(const typename K::Triangle_3 &t,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type typename CGAL::Intersection_traits<K, typename K::Line_3, typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Line_3 &l, intersection(const typename K::Line_3 &l,
const typename K::Triangle_3 &t, const typename K::Triangle_3 &t,
const K& k) const K& k)

View File

@ -70,14 +70,8 @@ t3r3_intersection_coplanar_aux(const typename K::Point_3& p,
} }
// the return type is the same as the intersection(Triangle Ray). We
// spell it out here for clarity.
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2 typename IT<K, typename K::Triangle_3, typename K::Ray_3>::result_type
CGAL::Object
#else
typename boost::optional< boost::variant< typename K::Point_3, typename K::Segment_3> >
#endif
t3r3_intersection_coplanar_aux(const typename K::Point_3& a, t3r3_intersection_coplanar_aux(const typename K::Point_3& a,
const typename K::Point_3& b, const typename K::Point_3& b,
const typename K::Point_3& c, const typename K::Point_3& c,
@ -167,14 +161,8 @@ t3r3_intersection_coplanar_aux(const typename K::Point_3& a,
return intersection_return<K, typename K::Triangle_3, typename K::Ray_3>(); return intersection_return<K, typename K::Triangle_3, typename K::Ray_3>();
} }
// the return type is the same as the intersection(Triangle Ray). We
// spell it out here for clarity.
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2 typename IT<K, typename K::Triangle_3, typename K::Ray_3>::result_type
CGAL::Object
#else
typename boost::optional< boost::variant< typename K::Point_3, typename K::Segment_3> >
#endif
intersection_coplanar(const typename K::Triangle_3 &t, intersection_coplanar(const typename K::Triangle_3 &t,
const typename K::Ray_3 &r, const typename K::Ray_3 &r,
const K & k ) const K & k )
@ -441,12 +429,8 @@ t3r3_intersection_aux(const typename K::Triangle_3 &t,
const typename K::Ray_3 &r, const typename K::Ray_3 &r,
const K& k) const K& k)
{ {
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3> typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>
::result_type ::result_type
#endif
v = internal::intersection(r.supporting_line(),t.supporting_plane(), k); v = internal::intersection(r.supporting_line(),t.supporting_plane(), k);
if(v) { if(v) {
@ -458,12 +442,8 @@ t3r3_intersection_aux(const typename K::Triangle_3 &t,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename Intersection_traits<K, typename K::Triangle_3,
typename K::Ray_3>::result_type typename K::Ray_3>::result_type
#endif
intersection(const typename K::Triangle_3 &t, intersection(const typename K::Triangle_3 &t,
const typename K::Ray_3 &r, const typename K::Ray_3 &r,
const K& k) const K& k)
@ -604,11 +584,7 @@ intersection(const typename K::Triangle_3 &t,
} }
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Ray_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Ray_3, typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Ray_3 &r, intersection(const typename K::Ray_3 &r,
const typename K::Triangle_3 &t, const typename K::Triangle_3 &t,
const K& k) { const K& k) {

View File

@ -72,11 +72,7 @@ t3s3_intersection_coplanar_aux(const typename K::Point_3& p,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Segment_3>::result_type
#endif
t3s3_intersection_coplanar_aux(const typename K::Point_3& a, t3s3_intersection_coplanar_aux(const typename K::Point_3& a,
const typename K::Point_3& b, const typename K::Point_3& b,
const typename K::Point_3& c, const typename K::Point_3& c,
@ -142,11 +138,7 @@ t3s3_intersection_coplanar_aux(const typename K::Point_3& a,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Triangle_3, typename K::Segment_3>::result_type typename Intersection_traits<K, typename K::Triangle_3, typename K::Segment_3>::result_type
#endif
t3s3_intersection_collinear_aux(const typename K::Point_3& a, t3s3_intersection_collinear_aux(const typename K::Point_3& a,
const typename K::Point_3& b, const typename K::Point_3& b,
const typename K::Point_3& p, const typename K::Point_3& p,
@ -188,11 +180,7 @@ t3s3_intersection_collinear_aux(const typename K::Point_3& a,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Triangle_3>::result_type
#endif
intersection_coplanar(const typename K::Triangle_3 &t, intersection_coplanar(const typename K::Triangle_3 &t,
const typename K::Segment_3 &s, const typename K::Segment_3 &s,
const K & k ) const K & k )
@ -406,11 +394,7 @@ intersection_coplanar(const typename K::Triangle_3 &t,
template <class K> template <class K>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename K::Triangle_3>::result_type typename Intersection_traits<K, typename K::Segment_3, typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Triangle_3 &t, intersection(const typename K::Triangle_3 &t,
const typename K::Segment_3 &s, const typename K::Segment_3 &s,
const K & k) const K & k)
@ -457,12 +441,8 @@ intersection(const typename K::Triangle_3 &t,
{ {
// The intersection should be a point // The intersection should be a point
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3> typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>
::result_type ::result_type
#endif
v = internal::intersection(s.supporting_line(),t.supporting_plane(), K()); v = internal::intersection(s.supporting_line(),t.supporting_plane(), K());
if(v) { if(v) {
if(const Point_3* res = intersect_get<Point_3>(v)) if(const Point_3* res = intersect_get<Point_3>(v))
@ -498,11 +478,7 @@ intersection(const typename K::Triangle_3 &t,
&& orientation(q,p,b,c) != POSITIVE && orientation(q,p,b,c) != POSITIVE
&& orientation(q,p,c,a) != POSITIVE ) && orientation(q,p,c,a) != POSITIVE )
{ {
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>::result_type typename Intersection_traits<K, typename K::Line_3, typename K::Plane_3>::result_type
#endif
v = internal::intersection(s.supporting_line(),t.supporting_plane(), K()); v = internal::intersection(s.supporting_line(),t.supporting_plane(), K());
if(v) { if(v) {
if(const Point_3* res = intersect_get<Point_3>(v)) if(const Point_3* res = intersect_get<Point_3>(v))
@ -571,12 +547,8 @@ intersection(const typename K::Triangle_3 &t,
template <class K> template <class K>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename Intersection_traits<K, typename K::Segment_3, typename Intersection_traits<K, typename K::Segment_3,
typename K::Triangle_3>::result_type typename K::Triangle_3>::result_type
#endif
intersection(const typename K::Segment_3 &s, intersection(const typename K::Segment_3 &s,
const typename K::Triangle_3 &t, const typename K::Triangle_3 &t,
const K & k) const K & k)

View File

@ -44,11 +44,7 @@ namespace CGAL {
// intersections with Bbox_3 for which no kernel traits exist // intersections with Bbox_3 for which no kernel traits exist
template<class A> template<class A>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, CGAL::Bbox_3 >::result_type typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, CGAL::Bbox_3 >::result_type
#endif
intersection(const A& a, const CGAL::Bbox_3& b) { intersection(const A& a, const CGAL::Bbox_3& b) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().intersect_3_object()(a, b); return Kernel().intersect_3_object()(a, b);
@ -56,11 +52,7 @@ namespace CGAL {
template<class A> template<class A>
inline inline
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, CGAL::Bbox_3 >::result_type typename IT< typename CGAL::Kernel_traits<A>::Kernel, A, CGAL::Bbox_3 >::result_type
#endif
intersection(const CGAL::Bbox_3& b, const A& a) { intersection(const CGAL::Bbox_3& b, const A& a) {
typedef typename CGAL::Kernel_traits<A>::Kernel Kernel; typedef typename CGAL::Kernel_traits<A>::Kernel Kernel;
return Kernel().intersect_3_object()(a, b); return Kernel().intersect_3_object()(a, b);

View File

@ -23,31 +23,35 @@
#include <CGAL/Intersection_traits.h> #include <CGAL/Intersection_traits.h>
#if !(CGAL_INTERSECTION_VERSION < 2)
namespace CGAL { namespace CGAL {
CGAL_INTERSECTION_TRAITS_2(Line_d, Line_d, Point_d, Line_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Line_d, Line_d, Point_d, Line_d)
CGAL_INTERSECTION_TRAITS_2(Segment_d, Line_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Segment_d, Line_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_2(Line_d, Segment_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Line_d, Segment_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_2(Segment_d, Segment_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Segment_d, Segment_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_2(Ray_d, Line_d, Point_d, Ray_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Ray_d, Line_d, Point_d, Ray_d)
CGAL_INTERSECTION_TRAITS_2(Line_d, Ray_d, Point_d, Ray_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Line_d, Ray_d, Point_d, Ray_d)
CGAL_INTERSECTION_TRAITS_2(Ray_d, Segment_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Ray_d, Segment_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_2(Segment_d, Ray_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Segment_d, Ray_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_3(Ray_d, Ray_d, Point_d, Segment_d, Ray_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_3(Ray_d, Ray_d, Point_d, Segment_d, Ray_d)
CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Line_d, Point_d, Line_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Line_d, Point_d, Line_d)
CGAL_INTERSECTION_TRAITS_2(Line_d, Hyperplane_d, Point_d, Line_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Line_d, Hyperplane_d, Point_d, Line_d)
CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Ray_d, Point_d, Ray_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Ray_d, Point_d, Ray_d)
CGAL_INTERSECTION_TRAITS_2(Ray_d, Hyperplane_d, Point_d, Ray_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Ray_d, Hyperplane_d, Point_d, Ray_d)
CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Segment_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Hyperplane_d, Segment_d, Point_d, Segment_d)
CGAL_INTERSECTION_TRAITS_2(Segment_d, Hyperplane_d, Point_d, Segment_d, Intersection_dim_d) CGAL_INTERSECTION_TRAITS_2(Segment_d, Hyperplane_d, Point_d, Segment_d)
} }
#endif // !(CGAL_INTERSECTION_VERSION < 2)
#endif /* CGAL_INTERSECTION_TRAITS_D_H */ #endif /* CGAL_INTERSECTION_TRAITS_D_H */

View File

@ -34,11 +34,7 @@ namespace CGAL {
namespace internal { namespace internal {
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Line_d, typename R::Line_d>::result_type typename IT<R, typename R::Line_d, typename R::Line_d>::result_type
#endif
intersection(const typename R::Line_d& l1, const typename R::Line_d& l2, const R&) intersection(const typename R::Line_d& l1, const typename R::Line_d& l2, const R&)
{ {
typedef typename R::Line_d_Line_d_pair ll_pair; typedef typename R::Line_d_Line_d_pair ll_pair;
@ -59,11 +55,7 @@ intersection(const typename R::Line_d& l1, const typename R::Line_d& l2, const R
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Ray_d, typename R::Ray_d>::result_type typename IT<R, typename R::Ray_d, typename R::Ray_d>::result_type
#endif
intersection(const typename R::Ray_d& l1, const typename R::Ray_d& l2, const R&) intersection(const typename R::Ray_d& l1, const typename R::Ray_d& l2, const R&)
{ {
typedef typename R::Ray_d_Ray_d_pair ll_pair; typedef typename R::Ray_d_Ray_d_pair ll_pair;
@ -92,11 +84,7 @@ intersection(const typename R::Ray_d& l1, const typename R::Ray_d& l2, const R&)
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Segment_d, typename R::Segment_d>::result_type typename IT<R, typename R::Segment_d, typename R::Segment_d>::result_type
#endif
intersection(const typename R::Segment_d& l1, const typename R::Segment_d& l2, const R&) intersection(const typename R::Segment_d& l1, const typename R::Segment_d& l2, const R&)
{ {
typedef typename R::Segment_d_Segment_d_pair ll_pair; typedef typename R::Segment_d_Segment_d_pair ll_pair;
@ -120,11 +108,7 @@ intersection(const typename R::Segment_d& l1, const typename R::Segment_d& l2, c
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Line_d, typename R::Ray_d>::result_type typename IT<R, typename R::Line_d, typename R::Ray_d>::result_type
#endif
intersection(const typename R::Line_d& l, const typename R::Ray_d& r, const R&) intersection(const typename R::Line_d& l, const typename R::Ray_d& r, const R&)
{ {
typedef typename R::Line_d_Ray_d_pair lr_pair; typedef typename R::Line_d_Ray_d_pair lr_pair;
@ -146,20 +130,12 @@ intersection(const typename R::Line_d& l, const typename R::Ray_d& r, const R&)
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Ray_d, typename R::Line_d>::result_type typename IT<R, typename R::Ray_d, typename R::Line_d>::result_type
#endif
intersection(const typename R::Ray_d& r, const typename R::Line_d& l, const R& k) intersection(const typename R::Ray_d& r, const typename R::Line_d& l, const R& k)
{ return intersection(l,r,k); } { return intersection(l,r,k); }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Ray_d, typename R::Segment_d>::result_type typename IT<R, typename R::Ray_d, typename R::Segment_d>::result_type
#endif
intersection(const typename R::Ray_d& r, const typename R::Segment_d& s, const R&) intersection(const typename R::Ray_d& r, const typename R::Segment_d& s, const R&)
{ {
typedef typename R::Ray_d_Segment_d_pair rs_pair; typedef typename R::Ray_d_Segment_d_pair rs_pair;
@ -183,20 +159,12 @@ intersection(const typename R::Ray_d& r, const typename R::Segment_d& s, const R
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Segment_d, typename R::Ray_d>::result_type typename IT<R, typename R::Segment_d, typename R::Ray_d>::result_type
#endif
intersection(const typename R::Segment_d& s, const typename R::Ray_d& r, const R& k) intersection(const typename R::Segment_d& s, const typename R::Ray_d& r, const R& k)
{ return intersection(r,s, k); } { return intersection(r,s, k); }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Line_d, typename R::Segment_d>::result_type typename IT<R, typename R::Line_d, typename R::Segment_d>::result_type
#endif
intersection(const typename R::Line_d& l, const typename R::Segment_d& s, const R&) intersection(const typename R::Line_d& l, const typename R::Segment_d& s, const R&)
{ {
typedef typename R::Line_d_Segment_d_pair rs_pair; typedef typename R::Line_d_Segment_d_pair rs_pair;
@ -220,20 +188,12 @@ intersection(const typename R::Line_d& l, const typename R::Segment_d& s, const
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Segment_d, typename R::Line_d>::result_type typename IT<R, typename R::Segment_d, typename R::Line_d>::result_type
#endif
intersection(const typename R::Segment_d& s, const typename R::Line_d& l, const R& r) intersection(const typename R::Segment_d& s, const typename R::Line_d& l, const R& r)
{ return intersection(l,s,r); } { return intersection(l,s,r); }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Line_d, typename R::Hyperplane_d>::result_type typename IT<R, typename R::Line_d, typename R::Hyperplane_d>::result_type
#endif
intersection(const typename R::Line_d& l, const typename R::Hyperplane_d& h, const R&) intersection(const typename R::Line_d& l, const typename R::Hyperplane_d& h, const R&)
{ {
typedef typename R::Line_d_Hyperplane_d_pair lh_pair; typedef typename R::Line_d_Hyperplane_d_pair lh_pair;
@ -254,20 +214,12 @@ intersection(const typename R::Line_d& l, const typename R::Hyperplane_d& h, con
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Hyperplane_d, typename R::Line_d>::result_type typename IT<R, typename R::Hyperplane_d, typename R::Line_d>::result_type
#endif
intersection(const typename R::Hyperplane_d& h, const typename R::Line_d& l, const R& r) intersection(const typename R::Hyperplane_d& h, const typename R::Line_d& l, const R& r)
{ return intersection(l,h,r); } { return intersection(l,h,r); }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Ray_d, typename R::Hyperplane_d>::result_type typename IT<R, typename R::Ray_d, typename R::Hyperplane_d>::result_type
#endif
intersection(const typename R::Ray_d& r, const typename R::Hyperplane_d& h, const R&) intersection(const typename R::Ray_d& r, const typename R::Hyperplane_d& h, const R&)
{ {
typedef typename R::Ray_d_Hyperplane_d_pair rh_pair; typedef typename R::Ray_d_Hyperplane_d_pair rh_pair;
@ -288,20 +240,12 @@ intersection(const typename R::Ray_d& r, const typename R::Hyperplane_d& h, cons
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Hyperplane_d, typename R::Ray_d>::result_type typename IT<R, typename R::Hyperplane_d, typename R::Ray_d>::result_type
#endif
intersection(const typename R::Hyperplane_d& h, const typename R::Ray_d& r, const R& k) intersection(const typename R::Hyperplane_d& h, const typename R::Ray_d& r, const R& k)
{ return intersection(r,h,k); } { return intersection(r,h,k); }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Segment_d, typename R::Hyperplane_d>::result_type typename IT<R, typename R::Segment_d, typename R::Hyperplane_d>::result_type
#endif
intersection(const typename R::Segment_d& s, const typename R::Hyperplane_d& h, const R&) intersection(const typename R::Segment_d& s, const typename R::Hyperplane_d& h, const R&)
{ {
typedef typename R::Segment_d_Hyperplane_d_pair sh_pair; typedef typename R::Segment_d_Hyperplane_d_pair sh_pair;
@ -322,11 +266,7 @@ intersection(const typename R::Segment_d& s, const typename R::Hyperplane_d& h,
} }
template <class R> template <class R>
#if CGAL_INTERSECTION_VERSION < 2
CGAL::Object
#else
typename IT<R, typename R::Hyperplane_d, typename R::Segment_d>::result_type typename IT<R, typename R::Hyperplane_d, typename R::Segment_d>::result_type
#endif
intersection(const typename R::Hyperplane_d& h, const typename R::Segment_d& s, const R& r) intersection(const typename R::Hyperplane_d& h, const typename R::Segment_d& s, const R& r)
{ return intersection(s,h,r); } { return intersection(s,h,r); }