mirror of https://github.com/CGAL/cgal
Added oriented_side()
This commit is contained in:
parent
f8b36b92b8
commit
963381cbe7
|
|
@ -17,6 +17,7 @@
|
||||||
//
|
//
|
||||||
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
||||||
// Ron Wein <wein@post.tau.ac.il>
|
// Ron Wein <wein@post.tau.ac.il>
|
||||||
|
// Efi Fogel <efif@post.tau.ac.il>
|
||||||
|
|
||||||
#ifndef CGAL_BOOLEAN_SET_OPERATIONS_H
|
#ifndef CGAL_BOOLEAN_SET_OPERATIONS_H
|
||||||
#define CGAL_BOOLEAN_SET_OPERATIONS_H
|
#define CGAL_BOOLEAN_SET_OPERATIONS_H
|
||||||
|
|
@ -195,8 +196,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
intersection (const Polygon_2<Kernel, Container>& pgn1,
|
intersection (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator out,
|
OutputIterator out, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -214,8 +214,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
intersection (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
intersection (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator out,
|
OutputIterator out, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -271,8 +270,7 @@ inline OutputIterator
|
||||||
intersection (const General_polygon_2<Arr_traits>& pgn1,
|
intersection (const General_polygon_2<Arr_traits>& pgn1,
|
||||||
const General_polygon_with_holes_2
|
const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn2,
|
<General_polygon_2<Arr_traits> >& pgn2,
|
||||||
OutputIterator out,
|
OutputIterator out, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -292,8 +290,7 @@ inline OutputIterator
|
||||||
intersection (const General_polygon_with_holes_2
|
intersection (const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn1,
|
<General_polygon_2<Arr_traits> >& pgn1,
|
||||||
const General_polygon_2<Arr_traits>& pgn2,
|
const General_polygon_2<Arr_traits>& pgn2,
|
||||||
OutputIterator out,
|
OutputIterator out, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -311,8 +308,7 @@ template <class Polygon_, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
intersection (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
intersection (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
||||||
OutputIterator out,
|
OutputIterator out, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -332,8 +328,7 @@ inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
template <class Kernel, class Container, class Traits>
|
template <class Kernel, class Container, class Traits>
|
||||||
inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
Polygon_with_holes_2<Kernel, Container>& res,
|
Polygon_with_holes_2<Kernel, Container>& res, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return (_join(pgn1, pgn2, res, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -349,8 +344,7 @@ inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
template <class Kernel, class Container, class Traits>
|
template <class Kernel, class Container, class Traits>
|
||||||
inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
inline bool join (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
Polygon_with_holes_2<Kernel, Container>& res,
|
Polygon_with_holes_2<Kernel, Container>& res, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return (_join(pgn1, pgn2, res, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -366,8 +360,7 @@ inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
template <class Kernel, class Container, class Traits>
|
template <class Kernel, class Container, class Traits>
|
||||||
inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
Polygon_with_holes_2<Kernel, Container>& res,
|
Polygon_with_holes_2<Kernel, Container>& res, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return (_join(pgn1, pgn2, res, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -383,8 +376,7 @@ inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
template <class Kernel, class Container, class Traits>
|
template <class Kernel, class Container, class Traits>
|
||||||
inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
inline bool join (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
Polygon_with_holes_2<Kernel, Container>& res,
|
Polygon_with_holes_2<Kernel, Container>& res, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return (_join(pgn1, pgn2, res, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -457,8 +449,7 @@ inline bool join (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
template <class Polygon_, class Traits>
|
template <class Polygon_, class Traits>
|
||||||
inline bool join (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
inline bool join (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
||||||
General_polygon_with_holes_2<Polygon_>& res,
|
General_polygon_with_holes_2<Polygon_>& res, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return (_join(pgn1, pgn2, res, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -478,8 +469,7 @@ inline OutputIterator difference (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
template <class Kernel, class Container, class OutputIterator, class Traits>
|
template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator difference (const Polygon_2<Kernel, Container>& pgn1,
|
inline OutputIterator difference (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return(_difference(pgn1, pgn2, oi, tr));
|
return(_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -497,8 +487,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
difference (const Polygon_2<Kernel, Container>& pgn1,
|
difference (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return(_difference(pgn1, pgn2, oi, tr));
|
return(_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -535,8 +524,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_difference(pgn1, pgn2, oi, tr));
|
return (_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -571,8 +559,7 @@ template <class Arr_traits, class OutputIterator, class Traits>
|
||||||
inline OutputIterator difference (const General_polygon_2<Arr_traits>& pgn1,
|
inline OutputIterator difference (const General_polygon_2<Arr_traits>& pgn1,
|
||||||
const General_polygon_with_holes_2
|
const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn2,
|
<General_polygon_2<Arr_traits> >& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_difference(pgn1, pgn2, oi, tr));
|
return (_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -590,8 +577,7 @@ template <class Arr_traits, class OutputIterator, class Traits>
|
||||||
inline OutputIterator difference (const General_polygon_with_holes_2
|
inline OutputIterator difference (const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn1,
|
<General_polygon_2<Arr_traits> >& pgn1,
|
||||||
const General_polygon_2<Arr_traits>& pgn2,
|
const General_polygon_2<Arr_traits>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_difference(pgn1, pgn2, oi, tr));
|
return (_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -609,8 +595,7 @@ template <class Polygon_, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
difference (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
difference (const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_difference(pgn1, pgn2, oi, tr));
|
return (_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -623,8 +608,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
symmetric_difference (const Polygon_2<Kernel, Container>& pgn1,
|
symmetric_difference (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -642,8 +626,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
symmetric_difference (const Polygon_2<Kernel, Container>& pgn1,
|
symmetric_difference (const Polygon_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -662,8 +645,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
symmetric_difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
symmetric_difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_2<Kernel, Container>& pgn2,
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -681,8 +663,7 @@ template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
inline OutputIterator
|
inline OutputIterator
|
||||||
symmetric_difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
symmetric_difference (const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -720,8 +701,7 @@ inline OutputIterator
|
||||||
symmetric_difference (const General_polygon_2<Arr_traits>& pgn1,
|
symmetric_difference (const General_polygon_2<Arr_traits>& pgn1,
|
||||||
const General_polygon_with_holes_2
|
const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn2,
|
<General_polygon_2<Arr_traits> >& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -741,8 +721,7 @@ inline OutputIterator
|
||||||
symmetric_difference (const General_polygon_with_holes_2
|
symmetric_difference (const General_polygon_with_holes_2
|
||||||
<General_polygon_2<Arr_traits> >& pgn1,
|
<General_polygon_2<Arr_traits> >& pgn1,
|
||||||
const General_polygon_2<Arr_traits>& pgn2,
|
const General_polygon_2<Arr_traits>& pgn2,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
||||||
}
|
}
|
||||||
|
|
@ -814,8 +793,7 @@ void complement (const General_polygon_2<Arr_traits>& pgn,
|
||||||
|
|
||||||
template <class Kernel, class Container, class OutputIterator, class Traits>
|
template <class Kernel, class Container, class OutputIterator, class Traits>
|
||||||
OutputIterator complement (const Polygon_with_holes_2<Kernel, Container>& pgn,
|
OutputIterator complement (const Polygon_with_holes_2<Kernel, Container>& pgn,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn);
|
gps.insert(pgn);
|
||||||
|
|
@ -833,8 +811,7 @@ OutputIterator complement (const Polygon_with_holes_2<Kernel, Container>& pgn,
|
||||||
|
|
||||||
template <class Arr_traits, class OutputIterator, class Traits>
|
template <class Arr_traits, class OutputIterator, class Traits>
|
||||||
OutputIterator complement (const General_polygon_with_holes_2<Arr_traits>& pgn,
|
OutputIterator complement (const General_polygon_with_holes_2<Arr_traits>& pgn,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn);
|
gps.insert(pgn);
|
||||||
|
|
@ -863,10 +840,8 @@ struct map_iterator_to_traits
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class InputIterator, class OutputIterator, class Traits>
|
template <class InputIterator, class OutputIterator, class Traits>
|
||||||
inline OutputIterator join(InputIterator begin,
|
inline OutputIterator join(InputIterator begin, InputIterator end,
|
||||||
InputIterator end,
|
OutputIterator oi, Traits& )
|
||||||
OutputIterator oi,
|
|
||||||
Traits& )
|
|
||||||
{
|
{
|
||||||
if (begin == end)
|
if (begin == end)
|
||||||
return (oi);
|
return (oi);
|
||||||
|
|
@ -877,8 +852,7 @@ inline OutputIterator join(InputIterator begin,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator, class OutputIterator>
|
template <class InputIterator, class OutputIterator>
|
||||||
inline OutputIterator join(InputIterator begin,
|
inline OutputIterator join(InputIterator begin, InputIterator end,
|
||||||
InputIterator end,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
||||||
|
|
@ -888,12 +862,9 @@ inline OutputIterator join(InputIterator begin,
|
||||||
// Join two ranges of simple polygons and polygons with holes.
|
// Join two ranges of simple polygons and polygons with holes.
|
||||||
template <class InputIterator1, class InputIterator2,
|
template <class InputIterator1, class InputIterator2,
|
||||||
class OutputIterator, class Traits>
|
class OutputIterator, class Traits>
|
||||||
inline OutputIterator join(InputIterator1 begin1,
|
inline OutputIterator join(InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator1 end1,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 begin2,
|
OutputIterator oi, Traits& tr)
|
||||||
InputIterator2 end2,
|
|
||||||
OutputIterator oi,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
if (begin1 == end1)
|
if (begin1 == end1)
|
||||||
return (join(begin2, end2, oi, tr));
|
return (join(begin2, end2, oi, tr));
|
||||||
|
|
@ -904,10 +875,8 @@ inline OutputIterator join(InputIterator1 begin1,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
||||||
inline OutputIterator join(InputIterator1 begin1,
|
inline OutputIterator join(InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator1 end1,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 begin2,
|
|
||||||
InputIterator2 end2,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
||||||
|
|
@ -918,10 +887,8 @@ inline OutputIterator join(InputIterator1 begin1,
|
||||||
/// \name Aggregated intersection() functions.
|
/// \name Aggregated intersection() functions.
|
||||||
//@{
|
//@{
|
||||||
template <class InputIterator, class OutputIterator, class Traits>
|
template <class InputIterator, class OutputIterator, class Traits>
|
||||||
inline OutputIterator intersection (InputIterator begin,
|
inline OutputIterator intersection (InputIterator begin, InputIterator end,
|
||||||
InputIterator end,
|
OutputIterator oi, Traits&)
|
||||||
OutputIterator oi,
|
|
||||||
Traits&)
|
|
||||||
{
|
{
|
||||||
if (begin == end)
|
if (begin == end)
|
||||||
return (oi);
|
return (oi);
|
||||||
|
|
@ -932,8 +899,7 @@ inline OutputIterator intersection (InputIterator begin,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator, class OutputIterator>
|
template <class InputIterator, class OutputIterator>
|
||||||
inline OutputIterator intersection (InputIterator begin,
|
inline OutputIterator intersection (InputIterator begin, InputIterator end,
|
||||||
InputIterator end,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
||||||
|
|
@ -943,12 +909,9 @@ inline OutputIterator intersection (InputIterator begin,
|
||||||
// Inersect two ranges of simple polygons and polygons with holes.
|
// Inersect two ranges of simple polygons and polygons with holes.
|
||||||
template <class InputIterator1, class InputIterator2,
|
template <class InputIterator1, class InputIterator2,
|
||||||
class OutputIterator, class Traits>
|
class OutputIterator, class Traits>
|
||||||
inline OutputIterator intersection(InputIterator1 begin1,
|
inline OutputIterator intersection(InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator1 end1,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 begin2,
|
OutputIterator oi, Traits& tr)
|
||||||
InputIterator2 end2,
|
|
||||||
OutputIterator oi,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
if (begin1 == end1)
|
if (begin1 == end1)
|
||||||
return (intersection(begin2, end2, oi, tr));
|
return (intersection(begin2, end2, oi, tr));
|
||||||
|
|
@ -960,10 +923,8 @@ inline OutputIterator intersection(InputIterator1 begin1,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
||||||
inline OutputIterator intersection(InputIterator1 begin1,
|
inline OutputIterator intersection(InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator1 end1,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 begin2,
|
|
||||||
InputIterator2 end2,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
||||||
|
|
@ -974,10 +935,9 @@ inline OutputIterator intersection(InputIterator1 begin1,
|
||||||
/// \name Aggregated symmetric_difference() functions.
|
/// \name Aggregated symmetric_difference() functions.
|
||||||
//@{
|
//@{
|
||||||
template <class InputIterator, class OutputIterator, class Traits>
|
template <class InputIterator, class OutputIterator, class Traits>
|
||||||
inline OutputIterator symmetric_difference(InputIterator begin,
|
inline
|
||||||
InputIterator end,
|
OutputIterator symmetric_difference(InputIterator begin, InputIterator end,
|
||||||
OutputIterator oi,
|
OutputIterator oi, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
if (begin == end)
|
if (begin == end)
|
||||||
return (oi);
|
return (oi);
|
||||||
|
|
@ -989,8 +949,8 @@ inline OutputIterator symmetric_difference(InputIterator begin,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator, class OutputIterator>
|
template <class InputIterator, class OutputIterator>
|
||||||
inline OutputIterator symmetric_difference (InputIterator begin,
|
inline
|
||||||
InputIterator end,
|
OutputIterator symmetric_difference (InputIterator begin, InputIterator end,
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
typename map_iterator_to_traits<InputIterator>::Traits tr;
|
||||||
|
|
@ -1000,12 +960,10 @@ inline OutputIterator symmetric_difference (InputIterator begin,
|
||||||
// Xor two ranges of simple polygons and polygons with holes.
|
// Xor two ranges of simple polygons and polygons with holes.
|
||||||
template <class InputIterator1, class InputIterator2,
|
template <class InputIterator1, class InputIterator2,
|
||||||
class OutputIterator, class Traits>
|
class OutputIterator, class Traits>
|
||||||
inline OutputIterator symmetric_difference (InputIterator1 begin1,
|
inline
|
||||||
InputIterator1 end1,
|
OutputIterator symmetric_difference (InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator2 begin2,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 end2,
|
OutputIterator oi, Traits& tr)
|
||||||
OutputIterator oi,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
if (begin1 == end1)
|
if (begin1 == end1)
|
||||||
return (symmetric_difference(begin2, end2, oi, tr));
|
return (symmetric_difference(begin2, end2, oi, tr));
|
||||||
|
|
@ -1018,10 +976,9 @@ inline OutputIterator symmetric_difference (InputIterator1 begin1,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
template <class InputIterator1, class InputIterator2, class OutputIterator>
|
||||||
inline OutputIterator symmetric_difference (InputIterator1 begin1,
|
inline
|
||||||
InputIterator1 end1,
|
OutputIterator symmetric_difference (InputIterator1 begin1, InputIterator1 end1,
|
||||||
InputIterator2 begin2,
|
InputIterator2 begin2, InputIterator2 end2,
|
||||||
InputIterator2 end2,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
typename map_iterator_to_traits<InputIterator1>::Traits tr;
|
||||||
|
|
@ -1074,6 +1031,212 @@ inline bool do_intersect (InputIterator1 begin1, InputIterator1 end1,
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
/// \name oriented_side() functions.
|
||||||
|
//@{
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline Oriented_side oriented_side(const Polygon_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline Oriented_side oriented_side(const Polygon_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn2,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const Polygon_with_holes_2<Kernel, Container>& pgn1,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn2,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_2<Arr_traits>& pgn1,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits, class Gps_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_2<Arr_traits>& pgn1,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn2,
|
||||||
|
Gps_traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_2<Arr_traits>& pgn1,
|
||||||
|
const General_polygon_with_holes_2
|
||||||
|
<General_polygon_2<Arr_traits> >& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits, class Gps_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_2<Arr_traits>& pgn1,
|
||||||
|
const General_polygon_with_holes_2
|
||||||
|
<General_polygon_2<Arr_traits> >& pgn2,
|
||||||
|
Gps_traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <class Arr_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_with_holes_2
|
||||||
|
<General_polygon_2<Arr_traits> >& pgn1,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits, class Gps_traits>
|
||||||
|
inline Oriented_side oriented_side(const General_polygon_with_holes_2
|
||||||
|
<General_polygon_2<Arr_traits> >& pgn1,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn2,
|
||||||
|
Gps_traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Polygon_>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
|
const General_polygon_with_holes_2<Polygon_>& pgn2)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Polygon_, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const General_polygon_with_holes_2<Polygon_>& pgn1,
|
||||||
|
const General_polygon_with_holes_2<Polygon_>& pgn2,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(pgn1, pgn2, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Point Query:
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline Oriented_side oriented_side(const typename Kernel::Point_2& p,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline Oriented_side oriented_side(const typename Kernel::Point_2& p,
|
||||||
|
const Polygon_2<Kernel, Container>& pgn,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const typename Kernel::Point_2& p,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Kernel, class Container, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const typename Kernel::Point_2& p,
|
||||||
|
const Polygon_with_holes_2<Kernel, Container>& pgn,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits>
|
||||||
|
inline Oriented_side oriented_side(const typename Arr_traits::Point_2& p,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Arr_traits, class Gps_traits>
|
||||||
|
inline Oriented_side oriented_side(const typename Arr_traits::Point_2& p,
|
||||||
|
const General_polygon_2<Arr_traits>& pgn,
|
||||||
|
Gps_traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Polygon_>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const typename Polygon_::Point_2& p,
|
||||||
|
const General_polygon_with_holes_2<Polygon_>& pgn)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Polygon_, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side oriented_side(const typename Polygon_::Point_2& p,
|
||||||
|
const General_polygon_with_holes_2<Polygon_>& pgn,
|
||||||
|
Traits& tr)
|
||||||
|
{
|
||||||
|
return (_oriented_side(p, pgn, tr));
|
||||||
|
}
|
||||||
|
|
||||||
|
//@}
|
||||||
|
|
||||||
|
|
||||||
CGAL_END_NAMESPACE
|
CGAL_END_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
//
|
//
|
||||||
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
||||||
// Ron Wein <wein@post.tau.ac.il>
|
// Ron Wein <wein@post.tau.ac.il>
|
||||||
|
// Efi Fogel <efif@post.tau.ac.il>
|
||||||
|
|
||||||
#ifndef CGAL_BSO_INTERNAL_FUNCTIONS_H
|
#ifndef CGAL_BSO_INTERNAL_FUNCTIONS_H
|
||||||
#define CGAL_BSO_INTERNAL_FUNCTIONS_H
|
#define CGAL_BSO_INTERNAL_FUNCTIONS_H
|
||||||
|
|
@ -30,9 +31,7 @@ CGAL_BEGIN_NAMESPACE
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class Traits>
|
template <class Pgn1, class Pgn2, class Traits>
|
||||||
inline bool _do_intersect(const Pgn1& pgn1,
|
inline bool _do_intersect(const Pgn1& pgn1, const Pgn2& pgn2, Traits& tr)
|
||||||
const Pgn2& pgn2,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn1);
|
gps.insert(pgn1);
|
||||||
|
|
@ -40,11 +39,30 @@ inline bool _do_intersect(const Pgn1& pgn1,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2>
|
template <class Pgn1, class Pgn2>
|
||||||
inline bool _do_intersect(const Pgn1& pgn1,
|
inline bool _do_intersect(const Pgn1& pgn1, const Pgn2& pgn2)
|
||||||
const Pgn2& pgn2)
|
|
||||||
{
|
{
|
||||||
typename Gps_default_traits<Pgn1>::Traits tr;
|
typename Gps_default_traits<Pgn1>::Traits tr;
|
||||||
return (_do_intersect(pgn1, pgn2, tr));
|
return _do_intersect(pgn1, pgn2, tr);
|
||||||
|
}
|
||||||
|
|
||||||
|
//@}
|
||||||
|
/// \name _oriented_side() functions.
|
||||||
|
//@{
|
||||||
|
|
||||||
|
template <class Obj, class Pgn, class Traits>
|
||||||
|
inline
|
||||||
|
Oriented_side _oriented_side(const Obj& obj, const Pgn& pgn, Traits& tr)
|
||||||
|
{
|
||||||
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
|
gps.insert(pgn);
|
||||||
|
return (gps.oriented_side(obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Obj, class Pgn>
|
||||||
|
inline Oriented_side _oriented_side(const Obj& obj, const Pgn& pgn)
|
||||||
|
{
|
||||||
|
typename Gps_default_traits<Pgn>::Traits tr;
|
||||||
|
return _oriented_side(obj, pgn, tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
@ -52,10 +70,8 @@ inline bool _do_intersect(const Pgn1& pgn1,
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
||||||
inline OutputIterator _intersection(const Pgn1& pgn1,
|
inline OutputIterator _intersection(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
OutputIterator out, Traits& tr)
|
||||||
OutputIterator out,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn1);
|
gps.insert(pgn1);
|
||||||
|
|
@ -64,12 +80,10 @@ inline OutputIterator _intersection(const Pgn1& pgn1,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator>
|
template <class Pgn1, class Pgn2, class OutputIterator>
|
||||||
inline OutputIterator _intersection(const Pgn1& pgn1,
|
inline OutputIterator _intersection(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
|
||||||
OutputIterator out)
|
OutputIterator out)
|
||||||
{
|
{
|
||||||
typedef typename Gps_default_traits<Pgn1>::Traits Traits;
|
typename Gps_default_traits<Pgn1>::Traits tr;
|
||||||
Traits tr;
|
|
||||||
return (_intersection(pgn1, pgn2, out, tr));
|
return (_intersection(pgn1, pgn2, out, tr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,8 +92,7 @@ inline OutputIterator _intersection(const Pgn1& pgn1,
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Traits>
|
template <class Traits>
|
||||||
inline bool _is_empty (const typename Traits:: Polygon_2& pgn,
|
inline bool _is_empty (const typename Traits:: Polygon_2& pgn, Traits& tr)
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
typedef typename Traits::Curve_const_iterator Curve_const_iterator;
|
typedef typename Traits::Curve_const_iterator Curve_const_iterator;
|
||||||
const std::pair<Curve_const_iterator, Curve_const_iterator>& itr_pair =
|
const std::pair<Curve_const_iterator, Curve_const_iterator>& itr_pair =
|
||||||
|
|
@ -88,20 +101,17 @@ inline bool _is_empty (const typename Traits:: Polygon_2& pgn,
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Traits>
|
template <class Traits>
|
||||||
inline bool _is_empty (const typename Traits::Polygon_with_holes_2&,
|
inline bool _is_empty (const typename Traits::Polygon_with_holes_2&, Traits&)
|
||||||
Traits&)
|
|
||||||
{
|
{
|
||||||
return (false);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class Traits>
|
template <class Pgn1, class Pgn2, class Traits>
|
||||||
inline bool _join(const Pgn1& pgn1,
|
inline bool _join(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
typename Traits::Polygon_with_holes_2& res, Traits& tr)
|
||||||
typename Traits::Polygon_with_holes_2& res,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
if (_is_empty(pgn1, tr) || _is_empty(pgn2, tr))
|
if (_is_empty(pgn1, tr) || _is_empty(pgn2, tr))
|
||||||
return (false);
|
return false;
|
||||||
|
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn1);
|
gps.insert(pgn1);
|
||||||
|
|
@ -110,21 +120,18 @@ inline bool _join(const Pgn1& pgn1,
|
||||||
{
|
{
|
||||||
Oneset_iterator<typename Traits::Polygon_with_holes_2> oi (res);
|
Oneset_iterator<typename Traits::Polygon_with_holes_2> oi (res);
|
||||||
gps.polygons_with_holes(oi);
|
gps.polygons_with_holes(oi);
|
||||||
return (true);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the polygon doesnt intersect, the original pgn1, pgn2 contain the union
|
// the polygon doesnt intersect, the original pgn1, pgn2 contain the union
|
||||||
return (false);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class Pwh>
|
template <class Pgn1, class Pgn2, class Pwh>
|
||||||
inline bool
|
inline bool _join(const Pgn1& pgn1, const Pgn2& pgn2, Pwh& res)
|
||||||
_join(const Pgn1& pgn1,
|
|
||||||
const Pgn2& pgn2,
|
|
||||||
Pwh& res)
|
|
||||||
{
|
{
|
||||||
typename Gps_default_traits<Pgn1>::Traits tr;
|
typename Gps_default_traits<Pgn1>::Traits tr;
|
||||||
return (_join(pgn1, pgn2, res, tr));
|
return _join(pgn1, pgn2, res, tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
@ -132,24 +139,21 @@ _join(const Pgn1& pgn1,
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
||||||
inline OutputIterator _difference(const Pgn1& pgn1,
|
inline OutputIterator _difference(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
OutputIterator oi, Traits& tr)
|
||||||
OutputIterator oi,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn1);
|
gps.insert(pgn1);
|
||||||
gps.difference(pgn2);
|
gps.difference(pgn2);
|
||||||
return (gps.polygons_with_holes(oi));
|
return gps.polygons_with_holes(oi);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator>
|
template <class Pgn1, class Pgn2, class OutputIterator>
|
||||||
inline OutputIterator _difference(const Pgn1& pgn1,
|
inline OutputIterator _difference(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename Gps_default_traits<Pgn1>::Traits tr;
|
typename Gps_default_traits<Pgn1>::Traits tr;
|
||||||
return(_difference(pgn1, pgn2, oi, tr));
|
return _difference(pgn1, pgn2, oi, tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
@ -157,24 +161,21 @@ inline OutputIterator _difference(const Pgn1& pgn1,
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
template <class Pgn1, class Pgn2, class OutputIterator, class Traits>
|
||||||
inline OutputIterator _symmetric_difference(const Pgn1& pgn1,
|
inline OutputIterator _symmetric_difference(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
OutputIterator oi, Traits& tr)
|
||||||
OutputIterator oi,
|
|
||||||
Traits& tr)
|
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
gps.insert(pgn1);
|
gps.insert(pgn1);
|
||||||
gps.symmetric_difference(pgn2);
|
gps.symmetric_difference(pgn2);
|
||||||
return (gps.polygons_with_holes(oi));
|
return gps.polygons_with_holes(oi);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn1, class Pgn2, class OutputIterator>
|
template <class Pgn1, class Pgn2, class OutputIterator>
|
||||||
inline OutputIterator _symmetric_difference(const Pgn1& pgn1,
|
inline OutputIterator _symmetric_difference(const Pgn1& pgn1, const Pgn2& pgn2,
|
||||||
const Pgn2& pgn2,
|
|
||||||
OutputIterator oi)
|
OutputIterator oi)
|
||||||
{
|
{
|
||||||
typename Gps_default_traits<Pgn1>::Traits tr;
|
typename Gps_default_traits<Pgn1>::Traits tr;
|
||||||
return (_symmetric_difference(pgn1, pgn2, oi, tr));
|
return _symmetric_difference(pgn1, pgn2, oi, tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
@ -182,8 +183,7 @@ inline OutputIterator _symmetric_difference(const Pgn1& pgn1,
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
template <class Pgn, class Traits>
|
template <class Pgn, class Traits>
|
||||||
void _complement(const Pgn& pgn,
|
void _complement(const Pgn& pgn, typename Traits::Polygon_with_holes_2& res,
|
||||||
typename Traits::Polygon_with_holes_2& res,
|
|
||||||
Traits& tr)
|
Traits& tr)
|
||||||
{
|
{
|
||||||
General_polygon_set_2<Traits> gps(tr);
|
General_polygon_set_2<Traits> gps(tr);
|
||||||
|
|
@ -191,7 +191,6 @@ void _complement(const Pgn& pgn,
|
||||||
gps.complement();
|
gps.complement();
|
||||||
Oneset_iterator<typename Traits::Polygon_with_holes_2> oi(res);
|
Oneset_iterator<typename Traits::Polygon_with_holes_2> oi(res);
|
||||||
gps.polygons_with_holes(oi);
|
gps.polygons_with_holes(oi);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Pgn, class Pwh>
|
template <class Pgn, class Pwh>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue