mirror of https://github.com/CGAL/cgal
827 lines
33 KiB
C++
827 lines
33 KiB
C++
// Copyright (c) 1998-2003 ETH Zurich (Switzerland).
|
|
// All rights reserved.
|
|
//
|
|
// This file is part of CGAL (www.cgal.org); you may redistribute it under
|
|
// the terms of the Q Public License version 1.0.
|
|
// See the file LICENSE.QPL distributed with CGAL.
|
|
//
|
|
// Licensees holding a valid commercial license may use this file in
|
|
// accordance with the commercial license agreement provided with the software.
|
|
//
|
|
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
//
|
|
// $URL$
|
|
// $Id$
|
|
//
|
|
//
|
|
// Author(s) : Michael Hoffmann <hoffmann@inf.ethz.ch>
|
|
|
|
#if ! (CGAL_RECTANGULAR_3_CENTER_2_MSVC_H)
|
|
#define CGAL_RECTANGULAR_3_CENTER_2_MSVC_H 1
|
|
|
|
template < class R >
|
|
struct Rectangular_3_center_2_type2_operations0 {
|
|
typedef typename R::FT FT;
|
|
typedef typename R::Point_2 Point_2;
|
|
typedef typename R::Iso_rectangle_2 Iso_rectangle_2;
|
|
typedef typename R::Infinity_distance_2 Infinity_distance_2;
|
|
typedef typename R::Less_x_2 Less_x_2;
|
|
typedef typename R::Less_y_2 Less_y_2;
|
|
typedef typename Swap< Less_x_2 >::Type Greater_x_2;
|
|
typedef typename Swap< Less_y_2 >::Type Greater_y_2;
|
|
typedef Min< Point_2, Less_x_2 > Min_x_2;
|
|
typedef Max< Point_2, Less_x_2 > Max_x_2;
|
|
typedef Min< Point_2, Less_y_2 > Min_y_2;
|
|
typedef Max< Point_2, Less_y_2 > Max_y_2;
|
|
typedef typename R::Construct_vertex_2 Construct_vertex_2;
|
|
typedef typename R::Construct_iso_rectangle_2 Construct_iso_rectangle_2;
|
|
typedef typename R::Construct_point_2_above_right_implicit_point_2
|
|
Construct_point_2_above_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_above_left_implicit_point_2
|
|
Construct_point_2_above_left_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_right_implicit_point_2
|
|
Construct_point_2_below_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_left_implicit_point_2
|
|
Construct_point_2_below_left_implicit_point_2;
|
|
typedef typename Bind< Infinity_distance_2, Point_2, 1 >::Type Delta;
|
|
|
|
Delta delta() const { return delta_; }
|
|
Less_x_2 less_x_2_object() const { return r_.less_x_2_object(); }
|
|
Less_y_2 less_y_2_object() const { return r_.less_y_2_object(); }
|
|
Greater_x_2 greater_x_2_object() const
|
|
{ return swap_1(less_x_2_object()); }
|
|
Greater_y_2 greater_y_2_object() const
|
|
{ return swap_1(less_y_2_object()); }
|
|
Infinity_distance_2 distance() const
|
|
{ return r_.infinity_distance_2_object(); }
|
|
Construct_vertex_2 construct_vertex_2_object() const
|
|
{ return r_.construct_vertex_2_object(); }
|
|
Construct_iso_rectangle_2 construct_iso_rectangle_2_object() const
|
|
{ return r_.construct_iso_rectangle_2_object(); }
|
|
|
|
Construct_point_2_below_left_implicit_point_2
|
|
pt_b_l() const
|
|
{ return r_.construct_point_2_below_left_implicit_point_2_object(); }
|
|
Construct_point_2_above_left_implicit_point_2
|
|
pt_a_l() const
|
|
{ return r_.construct_point_2_above_left_implicit_point_2_object(); }
|
|
Construct_point_2_below_right_implicit_point_2
|
|
pt_b_r() const
|
|
{ return r_.construct_point_2_below_right_implicit_point_2_object(); }
|
|
Construct_point_2_above_right_implicit_point_2
|
|
pt_a_r() const
|
|
{ return r_.construct_point_2_above_right_implicit_point_2_object(); }
|
|
|
|
Min_x_2 minx() const { return Min_x_2(less_x_2_object()); }
|
|
Min_y_2 miny() const { return Min_y_2(less_y_2_object()); }
|
|
Max_x_2 maxx() const { return Max_x_2(less_x_2_object()); }
|
|
Max_y_2 maxy() const { return Max_y_2(less_y_2_object()); }
|
|
|
|
private:
|
|
R& r_;
|
|
Delta delta_;
|
|
public:
|
|
typedef Point_2 Point;
|
|
typedef Iso_rectangle_2 Rectangle;
|
|
typedef Less_x_2 X_compare;
|
|
typedef Greater_y_2 Y_compare;
|
|
typedef Infinity_distance_2 Distance;
|
|
|
|
Rectangular_3_center_2_type2_operations0(R& r, const Point& p)
|
|
: r_(r), delta_(bind_1(r.infinity_distance_2_object(), p))
|
|
{}
|
|
|
|
X_compare compare_x() const { return less_x_2_object(); }
|
|
Y_compare compare_y() const { return greater_y_2_object(); }
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
minx()(first_uncovered, v(constraint, 0));
|
|
return v(rect(bpt, v(bbox, 2)), 3);
|
|
#else
|
|
return v(rect(constraint_empty ? first_uncovered :
|
|
minx()(first_uncovered, v(constraint, 0)),
|
|
v(bbox, 2)),
|
|
3);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 2) : v(constraint, 0);
|
|
return v(rect(bpt, v(bbox, 2)), 3);
|
|
#else
|
|
return v(rect(constraint_empty ? v(bbox, 2) : v(constraint, 0),
|
|
v(bbox, 2)),
|
|
3);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(minx()(pt_b_l()(v(bbox, 2), v(bbox, 2), radius), so_far),
|
|
so_far),
|
|
3);
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
miny()(first_uncovered, v(constraint, 0));
|
|
return v(rect(v(bbox, 2), bpt), 1);
|
|
#else
|
|
return v(rect(v(bbox, 2),
|
|
constraint_empty ? first_uncovered :
|
|
miny()(first_uncovered, v(constraint, 0))),
|
|
1);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 2) : v(constraint, 0);
|
|
return v(rect(v(bbox, 2), bpt), 1);
|
|
#else
|
|
return v(rect(v(bbox, 2),
|
|
constraint_empty ? v(bbox, 2) : v(constraint, 0)),
|
|
1);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(so_far,
|
|
miny()(pt_b_l()(v(bbox, 2), v(bbox, 2), radius),
|
|
so_far)),
|
|
1);
|
|
}
|
|
|
|
Point update_x_square(const Point& s, const Point& newp) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
|
|
return v(rect(minx()(s, newp), s), 3);
|
|
}
|
|
|
|
Point update_y_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
|
|
return v(rect(s, miny()(s, newp)), 1);
|
|
}
|
|
|
|
FT compute_x_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 1)); }
|
|
|
|
FT compute_y_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 3)); }
|
|
|
|
Point construct_corner_square(const Rectangle& bbox, FT r) const
|
|
{ return pt_a_r()(construct_vertex_2_object()(bbox, 0),
|
|
construct_vertex_2_object()(bbox, 0), r); }
|
|
|
|
Point construct_x_square(const Point& p, FT r) const
|
|
{ return pt_b_r()(p, p, r); }
|
|
|
|
Point construct_y_square(const Point& p, FT r) const
|
|
{ return pt_a_l()(p, p, r); }
|
|
};
|
|
template < class R >
|
|
struct Rectangular_3_center_2_type2_operations1 {
|
|
typedef typename R::FT FT;
|
|
typedef typename R::Point_2 Point_2;
|
|
typedef typename R::Iso_rectangle_2 Iso_rectangle_2;
|
|
typedef typename R::Infinity_distance_2 Infinity_distance_2;
|
|
typedef typename R::Less_x_2 Less_x_2;
|
|
typedef typename R::Less_y_2 Less_y_2;
|
|
typedef typename Swap< Less_x_2 >::Type Greater_x_2;
|
|
typedef typename Swap< Less_y_2 >::Type Greater_y_2;
|
|
typedef Min< Point_2, Less_x_2 > Min_x_2;
|
|
typedef Max< Point_2, Less_x_2 > Max_x_2;
|
|
typedef Min< Point_2, Less_y_2 > Min_y_2;
|
|
typedef Max< Point_2, Less_y_2 > Max_y_2;
|
|
typedef typename R::Construct_vertex_2 Construct_vertex_2;
|
|
typedef typename R::Construct_iso_rectangle_2 Construct_iso_rectangle_2;
|
|
typedef typename R::Construct_point_2_above_right_implicit_point_2
|
|
Construct_point_2_above_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_above_left_implicit_point_2
|
|
Construct_point_2_above_left_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_right_implicit_point_2
|
|
Construct_point_2_below_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_left_implicit_point_2
|
|
Construct_point_2_below_left_implicit_point_2;
|
|
typedef typename Bind< Infinity_distance_2, Point_2, 1 >::Type Delta;
|
|
|
|
Delta delta() const { return delta_; }
|
|
Less_x_2 less_x_2_object() const { return r_.less_x_2_object(); }
|
|
Less_y_2 less_y_2_object() const { return r_.less_y_2_object(); }
|
|
Greater_x_2 greater_x_2_object() const
|
|
{ return swap_1(less_x_2_object()); }
|
|
Greater_y_2 greater_y_2_object() const
|
|
{ return swap_1(less_y_2_object()); }
|
|
Infinity_distance_2 distance() const
|
|
{ return r_.infinity_distance_2_object(); }
|
|
Construct_vertex_2 construct_vertex_2_object() const
|
|
{ return r_.construct_vertex_2_object(); }
|
|
Construct_iso_rectangle_2 construct_iso_rectangle_2_object() const
|
|
{ return r_.construct_iso_rectangle_2_object(); }
|
|
|
|
Construct_point_2_below_left_implicit_point_2
|
|
pt_b_l() const
|
|
{ return r_.construct_point_2_below_left_implicit_point_2_object(); }
|
|
Construct_point_2_above_left_implicit_point_2
|
|
pt_a_l() const
|
|
{ return r_.construct_point_2_above_left_implicit_point_2_object(); }
|
|
Construct_point_2_below_right_implicit_point_2
|
|
pt_b_r() const
|
|
{ return r_.construct_point_2_below_right_implicit_point_2_object(); }
|
|
Construct_point_2_above_right_implicit_point_2
|
|
pt_a_r() const
|
|
{ return r_.construct_point_2_above_right_implicit_point_2_object(); }
|
|
|
|
Min_x_2 minx() const { return Min_x_2(less_x_2_object()); }
|
|
Min_y_2 miny() const { return Min_y_2(less_y_2_object()); }
|
|
Max_x_2 maxx() const { return Max_x_2(less_x_2_object()); }
|
|
Max_y_2 maxy() const { return Max_y_2(less_y_2_object()); }
|
|
|
|
private:
|
|
R& r_;
|
|
Delta delta_;
|
|
public:
|
|
typedef Point_2 Point;
|
|
typedef Iso_rectangle_2 Rectangle;
|
|
typedef Greater_x_2 X_compare;
|
|
typedef Greater_y_2 Y_compare;
|
|
typedef Infinity_distance_2 Distance;
|
|
|
|
Rectangular_3_center_2_type2_operations1(R& r, const Point& p)
|
|
: r_(r), delta_(bind_1(r.infinity_distance_2_object(), p))
|
|
{}
|
|
|
|
X_compare compare_x() const { return greater_x_2_object(); }
|
|
Y_compare compare_y() const { return greater_y_2_object(); }
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
maxx()(first_uncovered, v(constraint, 2));
|
|
return v(rect(bpt, v(bbox, 3)), 2);
|
|
#else
|
|
return v(rect(constraint_empty ? first_uncovered :
|
|
maxx()(first_uncovered, v(constraint, 2)),
|
|
v(bbox, 3)),
|
|
2);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 0) : v(constraint, 2);
|
|
return v(rect(bpt, v(bbox, 3)), 2);
|
|
#else
|
|
return v(rect(constraint_empty ? v(bbox, 0) : v(constraint, 2),
|
|
v(bbox, 3)),
|
|
2);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(maxx()(so_far, pt_a_r()(v(bbox, 0),
|
|
v(bbox, 0), radius)),
|
|
so_far),
|
|
2);
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
miny()(first_uncovered, v(constraint, 0));
|
|
return v(rect(v(bbox, 3), bpt), 0);
|
|
#else
|
|
return v(rect(v(bbox, 3),
|
|
constraint_empty ? first_uncovered :
|
|
miny()(first_uncovered, v(constraint, 0))),
|
|
0);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 2) : v(constraint, 0);
|
|
return v(rect(v(bbox, 3), bpt), 0);
|
|
#else
|
|
return v(rect(v(bbox, 3),
|
|
constraint_empty ? v(bbox, 2) : v(constraint, 0)),
|
|
0);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(so_far,
|
|
miny()(so_far, pt_b_l()(v(bbox, 2),
|
|
v(bbox, 2), radius))),
|
|
0);
|
|
}
|
|
|
|
Point update_x_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(maxx()(s, newp), s), 2);
|
|
}
|
|
|
|
Point update_y_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(s, miny()(s, newp)), 0);
|
|
}
|
|
|
|
FT compute_x_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 0)); }
|
|
|
|
FT compute_y_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 2)); }
|
|
|
|
Point construct_corner_square(const Rectangle& bbox, FT r) const
|
|
{ return pt_a_l()(construct_vertex_2_object()(bbox, 2),
|
|
construct_vertex_2_object()(bbox, 0), r); }
|
|
|
|
Point construct_x_square(const Point& p, FT r) const
|
|
{ return pt_b_l()(p, p, r); }
|
|
|
|
Point construct_y_square(const Point& p, FT r) const
|
|
{ return pt_a_r()(p, p, r); }
|
|
};
|
|
template < class R >
|
|
struct Rectangular_3_center_2_type2_operations2 {
|
|
typedef typename R::FT FT;
|
|
typedef typename R::Point_2 Point_2;
|
|
typedef typename R::Iso_rectangle_2 Iso_rectangle_2;
|
|
typedef typename R::Infinity_distance_2 Infinity_distance_2;
|
|
typedef typename R::Less_x_2 Less_x_2;
|
|
typedef typename R::Less_y_2 Less_y_2;
|
|
typedef typename Swap< Less_x_2 >::Type Greater_x_2;
|
|
typedef typename Swap< Less_y_2 >::Type Greater_y_2;
|
|
typedef Min< Point_2, Less_x_2 > Min_x_2;
|
|
typedef Max< Point_2, Less_x_2 > Max_x_2;
|
|
typedef Min< Point_2, Less_y_2 > Min_y_2;
|
|
typedef Max< Point_2, Less_y_2 > Max_y_2;
|
|
typedef typename R::Construct_vertex_2 Construct_vertex_2;
|
|
typedef typename R::Construct_iso_rectangle_2 Construct_iso_rectangle_2;
|
|
typedef typename R::Construct_point_2_above_right_implicit_point_2
|
|
Construct_point_2_above_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_above_left_implicit_point_2
|
|
Construct_point_2_above_left_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_right_implicit_point_2
|
|
Construct_point_2_below_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_left_implicit_point_2
|
|
Construct_point_2_below_left_implicit_point_2;
|
|
typedef typename Bind< Infinity_distance_2, Point_2, 1 >::Type Delta;
|
|
|
|
Delta delta() const { return delta_; }
|
|
Less_x_2 less_x_2_object() const { return r_.less_x_2_object(); }
|
|
Less_y_2 less_y_2_object() const { return r_.less_y_2_object(); }
|
|
Greater_x_2 greater_x_2_object() const
|
|
{ return swap_1(less_x_2_object()); }
|
|
Greater_y_2 greater_y_2_object() const
|
|
{ return swap_1(less_y_2_object()); }
|
|
Infinity_distance_2 distance() const
|
|
{ return r_.infinity_distance_2_object(); }
|
|
Construct_vertex_2 construct_vertex_2_object() const
|
|
{ return r_.construct_vertex_2_object(); }
|
|
Construct_iso_rectangle_2 construct_iso_rectangle_2_object() const
|
|
{ return r_.construct_iso_rectangle_2_object(); }
|
|
|
|
Construct_point_2_below_left_implicit_point_2
|
|
pt_b_l() const
|
|
{ return r_.construct_point_2_below_left_implicit_point_2_object(); }
|
|
Construct_point_2_above_left_implicit_point_2
|
|
pt_a_l() const
|
|
{ return r_.construct_point_2_above_left_implicit_point_2_object(); }
|
|
Construct_point_2_below_right_implicit_point_2
|
|
pt_b_r() const
|
|
{ return r_.construct_point_2_below_right_implicit_point_2_object(); }
|
|
Construct_point_2_above_right_implicit_point_2
|
|
pt_a_r() const
|
|
{ return r_.construct_point_2_above_right_implicit_point_2_object(); }
|
|
|
|
Min_x_2 minx() const { return Min_x_2(less_x_2_object()); }
|
|
Min_y_2 miny() const { return Min_y_2(less_y_2_object()); }
|
|
Max_x_2 maxx() const { return Max_x_2(less_x_2_object()); }
|
|
Max_y_2 maxy() const { return Max_y_2(less_y_2_object()); }
|
|
|
|
private:
|
|
R& r_;
|
|
Delta delta_;
|
|
public:
|
|
typedef Point_2 Point;
|
|
typedef Iso_rectangle_2 Rectangle;
|
|
typedef Greater_x_2 X_compare;
|
|
typedef Less_y_2 Y_compare;
|
|
typedef Infinity_distance_2 Distance;
|
|
|
|
Rectangular_3_center_2_type2_operations2(R& r, const Point& p)
|
|
: r_(r), delta_(bind_1(r.infinity_distance_2_object(), p))
|
|
{}
|
|
|
|
X_compare compare_x() const { return greater_x_2_object(); }
|
|
Y_compare compare_y() const { return less_y_2_object(); }
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
maxx()(first_uncovered, v(constraint, 2));
|
|
return v(rect(bpt, v(bbox, 0)), 1);
|
|
#else
|
|
return v(rect(constraint_empty ? first_uncovered :
|
|
maxx()(first_uncovered, v(constraint, 2)),
|
|
v(bbox, 0)),
|
|
1);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 0) : v(constraint, 2);
|
|
return v(rect(bpt, v(bbox, 0)), 1);
|
|
#else
|
|
return v(rect(constraint_empty ? v(bbox, 0) : v(constraint, 2),
|
|
v(bbox, 0)),
|
|
1);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(maxx()(so_far, pt_a_r()(v(bbox, 0),
|
|
v(bbox, 0), radius)),
|
|
so_far),
|
|
1);
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
maxy()(first_uncovered, v(constraint, 2));
|
|
return v(rect(v(bbox, 0), bpt), 3);
|
|
#else
|
|
return v(rect(v(bbox, 0),
|
|
constraint_empty ? first_uncovered :
|
|
maxy()(first_uncovered, v(constraint, 2))),
|
|
3);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 0) : v(constraint, 2);
|
|
return v(rect(v(bbox, 0), bpt), 3);
|
|
#else
|
|
return v(rect(v(bbox, 0),
|
|
constraint_empty ? v(bbox, 0) : v(constraint, 2)),
|
|
3);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(so_far,
|
|
maxy()(pt_a_r()(v(bbox, 0),
|
|
v(bbox, 0), radius), so_far)),
|
|
3);
|
|
}
|
|
|
|
Point update_x_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(maxx()(s, newp), s), 1);
|
|
}
|
|
|
|
Point update_y_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(s, maxy()(s, newp)), 3);
|
|
}
|
|
|
|
FT compute_x_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 3)); }
|
|
|
|
FT compute_y_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 1)); }
|
|
|
|
Point construct_corner_square(const Rectangle& bbox, FT r) const
|
|
{ return pt_b_l()(construct_vertex_2_object()(bbox, 2),
|
|
construct_vertex_2_object()(bbox, 2), r); }
|
|
|
|
Point construct_x_square(const Point& p, FT r) const
|
|
{ return pt_a_l()(p, p, r); }
|
|
|
|
Point construct_y_square(const Point& p, FT r) const
|
|
{ return pt_b_r()(p, p, r); }
|
|
};
|
|
template < class R >
|
|
struct Rectangular_3_center_2_type2_operations3 {
|
|
typedef typename R::FT FT;
|
|
typedef typename R::Point_2 Point_2;
|
|
typedef typename R::Iso_rectangle_2 Iso_rectangle_2;
|
|
typedef typename R::Infinity_distance_2 Infinity_distance_2;
|
|
typedef typename R::Less_x_2 Less_x_2;
|
|
typedef typename R::Less_y_2 Less_y_2;
|
|
typedef typename Swap< Less_x_2 >::Type Greater_x_2;
|
|
typedef typename Swap< Less_y_2 >::Type Greater_y_2;
|
|
typedef Min< Point_2, Less_x_2 > Min_x_2;
|
|
typedef Max< Point_2, Less_x_2 > Max_x_2;
|
|
typedef Min< Point_2, Less_y_2 > Min_y_2;
|
|
typedef Max< Point_2, Less_y_2 > Max_y_2;
|
|
typedef typename R::Construct_vertex_2 Construct_vertex_2;
|
|
typedef typename R::Construct_iso_rectangle_2 Construct_iso_rectangle_2;
|
|
typedef typename R::Construct_point_2_above_right_implicit_point_2
|
|
Construct_point_2_above_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_above_left_implicit_point_2
|
|
Construct_point_2_above_left_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_right_implicit_point_2
|
|
Construct_point_2_below_right_implicit_point_2;
|
|
typedef typename R::Construct_point_2_below_left_implicit_point_2
|
|
Construct_point_2_below_left_implicit_point_2;
|
|
typedef typename Bind< Infinity_distance_2, Point_2, 1 >::Type Delta;
|
|
|
|
Delta delta() const { return delta_; }
|
|
Less_x_2 less_x_2_object() const { return r_.less_x_2_object(); }
|
|
Less_y_2 less_y_2_object() const { return r_.less_y_2_object(); }
|
|
Greater_x_2 greater_x_2_object() const
|
|
{ return swap_1(less_x_2_object()); }
|
|
Greater_y_2 greater_y_2_object() const
|
|
{ return swap_1(less_y_2_object()); }
|
|
Infinity_distance_2 distance() const
|
|
{ return r_.infinity_distance_2_object(); }
|
|
Construct_vertex_2 construct_vertex_2_object() const
|
|
{ return r_.construct_vertex_2_object(); }
|
|
Construct_iso_rectangle_2 construct_iso_rectangle_2_object() const
|
|
{ return r_.construct_iso_rectangle_2_object(); }
|
|
|
|
Construct_point_2_below_left_implicit_point_2
|
|
pt_b_l() const
|
|
{ return r_.construct_point_2_below_left_implicit_point_2_object(); }
|
|
Construct_point_2_above_left_implicit_point_2
|
|
pt_a_l() const
|
|
{ return r_.construct_point_2_above_left_implicit_point_2_object(); }
|
|
Construct_point_2_below_right_implicit_point_2
|
|
pt_b_r() const
|
|
{ return r_.construct_point_2_below_right_implicit_point_2_object(); }
|
|
Construct_point_2_above_right_implicit_point_2
|
|
pt_a_r() const
|
|
{ return r_.construct_point_2_above_right_implicit_point_2_object(); }
|
|
|
|
Min_x_2 minx() const { return Min_x_2(less_x_2_object()); }
|
|
Min_y_2 miny() const { return Min_y_2(less_y_2_object()); }
|
|
Max_x_2 maxx() const { return Max_x_2(less_x_2_object()); }
|
|
Max_y_2 maxy() const { return Max_y_2(less_y_2_object()); }
|
|
|
|
private:
|
|
R& r_;
|
|
Delta delta_;
|
|
public:
|
|
typedef Point_2 Point;
|
|
typedef Iso_rectangle_2 Rectangle;
|
|
typedef Less_x_2 X_compare;
|
|
typedef Less_y_2 Y_compare;
|
|
typedef Infinity_distance_2 Distance;
|
|
|
|
Rectangular_3_center_2_type2_operations3(R& r, const Point& p)
|
|
: r_(r), delta_(bind_1(r.infinity_distance_2_object(), p))
|
|
{}
|
|
|
|
X_compare compare_x() const { return less_x_2_object(); }
|
|
Y_compare compare_y() const { return less_y_2_object(); }
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
minx()(first_uncovered, v(constraint, 0));
|
|
return v(rect(bpt, v(bbox, 1)), 0);
|
|
#else
|
|
return v(rect(constraint_empty ? first_uncovered :
|
|
minx()(first_uncovered, v(constraint, 0)),
|
|
v(bbox, 1)),
|
|
0);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 2) : v(constraint, 0);
|
|
return v(rect(bpt, v(bbox, 1)), 0);
|
|
#else
|
|
return v(rect(constraint_empty ? v(bbox, 2) : v(constraint, 0),
|
|
v(bbox, 1)),
|
|
0);
|
|
#endif
|
|
}
|
|
|
|
Point place_x_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(minx()(pt_b_l()(v(bbox, 2),
|
|
v(bbox, 2), radius), so_far),
|
|
so_far),
|
|
0);
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Point& first_uncovered,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? first_uncovered :
|
|
maxy()(first_uncovered, v(constraint, 2));
|
|
return v(rect(v(bbox, 1), bpt), 2);
|
|
#else
|
|
return v(rect(v(bbox, 1),
|
|
constraint_empty ? first_uncovered :
|
|
maxy()(first_uncovered, v(constraint, 2))),
|
|
2);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(bool constraint_empty,
|
|
const Rectangle& constraint,
|
|
const Rectangle& bbox) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
#if defined(__BORLANDC__) || defined(__SUNPRO_CC)
|
|
Point bpt = constraint_empty ? v(bbox, 0) : v(constraint, 2);
|
|
return v(rect(v(bbox, 1), bpt), 2);
|
|
#else
|
|
return v(rect(v(bbox, 1),
|
|
constraint_empty ? v(bbox, 0) : v(constraint, 2)),
|
|
2);
|
|
#endif
|
|
}
|
|
|
|
Point place_y_square(const Point& so_far,
|
|
const Rectangle& bbox,
|
|
FT radius) const
|
|
{
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(so_far,
|
|
maxy()(pt_a_r()(v(bbox, 0),
|
|
v(bbox, 0), radius), so_far)),
|
|
2);
|
|
}
|
|
|
|
Point update_x_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(minx()(s, newp), s), 0);
|
|
}
|
|
|
|
Point update_y_square(const Point& s, const Point& newp) const {
|
|
Construct_iso_rectangle_2 rect = construct_iso_rectangle_2_object();
|
|
Construct_vertex_2 v = construct_vertex_2_object();
|
|
return v(rect(s, maxy()(s, newp)), 2);
|
|
}
|
|
|
|
FT compute_x_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 2)); }
|
|
|
|
FT compute_y_distance(const Point& extreme,
|
|
const Rectangle& constraint) const
|
|
{ return distance()(extreme, construct_vertex_2_object()(constraint, 0)); }
|
|
|
|
Point construct_corner_square(const Rectangle& bbox, FT r) const
|
|
{ return pt_b_r()(construct_vertex_2_object()(bbox, 0),
|
|
construct_vertex_2_object()(bbox, 2), r); }
|
|
|
|
Point construct_x_square(const Point& p, FT r) const
|
|
{ return pt_a_r()(p, p, r); }
|
|
|
|
Point construct_y_square(const Point& p, FT r) const
|
|
{ return pt_b_l()(p, p, r); }
|
|
};
|
|
|
|
#endif // ! (CGAL_RECTANGULAR_3_CENTER_2_MSVC_H)
|
|
// ----------------------------------------------------------------------------
|
|
// ** EOF
|
|
// ----------------------------------------------------------------------------
|
|
|