Merge branch 'Aos_2-boundary_objects-efic-old' into Aos_2-boundary_objects-efic
|
|
@ -1441,29 +1441,29 @@ public:
|
||||||
{
|
{
|
||||||
return Compare_y_at_x_right_2(_traits);
|
return Compare_y_at_x_right_2(_traits);
|
||||||
}
|
}
|
||||||
class Compare_x_near_limit_2
|
class Compare_x_near_boundary_2
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
Traits& _traits;
|
Traits& _traits;
|
||||||
public:
|
public:
|
||||||
Compare_x_near_limit_2 (Traits& traits) : _traits(traits) {}
|
Compare_x_near_boundary_2 (Traits& traits) : _traits(traits) {}
|
||||||
Comparison_result operator()( const X_monotone_curve_2& xcv1,
|
Comparison_result operator()( const X_monotone_curve_2& xcv1,
|
||||||
const X_monotone_curve_2& xcv2,
|
const X_monotone_curve_2& xcv2,
|
||||||
Arr_curve_end ce) const
|
Arr_curve_end ce) const
|
||||||
{
|
{
|
||||||
return (boost::apply_visitor(Compare_x_near_limit_2_visitor(_traits,ce),xcv1.variant(),xcv2.variant()));
|
return (boost::apply_visitor(Compare_x_near_boundary_2_visitor(_traits,ce),xcv1.variant(),xcv2.variant()));
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
class Compare_x_near_limit_2_visitor
|
class Compare_x_near_boundary_2_visitor
|
||||||
: public boost::static_visitor <Comparison_result>
|
: public boost::static_visitor <Comparison_result>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::static_visitor <Comparison_result> Base;
|
typedef boost::static_visitor <Comparison_result> Base;
|
||||||
Compare_x_near_limit_2_visitor(Traits& traits,Arr_curve_end ce)
|
Compare_x_near_boundary_2_visitor(Traits& traits,Arr_curve_end ce)
|
||||||
:_traits(traits), _ce(ce), Base() {}
|
:_traits(traits), _ce(ce), Base() {}
|
||||||
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
||||||
{
|
{
|
||||||
return _traits.compare_x_near_limit_2_object()(xcv1,xcv2,_ce);
|
return _traits.compare_x_near_boundary_2_object()(xcv1,xcv2,_ce);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Vertical_segment& xcv2 ) const
|
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Vertical_segment& xcv2 ) const
|
||||||
{
|
{
|
||||||
|
|
@ -1478,7 +1478,7 @@ public:
|
||||||
return CGAL::SMALLER;
|
return CGAL::SMALLER;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _traits.compare_x_at_limit_2_object()(xcv2.max(),xcv1,_ce);
|
return _traits.compare_x_on_boundary_2_object()(xcv2.max(),xcv1,_ce);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Vertical_segment& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
Comparison_result operator()(const Vertical_segment& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
||||||
{
|
{
|
||||||
|
|
@ -1511,44 +1511,44 @@ public:
|
||||||
private:
|
private:
|
||||||
Traits& _traits;
|
Traits& _traits;
|
||||||
Arr_curve_end _ce;
|
Arr_curve_end _ce;
|
||||||
}; //Compare_x_near_limit_2_visitor
|
}; //Compare_x_near_boundary_2_visitor
|
||||||
}; //Compare_x_near_limit_2
|
}; //Compare_x_near_boundary_2
|
||||||
|
|
||||||
Compare_x_near_limit_2 compare_x_near_limit_2_object() const
|
Compare_x_near_boundary_2 compare_x_near_boundary_2_object() const
|
||||||
{
|
{
|
||||||
return Compare_x_near_limit_2(_traits);
|
return Compare_x_near_boundary_2(_traits);
|
||||||
}
|
}
|
||||||
|
|
||||||
class Compare_x_at_limit_2
|
class Compare_x_on_boundary_2
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
Traits& _traits;
|
Traits& _traits;
|
||||||
public:
|
public:
|
||||||
Compare_x_at_limit_2 (Traits& traits) :_traits(traits) {}
|
Compare_x_on_boundary_2 (Traits& traits) :_traits(traits) {}
|
||||||
Comparison_result operator()( const Point_2 & p,
|
Comparison_result operator()( const Point_2 & p,
|
||||||
const X_monotone_curve_2 & xcv,
|
const X_monotone_curve_2 & xcv,
|
||||||
Arr_curve_end ce) const
|
Arr_curve_end ce) const
|
||||||
{
|
{
|
||||||
return (boost::apply_visitor(Compare_x_at_limit_2_visitor_1(_traits,ce,p),xcv.variant()));
|
return (boost::apply_visitor(Compare_x_on_boundary_2_visitor_1(_traits,ce,p),xcv.variant()));
|
||||||
}
|
}
|
||||||
Comparison_result operator()( const X_monotone_curve_2 & xcv1,
|
Comparison_result operator()( const X_monotone_curve_2 & xcv1,
|
||||||
Arr_curve_end ce1,
|
Arr_curve_end ce1,
|
||||||
const X_monotone_curve_2 & xcv2,
|
const X_monotone_curve_2 & xcv2,
|
||||||
Arr_curve_end ce2) const
|
Arr_curve_end ce2) const
|
||||||
{
|
{
|
||||||
return (boost::apply_visitor(Compare_x_at_limit_2_visitor_2(_traits,ce1,ce2),xcv1.variant(),xcv2.variant()));
|
return (boost::apply_visitor(Compare_x_on_boundary_2_visitor_2(_traits,ce1,ce2),xcv1.variant(),xcv2.variant()));
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
class Compare_x_at_limit_2_visitor_1
|
class Compare_x_on_boundary_2_visitor_1
|
||||||
: public boost::static_visitor <Comparison_result>
|
: public boost::static_visitor <Comparison_result>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::static_visitor <Comparison_result> Base;
|
typedef boost::static_visitor <Comparison_result> Base;
|
||||||
Compare_x_at_limit_2_visitor_1(Traits& traits,Arr_curve_end ce,const Point_2 & p)
|
Compare_x_on_boundary_2_visitor_1(Traits& traits,Arr_curve_end ce,const Point_2 & p)
|
||||||
:_traits(traits), _ce(ce), _p(p), Base() {}
|
:_traits(traits), _ce(ce), _p(p), Base() {}
|
||||||
Comparison_result operator()(const Non_vertical_x_curve_2& xcv ) const
|
Comparison_result operator()(const Non_vertical_x_curve_2& xcv ) const
|
||||||
{
|
{
|
||||||
return _traits.compare_x_at_limit_2_object()(_p,xcv,_ce);
|
return _traits.compare_x_on_boundary_2_object()(_p,xcv,_ce);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Vertical_segment& xcv) const
|
Comparison_result operator()(const Vertical_segment& xcv) const
|
||||||
{
|
{
|
||||||
|
|
@ -1562,18 +1562,18 @@ public:
|
||||||
Traits& _traits;
|
Traits& _traits;
|
||||||
Point_2 _p;
|
Point_2 _p;
|
||||||
Arr_curve_end _ce;
|
Arr_curve_end _ce;
|
||||||
}; //Compare_x_at_limit_2_visitor_1
|
}; //Compare_x_on_boundary_2_visitor_1
|
||||||
|
|
||||||
class Compare_x_at_limit_2_visitor_2
|
class Compare_x_on_boundary_2_visitor_2
|
||||||
: public boost::static_visitor <Comparison_result>
|
: public boost::static_visitor <Comparison_result>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::static_visitor <Comparison_result> Base;
|
typedef boost::static_visitor <Comparison_result> Base;
|
||||||
Compare_x_at_limit_2_visitor_2(Traits& traits,Arr_curve_end ce1,Arr_curve_end ce2)
|
Compare_x_on_boundary_2_visitor_2(Traits& traits,Arr_curve_end ce1,Arr_curve_end ce2)
|
||||||
:_traits(traits), _ce1(ce1), _ce2(ce2), Base() {}
|
:_traits(traits), _ce1(ce1), _ce2(ce2), Base() {}
|
||||||
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
||||||
{
|
{
|
||||||
return _traits.compare_x_at_limit_2_object()(xcv1,_ce1,xcv2,_ce2);
|
return _traits.compare_x_on_boundary_2_object()(xcv1,_ce1,xcv2,_ce2);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Vertical_segment& xcv2 ) const
|
Comparison_result operator()(const Non_vertical_x_curve_2& xcv1,const Vertical_segment& xcv2 ) const
|
||||||
{
|
{
|
||||||
|
|
@ -1582,7 +1582,7 @@ public:
|
||||||
else //_ce2 == ARR_MAX_END
|
else //_ce2 == ARR_MAX_END
|
||||||
CGAL_precondition (xcv2.max_parameter_space() == CGAL::ARR_TOP_BOUNDARY);
|
CGAL_precondition (xcv2.max_parameter_space() == CGAL::ARR_TOP_BOUNDARY);
|
||||||
|
|
||||||
return _traits.compare_x_at_limit_2_object()(xcv2.max(),xcv1,_ce1);
|
return _traits.compare_x_on_boundary_2_object()(xcv2.max(),xcv1,_ce1);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Vertical_segment& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
Comparison_result operator()(const Vertical_segment& xcv1,const Non_vertical_x_curve_2& xcv2 ) const
|
||||||
{
|
{
|
||||||
|
|
@ -1591,7 +1591,7 @@ public:
|
||||||
else //_ce1 == ARR_MAX_END
|
else //_ce1 == ARR_MAX_END
|
||||||
CGAL_precondition (xcv1.max_parameter_space() == CGAL::ARR_TOP_BOUNDARY);
|
CGAL_precondition (xcv1.max_parameter_space() == CGAL::ARR_TOP_BOUNDARY);
|
||||||
|
|
||||||
return _traits.compare_x_at_limit_2_object()(xcv1.max(),xcv2,_ce2);
|
return _traits.compare_x_on_boundary_2_object()(xcv1.max(),xcv2,_ce2);
|
||||||
}
|
}
|
||||||
Comparison_result operator()(const Vertical_segment& xcv1,const Vertical_segment& xcv2 ) const
|
Comparison_result operator()(const Vertical_segment& xcv1,const Vertical_segment& xcv2 ) const
|
||||||
{
|
{
|
||||||
|
|
@ -1610,12 +1610,12 @@ public:
|
||||||
private:
|
private:
|
||||||
Traits& _traits;
|
Traits& _traits;
|
||||||
Arr_curve_end _ce1,_ce2;
|
Arr_curve_end _ce1,_ce2;
|
||||||
}; //Compare_x_at_limit_2_visitor_2
|
}; //Compare_x_on_boundary_2_visitor_2
|
||||||
}; //Compare_x_at_limit_2
|
}; //Compare_x_on_boundary_2
|
||||||
|
|
||||||
/*! Obtain a Compare_x_at_limit_2 function object */
|
/*! Obtain a Compare_x_on_boundary_2 function object */
|
||||||
Compare_x_at_limit_2 compare_x_at_limit_2_object() const
|
Compare_x_on_boundary_2 compare_x_on_boundary_2_object() const
|
||||||
{ return Compare_x_at_limit_2(_traits); }
|
{ return Compare_x_on_boundary_2(_traits); }
|
||||||
/*! A function object that compares the y-coordinates of arc ends near the
|
/*! A function object that compares the y-coordinates of arc ends near the
|
||||||
* boundary of the parameter space.
|
* boundary of the parameter space.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1796,4 +1796,3 @@ public:
|
||||||
#endif // CGAL_DONT_SUBMIT
|
#endif // CGAL_DONT_SUBMIT
|
||||||
|
|
||||||
#endif //CGAL_ARR_RATIONAL_ARC_TRAITS_D_1_H
|
#endif //CGAL_ARR_RATIONAL_ARC_TRAITS_D_1_H
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -643,7 +643,7 @@ public:
|
||||||
/*! A function object that compares the x-limits of arc ends on the
|
/*! A function object that compares the x-limits of arc ends on the
|
||||||
* boundary of the parameter space
|
* boundary of the parameter space
|
||||||
*/
|
*/
|
||||||
class Compare_x_at_limit_2 {
|
class Compare_x_on_boundary_2 {
|
||||||
public:
|
public:
|
||||||
/*! Compare the x-coordinate of a point and the x-coordinate of the limit
|
/*! Compare the x-coordinate of a point and the x-coordinate of the limit
|
||||||
* of a rational arc at its specificed end at y = +/- oo.
|
* of a rational arc at its specificed end at y = +/- oo.
|
||||||
|
|
@ -697,14 +697,14 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! Obtain a Compare_x_at_limit_2 function object */
|
/*! Obtain a Compare_x_on_boundary_2 function object */
|
||||||
Compare_x_at_limit_2 compare_x_at_limit_2_object() const
|
Compare_x_on_boundary_2 compare_x_on_boundary_2_object() const
|
||||||
{ return Compare_x_at_limit_2(); }
|
{ return Compare_x_on_boundary_2(); }
|
||||||
|
|
||||||
/*! A function object that compares the x-coordinates of arc ends near the
|
/*! A function object that compares the x-coordinates of arc ends near the
|
||||||
* boundary of the parameter space
|
* boundary of the parameter space
|
||||||
*/
|
*/
|
||||||
class Compare_x_near_limit_2 {
|
class Compare_x_near_boundary_2 {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/*! Compare the x-coordinates of 2 arcs ends near the boundary of the
|
/*! Compare the x-coordinates of 2 arcs ends near the boundary of the
|
||||||
|
|
@ -730,9 +730,9 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! Obtain a Compare_x_near_limit_2 function object */
|
/*! Obtain a Compare_x_near_boundary_2 function object */
|
||||||
Compare_x_near_limit_2 compare_x_near_limit_2_object() const
|
Compare_x_near_boundary_2 compare_x_near_boundary_2_object() const
|
||||||
{ return Compare_x_near_limit_2(); }
|
{ return Compare_x_near_boundary_2(); }
|
||||||
|
|
||||||
|
|
||||||
/*! A function object that compares the y-coordinates of arc ends near the
|
/*! A function object that compares the y-coordinates of arc ends near the
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,3 @@
|
||||||
// #define CGAL_IDENTIFICATION_XY 2
|
|
||||||
// #define CGAL_SS_VERBOSE 1
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
@ -0,0 +1,381 @@
|
||||||
|
namespace CGAL {
|
||||||
|
|
||||||
|
/*! \ingroup PkgArrangement2TraitsClasses
|
||||||
|
*
|
||||||
|
* The traits class `Arr_geodesic_arc_on_sphere_traits_2` is a model of the
|
||||||
|
* `ArrangementTraits_2` concept. It enables the construction and
|
||||||
|
* maintenance of arrangements of arcs of great circles (also known as
|
||||||
|
* geodesic arcs) embedded on the sphere (centered at the origin). Almost
|
||||||
|
* all operations on arrangements require a kernel that supports exact
|
||||||
|
* predicates. Most operations also require the kernel to support exact
|
||||||
|
* constructions. However, all operations on such arrangements can be
|
||||||
|
* computed efficiently, since all calculations are performed with
|
||||||
|
* rational arithmetic.
|
||||||
|
*
|
||||||
|
* There is an analogy between this class of arrangements and the class of
|
||||||
|
* planar arrangements induced by linear curves (i.e., segments, rays, and
|
||||||
|
* lines), as properties of linear curves in the plane often, but not always,
|
||||||
|
* hold for geodesic arcs on the sphere. For example, given any two
|
||||||
|
* non-antipodal points on the sphere there exists a unique great circle
|
||||||
|
* connecting the two points.
|
||||||
|
*
|
||||||
|
* We use the following parameterization of the unit sphere \f$S =
|
||||||
|
* \phi_S(\Phi)\f$: \f$\Phi = [\alpha, 2\pi + \alpha] \times [-\frac{\pi}{2},
|
||||||
|
* \frac{\pi}{2}]\f$, \f$\phi_S(x, y) = (\cos y \cos x, \sin y \cos x, \sin
|
||||||
|
* x)\f$, where \f$\alpha = atan2(X, Y)\f$. By deafult, \f$X = -1, Y = 0\f$,
|
||||||
|
* which implies \f$\alpha = \pi\f$, and a default parameterization \f$\Phi =
|
||||||
|
* [-\pi, \pi] \times [-\frac{\pi}{2}, \frac{\pi}{2}]\f$. The equator curve,
|
||||||
|
* for example, is given by \f$\gamma(t) = (\pi(2t - 1) + \alpha, 0)\f$, for
|
||||||
|
* \f$t \in [0,1]\f$. This parameterization induces two contraction points
|
||||||
|
* \f$p_s = (0, 0, -1) = \phi_S(y,-\frac{\pi}{2})\f$ and \f$p_n = (0, 0, 1) =
|
||||||
|
* \phi_S(y,\frac{\pi}{2})\f$, referred to as the south and north poles,
|
||||||
|
* respectively, and an identification curve \f$\{\phi_S(\pi +
|
||||||
|
* \alpha,x)\,|\,-\frac{\pi}{2} \leq v \leq \frac{\pi}{2}\}\f$, as
|
||||||
|
* \f$\phi_S(-\pi + \alpha,v) = \phi_S(+\pi + \alpha,v)\f$ for all \f$x\f$
|
||||||
|
* (which coincides with the opposite Prime (Greenwich) Meridian when
|
||||||
|
* \f$\alpha = \pi\f$).
|
||||||
|
|
||||||
|
* \cgalModels `ArrangementTraits_2`
|
||||||
|
* \cgalModels `ArrangementLandmarkTraits_2`
|
||||||
|
* \cgalModels `ArrangementSphericalBoundaryTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
template <typename Kernel, typename X, typename Y>
|
||||||
|
class Arr_geodesic_arc_on_sphere_traits_2 {
|
||||||
|
public:
|
||||||
|
/*! The `Point_2` class nested within the traits is used to represent a
|
||||||
|
* point on a sphere centered at the origin. The point is in fact a
|
||||||
|
* not-necessarily normalized 3D direction extended with information that
|
||||||
|
* specifies the location of the point pre-image in the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalModels `Assignable`
|
||||||
|
* \cgalModels `DefaultConstructible`
|
||||||
|
* \cgalModels `CopyConstructible`
|
||||||
|
*/
|
||||||
|
class Point_2 {
|
||||||
|
public:
|
||||||
|
/// \name Enumeration types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! The location type indicates a location in the parameter space.
|
||||||
|
*/
|
||||||
|
enum Location_type {
|
||||||
|
/// Internal to the parameter space.
|
||||||
|
NO_BOUNDARY_LOC = 0,
|
||||||
|
|
||||||
|
/// The bottom side boundary of the parameter space (the south pole).
|
||||||
|
MIN_BOUNDARY_LOC,
|
||||||
|
|
||||||
|
/// The identified left and right side boundaries of the parameter space.
|
||||||
|
MID_BOUNDARY_LOC,
|
||||||
|
|
||||||
|
/// The top side boundary of the parameter space (the north pole).
|
||||||
|
MAX_BOUNDARY_LOC
|
||||||
|
};
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
typedef Kernel::Direction_3 Direction_3;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Creation
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Constructs a point from a direction and a location.
|
||||||
|
* \param[in] dir the direction.
|
||||||
|
* \param[in] location indicates the location of the point pre-image
|
||||||
|
* in the parameter space.
|
||||||
|
*/
|
||||||
|
Point_2(const Direction_3& dir, Location_type location);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Set the location of the point pre-image in the parameter space.
|
||||||
|
* \param[in] location the updated location of the point pre-image in
|
||||||
|
* the parameter space.
|
||||||
|
*/
|
||||||
|
void set_location(Location_type location);
|
||||||
|
|
||||||
|
/*! Obtain the location of the point.
|
||||||
|
* \return the location of the point pre-image in the parameter space.
|
||||||
|
*/
|
||||||
|
Location_type location() const;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! The `X_monotone_curve_2` class nested within the traits is used to
|
||||||
|
* represent an \f$x\f$-monotone geodesic arc on the a sphere centered at
|
||||||
|
* the origin. The pre-image of an \f$x\f$-monotone geodesic arc does not
|
||||||
|
* intersect the identified left and right sides of the boundary of the
|
||||||
|
* parameter space.
|
||||||
|
*
|
||||||
|
* \cgalModels `Assignable`
|
||||||
|
* \cgalModels `DefaultConstructible`
|
||||||
|
* \cgalModels `CopyConstructible`
|
||||||
|
*/
|
||||||
|
class X_monotone_curve_2 {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Creation
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Constructs an \f$x\f$-monotone geodesic arc.
|
||||||
|
* \param[in] source the source point of the arc.
|
||||||
|
* \param[in] target the target point of the arc.
|
||||||
|
* \param[in] normal the normal of the plane that contains the arc.
|
||||||
|
* \param[in] is_vertical is the arc vertical ?
|
||||||
|
* \param[in] is_directed_right is the arc directed from left to right?
|
||||||
|
* \param[in] is_full is the arc a full great circle?
|
||||||
|
* \param[in] is_degenerate is the arc degenerate (single point)?
|
||||||
|
* \param[in] is_empty is the arc empty?
|
||||||
|
* \pre Both endpoint lie on the given plane.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2(const Point_2& source,
|
||||||
|
const Point_2& target,
|
||||||
|
const Direction_3& normal,
|
||||||
|
bool is_vertical,
|
||||||
|
bool is_directed_right,
|
||||||
|
bool is_full = false,
|
||||||
|
bool is_degenerate = false,
|
||||||
|
bool is_empty = false);
|
||||||
|
|
||||||
|
/*! Construct an \f$x\f$-monotone geodesic arc.
|
||||||
|
* \param[in] normal the normal of the plane containing the arc.
|
||||||
|
* \param[in] source the source-point direction.
|
||||||
|
* \param[in] target the target-point direction.
|
||||||
|
* \pre Both endpoint lie on the given plane.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2(const Point_2& source,
|
||||||
|
const Point_2& target,
|
||||||
|
const Direction_3& normal);
|
||||||
|
|
||||||
|
/*! Construct a full great-circle.
|
||||||
|
* \param[in] point the endpoint of the full great-circle.
|
||||||
|
* \param[in] normal the normal of the plane containing the arc.
|
||||||
|
* \pre the point lies on the given plane.
|
||||||
|
* \pre the point pre-image lies on the identified left and right sides
|
||||||
|
* of the boundary of the parameter space.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2(const Point_2& point,
|
||||||
|
const Direction_3& normal);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Sets the source endpoint.
|
||||||
|
* \param[in] source the updated source endpoint.
|
||||||
|
*/
|
||||||
|
void set_source(const Point_2& source);
|
||||||
|
|
||||||
|
/*! Sets the target endpoint.
|
||||||
|
* \param[in] target the updated target endpoint.
|
||||||
|
*/
|
||||||
|
void set_target(const Point_2& target);
|
||||||
|
|
||||||
|
/*! Sets the normal of the underlying plane.
|
||||||
|
* \param[in] normal the updated normal of the underlying plane.
|
||||||
|
*/
|
||||||
|
void set_normal(const Direction_3& normal);
|
||||||
|
|
||||||
|
/*! Sets the flag that indicates whether the arc is vertical.
|
||||||
|
* \param[in] flag indicates whether the arc pre-image in the parameter
|
||||||
|
* space is vertical.
|
||||||
|
*/
|
||||||
|
void set_is_vertical(bool flag);
|
||||||
|
|
||||||
|
/*! Sets the flag that indicates whether the direction of the arc
|
||||||
|
* pre-image in the parameter space is from left to right.
|
||||||
|
* \param flag indicates whether the arc pre-image in the parameter
|
||||||
|
* space is from left to right.
|
||||||
|
*/
|
||||||
|
void set_is_directed_right(bool flag);
|
||||||
|
|
||||||
|
/*! Sets the flag that indicates whether the arc is a full great circle.
|
||||||
|
* \param[in] flag indicates whether the arc is a full great circle.
|
||||||
|
*/
|
||||||
|
void set_is_full(bool flag);
|
||||||
|
|
||||||
|
/*! Sets the flag that indicates whether the arc degenerates to a point.
|
||||||
|
* \param[in] flag indicates whether the arc degenerates to a point.
|
||||||
|
*/
|
||||||
|
void set_is_degenerate(bool flag);
|
||||||
|
|
||||||
|
/*! Sets the flag that indicates whether the arc is empty.
|
||||||
|
* \param[in] flag indicates whether the arc is empty.
|
||||||
|
*/
|
||||||
|
void set_is_empty(bool flag);
|
||||||
|
|
||||||
|
/*! Obtains the source point.
|
||||||
|
*/
|
||||||
|
const Point_2& source() const;
|
||||||
|
|
||||||
|
/*! Obtains the target point.
|
||||||
|
*/
|
||||||
|
const Point_2& target() const;
|
||||||
|
|
||||||
|
/*! Obtains the normal to the containing plane.
|
||||||
|
*/
|
||||||
|
const Direction_3& normal() const;
|
||||||
|
|
||||||
|
/*! Obtains the (lexicographically) left endpoint direction.
|
||||||
|
*/
|
||||||
|
const Point_2& left() const;
|
||||||
|
|
||||||
|
/*! Obtains the (lexicographically) right endpoint.
|
||||||
|
*/
|
||||||
|
const Point_2& right() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is vertical.
|
||||||
|
*/
|
||||||
|
bool is_vertical() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is directed lexicographically from left to
|
||||||
|
* right.
|
||||||
|
*/
|
||||||
|
bool is_directed_right() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is a great circle.
|
||||||
|
*/
|
||||||
|
bool is_full() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is degenerate.
|
||||||
|
*/
|
||||||
|
bool is_degenerate() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is empty. */
|
||||||
|
bool is_empty() const;
|
||||||
|
|
||||||
|
/*! Determines whether the arc is a meridian.
|
||||||
|
*/
|
||||||
|
bool is_meridian() const;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*/
|
||||||
|
class Curve_2 {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Creation
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*/
|
||||||
|
class Construct_point_2 {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! Construction functor of \f$x\f$-monotone geodesic arcs.
|
||||||
|
*
|
||||||
|
* \cgalModels `Assignable`
|
||||||
|
* \cgalModels `CopyConstructible`
|
||||||
|
* \cgalModels `AdaptableUnaryFunction`
|
||||||
|
* \cgalModels `AdaptableBinaryFunction`
|
||||||
|
* \cgalModels `AdaptableTernaryFunction`
|
||||||
|
*/
|
||||||
|
class Construct_x_monotone_curve_2 {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
|
||||||
|
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::X_monotone_curve_2 result_type;
|
||||||
|
typedef Kernel::Direction_3 Direction_3;
|
||||||
|
typedef Direction_3 argument_type;
|
||||||
|
typedef Point_2 first_argument_type;
|
||||||
|
typedef Point_2 second_argument_type;
|
||||||
|
typedef Direction_3 third_argument_type;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Construct the minor geodesic arc from two endpoints. The minor arc
|
||||||
|
* is the one with the smaller angle among the two geodesic arcs with
|
||||||
|
* the given endpoints.
|
||||||
|
* 1. Find out whether the arc is x-monotone.
|
||||||
|
* 2. If it is x-monotone,
|
||||||
|
* 2.1 Find out whether it is vertical, and
|
||||||
|
* 2.2 whether the target is larger than the source (directed right).
|
||||||
|
* The arc is vertical, iff
|
||||||
|
* 1. one of its endpoint direction pierces a pole, or
|
||||||
|
* 2. the projections onto the xy-plane coincide.
|
||||||
|
* \param[in] p the first endpoint.
|
||||||
|
* \param[in] q the second endpoint.
|
||||||
|
* \pre p and q must not coincide.
|
||||||
|
* \pre p and q cannot be antipodal.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q);
|
||||||
|
|
||||||
|
/*! Construct a full great circle from a normal to a plane.
|
||||||
|
* \param normal the normal to the plane containing the great circle.
|
||||||
|
* \pre the plane is not vertical.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2 operator()(const Direction_3& normal);
|
||||||
|
|
||||||
|
/*! Construct a geodesic arc from two endpoints contained
|
||||||
|
* in a plane.
|
||||||
|
* \param[in] p the first endpoint.
|
||||||
|
* \param[in] q the second endpoint.
|
||||||
|
* \param[in] normal the normal to the plane containing the arc.
|
||||||
|
* \pre Both endpoint lie on the given plane.
|
||||||
|
* \pre Both endpoint lie on the given plane.
|
||||||
|
*/
|
||||||
|
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q,
|
||||||
|
const Direction_3& normal)
|
||||||
|
/// @} /* end of operations */
|
||||||
|
};
|
||||||
|
|
||||||
|
class Construct_Curve_2 {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! Returns an instance of `Construct_point_2`.
|
||||||
|
*/
|
||||||
|
Construct_point_2 construct_point_2_object() const;
|
||||||
|
|
||||||
|
/*! Returns an instance of `Construct_x_monotone_curve_2`.
|
||||||
|
*/
|
||||||
|
Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object() const;
|
||||||
|
|
||||||
|
/*! Returns an instance of `Construct_curve_2`.
|
||||||
|
*/
|
||||||
|
Construct_curve_2 construct_curve_2_object() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* end namespace CGAL */
|
||||||
|
|
@ -70,7 +70,7 @@ public:
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
constructs an line segment.
|
constructs a line segment.
|
||||||
*/
|
*/
|
||||||
Curve_2 (const Segment_2& seg);
|
Curve_2 (const Segment_2& seg);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,293 @@
|
||||||
|
namespace CGAL {
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup PkgArrangement2
|
||||||
|
|
||||||
|
\anchor arr_refaos_with_hist
|
||||||
|
|
||||||
|
An object `arr` of the class `Arrangement_on_surface_with_history_2` represents the
|
||||||
|
planar subdivision induced by a set of input curves \f$ \cal C\f$.
|
||||||
|
The arrangement is represented as a doubly-connected edge-list (<span class="textsc">Dcel</span>).
|
||||||
|
As is the case for the `Arrangement_2<Traits,Dcel>`, each <span class="textsc">Dcel</span>
|
||||||
|
vertex is associated with a point and each edge is associated with an
|
||||||
|
\f$ x\f$-monotone curve whose interior is disjoint from all other edges and
|
||||||
|
vertices. Each such \f$ x\f$-monotone curve is a subcurve of some
|
||||||
|
\f$ C \in \cal C\f$ - or may represent an overlap among several curves
|
||||||
|
in \f$ \cal C\f$.
|
||||||
|
|
||||||
|
The `Arrangement_on_surface_with_history_2` class-template extends the `Arrangement_2`
|
||||||
|
class-template by keeping an additional container of input curves
|
||||||
|
representing \f$ \cal C\f$, and by maintaining a cross-mapping between these
|
||||||
|
curves and the arrangement edges they induce. This way it is possible
|
||||||
|
to determine the inducing curve(s) of each arrangement edge. This mapping
|
||||||
|
also allows the traversal of input curves, and the traversal of edges
|
||||||
|
induced by each curve.
|
||||||
|
|
||||||
|
The `Arrangement_on_surface_with_history_2` template has two parameters:
|
||||||
|
<UL>
|
||||||
|
<LI>The `Traits` template-parameter should be instantiated with
|
||||||
|
a model of the `ArrangementGeometry_traits_2` concept. The traits
|
||||||
|
class defines the `Curve_2` type, which represents an input curve.
|
||||||
|
It also defines the types of \f$ x\f$-monotone curves and two-dimensional
|
||||||
|
points, namely `ArrangementGeometry_traits_2::X_monotone_curve_2` and `ArrangementGeometry_traits_2::Point_2`,
|
||||||
|
respectively, and supports basic geometric predicates on them.
|
||||||
|
<LI>The `Dcel` template-parameter should be instantiated with
|
||||||
|
a class that is a model of the `ArrangementDcelWithRebind` concept. The
|
||||||
|
value of this parameter is by default
|
||||||
|
`Arr_default_dcel<Traits>`.
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
\sa `ArrangementDcel`
|
||||||
|
\sa `Arr_default_dcel<Traits>`
|
||||||
|
\sa `ArrangementGeometry_traits_2`
|
||||||
|
\sa `Arrangement_2<Traits,Dcel>`
|
||||||
|
\sa `insertion functions`
|
||||||
|
\sa `removal functions`
|
||||||
|
\sa `overlaying arrangements`
|
||||||
|
|
||||||
|
*/
|
||||||
|
template <typename Geometry_traits_2, typename TopologyTraits>
|
||||||
|
class Arrangement_on_surface_with_history_2 : public Arrangement_on_surface_2<Geometry_traits_2, TopologyTraits> {
|
||||||
|
public:
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! a private type used as an abbreviation of the
|
||||||
|
* `Arrangement_on_surface_with_history_2` type hereafter.
|
||||||
|
*/
|
||||||
|
typedef Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits> Self;
|
||||||
|
|
||||||
|
//! the geometry traits class in use.
|
||||||
|
typedef Geometry_traits_2 Geometry_traits_2;
|
||||||
|
|
||||||
|
//! the topology traits class in use.
|
||||||
|
typedef Geometry_traits_2 Topology_traits;
|
||||||
|
|
||||||
|
//! the <span class="textsc">Dcel</span> representation of the arrangement.
|
||||||
|
typedef typename Topology_traits::Dcel Dcel;
|
||||||
|
|
||||||
|
//! the point type, as defined by the traits class.
|
||||||
|
typedef typename Geometry_traits_2::Point_2 Point_2;
|
||||||
|
|
||||||
|
//! the \f$ x\f$-monotone curve type, as defined by the traits class.
|
||||||
|
typedef typename Geometry_traits_2::X_monotone_curve_2 X_monotone_curve_2;
|
||||||
|
|
||||||
|
//! the curve type, as defined by the traits class.
|
||||||
|
typedef typename Geometry_traits_2::Curve_2 Curve_2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/*! \name
|
||||||
|
* In addition, the nested types `Vertex`, `Halfedge` and `Face` are defined,
|
||||||
|
* as well as all handle, iterator and circulator types, as defined by the
|
||||||
|
* `Arrangement_2` class-template.
|
||||||
|
*/
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! a handle for an input curve.
|
||||||
|
typedef unspecified_type Curve_handle;
|
||||||
|
|
||||||
|
/*! a bidirectional iterator over the curves that induce the arrangement.
|
||||||
|
* Its value-type is `Curve_2`.
|
||||||
|
*/
|
||||||
|
typedef unspecified_type Curve_iterator;
|
||||||
|
|
||||||
|
/*! an iterator over the edges induced by an input curve. Its value type is
|
||||||
|
* `Halfedge_handle`.
|
||||||
|
*/
|
||||||
|
typedef unspecified_type Induced_edge_iterator;
|
||||||
|
|
||||||
|
/*! an iterator for the curves that originate a given arrangement edge.
|
||||||
|
* Its value type is `Curve_handle`.
|
||||||
|
*/
|
||||||
|
typedef unspecified_type Originating_curve_iterator;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Creation
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! constructs an empty arrangement containing one unbounded face, which
|
||||||
|
* corresponds to the whole plane.
|
||||||
|
*/
|
||||||
|
Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>();
|
||||||
|
|
||||||
|
//! copy constructor.
|
||||||
|
Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>(const Self& other);
|
||||||
|
|
||||||
|
/*! constructs an empty arrangement that uses the given `traits` instance
|
||||||
|
* for performing the geometric predicates.
|
||||||
|
*/
|
||||||
|
Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>(Geometry_traits_2 *traits);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Assignment Methods
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! assignment operator.
|
||||||
|
Self& operator=(other);
|
||||||
|
|
||||||
|
//! assigns the contents of another arrangement.
|
||||||
|
void assign(const Self& other);
|
||||||
|
|
||||||
|
//! clears the arrangement.
|
||||||
|
void clear ();
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/*! \name Access Functions for Input Curves
|
||||||
|
* See the `Arrangement_2` reference pages for the full list.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! returns the number of input curves that induce the arrangement.
|
||||||
|
Size number_of_curves() const;
|
||||||
|
|
||||||
|
//! returns the begin-iterator of the curves inducing the arrangement.
|
||||||
|
Curve_iterator curves_begin();
|
||||||
|
|
||||||
|
//! returns the past-the-end iterator of the curves inducing the arrangement.
|
||||||
|
Curve_iterator curves_end();
|
||||||
|
|
||||||
|
//! returns the number of arrangement edges induced by the curve `ch`.
|
||||||
|
Size number_of_induced_edges(Curve_handle ch) const;
|
||||||
|
|
||||||
|
//! returns the begin-iterator of the edges induced by the curve `ch`.
|
||||||
|
Induced_edge_iterator induced_edges_begin(Curve_handle ch) const;
|
||||||
|
|
||||||
|
//! returns the past-the-end iterator of the edges induced by the curve `ch`.
|
||||||
|
Induced_edge_iterator induced_edges_end(Curve_handle ch) const;
|
||||||
|
|
||||||
|
//! returns the number of input curves that originate the edge `e`.
|
||||||
|
Size number_of_originating_curves(Halfedge_handle e) const;
|
||||||
|
|
||||||
|
//! returns the begin-iterator of the curves originating the edge `e`.
|
||||||
|
Originating_curve_iterator originating_curves_begin(Halfedge_handle e) const;
|
||||||
|
|
||||||
|
//! returns the past-the-end iterator of the curves originating the edge `e`.
|
||||||
|
Originating_curve_iterator originating_curves_end(Halfedge_handle e) const;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/*! \name Modifying Arrangement Edges
|
||||||
|
* The following functions override their counterparts in the
|
||||||
|
* `Arrangement_2` class, as they also maintain the cross-relationships
|
||||||
|
* between the input curves and the edges they induce.
|
||||||
|
*
|
||||||
|
* See the `Arrangement_2` reference pages for the full list of functions
|
||||||
|
* for modifying arrangement vertices
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! splits the edge `e` into two edges (more precisely, into two halfedge
|
||||||
|
* pairs), at a given split point `p`. The function returns a handle for the
|
||||||
|
* halfedge whose source is the same as `e->source()` and whose target vertex
|
||||||
|
* is the split point.
|
||||||
|
* \pre `p` lies in the interior of the curve associated with `e`.
|
||||||
|
*/
|
||||||
|
Halfedge_handle split_edge(Halfedge_handle e, const Point_2& p);
|
||||||
|
|
||||||
|
/*! merges the edges represented by `e1` and `e2` into a single edge. The
|
||||||
|
* function returns a handle for one of the merged halfedges.
|
||||||
|
* \pre `e1` and `e2` share a common end-vertex, of degree \f$ 2\f$, and the
|
||||||
|
* \f$ x\f$-monotone curves associated with `e1` and `e2` are mergeable
|
||||||
|
* into a single \f$ x\f$-monotone curves.
|
||||||
|
*/
|
||||||
|
Halfedge_handle merge_edge(Halfedge_handle e1, Halfedge_handle e2);
|
||||||
|
|
||||||
|
/*! removes the edge `e` from the arrangement. Since the `e` may be the only
|
||||||
|
* edge incident to its source vertex (or its target vertex), this vertex can
|
||||||
|
* be removed as well. The flags `remove_source` and `remove_target` indicate
|
||||||
|
* whether the endpoints of `e` should be removed, or whether they should be
|
||||||
|
* left as isolated vertices in the arrangement. If the operation causes two
|
||||||
|
* faces to merge, the merged face is returned. Otherwise, the face to which
|
||||||
|
* the edge was incident is returned.
|
||||||
|
*/
|
||||||
|
Face_handle remove_edge(Halfedge_handle e, bool remove_source = true,
|
||||||
|
bool remove_target = true);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}; /* end Arrangement_on_surface_with_history_2 */
|
||||||
|
|
||||||
|
/*! \ingroup PkgArrangement2Insert
|
||||||
|
*
|
||||||
|
* Inserts the given curve `c` into the arrangement with history `arr`, and
|
||||||
|
* returns a handle to the inserted curve. `c` is subdivided into \f$
|
||||||
|
* x\f$-monotone subcurves (and perhaps isolated points). Each subcurve is in
|
||||||
|
* turn inserted into the arrangement by locating its left endpoint and
|
||||||
|
* computing its zone until reaching the right endpoint.
|
||||||
|
*
|
||||||
|
* The given point-location object `pl` is used to locate the left endpoints of
|
||||||
|
* the \f$ x\f$-monotone curves. By default, the function uses the "walk along
|
||||||
|
* line" point-location strategy - namely an instance of the class
|
||||||
|
* `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`.
|
||||||
|
*
|
||||||
|
* \pre If provided, `pl` is attached to the given arrangement `arr`.
|
||||||
|
*/
|
||||||
|
template<typename GeometryTraits_2, typename TopologyTraits,
|
||||||
|
typename PointLocation>
|
||||||
|
typename Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>::Curve_handle
|
||||||
|
insert (Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>& arr,
|
||||||
|
const typename Traits::Curve_2& c,
|
||||||
|
const PointLocation& pl = walk_pl);
|
||||||
|
|
||||||
|
/*! \ingroup PkgArrangement2Insert
|
||||||
|
* Aggregately inserts the curves in the range `[first,last)` into the
|
||||||
|
* arrangement with history `arr` using the sweep-line framework.
|
||||||
|
*/
|
||||||
|
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||||
|
typename InputIterator>
|
||||||
|
void insert(Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits>& arr,
|
||||||
|
InputIterator first, InputIterator last);
|
||||||
|
|
||||||
|
/*! \ingroup PkgArrangement2Funcs
|
||||||
|
*
|
||||||
|
* Removes a given curve from a given arrangement.
|
||||||
|
*
|
||||||
|
* The curve is specified by its handle `ch`, from the arrangement `arr`, by
|
||||||
|
* deleting all the edges it induces. The function returns the number of
|
||||||
|
* deleted edges.
|
||||||
|
*/
|
||||||
|
template <typename GeometryTraits_2, typename TopologyTraits>
|
||||||
|
Size remove_curve(Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits>& arr,
|
||||||
|
typename Arrangement_on_surface_with_history_2<Geometry_traits_2, TopologyTraits>::Curve_handle ch);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \addtogroup PkgArrangement2Overlay
|
||||||
|
*
|
||||||
|
* Computes the overlay of two arrangements with history `arr1` and `arr2`, and
|
||||||
|
* sets the output arrangement with history `res` to represent the overlaid
|
||||||
|
* arrangement. The function also constructs a consolidated set of curves that
|
||||||
|
* induce `res`. \pre `res` does not refer to either `arr1` or `arr2` (that is,
|
||||||
|
* "self overlay" is not supported).
|
||||||
|
*/
|
||||||
|
template <typename GeometryTraits_2, typename TopologyTraits1,
|
||||||
|
typename TopologyTraits12, typename ResTopologyTraits,
|
||||||
|
typename OverlayTraits>
|
||||||
|
void overlay(const Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits1>& arr1,
|
||||||
|
const Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits12>& arr2,
|
||||||
|
Arrangement_on_surface_with_history_2<GeometryTraits_2, ResTopologyTraits>& res,
|
||||||
|
OverlayTraits& ovl_tr);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\addtogroup PkgArrangement2Overlay
|
||||||
|
|
||||||
|
Computes the (simple) overlay of two arrangements with history `arr1`
|
||||||
|
and `arr2`, and sets the output arrangement with history `res` to
|
||||||
|
represent the overlaid arrangement. The function also constructs a
|
||||||
|
consolidated set of curves that induce `res`. It employs the default
|
||||||
|
overlay-traits, which practically does nothing.
|
||||||
|
\pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" is not supported).
|
||||||
|
*/
|
||||||
|
template <typename GeometryTraits_2, typename TopologyTraits1,
|
||||||
|
typename TopologyTraits2, typename ResTopologyTraits>
|
||||||
|
void overlay(const Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits1>& arr1,
|
||||||
|
const Arrangement_on_surface_with_history_2<GeometryTraits_2, TopologyTraits2>& arr2,
|
||||||
|
Arrangement_on_surface_with_history_2<GeometryTraits_2, ResTopologyTraits>& res);
|
||||||
|
|
||||||
|
} /* namespace CGAL */
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -47,8 +46,8 @@ value of this parameter is by default
|
||||||
\sa `overlaying arrangements`
|
\sa `overlaying arrangements`
|
||||||
|
|
||||||
*/
|
*/
|
||||||
template< typename Traits, typename Dcel >
|
template <typename Traits, typename Dcel>
|
||||||
class Arrangement_with_history_2 : public Arrangement_2<Traits,Dcel> {
|
class Arrangement_with_history_2 : public Arrangement_2<Traits, Dcel> {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// \name Types
|
/// \name Types
|
||||||
|
|
@ -85,7 +84,6 @@ the curve type, as defined by the traits class.
|
||||||
*/
|
*/
|
||||||
typedef typename Traits_2::Curve_2 Curve_2;
|
typedef typename Traits_2::Curve_2 Curve_2;
|
||||||
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/*! \name
|
/*! \name
|
||||||
|
|
@ -356,4 +354,3 @@ template<typename Traits, typename Dcel1, typename Dcel2,
|
||||||
Arrangement_with_history_2<Traits,ResDcel>& res);
|
Arrangement_with_history_2<Traits,ResDcel>& res);
|
||||||
|
|
||||||
} /* namespace CGAL */
|
} /* namespace CGAL */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
namespace ArrTraits {
|
|
||||||
/*!
|
|
||||||
\ingroup PkgArrangement2ConceptsFunctionObjects
|
|
||||||
\cgalConcept
|
|
||||||
|
|
||||||
\cgalRefines AdaptableFunctor
|
|
||||||
|
|
||||||
\cgalHasModel ArrangementOpenBoundaryTraits_2::Compare_x_at_limit_2
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
class CompareXAtLimit_2 {
|
|
||||||
public:
|
|
||||||
|
|
||||||
/// \name Operations
|
|
||||||
/// A model of this concept must provide:
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Given a point `p`, an \f$ x\f$-monotone curve `xcv`, and an
|
|
||||||
enumeration `ce` that specifies either the minimum or the
|
|
||||||
maximum end of the curve where the curve has a vertical asymptote,
|
|
||||||
compares the \f$ x\f$-coordinate of `p` and the \f$ x\f$-coordinate of the
|
|
||||||
limit of the curve at its specificed end. The variable `xcv`
|
|
||||||
identifies the parametric curve \f$ C(t) = (X(t),Y(t))\f$ defined over an
|
|
||||||
open or half-open interval with endpoints \f$ 0\f$ and \f$ 1\f$. The
|
|
||||||
enumeration `ce` identifies an open end \f$ d \in\{0,1\}\f$ of \f$ C\f$.
|
|
||||||
Formally, compares the \f$ x\f$-coordinate of `p` and
|
|
||||||
\f$ \lim_{t \rightarrow d} X(t)\f$. Returns `SMALLER`, `EQUAL`, or
|
|
||||||
`LARGER` accordingly.
|
|
||||||
\pre `parameter_space_in_y_2`(`xcv`, `ce`) \f$ \neq\f$ `ARR_INTERIOR`.
|
|
||||||
\pre If the parameter space is unbounded, \f$ C\f$ has a vertical asymptote at its \f$ d\f$-end; that is, `parameter_space_in_x_2`(`xcv`, `ce`) = `ARR_INTERIOR`.
|
|
||||||
*/
|
|
||||||
Comparison_result operator()(const ArrTraits::Point_2& p,
|
|
||||||
const ArrTraits::X_monotone_curve_2& xcv,
|
|
||||||
Arr_curve_end ce);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Given two \f$ x\f$-monotone curves `xcv1` and `xcv2` and two
|
|
||||||
indices `ce1` and `ce2` that specify either the minimum
|
|
||||||
or the maximum ends of `xcv1` and `xcv2`, respectively,
|
|
||||||
where the curves have vertical asymptotes, compares the
|
|
||||||
\f$ x\f$-coordinates of the limits of the curves at their specificed
|
|
||||||
ends. The variables `xcv1` and `xcv2` identify the
|
|
||||||
parametric curves \f$ C_1(t) = (X_1(t),Y_1(t))\f$ and
|
|
||||||
\f$ C_2(t) = (X_2(t),Y_2(t))\f$, respectively, defined over open or
|
|
||||||
half-open intervals with endpoints \f$ 0\f$ and \f$ 1\f$. The indices
|
|
||||||
`ce1` and `ce2` identify open ends \f$ d_1 \in\{0,1\}\f$ and
|
|
||||||
\f$ d_2 \in\{0,1\}\f$ of \f$ C_1\f$ and \f$ C_2\f$, respectively. Formally,
|
|
||||||
compares \f$ \lim_{t \rightarrow d_1} X_1(t)\f$ and
|
|
||||||
\f$ \lim_{t \rightarrow d_2} X_2(t)\f$. Returns `SMALLER`, `EQUAL`,
|
|
||||||
or `LARGER` accordingly.
|
|
||||||
\pre `parameter_space_in_y_2`(`xcv1`, `ce1`) \f$ \neq\f$ `ARR_INTERIOR`.
|
|
||||||
\pre `parameter_space_in_y_2`(`xcv2`, `ce2`) \f$ \neq\f$ `ARR_INTERIOR`.
|
|
||||||
\pre If the parameter space is unbounded, \f$ C_1\f$ has a vertical asymptote at its respective end; that is,
|
|
||||||
`parameter_space_in_x_2`(`xcv1`, `ce1`) = `ARR_INTERIOR`.
|
|
||||||
\pre If the parameter space is unbounded, \f$ C_2\f$ has a vertical asymptote at its respective end; that is,
|
|
||||||
`parameter_space_in_x_2`(`xcv2`, `ce2`) = `ARR_INTERIOR`.
|
|
||||||
*/
|
|
||||||
Comparison_result operator()(const ArrTraits::X_monotone_curve_2& xcv1,
|
|
||||||
Arr_curve_end ce1,
|
|
||||||
const ArrTraits::X_monotone_curve_2& xcv2,
|
|
||||||
Arr_curve_end ce2);
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
}; /* end ArrTraits::CompareXAtLimit_2 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -5,11 +5,11 @@ namespace ArrTraits {
|
||||||
|
|
||||||
\cgalRefines AdaptableTernaryFunction
|
\cgalRefines AdaptableTernaryFunction
|
||||||
|
|
||||||
\cgalHasModel ArrangementOpenBoundaryTraits_2::Compare_x_near_limit_2
|
\cgalHasModel ArrangementOpenBoundaryTraits_2::Compare_x_near_boundary_2
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class CompareXNearLimit_2 {
|
class CompareXNearBoundary_2 {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// \name Operations
|
/// \name Operations
|
||||||
|
|
@ -40,6 +40,6 @@ Arr_curve_end ce);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
}; /* end ArrTraits::CompareXNearLimit_2 */
|
}; /* end ArrTraits::CompareXNearBoundary_2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
namespace ArrTraits {
|
||||||
|
/*!
|
||||||
|
\ingroup PkgArrangement2ConceptsFunctionObjects
|
||||||
|
\cgalConcept
|
||||||
|
|
||||||
|
\cgalRefines AdaptableFunctor
|
||||||
|
|
||||||
|
\cgalHasModel ArrangementOpenBoundaryTraits_2::Compare_x_on_boundary_2
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CompareXOnBoundary_2 {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// \name Operations
|
||||||
|
/// A model of this concept must provide:
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Given a point `p`, an \f$ x\f$-monotone curve `xcv`, and an
|
||||||
|
enumeration `ce` that specifies either the minimum or the
|
||||||
|
maximum end of the curve where the curve has a vertical asymptote,
|
||||||
|
compares the \f$ x\f$-coordinate of `p` and the \f$ x\f$-coordinate of the
|
||||||
|
limit of the curve at its specificed end. The variable `xcv`
|
||||||
|
identifies the parametric curve \f$ C(t) = (X(t),Y(t))\f$ defined over an
|
||||||
|
open or half-open interval with endpoints \f$ 0\f$ and \f$ 1\f$. The
|
||||||
|
enumeration `ce` identifies an open end \f$ d \in\{0,1\}\f$ of \f$ C\f$.
|
||||||
|
Formally, compares the \f$ x\f$-coordinate of `p` and
|
||||||
|
\f$ \lim_{t \rightarrow d} X(t)\f$. Returns `SMALLER`, `EQUAL`, or
|
||||||
|
`LARGER` accordingly.
|
||||||
|
\pre `parameter_space_in_y_2`(`xcv`, `ce`) \f$ \neq\f$ `ARR_INTERIOR`.
|
||||||
|
\pre If the parameter space is unbounded, \f$ C\f$ has a vertical asymptote at its \f$ d\f$-end; that is, `parameter_space_in_x_2`(`xcv`, `ce`) = `ARR_INTERIOR`.
|
||||||
|
*/
|
||||||
|
Comparison_result operator()(const ArrTraits::Point_2& p,
|
||||||
|
const ArrTraits::X_monotone_curve_2& xcv,
|
||||||
|
Arr_curve_end ce);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Given two \f$ x\f$-monotone curves `xcv1` and `xcv2` and two
|
||||||
|
indices `ce1` and `ce2` that specify either the minimum
|
||||||
|
or the maximum ends of `xcv1` and `xcv2`, respectively,
|
||||||
|
where the curves have vertical asymptotes, compares the
|
||||||
|
\f$ x\f$-coordinates of the limits of the curves at their specificed
|
||||||
|
ends. The variables `xcv1` and `xcv2` identify the
|
||||||
|
parametric curves \f$ C_1(t) = (X_1(t),Y_1(t))\f$ and
|
||||||
|
\f$ C_2(t) = (X_2(t),Y_2(t))\f$, respectively, defined over open or
|
||||||
|
half-open intervals with endpoints \f$ 0\f$ and \f$ 1\f$. The indices
|
||||||
|
`ce1` and `ce2` identify open ends \f$ d_1 \in\{0,1\}\f$ and
|
||||||
|
\f$ d_2 \in\{0,1\}\f$ of \f$ C_1\f$ and \f$ C_2\f$, respectively. Formally,
|
||||||
|
compares \f$ \lim_{t \rightarrow d_1} X_1(t)\f$ and
|
||||||
|
\f$ \lim_{t \rightarrow d_2} X_2(t)\f$. Returns `SMALLER`, `EQUAL`,
|
||||||
|
or `LARGER` accordingly.
|
||||||
|
\pre `parameter_space_in_y_2`(`xcv1`, `ce1`) \f$ \neq\f$ `ARR_INTERIOR`.
|
||||||
|
\pre `parameter_space_in_y_2`(`xcv2`, `ce2`) \f$ \neq\f$ `ARR_INTERIOR`.
|
||||||
|
\pre If the parameter space is unbounded, \f$ C_1\f$ has a vertical asymptote at its respective end; that is,
|
||||||
|
`parameter_space_in_x_2`(`xcv1`, `ce1`) = `ARR_INTERIOR`.
|
||||||
|
\pre If the parameter space is unbounded, \f$ C_2\f$ has a vertical asymptote at its respective end; that is,
|
||||||
|
`parameter_space_in_x_2`(`xcv2`, `ce2`) = `ARR_INTERIOR`.
|
||||||
|
*/
|
||||||
|
Comparison_result operator()(const ArrTraits::X_monotone_curve_2& xcv1,
|
||||||
|
Arr_curve_end ce1,
|
||||||
|
const ArrTraits::X_monotone_curve_2& xcv2,
|
||||||
|
Arr_curve_end ce2);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}; /* end ArrTraits::CompareXOnBoundary_2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -16,18 +16,27 @@ public:
|
||||||
/// A model of this concept must provide:
|
/// A model of this concept must provide:
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*!
|
/*! computes the intersections of `xc1` and `xc2` and writes them <I>in an
|
||||||
computes the intersections of `xc1` and `xc2` and
|
* ascending lexicographic \f$ xy\f$-order</I> into the output iterator
|
||||||
inserts them <I>in an ascending lexicographic \f$ xy\f$-order</I> into the
|
* `oi`. The type of a value written into `oi` must be convertible to
|
||||||
output iterator `oi`. The value-type of `Output_iterator` is
|
* `CGAL::Object`. The value itself wraps either a value of type
|
||||||
`CGAL::Object`, where each `Object` wraps either a
|
* `pair<ArrTraits::Point_2,ArrTraits::Multiplicity>` or a value of type
|
||||||
`pair<ArrTraits::Point_2,ArrTraits::Multiplicity>` object, which
|
* `ArrTraits::X_monotone_curve_2`. A value of of the former type represents an
|
||||||
represents an intersection point with its multiplicity (in case the
|
* intersection point with its multiplicity; in case the multiplicity is
|
||||||
multiplicity is undefined or unknown, it should be set to \f$ 0\f$) or an
|
* undefined or unknown, it should be set to \f$ 0\f$). A value of the latter
|
||||||
`ArrTraits::X_monotone_curve_2` object, representing an
|
* type representing an overlapping subcurve of `xc1` and `xc2`. The operator
|
||||||
overlapping subcurve of `xc1` and `xc2`. The operator
|
* returns a past-the-end iterator for the output sequence.
|
||||||
returns a past-the-end iterator for the output sequence.
|
*
|
||||||
*/
|
* A special case may occur when the parameter space of the surface, the
|
||||||
|
* arrangement is embedded on, is identified on the left and right sides of the
|
||||||
|
* boundary. An intersection point that lies on the identification curve,
|
||||||
|
* between two \f$X\f$-monotone curves that intersect at their left and right
|
||||||
|
* ends must be ignored. Consider two \f$X\f$-monotone curves that intersect at
|
||||||
|
* their left and right ends, respectively, at a point \f$p\f$ that lies on the
|
||||||
|
* identification curve. If, for example, the number of intersections between
|
||||||
|
* these two curves is greater than 1, the order of intersections is
|
||||||
|
* non-deterministic.
|
||||||
|
*/
|
||||||
Output_iterator operator()(ArrTraits::X_monotone_curve_2 xc1,
|
Output_iterator operator()(ArrTraits::X_monotone_curve_2 xc1,
|
||||||
ArrTraits::X_monotone_curve_2 xc2,
|
ArrTraits::X_monotone_curve_2 xc2,
|
||||||
Output_iterator& oi);
|
Output_iterator& oi);
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ point.
|
||||||
\cgalHasModel `CGAL::Arr_polyline_traits_2<SegmentTraits_2>`
|
\cgalHasModel `CGAL::Arr_polyline_traits_2<SegmentTraits_2>`
|
||||||
\cgalHasModel `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
\cgalHasModel `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
||||||
|
|
||||||
\sa ArrangementConstructXMonotoneCurveTraits_2`,
|
\sa `ArrangementConstructXMonotoneCurveTraits_2`,
|
||||||
ArrangementXMonotoneTraits_2`, and
|
`ArrangementXMonotoneTraits_2`, and
|
||||||
`ArrangementTraits_2`
|
`ArrangementTraits_2`
|
||||||
*/
|
*/
|
||||||
class ArrangementApproximateTraits_2 {
|
class ArrangementApproximateTraits_2 {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementBottomSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach the bottom boundary
|
||||||
|
* side of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementHorizontalSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementLeftSideTraits_2`,
|
||||||
|
* `ArrangementRightSideTraits_2`, and
|
||||||
|
* `ArrangementTopSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementBottomSideTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementClosedBottomTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is closed
|
||||||
|
* on the left side and curves inserted into the arrangement are expected to
|
||||||
|
* reach this boundary side. A model of this concept can handle curves that
|
||||||
|
* reach the left boundary side when it is closed.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBottomSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementClosedLeftTraits_2`,
|
||||||
|
* `ArrangementClosedRightTraits_2`,
|
||||||
|
* `ArrangementClosedTopTraits_2`,
|
||||||
|
* `ArrangementOpenBottomTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementClosedBottomTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_closed_side_tag`.
|
||||||
|
typedef unspecified_type Bottom_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementClosedLeftTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is closed on
|
||||||
|
* the left side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* left boundary side when it is closed.
|
||||||
|
|
||||||
|
* \cgalRefines `ArrangementLeftSideTraits_2`
|
||||||
|
|
||||||
|
\sa `ArrangementClosedRightTraits_2`,
|
||||||
|
`ArrangementClosedBottomTraits_2`,
|
||||||
|
`ArrangementClosedTopTraits_2`,
|
||||||
|
`ArrangementOpenLeftTraits_2`,
|
||||||
|
`ArrangementContractedLeftTraits_2`, and
|
||||||
|
`ArrangementIdentifiedLeftTraits_2`,
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementClosedLeftTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/*! Must be convertible to `Arr_closed_side_tag`.
|
||||||
|
*/
|
||||||
|
typedef unspecified_type Left_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementClosedRightTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is closed on
|
||||||
|
* the right side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* right boundary side when it is closed.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementRightSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementClosedLeftTraits_2`,
|
||||||
|
* `ArrangementClosedBottomTraits_2`,
|
||||||
|
* `ArrangementClosedTopTraits_2`,
|
||||||
|
* `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementContractedRightTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedRightTraits_2`,
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementClosedRightTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_closed_side_tag`.
|
||||||
|
typedef unspecified_type Right_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementClosedTopTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is closed on
|
||||||
|
* the top side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* top boundary side when it is closed.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementTopSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementClosedLeftTraits_2`,
|
||||||
|
* `ArrangementClosedRightTraits_2`,
|
||||||
|
* `ArrangementClosedBottomTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementContractedTopTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementClosedTopTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_closed_side_tag`.
|
||||||
|
typedef unspecified_type Top_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementContractedBottomTraits_2` must be used
|
||||||
|
* when the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* contracted on the bottom side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the bottom boundary side when it is contracted.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBottomSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementContractedLeftTraits_2`,
|
||||||
|
* `ArrangementContractedRightTraits_2`,
|
||||||
|
* `ArrangementContractedTopTraits_2`,
|
||||||
|
* `ArrangementClosedBottomTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementContractedBottomTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_contracted_side_tag`.
|
||||||
|
typedef unspecified_type Bottom_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementContractedLeftTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* contracted on the left side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the left boundary side when it is contracted.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementLeftSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementContractedRightTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`,
|
||||||
|
* `ArrangementContractedTopTraits_2`,
|
||||||
|
* `ArrangementOpenLeftTraits_2`,
|
||||||
|
* `ArrangementClosedLeftTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedLeftTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementContractedLeftTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_contracted_side_tag`.
|
||||||
|
typedef unspecified_type Left_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementContractedRightTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* contracted on the right side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the right boundary side when it is contracted.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementRightSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementContractedLeftTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`,
|
||||||
|
* `ArrangementContractedTopTraits_2`,
|
||||||
|
* `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementClosedRightTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedRightTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementContractedRightTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_contracted_side_tag`.
|
||||||
|
typedef unspecified_type Right_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementContractedTopTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* contracted on the top side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the top boundary side when it is contracted.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementTopSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementContractedLeftTraits_2`,
|
||||||
|
* `ArrangementContractedRightTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementSlosedTopTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementContractedTopTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_contracted_side_tag`.
|
||||||
|
typedef unspecified_type Top_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementHorizontalSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach either the bottom
|
||||||
|
* or top sizeds of the boundary of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBasicTraits_2`
|
||||||
|
*
|
||||||
|
* \cgalHasModel `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementVerticalSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementHorizontalSideTraits_2 {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::ParameterSpaceInX_2`.
|
||||||
|
typedef unspecified_type Parameter_space_in_x_2;
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::CompareXOnBoundary_2`.
|
||||||
|
typedef unspecified_type Compare_x_on_boundary_2;
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::CompareXNearBoundary_2`.
|
||||||
|
typedef unspecified_type Compare_x_near_boundary_2;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
Parameter_space_in_x_2 parameter_space_in_x_2_object() const;
|
||||||
|
Compare_x_on_boundary_2 compare_x_on_boundary_2_object() const;
|
||||||
|
Compare_x_near_boundary_2 compare_x_near_boundary_2_object() const;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}; /* end ArrangementHorizontalSideTraits_2 */
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementIdentifiedBottomTraits_2` must be used
|
||||||
|
* when the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* identified on the bottom side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the bottom boundary side when it is identified.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBottomSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementIdentifiedRightTraits_2`,
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`,
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`,
|
||||||
|
* `ArrangementOpenBottomTraits_2`,
|
||||||
|
* `ArrangementClosedBottomTraits_2`, and
|
||||||
|
* `ArrangementConstractedBottomTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementIdentifiedBottomTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_identified_side_tag`.
|
||||||
|
typedef unspecified_type Bottom_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementIdentifiedLeftTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* identified on the left side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the left boundary side when it is identified.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementLeftSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementIdentifiedRightTraits_2`,
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`,
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`,
|
||||||
|
* `ArrangementOpenLeftTraits_2`,
|
||||||
|
* `ArrangementClosedLeftTraits_2`, and
|
||||||
|
* `ArrangementConstractedLeftTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementIdentifiedLeftTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_identified_side_tag`.
|
||||||
|
typedef unspecified_type Left_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementIdentifiedRightTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* identified on the right side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the right boundary side when it is identified.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementRightSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementIdentifiedLeftTraits_2`,
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`,
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`,
|
||||||
|
* `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementClosedRightTraits_2`, and
|
||||||
|
* `ArrangementConstractedRightTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementIdentifiedRightTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_identified_side_tag`.
|
||||||
|
typedef unspecified_type Right_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementIdentifiedTopTraits_2` must be used when
|
||||||
|
* the parameter space of the surface, the arrangement is embedded on, is
|
||||||
|
* identified on the top side and curves inserted into the arrangement are
|
||||||
|
* expected to reach this boundary side. A model of this concept can handle
|
||||||
|
* curves that reach the top boundary side when it is identified.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementTopSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementIdentifiedLeftTraits_2`,
|
||||||
|
* `ArrangementIdentifiedRightTraits_2`,
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementClosedTopTraits_2`, and
|
||||||
|
* `ArrangementConstractedTopTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementIdentifiedTopTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_identified_side_tag`.
|
||||||
|
typedef unspecified_type Top_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementLeftSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach the left boundary
|
||||||
|
* side of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementVerticalSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementRightSideTraits_2`,
|
||||||
|
* `ArrangementBottomSideTraits_2`, and
|
||||||
|
* `ArrangementTopSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementLeftSideTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementOpenBottomTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is open on
|
||||||
|
* the bottom side and curves inserted into the arrangement are expected to
|
||||||
|
* reach this boundary side. A model of this concept can handle curves that
|
||||||
|
* reach the bottom boundary side when it is open.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBottomSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementOpenLeftTraits_2`,
|
||||||
|
* `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementClosedBottomTraits_2`,
|
||||||
|
* `ArrangementContractedBottomTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedBottomTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementOpenBottomTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_open_side_tag`.
|
||||||
|
typedef unspecified_type Bottom_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -1,55 +1,56 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\ingroup PkgArrangement2ConceptsTraits
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
\cgalConcept
|
* \cgalConcept
|
||||||
|
*
|
||||||
Several predicates are required to handle \f$ x\f$-monotone curves that
|
* Several predicates are required to handle \f$ x\f$-monotone curves that
|
||||||
approach infinity and thus approach the boundary of the parameter
|
* approach infinity and thus approach the boundary of the parameter
|
||||||
space. These predicates are sufficient to handle not only curves
|
* space. These predicates are sufficient to handle not only curves embedded in
|
||||||
embedded in an unbounded parameter space, but also curves embedded
|
* an unbounded parameter space, but also curves embedded in a bounded parameter
|
||||||
in a bounded parameter space with open boundaries. Models of the
|
* space with open boundaries. Models of the concept
|
||||||
concept `ArrangementOpenBoundaryTraits_2` handle curves that approach the boundary of a
|
* `ArrangementOpenBoundaryTraits_2` handle curves that approach the boundary of
|
||||||
parameter space. This concept refines the concept
|
* a parameter space. This concept refines the concept
|
||||||
`ArrangementBasicTraits_2`. The arrangement template
|
* `ArrangementBasicTraits_2`. The arrangement template instantiated with a
|
||||||
instantiated with a traits class that models this concept can handle
|
* traits class that models this concept can handle \f$ x\f$-monotone curves
|
||||||
\f$ x\f$-monotone curves that are unbounded in any direction. The concept
|
* that are unbounded in any direction. The concept
|
||||||
`ArrangementOpenBoundaryTraits_2`, nontheless, also supports planar \f$ x\f$-monotone curves
|
* `ArrangementOpenBoundaryTraits_2`, nontheless, also supports planar \f$
|
||||||
that reach the boundary of an open yet bounded parameter space.
|
* x\f$-monotone curves that reach the boundary of an open yet bounded parameter
|
||||||
|
* space.
|
||||||
An \f$ x\f$-monotone curve may be <I>closed</I>, in which case its endpoints
|
*
|
||||||
are representable as `Point_2` objects, or <I>open</I> at the
|
* An \f$ x\f$-monotone curve may be <I>closed</I>, in which case its endpoints
|
||||||
boundary of the parameter space. It can have one open end and one
|
* are representable as `Point_2` objects, or <I>open</I> at the boundary of the
|
||||||
closed end (e.g., a ray). The nature of the \f$ x\f$-monotone curves,
|
* parameter space. It can have one open end and one closed end (e.g., a
|
||||||
whether they are expected to be closed or not at any one of the four
|
* ray). The nature of the \f$ x\f$-monotone curves, whether they are expected
|
||||||
boundary-sides, is conveyed through the definition of the four nested
|
* to be closed or not at any one of the four boundary-sides, is conveyed
|
||||||
types `Left_side_category`, `Right_side_category`,
|
* through the definition of the four nested types `Left_side_category`,
|
||||||
`Bottom_side_category`, and `Top_side_category`. If some curves
|
* `Right_side_category`, `Bottom_side_category`, and `Top_side_category`. If
|
||||||
handled by a model of the concept `ArrangementOpenBoundaryTraits_2` are expected to be open
|
* some curves handled by a model of the concept
|
||||||
on the left, the nested type `Left_side_category` must be convertible
|
* `ArrangementOpenBoundaryTraits_2` are expected to be open on the left, the
|
||||||
to `CGAL::Arr_open_side_tag`. Similarly, if some curves handled by the
|
* nested type `Left_side_category` must be convertible to
|
||||||
concept are expected to be open on the right, open at the bottom, or
|
* `Arr_open_side_tag`. Similarly, if some curves handled by the concept are
|
||||||
open at the top, the corresponding nested type must be convertible to
|
* expected to be open on the right, open at the bottom, or open at the top, the
|
||||||
`CGAL::Arr_open_side_tag`. A model of the concept `ArrangementOpenBoundaryTraits_2` must have
|
* corresponding nested type must be convertible to `Arr_open_side_tag`. A model
|
||||||
all the four categories convertible to
|
* of the concept `ArrangementOpenBoundaryTraits_2` must have all the four
|
||||||
`CGAL::Arr_open_side_tag`.\cgalFootnote{We intend to introduce more concepts that require only a subset of the categories to be convertible to `Arr_open_side_tag`.} In this case the <span class="textsc">Dcel</span> of the arrangement
|
* categories convertible to `Arr_open_side_tag`.\cgalFootnote{We intend to
|
||||||
instantiated with the model is initialized with an implicit bounding
|
* introduce more concepts that require only a subset of the categories to be
|
||||||
rectangle. When the parameter space is bounded, it is the exact
|
* convertible to `Arr_open_side_tag`.} In this case the <span
|
||||||
geometric embedding of the implicit bounding rectangle.
|
* class="textsc">Dcel</span> of the arrangement instantiated with the model is
|
||||||
|
* initialized with an implicit bounding rectangle. When the parameter space is
|
||||||
\cgalRefines `ArrangementBasicTraits_2`
|
* bounded, it is the exact geometric embedding of the implicit bounding
|
||||||
|
* rectangle.
|
||||||
\cgalHasModel `CGAL::Arr_linear_traits_2<Kernel>`
|
*
|
||||||
\cgalHasModel `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
* \cgalRefines `ArrangementBasicTraits_2`
|
||||||
\cgalHasModel `CGAL::Arr_algebraic_segment_traits_2<Coefficient>`
|
*
|
||||||
\cgalHasModel `CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>`
|
* \cgalHasModel `CGAL::Arr_linear_traits_2<Kernel>`
|
||||||
\cgalHasModel `CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>`
|
* \cgalHasModel `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
||||||
|
* \cgalHasModel `CGAL::Arr_algebraic_segment_traits_2<Coefficient>`
|
||||||
\sa `ArrangementBasicTraits_2`
|
* \cgalHasModel `CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>`
|
||||||
\sa `ArrangementXMonotoneTraits_2`
|
* \cgalHasModel `CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>`
|
||||||
\sa `ArrangementLandmarkTraits_2`
|
*
|
||||||
\sa `ArrangementTraits_2`
|
* \sa `ArrangementBasicTraits_2`
|
||||||
|
* \sa `ArrangementXMonotoneTraits_2`
|
||||||
*/
|
* \sa `ArrangementLandmarkTraits_2`
|
||||||
|
* \sa `ArrangementTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
class ArrangementOpenBoundaryTraits_2 {
|
class ArrangementOpenBoundaryTraits_2 {
|
||||||
public:
|
public:
|
||||||
|
|
@ -151,17 +152,12 @@ Compare_y_near_boundary_2 compare_y_near_boundary_2_object() const;
|
||||||
*/
|
*/
|
||||||
Parameter_space_in_y_2 parameter_space_in_y_2_object() const;
|
Parameter_space_in_y_2 parameter_space_in_y_2_object() const;
|
||||||
|
|
||||||
/*!
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
*/
|
/// \name Accessing Functor Objects
|
||||||
Compare_x_at_limit_2 compare_x_at_limit_2_object() const;
|
/// @{
|
||||||
|
/// @}
|
||||||
/*!
|
|
||||||
|
|
||||||
*/
|
|
||||||
Compare_x_near_limit_2 compare_x_near_limit_2_object() const;
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
}; /* end ArrangementOpenBoundaryTraits_2 */
|
}; /* end ArrangementOpenBoundaryTraits_2 */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementOpenLeftTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is open on
|
||||||
|
* the left side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* left boundary side when it is open.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementLeftSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementOpenBottomTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementClosedLeftTraits_2`,
|
||||||
|
* `ArrangementContractedLeftTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedLeftTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementOpenLeftTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_open_side_tag`.
|
||||||
|
typedef unspecified_type Left_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementOpenRightTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is open on
|
||||||
|
* the right side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* right boundary side when it is open.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementRightSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementOpenLeftTraits_2`,
|
||||||
|
* `ArrangementOpenBottomTraits_2`,
|
||||||
|
* `ArrangementOpenTopTraits_2`,
|
||||||
|
* `ArrangementClosedRightTraits_2`,
|
||||||
|
* `ArrangementContractedRightTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedRightTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementOpenRightTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_open_side_tag`.
|
||||||
|
typedef unspecified_type Right_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* A model of the concept `ArrangementOpenTopTraits_2` must be used when the
|
||||||
|
* parameter space of the surface, the arrangement is embedded on, is open on
|
||||||
|
* the top side and curves inserted into the arrangement are expected to reach
|
||||||
|
* this boundary side. A model of this concept can handle curves that reach the
|
||||||
|
* top boundary side when it is open.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementTopSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementOpenLeftTraits_2`,
|
||||||
|
* `ArrangementOpenRightTraits_2`,
|
||||||
|
* `ArrangementOpenBottomTraits_2`,
|
||||||
|
* `ArrangementClosedTopTraits_2`,
|
||||||
|
* `ArrangementContractedTopTraits_2`, and
|
||||||
|
* `ArrangementIdentifiedTopTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementOpenTopTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//! Must be convertible to `Arr_open_side_tag`.
|
||||||
|
typedef unspecified_type Top_side_category;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementRightSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach the right boundary
|
||||||
|
* side of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementVerticalSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementLeftSideTraits_2`,
|
||||||
|
* `ArrangementBottomSideTraits_2`, and
|
||||||
|
* `ArrangementTopSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementRightSideTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* Models of the concept `ArrangementSphericalBoundaryTraits_2` handle curves on
|
||||||
|
* a sphere or a surface that is topological equivalent to a sphere. The sphere
|
||||||
|
* is oriented in such a way that the boundary of the rectangular parameter
|
||||||
|
* space, the sphere is the mapping of which, is identified on the left and
|
||||||
|
* right sides and contracted at the top and bottom sides. In other words,
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBasicTraits_2`
|
||||||
|
* \cgalRefines `ArrangementIdentifiedLeftTraits_2`
|
||||||
|
* \cgalRefines `ArrangementIdentifiedRightTraits_2`
|
||||||
|
* \cgalRefines `ArrangementContractedBottomTraits_2`
|
||||||
|
* \cgalRefines `ArrangementContractedTopTraits_2`
|
||||||
|
* \cgalRefines
|
||||||
|
*
|
||||||
|
* \cgalHasModel `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementOpenBoundaryTraits_2`
|
||||||
|
* \sa `ArrangementBasicTraits_2`
|
||||||
|
* \sa `ArrangementIdentifiedLeftTraits_2`
|
||||||
|
* \sa `ArrangementIdentifiedRightTraits_2`
|
||||||
|
* \sa `ArrangementContractedBottomTraits_2`
|
||||||
|
* \sa `ArrangementContractedTopTraits_2`
|
||||||
|
* \sa `ArrangementHorizontalSideTraits_2`
|
||||||
|
* \sa `ArrangementVerticalSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementSphericalBoundaryTraits_2 {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}; /* end ArrangementSphericalBoundaryTraits_2 */
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementTopSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach the top boundary
|
||||||
|
* side of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementHorizontalSideTraits_2`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementLeftSideTraits_2`,
|
||||||
|
* `ArrangementRightSideTraits_2`, and
|
||||||
|
* `ArrangementBottomSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementTopSideTraits_2 {
|
||||||
|
public:
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*!
|
||||||
|
* \ingroup PkgArrangement2ConceptsTraits
|
||||||
|
* \cgalConcept
|
||||||
|
*
|
||||||
|
* `ArrangementVerticalSideTraits_2` is an abstract concept. It generalizes all
|
||||||
|
* concepts that handle curves that either reach or approach either the left
|
||||||
|
* or right sizeds of the boundary of the parameter space.
|
||||||
|
*
|
||||||
|
* \cgalRefines `ArrangementBasicTraits_2`
|
||||||
|
*
|
||||||
|
* \cgalHasModel `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>`
|
||||||
|
*
|
||||||
|
* \sa `ArrangementVerticalSideTraits_2`
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArrangementVerticalSideTraits_2 {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// \name Categories
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Types
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Functor Types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::ParameterSpaceInX_2`.
|
||||||
|
typedef unspecified_type Parameter_space_in_y_2;
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::CompareXOnBoundary_2`.
|
||||||
|
typedef unspecified_type Compare_y_on_boundary_2;
|
||||||
|
|
||||||
|
/// models the concept `ArrTraits::CompareXNearBoundary_2`.
|
||||||
|
typedef unspecified_type Compare_y_near_boundary_2;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \name Accessing Functor Objects
|
||||||
|
/// @{
|
||||||
|
Parameter_space_in_y_2 parameter_space_in_y_2_object() const;
|
||||||
|
Compare_y_on_boundary_2 compare_y_on_boundary_2_object() const;
|
||||||
|
Compare_y_near_boundary_2 compare_y_near_boundary_2_object() const;
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}; /* end ArrangementHorizontalSideTraits_2 */
|
||||||
|
|
@ -111,13 +111,36 @@ implemented as peripheral classes or as free (global) functions.
|
||||||
- `ArrangementLandmarkTraits_2`
|
- `ArrangementLandmarkTraits_2`
|
||||||
- `ArrangementXMonotoneTraits_2`
|
- `ArrangementXMonotoneTraits_2`
|
||||||
- `ArrangementTraits_2`
|
- `ArrangementTraits_2`
|
||||||
|
- `ArrangementHorizontalSideTraits_2`
|
||||||
|
- `ArrangementVerticalSideTraits_2`
|
||||||
- `ArrangementOpenBoundaryTraits_2`
|
- `ArrangementOpenBoundaryTraits_2`
|
||||||
|
- `ArrangementSphericalBoundaryTraits_2`
|
||||||
- `ArrangementInputFormatter`
|
- `ArrangementInputFormatter`
|
||||||
- `ArrangementOutputFormatter`
|
- `ArrangementOutputFormatter`
|
||||||
- `ArrangementWithHistoryInputFormatter`
|
- `ArrangementWithHistoryInputFormatter`
|
||||||
- `ArrangementWithHistoryOutputFormatter`
|
- `ArrangementWithHistoryOutputFormatter`
|
||||||
- `ArrangementPointLocation_2`
|
- `ArrangementPointLocation_2`
|
||||||
- `ArrangementVerticalRayShoot_2`
|
- `ArrangementVerticalRayShoot_2`
|
||||||
|
- `ArrangementOpenLeftTraits_2`
|
||||||
|
- `ArrangementOpenRightTraits_2`
|
||||||
|
- `ArrangementOpenBottomTraits_2`
|
||||||
|
- `ArrangementOpenTopTraits_2`
|
||||||
|
- `ArrangementClosedLeftTraits_2`
|
||||||
|
- `ArrangementClosedRightTraits_2`
|
||||||
|
- `ArrangementClosedBottomTraits_2`
|
||||||
|
- `ArrangementClosedTopTraits_2`
|
||||||
|
- `ArrangementContractedLeftTraits_2`
|
||||||
|
- `ArrangementContractedRightTraits_2`
|
||||||
|
- `ArrangementContractedBottomTraits_2`
|
||||||
|
- `ArrangementContractedTopTraits_2`
|
||||||
|
- `ArrangementIdentifiedLeftTraits_2`
|
||||||
|
- `ArrangementIdentifiedRightTraits_2`
|
||||||
|
- `ArrangementIdentifiedBottomTraits_2`
|
||||||
|
- `ArrangementIdentifiedTopTraits_2`
|
||||||
|
- `ArrangementLeftSideTraits_2`
|
||||||
|
- `ArrangementRightSideTraits_2`
|
||||||
|
- `ArrangementBottomSideTraits_2`
|
||||||
|
- `ArrangementTopSideTraits_2`
|
||||||
|
|
||||||
## Geometric Object Concepts ##
|
## Geometric Object Concepts ##
|
||||||
|
|
||||||
|
|
@ -138,8 +161,8 @@ implemented as peripheral classes or as free (global) functions.
|
||||||
- `ArrTraits::Equal_2`
|
- `ArrTraits::Equal_2`
|
||||||
- `ArrTraits::ParameterSpaceInX_2`
|
- `ArrTraits::ParameterSpaceInX_2`
|
||||||
- `ArrTraits::ParameterSpaceInY_2`
|
- `ArrTraits::ParameterSpaceInY_2`
|
||||||
- `ArrTraits::CompareXAtLimit_2`
|
- `ArrTraits::CompareXOnBoundary_2`
|
||||||
- `ArrTraits::CompareXNearLimit_2`
|
- `ArrTraits::CompareXNearBoundary_2`
|
||||||
- `ArrTraits::CompareYNearBoundary_2`
|
- `ArrTraits::CompareYNearBoundary_2`
|
||||||
- `ArrTraits::Intersect_2`
|
- `ArrTraits::Intersect_2`
|
||||||
- `ArrTraits::Split_2`
|
- `ArrTraits::Split_2`
|
||||||
|
|
@ -151,10 +174,13 @@ implemented as peripheral classes or as free (global) functions.
|
||||||
|
|
||||||
## Classes ##
|
## Classes ##
|
||||||
|
|
||||||
|
|
||||||
|
- `CGAL::Arrangement_on_surface_2<GeometryTraits_2,TopologyTraits>`
|
||||||
|
- `CGAL::Arrangement_on_surface_with_history_2<GeometryTraits_2,TopologyTraits>`
|
||||||
- `CGAL::Arrangement_2<Traits,Dcel>`
|
- `CGAL::Arrangement_2<Traits,Dcel>`
|
||||||
|
- `CGAL::Arrangement_with_history_2<Traits,Dcel>`
|
||||||
- `CGAL::Arr_accessor<Arrangement>`
|
- `CGAL::Arr_accessor<Arrangement>`
|
||||||
- `CGAL::Arr_observer<Arrangement>`
|
- `CGAL::Arr_observer<Arrangement>`
|
||||||
- `CGAL::Arrangement_with_history_2<Traits,Dcel>`
|
|
||||||
- `CGAL::Arrangement_2::Vertex`
|
- `CGAL::Arrangement_2::Vertex`
|
||||||
- `CGAL::Arrangement_2::Halfedge`
|
- `CGAL::Arrangement_2::Halfedge`
|
||||||
- `CGAL::Arrangement_2::Face`
|
- `CGAL::Arrangement_2::Face`
|
||||||
|
|
@ -174,6 +200,7 @@ implemented as peripheral classes or as free (global) functions.
|
||||||
- `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
- `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
||||||
- `CGAL::Arr_Bezier_curve_traits_2<RatKernel,AlgKernel,NtTraits>`
|
- `CGAL::Arr_Bezier_curve_traits_2<RatKernel,AlgKernel,NtTraits>`
|
||||||
- `CGAL::Arr_algebraic_segment_traits_2<Coefficient>`
|
- `CGAL::Arr_algebraic_segment_traits_2<Coefficient>`
|
||||||
|
- `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel>`
|
||||||
- `CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>`
|
- `CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>`
|
||||||
- `CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>`
|
- `CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>`
|
||||||
- `CGAL::Arr_text_formatter<Arrangement>`
|
- `CGAL::Arr_text_formatter<Arrangement>`
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 928 B After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
|
@ -0,0 +1,16 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {\psframebox{\concept{ArrangementBasicTraits\_2}}}
|
||||||
|
<vert>[scaleby=0 1.6]{\psframebox{\concept{ArrangementXMonotoneTraits\_2}}}@axmt !axmt
|
||||||
|
.
|
||||||
|
\!axmt = <vert>[scaleby=0 1.6]{\psframebox{\concept{ArrangementTraits\_2}}}@at !at
|
||||||
|
.
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
|
@ -0,0 +1,652 @@
|
||||||
|
% ======== Font ===============================================================
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage{slantsc}
|
||||||
|
\usepackage{amssymb}
|
||||||
|
\usepackage{amsfonts}
|
||||||
|
\usepackage[english]{babel}
|
||||||
|
\usepackage[latin1]{inputenc}
|
||||||
|
\usepackage{pifont}
|
||||||
|
|
||||||
|
% ======== Math ===============================================================
|
||||||
|
\usepackage{amsmath,amscd,amsthm}
|
||||||
|
\usepackage{empheq}
|
||||||
|
|
||||||
|
% ======== pdf, url and hyperlink =============================================
|
||||||
|
% \usepackage{url}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage[hyphenbreaks]{breakurl}
|
||||||
|
|
||||||
|
% ======== Tables =============================================================
|
||||||
|
\usepackage{multirow}
|
||||||
|
\usepackage{multicol}
|
||||||
|
\usepackage{tabularx}
|
||||||
|
|
||||||
|
% ======== Listings ===========================================================
|
||||||
|
\usepackage{alltt}
|
||||||
|
\usepackage{listings}
|
||||||
|
\usepackage{mdwlist}
|
||||||
|
|
||||||
|
% ======== Graphics ===========================================================
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\usepackage{etex}
|
||||||
|
% \usepackage{pst-all}
|
||||||
|
\usepackage{pstricks,pst-node,pst-tree,pst-text,pst-3d,pst-plot,pst-eucl}
|
||||||
|
\usepackage{pst-xkey,pst-jtree}
|
||||||
|
\usepackage{pst-lens}
|
||||||
|
\usepackage{colordvi}
|
||||||
|
% The tikz package loads the graphicx package, so no need to load it again.
|
||||||
|
% Trying to load it with different options will cause the "Option
|
||||||
|
% clash" error. Use \PassOptionsToPackage{<options>}{graphicx} before
|
||||||
|
% loading tikz to pass any additional options to the internally loaded
|
||||||
|
% graphicx.
|
||||||
|
\usepackage{tikz}
|
||||||
|
\usepackage{pgfplots}
|
||||||
|
\usepackage{mathptmx}
|
||||||
|
\usetikzlibrary{calc,patterns,decorations.pathmorphing,decorations.markings,matrix,fit,decorations.pathreplacing,arrows,automata,positioning,shapes,chains,spy}
|
||||||
|
%\usetikzlibrary{quotes,angles,graph}
|
||||||
|
\usetikzlibrary{intersections,through,backgrounds}
|
||||||
|
\usepackage{tikz-3dplot}
|
||||||
|
\tikzset{%
|
||||||
|
invisible/.style={opacity=0},
|
||||||
|
only/.code args={<#1>#2}{\only<#1>{\pgfkeysalso{#2}}},
|
||||||
|
alt/.code args={<#1>#2#3}{\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}},
|
||||||
|
temporal/.code args={<#1>#2#3#4}{%
|
||||||
|
\temporal<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}{\pgfkeysalso{#4}}},
|
||||||
|
point/.style={circle,inner sep=1.5pt,minimum size=1.5pt,draw,fill=#1},
|
||||||
|
point/.default=red
|
||||||
|
}
|
||||||
|
\makeatletter
|
||||||
|
\def\nodesDef{\@ifnextchar[{\@nodesDefWith}{\@nodesDefWithout}}
|
||||||
|
\def\@nodesDefWith[#1]#2{\foreach \c in #2 { \node[point=#1] (n\c) at (\c) {}; }}
|
||||||
|
\def\@nodesDefWithout#1{\foreach \c in #1 { \node[point] (n\c) at (\c) {}; }}
|
||||||
|
\makeatother
|
||||||
|
% #1 --- list of points
|
||||||
|
% #2 --- list of segments
|
||||||
|
% #3 --- first point
|
||||||
|
% #4 --- draw color
|
||||||
|
% #5 --- fill color
|
||||||
|
\newcommand{\directedPolygon}[5]{
|
||||||
|
\fill[#4] (#3) \foreach \pa/\pb in #2 {-- (\pb)};
|
||||||
|
\nodesDef{#1}
|
||||||
|
\foreach \pa/\pb in #2 {
|
||||||
|
\draw[thick,#5,->,>=stealth] (n\pa) -- (n\pb);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
%
|
||||||
|
% ======== Miscellaneous ======================================================
|
||||||
|
\usepackage{fancybox}
|
||||||
|
\usepackage{calc}
|
||||||
|
\usepackage{xspace}
|
||||||
|
% \usepackage{picins}
|
||||||
|
\usepackage[absolute,overlay]{textpos}
|
||||||
|
\usepackage{ifthen}
|
||||||
|
\usepackage{etoolbox}
|
||||||
|
%
|
||||||
|
|
||||||
|
%\usepackage{pgfpages}
|
||||||
|
%\pgfpagesuselayout{4 on 1}[letterpaper,border shrink=5mm,landscape]
|
||||||
|
%\pgfpagesuselayout{4 on 1}[a4paper,landscape]
|
||||||
|
|
||||||
|
% ======== DO NOT MOVE - Reset awkward values changed by pst-jtree ============
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
%
|
||||||
|
% ======== Figures ============================================================
|
||||||
|
\DeclareGraphicsExtensions{.png}
|
||||||
|
\DeclareGraphicsExtensions{.jpg}
|
||||||
|
% \DeclareGraphicsRule{.png}{eps}{.bb}{`convert -compress JPEG #1 eps2:-}
|
||||||
|
\DeclareGraphicsRule{.png}{eps}{.bb}{`convert #1 eps2:-}
|
||||||
|
\DeclareGraphicsRule{.jpg}{eps}{.bb}{`convert #1 eps2:-}
|
||||||
|
%
|
||||||
|
% ======== Bibliography =======================================================
|
||||||
|
\newcommand{\etalchar}[1]{$^{#1}$}
|
||||||
|
%
|
||||||
|
% ======== colors =============================================================
|
||||||
|
\definecolor{lightred}{rgb}{1,0.8,0.8}
|
||||||
|
\definecolor{lightblue}{rgb}{0.8,0.8,1}
|
||||||
|
\definecolor{mediumred}{rgb}{1,0.5,0.5}
|
||||||
|
\definecolor{mediumblue}{rgb}{0.5,0.5,1}
|
||||||
|
\definecolor{darkred}{rgb}{0.5,0,0}
|
||||||
|
\definecolor{darkblue}{rgb}{0,0,0.5}
|
||||||
|
\definecolor{darkcyan}{rgb}{0,0.5,0.5}
|
||||||
|
\definecolor{lightcyan}{rgb}{0.5,1,1}
|
||||||
|
\definecolor{lightyellow}{rgb}{0.9,0.9,0.7}
|
||||||
|
\definecolor{olivegreen}{rgb}{.42,.55,.14}
|
||||||
|
\definecolor{seagreen}{rgb}{.18,.54,.34}
|
||||||
|
|
||||||
|
\newrgbcolor{lessthan}{1 0.2 0.2}
|
||||||
|
\newrgbcolor{equal}{1 1 0.2}
|
||||||
|
\newrgbcolor{greaterthan}{0.2 0.2 1}
|
||||||
|
|
||||||
|
\newrgbcolor{pcolor}{0.7 0.3 0.1}
|
||||||
|
\newrgbcolor{qcolor}{0 0 1}
|
||||||
|
\newrgbcolor{mscolor}{0.5 0.5 0}
|
||||||
|
%
|
||||||
|
\definecolor{polyALightColor}{rgb}{0.75,0.75,1}
|
||||||
|
\definecolor{polyBLightColor}{rgb}{1,0.8,0.3}
|
||||||
|
\definecolor{polyCLightColor}{rgb}{1,1,0.25}
|
||||||
|
\definecolor{polyDLightColor}{rgb}{1,1,0.75}
|
||||||
|
|
||||||
|
\definecolor{polyAColor}{rgb}{0.5,0.7,1}
|
||||||
|
\definecolor{polyBColor}{rgb}{1,0.72,0.225}
|
||||||
|
\definecolor{polyCColor}{rgb}{0.8,0.9,0.2}
|
||||||
|
\definecolor{polyDColor}{rgb}{0.8,0.8,0.6}
|
||||||
|
|
||||||
|
\definecolor{polyADarkColor}{rgb}{0.2,0.4,0.67}
|
||||||
|
\definecolor{polyBDarkColor}{rgb}{0.67,0.4,0.12}
|
||||||
|
\definecolor{polyCDarkColor}{rgb}{0.53,0.6,0.13}
|
||||||
|
\definecolor{polyDDarkColor}{rgb}{0.53,0.53,0.4}
|
||||||
|
|
||||||
|
\definecolor{polyABDarkColor}{rgb}{0.5,0.35,0.4}
|
||||||
|
|
||||||
|
\definecolor{crossColor}{rgb}{1,0,0.5}
|
||||||
|
|
||||||
|
\newrgbcolor{hot_color}{1 0 0}
|
||||||
|
\newrgbcolor{nonactive_color}{0.7 0.7 0.7}
|
||||||
|
\newrgbcolor{discovered}{0 0 0}
|
||||||
|
\newrgbcolor{active_color}{0 0 1}
|
||||||
|
|
||||||
|
\definecolor{obstacle}{rgb}{0.9,0.2,0.1}
|
||||||
|
\definecolor{robot1}{rgb}{0.1,0.4,0.9}
|
||||||
|
\definecolor{robot2}{rgb}{0.4,0.1,0.9}
|
||||||
|
\definecolor{minksum0}{rgb}{0.8,0.9,0.2}
|
||||||
|
|
||||||
|
\newrgbcolor{annulus-color}{0.000 0.690 0.000}
|
||||||
|
\newrgbcolor{in-color}{0.9 0 0} %% {0.000 0.490 0.000}
|
||||||
|
\newrgbcolor{out-color}{0 0 0.9} % {0.690 0.000 0.690}
|
||||||
|
\newrgbcolor{inout-color}{0.000 0.490 0.000}
|
||||||
|
\newrgbcolor{circles-color}{0.690 0.000 0.69}
|
||||||
|
%
|
||||||
|
% ======== Theorems ===========================================================
|
||||||
|
%% \newtheorem{observation}[theorem]{Observation}
|
||||||
|
%% \newtheorem{proposition}[theorem]{Proposition}
|
||||||
|
%% \newtheorem{application}[theorem]{Application}
|
||||||
|
%
|
||||||
|
% ======== general macros =====================================================
|
||||||
|
\def\gf{\textsc{Geometry Factory}}
|
||||||
|
\def\inria{\textsc{INRIA}}
|
||||||
|
\def\mpi{\textsc{MPII}}
|
||||||
|
\newcommand{\bez}{B{\'e}zier}
|
||||||
|
\newcommand{\unitsphere}{\ensuremath{{\mathbb S}^2}}
|
||||||
|
\newcommand{\Rtwo}{\ensuremath{\reals \rule{0.3mm}{0mm}^2}\xspace} % R^2
|
||||||
|
\newcommand{\Rthree}{\ensuremath{\reals \rule{0.3mm}{0mm}^3}\xspace} % R^3
|
||||||
|
\newcommand{\Rd}{\ensuremath{\reals \rule{0.3mm}{0mm}^d}\xspace} % R^d
|
||||||
|
\newcommand{\Rx}[1]{\ensuremath{\reals \rule{0.3mm}{0mm} ^ {#1}}\xspace} % R^x
|
||||||
|
\newcommand{\SOd}[1]{\ensuremath{{\mathbb S} \rule{0.3mm}{0mm} ^ {#1}}}
|
||||||
|
\newcommand{\SOtwo}{\SOd{2}\xspace}
|
||||||
|
\newcommand{\R}{\ensuremath{\mathbb{R}}} %
|
||||||
|
\newcommand{\Z}{\ensuremath{\mathbb{Z}}} %
|
||||||
|
\newcommand{\Expect}{{\rm I\kern-.3em E}}
|
||||||
|
|
||||||
|
\def\eps{{\epsilon}}
|
||||||
|
\newcommand{\mindia}[1]{\ensuremath{{\mathcal M}(#1)}}
|
||||||
|
\newcommand{\distance}[2]{\ensuremath{\rho(#1, #2)}}
|
||||||
|
\newcommand{\distancesqr}[2]{\ensuremath{\rho^2(#1, #2)}}
|
||||||
|
\newcommand{\bisector}[2]{\ensuremath{B(#1, #2)}}
|
||||||
|
\newcommand{\cpp}{{C}{\tt ++}}
|
||||||
|
\newcommand{\windows}{\textsc{Windows}}
|
||||||
|
\newcommand{\unix}{\textsc{Unix}}
|
||||||
|
\newcommand{\linux}{\textsc{Linux}}
|
||||||
|
\newcommand{\cygwin}{\textsc{Cygwin}}
|
||||||
|
\newcommand{\stl}{\textsc{Stl}}
|
||||||
|
\newcommand{\cgal}{\textsc{Cgal}}
|
||||||
|
\newcommand{\cmake}{\textsc{CMake}}
|
||||||
|
\newcommand{\gmp}{\textsc{Gmp}}
|
||||||
|
\newcommand{\gnu}{\textsc{Gnu}}
|
||||||
|
\newcommand{\mpfr}{\textsc{Mpfr}}
|
||||||
|
\newcommand{\core}{\textsc{Core}}
|
||||||
|
\newcommand{\boost}{\textsc{Boost}}
|
||||||
|
\newcommand{\qt}{\textsc{Qt}}
|
||||||
|
\newcommand{\leda}{\textsc{Leda}}
|
||||||
|
\newcommand{\vlsi}{\textsc{Vlsi}}
|
||||||
|
\newcommand{\dcel}{\textsc{Dcel}}
|
||||||
|
\newcommand{\ccb}{\textsc{Ccb}}
|
||||||
|
\newcommand{\parms}{{\rm I\!\hspace{-0.025em} P}}
|
||||||
|
\newcommand{\reals}{{\rm I\!\hspace{-0.025em} R}}
|
||||||
|
\newcommand{\redpart}{{\sc \textcolor{red}{$R$}}}
|
||||||
|
\newcommand{\greenpart}{{\sc \textcolor{green}{$G$}}}
|
||||||
|
\newcommand{\bluepart}{{\sc \textcolor{blue}{$B$}}}
|
||||||
|
\newcommand{\purplepart}{{\sc \textcolor{magenta}{$P$}}}
|
||||||
|
\newcommand{\yellowpart}{{\sc \textcolor{orange}{$Y$}}}
|
||||||
|
\newcommand{\turquoisepart}{{\sc \textcolor{cyan}{$T$}}}
|
||||||
|
\newcommand{\kdtree}{\textsc{Kd}-tree}
|
||||||
|
\newcommand{\kdtrees}{\textsc{Kd}-trees}
|
||||||
|
\newcommand{\bgl}{\textsc{Bgl}}
|
||||||
|
|
||||||
|
\newcommand{\sgmo}{{\bf SGM}}
|
||||||
|
\newcommand{\cgmo}{{\bf CGM}}
|
||||||
|
\newcommand{\ngmo}{{\bf NGM}}
|
||||||
|
\newcommand{\ch}{{\bf CH}}
|
||||||
|
\newcommand{\Fuku}{{\bf Fuk}}
|
||||||
|
|
||||||
|
\def\concept#1{\textsf{\it #1}}
|
||||||
|
|
||||||
|
\def\calA{{\cal A}}
|
||||||
|
\def\calC{{\cal C}}
|
||||||
|
\def\calG{{\cal G}}
|
||||||
|
\def\calI{{\cal I}}
|
||||||
|
\def\calJ{{\cal J}}
|
||||||
|
\def\calK{{\cal K}}
|
||||||
|
\def\calL{{\cal L}}
|
||||||
|
\def\calM{{\cal M}}
|
||||||
|
\def\calP{{\cal P}}
|
||||||
|
\def\calS{{\cal S}}
|
||||||
|
\def\calT{{\cal T}}
|
||||||
|
\def\calU{{\cal U}}
|
||||||
|
|
||||||
|
% ======== Macros for Voronoi =================================================
|
||||||
|
\newcommand{\distsym}{\ensuremath{\rho}\xspace}
|
||||||
|
\newcommand{\mobius}{M\"o\-bi\-us\xspace}
|
||||||
|
\newcommand{\region}{\ensuremath{{Reg}}}
|
||||||
|
\newcommand{\vor}[1]{\ensuremath{Vor_\distsym(#1)}}
|
||||||
|
\newcommand{\FPFS}{Far\-thest-Point Far\-thest-Site}
|
||||||
|
%
|
||||||
|
% ======== Macros for English =================================================
|
||||||
|
\newcommand{\ie}{i.\,e.,\xspace}
|
||||||
|
\newcommand{\eg}{e.\,g.,\xspace}
|
||||||
|
\newcommand{\etal}{{et~al}.\xspace}
|
||||||
|
\newcommand{\Wlog}{w.\,l.\,o.\,g.\xspace}
|
||||||
|
\newcommand{\apriori}{{\it a~priori}}
|
||||||
|
%
|
||||||
|
% ======== Listings ===========================================================
|
||||||
|
\newlength{\ccBaseWidth}\setlength{\ccBaseWidth}{\textwidth/72}
|
||||||
|
\lstset{%
|
||||||
|
language=C++,%
|
||||||
|
% basewidth=\ccBaseWidth,
|
||||||
|
keywordstyle=\color{blue},commentstyle=\color{red}%
|
||||||
|
}
|
||||||
|
\def\myLstinline#1{\lstinline[columns=fixed]{#1}}
|
||||||
|
%
|
||||||
|
% ======== html ===============================================================
|
||||||
|
\newrgbcolor{hrefcolor}{0.2 0.2 0.6}
|
||||||
|
\def\hrefc#1#2{\href{#1}{\textcolor{hrefcolor}{#2}}}
|
||||||
|
%
|
||||||
|
% ======== PS Tricks ==========================================================
|
||||||
|
\SpecialCoor
|
||||||
|
%
|
||||||
|
\def\myxunit{1}
|
||||||
|
\def\myyunit{1}
|
||||||
|
\def\arrset#1{\psset{unit=#1cm}\def\myxunit{#1}\def\myyunit{#1}}
|
||||||
|
\def\vertexradius{2pt}
|
||||||
|
\def\crossradius{0.15}
|
||||||
|
%
|
||||||
|
\def\arrCross(#1,#2){
|
||||||
|
\psline[linewidth=0.75pt,linecolor=crossColor]
|
||||||
|
(!#1 \crossradius\space \myxunit\space div sub #2)
|
||||||
|
(!#1 \crossradius\space \myxunit\space div add #2)
|
||||||
|
\psline[linewidth=0.75pt,linecolor=crossColor]
|
||||||
|
(!#1 #2 \crossradius\space \myyunit\space div sub)
|
||||||
|
(!#1 #2 \crossradius\space \myyunit\space div add)
|
||||||
|
}
|
||||||
|
\def\arrCrossVertex(#1)#2{
|
||||||
|
\arrCross(#1)
|
||||||
|
\pnode(#1){#2}
|
||||||
|
}
|
||||||
|
\def\arrEmptyVertex(#1)#2{
|
||||||
|
\pscircle*[linecolor=white](#1){\vertexradius}
|
||||||
|
\cnode[linewidth=0.5pt](#1){\vertexradius}{#2}
|
||||||
|
}
|
||||||
|
\def\arrColorVertex(#1)#2#3{
|
||||||
|
\pscircle*[linecolor=#3](#1){\vertexradius}
|
||||||
|
\cnode[linewidth=0.5pt](#1){\vertexradius}{#2}
|
||||||
|
}
|
||||||
|
\def\arrRedVertex(#1)#2{\arrColorVertex(#1){#2}{red}}
|
||||||
|
\def\arrCyanVertex(#1)#2{\arrColorVertex(#1){#2}{cyan}}
|
||||||
|
\def\arrGreenVertex(#1)#2{\arrColorVertex(#1){#2}{green}}
|
||||||
|
\def\arrOliveGreenVertex(#1)#2{\arrColorVertex(#1){#2}{olivegreen}}
|
||||||
|
\def\arrBlueVertex(#1)#2{\arrColorVertex(#1){#2}{blue}}
|
||||||
|
\def\arrGrayVertex(#1)#2{\arrColorVertex(#1){#2}{gray}}
|
||||||
|
\def\arrPurpleVertex(#1)#2{\arrColorVertex(#1){#2}{purple}}
|
||||||
|
|
||||||
|
\def\arrMainVertex(#1)#2{\arrRedVertex(#1){#2}}
|
||||||
|
\def\arrMinorVertex(#1)#2{\arrCyanVertex(#1){#2}}
|
||||||
|
|
||||||
|
\def\arrlvertex[#1](#2)#3#4{
|
||||||
|
\arrMainVertex(#2){#3}
|
||||||
|
\uput[#1]{0}(#2){#4}
|
||||||
|
}
|
||||||
|
\def\arrLabeledColorVertex[#1](#2)#3#4#5{
|
||||||
|
\arrColorVertex(#2){#3}{#4}
|
||||||
|
\uput[#1]{0}(#2){#5}
|
||||||
|
}
|
||||||
|
\def\arrp[#1](#2)#3{\arrlvertex[#1](#2){#3}{$p_{#3}$}}
|
||||||
|
\def\arrv[#1](#2)#3{\arrlvertex[#1](#2){#3}{$v_{#3}$}}
|
||||||
|
\def\arru[#1](#2)#3{\arrlvertex[#1](#2){#3}{$u_{#3}$}}
|
||||||
|
\def\nsarraxes(#1)(#2)(#3){\psaxes*[linecolor=black,linewidth=0.25pt,labels=none]{->}(#1)(#2)(#3)}
|
||||||
|
\def\arraxes(#1)(#2)(#3){\hspace{-3pt}\nsarraxes(#1)(#2)(#3)}
|
||||||
|
\def\arrIntersect{
|
||||||
|
/arrDict 10 dict def
|
||||||
|
arrDict begin
|
||||||
|
/arrIntersect {
|
||||||
|
/arrIntersectDict 14 dict def
|
||||||
|
arrIntersectDict begin
|
||||||
|
/x1 exch def
|
||||||
|
/y1 exch def
|
||||||
|
/x2 exch def
|
||||||
|
/y2 exch def
|
||||||
|
/x3 exch def
|
||||||
|
/y3 exch def
|
||||||
|
/x4 exch def
|
||||||
|
/y4 exch def
|
||||||
|
/dx43 x4 x3 sub def
|
||||||
|
/dy43 y4 y3 sub def
|
||||||
|
/dx13 x1 x3 sub def
|
||||||
|
/dy13 y1 y3 sub def
|
||||||
|
/dx21 x2 x1 sub def
|
||||||
|
/dy21 y2 y1 sub def
|
||||||
|
dx43 dy13 mul dy43 dx13 mul sub
|
||||||
|
dy43 dx21 mul dx43 dy21 mul sub
|
||||||
|
div dup dx21 mul x1 add exch dy21 mul y1 add
|
||||||
|
end
|
||||||
|
} bind def
|
||||||
|
end
|
||||||
|
}
|
||||||
|
\def\arrColorIntersectionVertex(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgI{{#1}}%
|
||||||
|
\def\ArgII{{#2}}%
|
||||||
|
\def\ArgIII{{#3}}%
|
||||||
|
\def\ArgIV{{#4}}%
|
||||||
|
\def\ArgV{{#5}}%
|
||||||
|
\def\ArgVI{{#6}}%
|
||||||
|
\def\ArgVII{{#7}}%
|
||||||
|
\def\ArgVIII{{#8}}%
|
||||||
|
\arrColorIntersectionVertexRelay
|
||||||
|
}
|
||||||
|
\def\arrColorIntersectionVertexRelay#1#2{
|
||||||
|
\arrColorVertex(!\arrIntersect\space
|
||||||
|
arrDict begin \ArgVIII \ArgVII \ArgVI \ArgV \ArgIV \ArgIII \ArgII \ArgI arrIntersect end
|
||||||
|
){#1}{#2}
|
||||||
|
}
|
||||||
|
\def\arrEmptyIntersectionVertex(#1,#2)(#3,#4)(#5,#6)(#7,#8)#9{
|
||||||
|
\arrEmptyVertex(!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
){#9}
|
||||||
|
}
|
||||||
|
\def\arrMainIntersectionVertex(#1,#2)(#3,#4)(#5,#6)(#7,#8)#9{
|
||||||
|
\arrMainVertex(!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
){#9}
|
||||||
|
}
|
||||||
|
\def\arrCrossIntersectionVertex(#1,#2)(#3,#4)(#5,#6)(#7,#8)#9{
|
||||||
|
\psline[linewidth=0.75pt,linecolor=crossColor](!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
\crossradius\space \myyunit\space div sub
|
||||||
|
)(!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
\crossradius\space \myyunit\space div add
|
||||||
|
)
|
||||||
|
\psline[linewidth=0.75pt,linecolor=crossColor](!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
exch \crossradius\space \myxunit\space div sub exch
|
||||||
|
)(!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
exch \crossradius\space \myxunit\space div add exch
|
||||||
|
)
|
||||||
|
\pnode(!\arrIntersect\space
|
||||||
|
arrDict begin #8 #7 #6 #5 #4 #3 #2 #1 arrIntersect end
|
||||||
|
){#2}
|
||||||
|
}
|
||||||
|
\def\arrTriangle(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgI{{#1}}%
|
||||||
|
\def\ArgII{{#2}}%
|
||||||
|
\def\ArgIII{{#3}}%
|
||||||
|
\def\ArgIV{{#4}}%
|
||||||
|
\def\ArgV{{#5}}%
|
||||||
|
\def\ArgVI{{#6}}%
|
||||||
|
\def\ArgVII{{#7}}%
|
||||||
|
\def\ArgVIII{{#8}}%
|
||||||
|
\arrTriangleRelayA
|
||||||
|
}
|
||||||
|
\def\arrTriangleRelayA(#1,#2)(#3,#4)#5{
|
||||||
|
\def\ArgIX{{#1}}%
|
||||||
|
\def\ArgX{{#2}}%
|
||||||
|
\def\ArgXI{{#3}}%
|
||||||
|
\def\ArgXII{{#4}}%
|
||||||
|
\pspolygon*[linecolor=#5]
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgVIII \ArgVII \ArgVI \ArgV \ArgIV \ArgIII \ArgII \ArgI arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXII \ArgXI \ArgX \ArgIX \ArgVIII \ArgVII \ArgVI \ArgV arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgIV \ArgIII \ArgII \ArgI \ArgXII \ArgXI \ArgX \ArgIX arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
}
|
||||||
|
\def\arrPolygon(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgI{{#1}}%
|
||||||
|
\def\ArgII{{#2}}%
|
||||||
|
\def\ArgIII{{#3}}%
|
||||||
|
\def\ArgIV{{#4}}%
|
||||||
|
\def\ArgV{{#5}}%
|
||||||
|
\def\ArgVI{{#6}}%
|
||||||
|
\def\ArgVII{{#7}}%
|
||||||
|
\def\ArgVIII{{#8}}%
|
||||||
|
\arrpolygonRelayA
|
||||||
|
}
|
||||||
|
\def\arrpolygonRelayA(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgIX{{#1}}%
|
||||||
|
\def\ArgX{{#2}}%
|
||||||
|
\def\ArgXI{{#3}}%
|
||||||
|
\def\ArgXII{{#4}}%
|
||||||
|
\def\ArgXIII{{#5}}%
|
||||||
|
\def\ArgXIV{{#6}}%
|
||||||
|
\def\ArgXV{{#7}}%
|
||||||
|
\def\ArgXVI{{#8}}%
|
||||||
|
\arrpolygonRelayB
|
||||||
|
}
|
||||||
|
\def\arrpolygonRelayB#1{
|
||||||
|
\pspolygon*[linecolor=#1]
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgVIII \ArgVII \ArgVI \ArgV \ArgIV \ArgIII \ArgII \ArgI arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXII \ArgXI \ArgX \ArgIX \ArgVIII \ArgVII \ArgVI \ArgV arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXVI \ArgXV \ArgXIV \ArgXIII \ArgXII \ArgXI \ArgX \ArgIX arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgIV \ArgIII \ArgII \ArgI \ArgXVI \ArgXV \ArgXIV \ArgXIII arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
}
|
||||||
|
\def\arrPentagon(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgI{{#1}}%
|
||||||
|
\def\ArgII{{#2}}%
|
||||||
|
\def\ArgIII{{#3}}%
|
||||||
|
\def\ArgIV{{#4}}%
|
||||||
|
\def\ArgV{{#5}}%
|
||||||
|
\def\ArgVI{{#6}}%
|
||||||
|
\def\ArgVII{{#7}}%
|
||||||
|
\def\ArgVIII{{#8}}%
|
||||||
|
\arrPentagonRelayA
|
||||||
|
}
|
||||||
|
\def\arrPentagonRelayA(#1,#2)(#3,#4)(#5,#6)(#7,#8){
|
||||||
|
\def\ArgIX{{#1}}%
|
||||||
|
\def\ArgX{{#2}}%
|
||||||
|
\def\ArgXI{{#3}}%
|
||||||
|
\def\ArgXII{{#4}}%
|
||||||
|
\def\ArgXIII{{#5}}%
|
||||||
|
\def\ArgXIV{{#6}}%
|
||||||
|
\def\ArgXV{{#7}}%
|
||||||
|
\def\ArgXVI{{#8}}%
|
||||||
|
\arrPentagonRelayB
|
||||||
|
}
|
||||||
|
\def\arrPentagonRelayB(#1,#2)(#3,#4)#5{
|
||||||
|
\def\ArgXVII{{#1}}%
|
||||||
|
\def\ArgXVIII{{#2}}%
|
||||||
|
\def\ArgXIX{{#3}}%
|
||||||
|
\def\ArgXX{{#4}}%
|
||||||
|
\pspolygon*[linecolor=#5]
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgVIII \ArgVII \ArgVI \ArgV \ArgIV \ArgIII \ArgII \ArgI arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXII \ArgXI \ArgX \ArgIX \ArgVIII \ArgVII \ArgVI \ArgV arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXVI \ArgXV \ArgXIV \ArgXIII \ArgXII \ArgXI \ArgX \ArgIX arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgXX \ArgXIX \ArgXVIII \ArgXVII \ArgXVI \ArgXV \ArgXIV \ArgXIII arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
(!\arrIntersect\space
|
||||||
|
arrDict begin
|
||||||
|
\ArgIV \ArgIII \ArgII \ArgI \ArgXX \ArgXIX \ArgXVIII \ArgXVII arrIntersect
|
||||||
|
end
|
||||||
|
)
|
||||||
|
}
|
||||||
|
\def\arredge#1#2{
|
||||||
|
\ncline[linewidth=0.5pt,linecolor=blue]{#1}{#2}
|
||||||
|
\ncline[linewidth=0.25pt,offset=3pt]{->}{#1}{#2}
|
||||||
|
\ncline[linewidth=0.25pt,offset=3pt]{->}{#2}{#1}
|
||||||
|
}
|
||||||
|
%
|
||||||
|
\def\smallfilledsquare{\pspolygon*[linecolor=white](0,0)(0.1,0)(0.1,0.1)(0,0.1)}
|
||||||
|
\def\smallsquare{\pspolygon(0,0)(0.1,0)(0.1,0.1)(0,0.1)}
|
||||||
|
%
|
||||||
|
% ======== macros for package names ===========================================
|
||||||
|
\newcommand{\cgalPackage}[1]{{\emph{#1}}}
|
||||||
|
\newcommand{\iiDArrangementsPackage}{\cgalPackage{2D Arrangements}}
|
||||||
|
\newcommand{\iiDIntersectionofCurvesPackage}{\cgalPackage{2D Intersection of Curves}}
|
||||||
|
\newcommand{\iiDSnapRoundingPackage}{\cgalPackage{2D Snap Rounding}}
|
||||||
|
\newcommand{\EnvelopesofCurvesiniiDPackage}{\cgalPackage{Envelopes of Curves in 2D}}
|
||||||
|
\newcommand{\EnvelopesofSurfacesiniiiDPackage}{\cgalPackage{Envelopes of Surfaces in 3D}}
|
||||||
|
\newcommand{\iiDMinkowskiSumsPackage}{\cgalPackage{2D Minkowski Sums}}
|
||||||
|
\newcommand{\iiDRegularizedBooleanSetOperationsPackage}{\cgalPackage{2D Regularized Boolean Set-Operations}}
|
||||||
|
\newcommand{\iiDPolygonsPackage}{\cgalPackage{2D Polygons}}
|
||||||
|
\newcommand{\iiDBooleanOperationsonNefPolygonsPackage}{\cgalPackage{2D Boolean Operations on Nef Polygons}}
|
||||||
|
\newcommand{\iiDBooleanOperationsonNefPolygonsEmbeddedontheSpherePackage}{\cgalPackage{2D Boolean Operations on Nef Polygons Embedded on the Sphere}}
|
||||||
|
\newcommand{\iiiDBooleanOperationsonNefPolyhedraPackage}{\cgalPackage{3D Boolean Operations on Nef Polyhedra}}
|
||||||
|
%
|
||||||
|
% =============================================================================
|
||||||
|
%
|
||||||
|
\newenvironment{FramedVerb}%
|
||||||
|
{\VerbatimEnvironment
|
||||||
|
\begin{Sbox}\begin{minipage}{\textwidth}\begin{Verbatim}}%
|
||||||
|
{\end{Verbatim}\end{minipage}\end{Sbox}
|
||||||
|
\setlength{\fboxsep}{8pt}\fbox{\TheSbox}}
|
||||||
|
|
||||||
|
\newenvironment{fminipage}%
|
||||||
|
{\begin{Sbox}\begin{minipage}}%
|
||||||
|
{\end{minipage}\end{Sbox}\fbox{\TheSbox}}
|
||||||
|
|
||||||
|
\newrgbcolor{c1}{0.1 0.1 0.5}
|
||||||
|
\newrgbcolor{c2}{0.2 0.0 0.5}
|
||||||
|
\newrgbcolor{c3}{0.0 0.2 0.5}
|
||||||
|
\newrgbcolor{xpcolor}{1 0.5 0} % intersection point color
|
||||||
|
\newrgbcolor{epcolor}{0 0 0.8} % endpoint color
|
||||||
|
\newrgbcolor{fpcolor}{0 0.8 0} % ficticious point color
|
||||||
|
\newrgbcolor{fccolor}{0 0.5 0} % ficticious curve color
|
||||||
|
|
||||||
|
\newenvironment{packed-enum}{
|
||||||
|
\begin{enumerate}
|
||||||
|
%\setlength{\topsep}{0pt}
|
||||||
|
%\setlength{\partopsep}{0pt}
|
||||||
|
\setlength{\itemsep}{0pt}
|
||||||
|
%\setlength{\parsep}{0pt}
|
||||||
|
\setlength{\rightmargin}{0pt}
|
||||||
|
%\setlength{\listparindent}{0pt}
|
||||||
|
%\setlength{\itemindent}{0pt}
|
||||||
|
%\setlength{\labelsep}{0pt}
|
||||||
|
%\setlength{\labelwidth}{0pt}
|
||||||
|
%%\makelabel{label}
|
||||||
|
\setlength{\leftmargin}{\labelwidth+\labelsep}
|
||||||
|
}{\end{enumerate}}
|
||||||
|
%
|
||||||
|
% ======= acolumns ============================================================
|
||||||
|
\usepackage{environ}% Required for \NewEnviron, i.e. to read the whole body of the environment
|
||||||
|
\makeatletter
|
||||||
|
\newcounter{acolumn}% Number of current column
|
||||||
|
\newlength{\acolumnmaxheight}% Maximum column height
|
||||||
|
|
||||||
|
% `column` replacement to measure height
|
||||||
|
\newenvironment{@acolumn}[1]{%
|
||||||
|
\stepcounter{acolumn}%
|
||||||
|
\begin{lrbox}{\@tempboxa}%
|
||||||
|
\begin{minipage}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{minipage}
|
||||||
|
\end{lrbox}
|
||||||
|
\@tempdimc=\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
|
||||||
|
% Save height of this column:
|
||||||
|
\expandafter\xdef\csname acolumn@height@\roman{acolumn}\endcsname{\the\@tempdimc}%
|
||||||
|
% Save maximum height
|
||||||
|
\ifdim\@tempdimc>\acolumnmaxheight
|
||||||
|
\global\acolumnmaxheight=\@tempdimc
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
% `column` wrapper which sets the height beforehand
|
||||||
|
\newenvironment{@@acolumn}[1]{%
|
||||||
|
\stepcounter{acolumn}%
|
||||||
|
% The \autoheight macro contains a \vspace macro with the maximum height minus the natural column height
|
||||||
|
\edef\autoheight{\noexpand\vspace*{\dimexpr\acolumnmaxheight-\csname acolumn@height@\roman{acolumn}\endcsname\relax}}%
|
||||||
|
% Call original `column`:
|
||||||
|
\orig@column{#1}%
|
||||||
|
}{%
|
||||||
|
\endorig@column
|
||||||
|
}
|
||||||
|
|
||||||
|
% Save orignal `column` environment away
|
||||||
|
\let\orig@column\column
|
||||||
|
\let\endorig@column\endcolumn
|
||||||
|
|
||||||
|
% `columns` variant with automatic height adjustment
|
||||||
|
\NewEnviron{acolumns}[1][]{%
|
||||||
|
% Init vars:
|
||||||
|
\setcounter{acolumn}{0}%
|
||||||
|
\setlength{\acolumnmaxheight}{0pt}%
|
||||||
|
\def\autoheight{\vspace*{0pt}}%
|
||||||
|
% Set `column` environment to special measuring environment
|
||||||
|
\let\column\@acolumn
|
||||||
|
\let\endcolumn\end@acolumn
|
||||||
|
\BODY% measure heights
|
||||||
|
% Reset counter for second processing round
|
||||||
|
\setcounter{acolumn}{0}%
|
||||||
|
% Set `column` environment to wrapper
|
||||||
|
\let\column\@@acolumn
|
||||||
|
\let\endcolumn\end@@acolumn
|
||||||
|
% Finally process columns now for real
|
||||||
|
\begin{columns}[#1]%
|
||||||
|
\BODY
|
||||||
|
\end{columns}%
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
%
|
||||||
|
% ======== Tikz museful macros==================================================
|
||||||
|
% Usage \arcThroughThoPoints[options]{center}{p}{q};
|
||||||
|
\newcommand{\arcThroughThoPoints}[4][]{
|
||||||
|
\coordinate (center) at (#2);
|
||||||
|
\draw[#1]
|
||||||
|
let \p1=($(#3)-(center)$),
|
||||||
|
\p2=($(#4)-(center)$),
|
||||||
|
\n0={veclen(\p1)}, % Radius
|
||||||
|
\n1={atan2(\x1,\y1)}, % angles
|
||||||
|
\n2={atan2(\x2,\y2)},
|
||||||
|
\n3={\n2>\n1?\n2:\n2+360}
|
||||||
|
in (#3) arc(\n1:\n3:\n0);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {\psframebox{\concept{ArrangementBasicTraits\_2}}}
|
||||||
|
<left>[scaleby=1.2 1.6]{\psframebox{\concept{ArrangementApproximateTraits\_2}}}@aat !aat
|
||||||
|
^<right>[scaleby=1.8 1.6]{\psframebox{\concept{ArrangementConstructXMonotoneCurveTraits\_2}}}@acxmct !acxmct
|
||||||
|
.
|
||||||
|
\!aat = <right>[scaleby=1.2 1.6]{\psframebox{\concept{ArrangementLandmarkTraits\_2}}}@alt !alt
|
||||||
|
.
|
||||||
|
\ncline{acxmct:b}{alt:t}
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1,16 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {\psframebox{\concept{ArrangementLeftSideTraits\_2}}}
|
||||||
|
<4wideleft>[scaleby=2.44 1]{\psframebox{\concept{ArrangementOpenLeftTraits\_2}}}@ult !ult
|
||||||
|
^<left>[scaleby=1.37 1]{\psframebox{\concept{ArrangemenClosedLeftTraits\_2}}}@urt !urt
|
||||||
|
^<right>[scaleby=1.11 1]{\psframebox{\concept{ArrangemenContractedLeftTraits\_2}}}@ubt !ubt
|
||||||
|
^<4wideright>[scaleby=2.44 1]{\psframebox{\concept{ArrangemenIdentifiedLeftTraits\_2}}}@utt !utt
|
||||||
|
.
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# latex ws.tex
|
||||||
|
# dvips -E ws.dvi -o
|
||||||
|
# epstool --bbox --copy ws.ps ws.eps
|
||||||
|
# ps2pdf -dEPSCrop ws.eps ws.pdf
|
||||||
|
|
||||||
|
TARGETS = simple_arr.pdf
|
||||||
|
|
||||||
|
.DEFAULT_GOAL = all
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
%.dvi: %.tex
|
||||||
|
latex $<
|
||||||
|
|
||||||
|
%.ps: %.dvi
|
||||||
|
dvips -E $< -o
|
||||||
|
|
||||||
|
%.eps: %.ps
|
||||||
|
epstool --bbox --copy $< $@
|
||||||
|
|
||||||
|
%.pdf: %.eps
|
||||||
|
ps2pdf -dEPSCrop $< $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(DOCUMENTS)
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {}
|
||||||
|
<4wideleft>[scaleby=2.35 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementOpenLeftTraits\_2}}}@ult !ult
|
||||||
|
^<left>[scaleby=1.21 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangemenOpenRightTraits\_2}}}@urt !urt
|
||||||
|
^<right>[scaleby=1.18 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangemenOpenBottomTraits\_2}}}@ubt !ubt
|
||||||
|
^<4wideright>[scaleby=2.35 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangemenOpenTopTraits\_2}}}@utt !utt
|
||||||
|
.
|
||||||
|
\!ult = <4wideright>[scaleby=2.10 1]{\psframebox{\concept{ArrangementOpenBoundaryTraits\_2}}}@ut !ut
|
||||||
|
.
|
||||||
|
\ncline{urt:b}{ut:t}
|
||||||
|
\ncline{ubt:b}{ut:t}
|
||||||
|
\ncline{utt:b}{ut:t}
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1,20 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {}
|
||||||
|
<left>[scaleby=2.31 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementVerticalSideTraits\_2}}}@vst !vst
|
||||||
|
^<right>[scaleby=2.31 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangemenHorizontalSideTraits\_2}}}@hst !hst
|
||||||
|
.
|
||||||
|
\!hst = <left>[scaleby=1.15 1]{\psframebox{\concept{ArrangementBottomSideTraits\_2}}}@bst !bst
|
||||||
|
^<right>[scaleby=1.15 1]{\psframebox{\concept{ArrangementTopSideTraits\_2}}}@tst !tst
|
||||||
|
.
|
||||||
|
\!vst = <left>[scaleby=1.12 1]{\psframebox{\concept{ArrangementLeftSideTraits\_2}}}@lst !lst
|
||||||
|
^<right>[scaleby=1.12 1]{\psframebox{\concept{ArrangementRightSideTraits\_2}}}@rst !rst
|
||||||
|
.
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
\documentclass[11pt]{article}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\arrset{1}%
|
||||||
|
\pspicture[](-3.1,-0.725)(3.1,1.709)
|
||||||
|
%
|
||||||
|
\pscustom[linecolor=blue,linewidth=0pt,fillstyle=hlines,hatchcolor=orange,hatchsep=2pt,hatchwidth=1pt]{%
|
||||||
|
\psplot{-2}{0}{0 x x mul x mul add x x mul add x 4 mul sub 1 add 8 div}
|
||||||
|
\psplot{0}{-2}{0 x x mul x mul sub x x mul add x 4 mul add 1 add 8 div}
|
||||||
|
}
|
||||||
|
%
|
||||||
|
\pscustom[linecolor=blue,linewidth=0pt,fillstyle=vlines,hatchcolor=orange,hatchsep=2pt,hatchwidth=1pt]{
|
||||||
|
\psplot{0}{2}{0 x x mul x mul add x x mul add x 4 mul sub 1 add 8 div}
|
||||||
|
\psplot{2}{0}{0 x x mul x mul sub x x mul add x 4 mul add 1 add 8 div}
|
||||||
|
}
|
||||||
|
%
|
||||||
|
\psplot[linecolor=blue]{-2.5}{3}{0 x x mul x mul sub x x mul add x 4 mul add 1 add 8 div}
|
||||||
|
\psplot[linecolor=blue]{-3}{2.5}{0 x x mul x mul add x x mul add x 4 mul sub 1 add 8 div}
|
||||||
|
%
|
||||||
|
\arrMainVertex(-3,-0.625){1}
|
||||||
|
\arrMainVertex( 3,-0.625){2}
|
||||||
|
\arrMainVertex(-2.5,1.609){3}
|
||||||
|
\arrMainVertex( 2.5,1.609){4}
|
||||||
|
\arrEmptyVertex(-2,0.625){x1}
|
||||||
|
\arrEmptyVertex( 2,0.625){x2}
|
||||||
|
\arrEmptyVertex(0,0.125){x3}
|
||||||
|
\rput(-2.5,1){\textcolor{blue}{$C_1$}}
|
||||||
|
\rput(-2.9,0.15){\textcolor{blue}{$C_2$}}
|
||||||
|
\rput(-1,0.3){\boldmath{$f_1$}}
|
||||||
|
\rput(1,0.3){\boldmath{$f_2$}}
|
||||||
|
\endpspicture
|
||||||
|
\end{document}
|
||||||
|
After Width: | Height: | Size: 4.3 KiB |
|
|
@ -0,0 +1,21 @@
|
||||||
|
\documentclass[12pt]{standalone}
|
||||||
|
\input{header}
|
||||||
|
\pagestyle{empty}
|
||||||
|
\begin{document}
|
||||||
|
\psset{treevshift=0,unit=1em,xunit=2em,yunit=1em,everytree={},etcratio=.75,triratio=.5}
|
||||||
|
\jtree[everylabel=\sl,xunit=70pt,arrows=->]
|
||||||
|
\! = {}
|
||||||
|
<4wideleft>[scaleby=2.73 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementIdentifiedLeftTraits\_2}}}@ult !ult
|
||||||
|
^<left>[scaleby=1.47 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementIdentifiedRightTraits\_2}}}@urt !urt
|
||||||
|
^<right>[scaleby=1.31 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementContractedBottomTraits\_2}}}@ubt !ubt
|
||||||
|
^<4wideright>[scaleby=2.73 0,arrows=-,linestyle=none]{\psframebox{\concept{ArrangementContractedTopTraits\_2}}}@utt !utt
|
||||||
|
.
|
||||||
|
\!ult = <4wideright>[scaleby=2.4 1]{\psframebox{\concept{ArrangementSphericalBoundaryTraits\_2}}}@ut !ut
|
||||||
|
.
|
||||||
|
\ncline{urt:b}{ut:t}
|
||||||
|
\ncline{ubt:b}{ut:t}
|
||||||
|
\ncline{utt:b}{ut:t}
|
||||||
|
\endjtree
|
||||||
|
\psset{treevshift=0,unit=1cm,xunit=1cm,yunit=1cm,everytree={},
|
||||||
|
etcratio=.75,triratio=.5}
|
||||||
|
\end{document}
|
||||||
|
|
@ -22,9 +22,11 @@ if ( CGAL_FOUND )
|
||||||
create_single_source_cgal_program( "${cppfile}" )
|
create_single_source_cgal_program( "${cppfile}" )
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
add_definitions(-std=c++11)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
|
|
||||||
message(STATUS "This program requires the CGAL library, and will not be compiled.")
|
message(STATUS "This program requires the CGAL library, and will not be compiled.")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
//! \file examples/Arrangement_on_surface_2/polycurve_geodesic.cpp
|
//! \file examples/Arrangement_on_surface_2/polycurve_geodesic.cpp
|
||||||
// Constructing an arrangement of polygeodesics.
|
// Constructing an arrangement of polygeodesics.
|
||||||
|
|
||||||
#define CGAL_IDENTIFICATION_XY 2
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
|
|
@ -33,18 +31,23 @@ typedef CGAL::Arrangement_on_surface_2<Segment_traits_2, Topol_segment_traits_2>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
Point_2 p1(0, 1, -1);
|
|
||||||
Point_2 p2(-11, 7, -7);
|
|
||||||
Point_2 p3(-1, 0, 0);
|
|
||||||
Point_2 p4(-11, 7, 7);
|
|
||||||
Point_2 p5(-1, 1, 1);
|
|
||||||
|
|
||||||
Segment_traits_2 seg_traits;
|
Segment_traits_2 seg_traits;
|
||||||
|
Segment_traits_2::Construct_point_2 ctr_p =
|
||||||
|
seg_traits.construct_point_2_object();
|
||||||
|
Segment_traits_2::Construct_x_monotone_curve_2 ctr_seg =
|
||||||
|
seg_traits.construct_x_monotone_curve_2_object();
|
||||||
|
|
||||||
|
Point_2 p1 = ctr_p(0, 1, -1);
|
||||||
|
Point_2 p2 = ctr_p(-11, 7, -7);
|
||||||
|
Point_2 p3 = ctr_p(-1, 0, 0);
|
||||||
|
Point_2 p4 = ctr_p(-11, 7, 7);
|
||||||
|
Point_2 p5 = ctr_p(-1, 1, 1);
|
||||||
|
|
||||||
Segment_arr seg_arr(&seg_traits);
|
Segment_arr seg_arr(&seg_traits);
|
||||||
X_seg_curve_2 seg_cv1(p1, p2);
|
X_seg_curve_2 seg_cv1 = ctr_seg(p1, p2);
|
||||||
X_seg_curve_2 seg_cv2(p2, p3);
|
X_seg_curve_2 seg_cv2 = ctr_seg(p2, p3);
|
||||||
X_seg_curve_2 seg_cv3(p3, p4);
|
X_seg_curve_2 seg_cv3 = ctr_seg(p3, p4);
|
||||||
X_seg_curve_2 seg_cv4(p4, p5);
|
X_seg_curve_2 seg_cv4 = ctr_seg(p4, p5);
|
||||||
|
|
||||||
insert(seg_arr, seg_cv1);
|
insert(seg_arr, seg_cv1);
|
||||||
insert(seg_arr, seg_cv2);
|
insert(seg_arr, seg_cv2);
|
||||||
|
|
|
||||||