mirror of https://github.com/CGAL/cgal
* Permissios of the files changed
* Trim functionality added to conic and circular_arc traits. * Examples for conic_polycurve and circular_arc_polycurve added.
This commit is contained in:
parent
ae79550a0d
commit
52c6d3044d
0
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve.cpp
Executable file → Normal file
0
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve.cpp
Executable file → Normal file
13
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve_circular_arc.cpp
Executable file → Normal file
13
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve_circular_arc.cpp
Executable file → Normal file
|
|
@ -136,14 +136,13 @@ int main ()
|
||||||
std::cout << "Opposite of X-monotone Polycurve 1: " << opposite_x_monotone_polycurve_1 << std::endl;
|
std::cout << "Opposite of X-monotone Polycurve 1: " << opposite_x_monotone_polycurve_1 << std::endl;
|
||||||
|
|
||||||
//Waqar: fix this once the intersect functor for circular arc polycurve is fixed.
|
//Waqar: fix this once the intersect functor for circular arc polycurve is fixed.
|
||||||
|
Polycurve_circ_arc_arrangment polycurve_arrangment(&traits);
|
||||||
// Polycurve_circ_arc_arrangment polycurve_arrangment(&traits);
|
insert(polycurve_arrangment, polycurve_1);
|
||||||
// insert(polycurve_arrangment, polycurve_1);
|
//insert(polycurve_arrangment, polycurve_2);
|
||||||
// insert(polycurve_arrangment, polycurve_2);
|
//insert(polycurve_arrangment, x_polycurve_1);
|
||||||
// insert(polycurve_arrangment, x_polycurve_1);
|
//insert(polycurve_arrangment, x_polycurve_2);
|
||||||
// insert(polycurve_arrangment, x_polycurve_2);
|
|
||||||
// std::cout << "Arrangment Statistics: " << std::endl;
|
// std::cout << "Arrangment Statistics: " << std::endl;
|
||||||
// print_arrangement (polycurve_arrangment);
|
print_arrangement (polycurve_arrangment);
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
0
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve_conic.cpp
Executable file → Normal file
0
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/polycurve_conic.cpp
Executable file → Normal file
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
/*! \class
|
/*! \class
|
||||||
|
|
@ -58,6 +59,8 @@ public:
|
||||||
typedef Tag_true Has_left_category;
|
typedef Tag_true Has_left_category;
|
||||||
typedef Tag_true Has_merge_category;
|
typedef Tag_true Has_merge_category;
|
||||||
typedef Tag_false Has_do_intersect_category;
|
typedef Tag_false Has_do_intersect_category;
|
||||||
|
typedef Tag_false Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
//typedef boost::false_type Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
typedef Arr_oblivious_side_tag Left_side_category;
|
typedef Arr_oblivious_side_tag Left_side_category;
|
||||||
typedef Arr_oblivious_side_tag Bottom_side_category;
|
typedef Arr_oblivious_side_tag Bottom_side_category;
|
||||||
|
|
@ -695,6 +698,36 @@ public:
|
||||||
return Construct_opposite_2();
|
return Construct_opposite_2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Trim_2
|
||||||
|
{
|
||||||
|
/*!\brief
|
||||||
|
* Returns a trimmed version of an arc
|
||||||
|
*
|
||||||
|
* \param cv The arc
|
||||||
|
* \param p the new first endpoint
|
||||||
|
* \param q the new second endpoint
|
||||||
|
* \return The trimmed arc
|
||||||
|
*
|
||||||
|
* \pre p != q
|
||||||
|
* \pre both points must be interior and must lie on \c cv
|
||||||
|
*/
|
||||||
|
public:
|
||||||
|
|
||||||
|
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
|
||||||
|
const Point_2& src,
|
||||||
|
const Point_2 tgt)const
|
||||||
|
{
|
||||||
|
return (xcv.trim(src, tgt));
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//get a Trim_2 functor object
|
||||||
|
Trim_2 trim_2_object() const
|
||||||
|
{
|
||||||
|
return Trim_2();
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} //namespace CGAL
|
} //namespace CGAL
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,8 @@ public:
|
||||||
typedef Tag_true Has_left_category;
|
typedef Tag_true Has_left_category;
|
||||||
typedef Tag_true Has_merge_category;
|
typedef Tag_true Has_merge_category;
|
||||||
typedef Tag_false Has_do_intersect_category;
|
typedef Tag_false Has_do_intersect_category;
|
||||||
|
//typedef boost::true_type Has_line_segment_constructor;
|
||||||
|
typedef Tag_true Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
typedef Arr_oblivious_side_tag Left_side_category;
|
typedef Arr_oblivious_side_tag Left_side_category;
|
||||||
typedef Arr_oblivious_side_tag Bottom_side_category;
|
typedef Arr_oblivious_side_tag Bottom_side_category;
|
||||||
|
|
@ -814,9 +816,38 @@ public:
|
||||||
{
|
{
|
||||||
return Construct_opposite_2();
|
return Construct_opposite_2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Trim_2
|
||||||
|
{
|
||||||
|
/*!\brief
|
||||||
|
* Returns a trimmed version of an arc
|
||||||
|
*
|
||||||
|
* \param cv The arc
|
||||||
|
* \param p the new first endpoint
|
||||||
|
* \param q the new second endpoint
|
||||||
|
* \return The trimmed arc
|
||||||
|
*
|
||||||
|
* \pre p != q
|
||||||
|
* \pre both points must be interior and must lie on \c cv
|
||||||
|
*/
|
||||||
|
public:
|
||||||
|
|
||||||
|
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
|
||||||
|
const Point_2& src,
|
||||||
|
const Point_2 tgt)const
|
||||||
|
{
|
||||||
|
return (xcv.trim(src, tgt));
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//get a Trim_2 functor object
|
||||||
|
Trim_2 trim_2_object() const
|
||||||
|
{
|
||||||
|
return Trim_2();
|
||||||
|
}
|
||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
||||||
} //namespace CGAL
|
} //namespace CGAL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -796,7 +796,8 @@ public:
|
||||||
_first(),
|
_first(),
|
||||||
_second(),
|
_second(),
|
||||||
_third(),
|
_third(),
|
||||||
_source(), _target(),
|
_source(),
|
||||||
|
_target(),
|
||||||
_info (0)
|
_info (0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
@ -869,50 +870,6 @@ public:
|
||||||
_info = (_info | IS_DIRECTED_RIGHT_MASK);
|
_info = (_info | IS_DIRECTED_RIGHT_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
// waqar
|
|
||||||
// Adding an almost duplicate constructor as the original one is cause conflict when used with
|
|
||||||
// polycurve_circular_arcs
|
|
||||||
/*!
|
|
||||||
* Construct a segment arc from two kernel points
|
|
||||||
* \param source the source point.
|
|
||||||
* \ param target the target point.
|
|
||||||
* \pre source and target are not equal.
|
|
||||||
*/
|
|
||||||
//bad idea
|
|
||||||
// _X_monotone_circle_segment_2 (const Point_2& source,
|
|
||||||
// const Point_2& target) :
|
|
||||||
// _source(source.x(), source.y()),
|
|
||||||
// _target(target.x(), target.y()),
|
|
||||||
// _info (0)
|
|
||||||
// {
|
|
||||||
// //std:: cout << source.x();
|
|
||||||
// typename Kernel::Point_2 kernel_source (source.x(), source.y());
|
|
||||||
// typename Kernel::Point_2 kernel_target; //(target.x(), target.y());
|
|
||||||
|
|
||||||
// // Line_2 line(kernel_source, kernel_target);
|
|
||||||
// // _first = line.a();
|
|
||||||
// // _second = line.b();
|
|
||||||
// // _third = line.c();
|
|
||||||
|
|
||||||
// // // Check if the segment is directed left or right:
|
|
||||||
// // Comparison_result res = CGAL::compare (kernel_source.x(), kernel_target.x());
|
|
||||||
|
|
||||||
// // if (res == EQUAL)
|
|
||||||
// // {
|
|
||||||
// // CGAL_precondition (CGAL::sign(_second) == ZERO);
|
|
||||||
|
|
||||||
// // // We have a vertical segment - compare the points by their
|
|
||||||
// // // y-coordinates:
|
|
||||||
// // _info = (_info | IS_VERTICAL_SEGMENT_MASK);
|
|
||||||
// // res = CGAL::compare (kernel_source.y(), kernel_target.y());
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// // CGAL_precondition (res != EQUAL);
|
|
||||||
// // if (res == SMALLER)
|
|
||||||
// // _info = (_info | IS_DIRECTED_RIGHT_MASK);
|
|
||||||
// }
|
|
||||||
//end of duplicate contructor
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Construct a circular arc.
|
* Construct a circular arc.
|
||||||
* \param line The supporting line.
|
* \param line The supporting line.
|
||||||
|
|
@ -2478,6 +2435,57 @@ protected:
|
||||||
++oi;
|
++oi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//waqar
|
||||||
|
/*
|
||||||
|
* check if the point lies on the circular arc.
|
||||||
|
*
|
||||||
|
* I could have skipped this function and used circ_point_position() instead
|
||||||
|
* but I think the implementation of that function is wrong as it is not squaring the radius
|
||||||
|
* in order to check whether the point satisfies the circle equation.
|
||||||
|
*/
|
||||||
|
Comparison_result contain_point(const Point_2& p) const
|
||||||
|
{
|
||||||
|
Comparison_result res = CGAL::compare (CGAL::square (p.x() - x0()),
|
||||||
|
CGAL::square(sqr_r()) - CGAL::square (p.y() - y0()));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
/*!
|
||||||
|
* Trim the arc given its new endpoints.
|
||||||
|
* \param ps The new source point.
|
||||||
|
* \param pt The new target point.
|
||||||
|
* \return The new trimmed arc.
|
||||||
|
* \pre Both ps and pt lies on the arc and must conform with the current
|
||||||
|
* direction of the arc.
|
||||||
|
*/
|
||||||
|
Self trim (const Point_2& ps,
|
||||||
|
const Point_2& pt) const
|
||||||
|
{
|
||||||
|
Self arc = *this;
|
||||||
|
Kernel ker;
|
||||||
|
// Make sure that both ps and pt lie on the arc.
|
||||||
|
CGAL_precondition (this->contain_point (ps) == EQUAL);
|
||||||
|
CGAL_precondition (this->contain_point (pt) == EQUAL );
|
||||||
|
|
||||||
|
//make sure ps and pt are not the same
|
||||||
|
CGAL_precondition(CGAL::compare(ps.x(), pt.x()) != EQUAL &&
|
||||||
|
CGAL::compare(ps.y(), pt.y()) != EQUAL);
|
||||||
|
|
||||||
|
// Make sure that the endpoints conform with the direction of the arc.
|
||||||
|
Point_2 source = ps;
|
||||||
|
Point_2 target = pt;
|
||||||
|
if( this->is_directed_right() && (ps.x() > pt.x()) )
|
||||||
|
{
|
||||||
|
//since the direction of the arc should not be changed. we will interchange the source and the target.
|
||||||
|
source = pt;
|
||||||
|
target = ps;
|
||||||
|
}
|
||||||
|
|
||||||
|
arc._source = source;
|
||||||
|
arc._target = target;
|
||||||
|
|
||||||
|
return (arc);
|
||||||
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <boost/type_traits/is_same.hpp>
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
#include <CGAL/basic.h>
|
#include <CGAL/basic.h>
|
||||||
#include <CGAL/tags.h>
|
#include <CGAL/tags.h>
|
||||||
|
|
@ -55,6 +56,8 @@ namespace CGAL {
|
||||||
typedef typename Segment_traits_2::Top_side_category Top_side_category;
|
typedef typename Segment_traits_2::Top_side_category Top_side_category;
|
||||||
typedef typename Segment_traits_2::Right_side_category Right_side_category;
|
typedef typename Segment_traits_2::Right_side_category Right_side_category;
|
||||||
|
|
||||||
|
typedef typename Segment_traits_2::Has_construct_x_monotone_curve_from_two_points_category Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
typedef typename Arr_are_all_sides_oblivious_tag
|
typedef typename Arr_are_all_sides_oblivious_tag
|
||||||
<Left_side_category, Bottom_side_category,
|
<Left_side_category, Bottom_side_category,
|
||||||
Top_side_category, Right_side_category>::result
|
Top_side_category, Right_side_category>::result
|
||||||
|
|
@ -1117,6 +1120,9 @@ namespace CGAL {
|
||||||
/* Append a point `p` to an existing polyline `cv` at the back. */
|
/* Append a point `p` to an existing polyline `cv` at the back. */
|
||||||
void operator()(Curve_2& cv, const Point_2& p) const
|
void operator()(Curve_2& cv, const Point_2& p) const
|
||||||
{
|
{
|
||||||
|
//waqar
|
||||||
|
//CGAL_static_assertion_msg((Has_construct_x_monotone_curve_from_two_points_category()), "X_monotone_curve_2 does not support construction from two points!");
|
||||||
|
//typename boost::enable_if_c< Has_construct_x_monotone_curve_from_two_points_category::value >::type* = 0
|
||||||
typedef typename Curve_2::Segments_size_type size_type;
|
typedef typename Curve_2::Segments_size_type size_type;
|
||||||
size_type num_seg = cv.number_of_segments();
|
size_type num_seg = cv.number_of_segments();
|
||||||
CGAL_precondition(num_seg > 0);
|
CGAL_precondition(num_seg > 0);
|
||||||
|
|
@ -1153,6 +1159,8 @@ namespace CGAL {
|
||||||
/* Append a point `p` to an existing polyline `xcv` at the back. */
|
/* Append a point `p` to an existing polyline `xcv` at the back. */
|
||||||
void operator()(X_monotone_curve_2& xcv, const Point_2& p) const
|
void operator()(X_monotone_curve_2& xcv, const Point_2& p) const
|
||||||
{
|
{
|
||||||
|
//waqar
|
||||||
|
//CGAL_static_assertion_msg((Has_construct_x_monotone_curve_from_two_points_category()), "X_monotone_curve_2 does not support construction from two points!");
|
||||||
typedef typename X_monotone_curve_2::Segments_size_type size_type;
|
typedef typename X_monotone_curve_2::Segments_size_type size_type;
|
||||||
size_type num_seg = xcv.number_of_segments();
|
size_type num_seg = xcv.number_of_segments();
|
||||||
CGAL_precondition(num_seg > 0);
|
CGAL_precondition(num_seg > 0);
|
||||||
|
|
@ -1269,6 +1277,9 @@ namespace CGAL {
|
||||||
/* Append a point `p` to an existing polyline `cv` at the front. */
|
/* Append a point `p` to an existing polyline `cv` at the front. */
|
||||||
void operator()(Curve_2& cv, const Point_2& p) const
|
void operator()(Curve_2& cv, const Point_2& p) const
|
||||||
{
|
{
|
||||||
|
//waqar
|
||||||
|
//CGAL_static_assertion_msg((Has_construct_x_monotone_curve_from_two_points_category()), "X_monotone_curve_2 does not support construction from two points!");
|
||||||
|
|
||||||
CGAL_precondition_code
|
CGAL_precondition_code
|
||||||
(
|
(
|
||||||
typedef typename Curve_2::Segments_size_type size_type;
|
typedef typename Curve_2::Segments_size_type size_type;
|
||||||
|
|
@ -1300,6 +1311,9 @@ namespace CGAL {
|
||||||
/* Append a point `p` to an existing polyline `xcv` at the front. */
|
/* Append a point `p` to an existing polyline `xcv` at the front. */
|
||||||
void operator()(const X_monotone_curve_2& xcv, Point_2& p) const
|
void operator()(const X_monotone_curve_2& xcv, Point_2& p) const
|
||||||
{
|
{
|
||||||
|
//waqar
|
||||||
|
//CGAL_static_assertion_msg((Has_construct_x_monotone_curve_from_two_points_category()), "X_monotone_curve_2 does not support construction from two points!");
|
||||||
|
|
||||||
const Segment_traits_2* seg_traits = m_poly_traits.segment_traits_2();
|
const Segment_traits_2* seg_traits = m_poly_traits.segment_traits_2();
|
||||||
CGAL_precondition_code
|
CGAL_precondition_code
|
||||||
(
|
(
|
||||||
|
|
@ -1545,10 +1559,16 @@ namespace CGAL {
|
||||||
* \return The past-the-end iterator.
|
* \return The past-the-end iterator.
|
||||||
*/
|
*/
|
||||||
template <typename OutputIterator>
|
template <typename OutputIterator>
|
||||||
OutputIterator operator()(const X_monotone_curve_2& cv1,
|
OutputIterator
|
||||||
const X_monotone_curve_2& cv2,
|
//waqar
|
||||||
OutputIterator oi) const
|
//typename boost::enable_if_c<Has_line_segment_constructor::value, OutputIterator>::type
|
||||||
|
operator()(const X_monotone_curve_2& cv1,
|
||||||
|
const X_monotone_curve_2& cv2,
|
||||||
|
OutputIterator oi) const
|
||||||
|
//typename boost::enable_if_c< Has_line_segment_constructor::value >::type* = 0) const
|
||||||
{
|
{
|
||||||
|
//waqar
|
||||||
|
//CGAL_static_assertion_msg((Has_line_segment_constructor::value), "X_monotone_curve_2 does not support construction from Line_segment!");
|
||||||
const Segment_traits_2* seg_traits = m_poly_traits.segment_traits_2();
|
const Segment_traits_2* seg_traits = m_poly_traits.segment_traits_2();
|
||||||
Compare_y_at_x_2 cmp_y_at_x = m_poly_traits.compare_y_at_x_2_object();
|
Compare_y_at_x_2 cmp_y_at_x = m_poly_traits.compare_y_at_x_2_object();
|
||||||
typename Segment_traits_2::Equal_2 equal = seg_traits->equal_2_object();
|
typename Segment_traits_2::Equal_2 equal = seg_traits->equal_2_object();
|
||||||
|
|
@ -1794,7 +1814,8 @@ namespace CGAL {
|
||||||
*oi++ = make_object(ip);
|
*oi++ = make_object(ip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oi;
|
|
||||||
|
return oi;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -2804,6 +2825,28 @@ namespace CGAL {
|
||||||
return from;
|
return from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Trim_2
|
||||||
|
{
|
||||||
|
/*!\brief
|
||||||
|
* add comments
|
||||||
|
*/
|
||||||
|
public:
|
||||||
|
|
||||||
|
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
|
||||||
|
const Point_2& src,
|
||||||
|
const Point_2 tgt)const
|
||||||
|
{
|
||||||
|
return (xcv);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//get a Trim_2 functor object
|
||||||
|
Trim_2 trim_2_object() const
|
||||||
|
{
|
||||||
|
return Trim_2();
|
||||||
|
}
|
||||||
|
|
||||||
// A utility class that compare a curve-end with a point.
|
// A utility class that compare a curve-end with a point.
|
||||||
template <typename Comparer>
|
template <typename Comparer>
|
||||||
class Compare_points {
|
class Compare_points {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@
|
||||||
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
|
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
template <class Kernel_ = Exact_predicates_exact_constructions_kernel>
|
template <class Kernel_ = Exact_predicates_exact_constructions_kernel>
|
||||||
|
|
@ -65,6 +67,7 @@ public:
|
||||||
typedef Tag_true Has_left_category;
|
typedef Tag_true Has_left_category;
|
||||||
typedef Tag_true Has_merge_category;
|
typedef Tag_true Has_merge_category;
|
||||||
typedef Tag_false Has_do_intersect_category;
|
typedef Tag_false Has_do_intersect_category;
|
||||||
|
typedef Tag_true Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
typedef Arr_oblivious_side_tag Left_side_category;
|
typedef Arr_oblivious_side_tag Left_side_category;
|
||||||
typedef Arr_oblivious_side_tag Bottom_side_category;
|
typedef Arr_oblivious_side_tag Bottom_side_category;
|
||||||
|
|
@ -1183,4 +1186,5 @@ InputStream& operator>> (InputStream& is, Arr_segment_2<Kernel>& seg)
|
||||||
|
|
||||||
} //namespace CGAL
|
} //namespace CGAL
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/IO_base_test.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/IO_base_test.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/Traits_base_test.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/Traits_base_test.h
Executable file → Normal file
4
Arrangement_on_surface_2/test/Arrangement_on_surface_2/Traits_test.h
Executable file → Normal file
4
Arrangement_on_surface_2/test/Arrangement_on_surface_2/Traits_test.h
Executable file → Normal file
|
|
@ -910,7 +910,7 @@ bool Traits_test<Geom_traits_T>::
|
||||||
intersect_wrapper(std::istringstream& str_stream)
|
intersect_wrapper(std::istringstream& str_stream)
|
||||||
{
|
{
|
||||||
//I am disabling this test only for polycurve_circular_arc tarits until it is resolved
|
//I am disabling this test only for polycurve_circular_arc tarits until it is resolved
|
||||||
#if TEST_GEOM_TRAITS != POLYCURVE_CIRCULAR_ARC_GEOM_TRAITS
|
//#if TEST_GEOM_TRAITS != POLYCURVE_CIRCULAR_ARC_GEOM_TRAITS
|
||||||
|
|
||||||
typedef Geom_traits_T Traits;
|
typedef Geom_traits_T Traits;
|
||||||
typedef typename Traits::Point_2 Point_2;
|
typedef typename Traits::Point_2 Point_2;
|
||||||
|
|
@ -965,7 +965,7 @@ intersect_wrapper(std::istringstream& str_stream)
|
||||||
|
|
||||||
object_vec.clear();
|
object_vec.clear();
|
||||||
|
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1142,21 +1142,21 @@ test_polycurve_circular_arc_traits()
|
||||||
execute_commands_new_structure Polycurves_circular_arcs polycurve_circular_arc_traits \
|
execute_commands_new_structure Polycurves_circular_arcs polycurve_circular_arc_traits \
|
||||||
COMPARE_Y_AT_X \
|
COMPARE_Y_AT_X \
|
||||||
EQUAL \
|
EQUAL \
|
||||||
# IS_VERTICAL \
|
IS_VERTICAL \
|
||||||
# SPLIT \
|
SPLIT \
|
||||||
# ARE_MERGEABLE \
|
ARE_MERGEABLE \
|
||||||
# COMPARE_Y_AT_X_LEFT \
|
COMPARE_Y_AT_X_LEFT \
|
||||||
# COMPARE_Y_AT_X_RIGHT \
|
COMPARE_Y_AT_X_RIGHT \
|
||||||
# MAKE_X_MONOTONE \
|
MAKE_X_MONOTONE \
|
||||||
# PUSH_BACK \
|
PUSH_BACK \
|
||||||
# PUSH_FRONT \
|
PUSH_FRONT \
|
||||||
# COMPARE_X_POLYCURVE \
|
COMPARE_X_POLYCURVE \
|
||||||
# COMPARE_XY_POLYCURVE \
|
COMPARE_XY_POLYCURVE \
|
||||||
# NUMBER_OF_POINTS \
|
NUMBER_OF_POINTS \
|
||||||
# VERTEX \
|
VERTEX \
|
||||||
# CONSTRUCT_OPPOSITE \
|
CONSTRUCT_OPPOSITE \
|
||||||
# MERGE \
|
MERGE \
|
||||||
# COMPARE_ENDPOINTS_XY
|
COMPARE_ENDPOINTS_XY
|
||||||
#INTERSECT
|
#INTERSECT
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
## -*- comment-start: "#"; -*-
|
## -*- comment-start: "#"; -*-
|
||||||
# Format
|
# Format
|
||||||
# <Command> <x-curve 1> <x-curve 2> <Number of intersections expected> <Intersection type> <multiplicity of intersection point or curve>
|
# <Command> <x-curve 1> <x-curve 2> <Number of intersections expected> <Intersection type> <intersecting point/curve id>
|
||||||
|
# <multiplicity of intersection point or curve>
|
||||||
#
|
#
|
||||||
# Intersection type: 0 if intersection is just a point, 1 if a curve is overlapping
|
# Intersection type: 0 if intersection is just a point, 1 if a curve is overlapping
|
||||||
#
|
#
|
||||||
|
|
|
||||||
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_arc_polycurve.cpp
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_arc_polycurve.cpp
Executable file → Normal file
30
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_circular_arc_polycurve.cpp
Executable file → Normal file
30
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_circular_arc_polycurve.cpp
Executable file → Normal file
|
|
@ -40,6 +40,8 @@ typedef Polycurve_arc_traits_2::X_monotone_curve_2 X_mono
|
||||||
typedef Polycurve_arc_traits_2::Curve_2 Polycurve;
|
typedef Polycurve_arc_traits_2::Curve_2 Polycurve;
|
||||||
typedef Kernel::Circle_2 Circle_2;
|
typedef Kernel::Circle_2 Circle_2;
|
||||||
|
|
||||||
|
typedef Arc_traits_2::Has_construct_x_monotone_curve_from_two_points_category Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
|
|
||||||
template<typename Curve>
|
template<typename Curve>
|
||||||
bool check_compare_y_at_x_2(Curve& cv)
|
bool check_compare_y_at_x_2(Curve& cv)
|
||||||
|
|
@ -144,10 +146,10 @@ int main ()
|
||||||
X_monotone_polycurve x_polycurve_2 = traits.construct_x_monotone_curve_2_object()( x_curves.begin(), x_curves.end() );
|
X_monotone_polycurve x_polycurve_2 = traits.construct_x_monotone_curve_2_object()( x_curves.begin(), x_curves.end() );
|
||||||
|
|
||||||
//testing for arc construction from two points.
|
//testing for arc construction from two points.
|
||||||
Arc_x_monotone_section_2 x_segment( Kernel::Point_2(0, 0), Kernel::Point_2(2, 0) );
|
//Arc_x_monotone_section_2 x_segment( Kernel::Point_2(0, 0), Kernel::Point_2(2, 0) );
|
||||||
x_curves.clear();
|
//x_curves.clear();
|
||||||
x_curves.push_back(x_segment);
|
//x_curves.push_back(x_segment);
|
||||||
X_monotone_polycurve x_polycurve_3 = traits.construct_x_monotone_curve_2_object()( x_curves.begin(), x_curves.end() );
|
//X_monotone_polycurve x_polycurve_3 = traits.construct_x_monotone_curve_2_object()( x_curves.begin(), x_curves.end() );
|
||||||
//std::cout<< "x_polycurve_3: " << x_polycurve_3 << std::endl;
|
//std::cout<< "x_polycurve_3: " << x_polycurve_3 << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -180,7 +182,25 @@ int main ()
|
||||||
|
|
||||||
// check_compare_y_at_x_2(x_polycurve_1);
|
// check_compare_y_at_x_2(x_polycurve_1);
|
||||||
// check_intersect(x_polycurve_1, x_polycurve_2);
|
// check_intersect(x_polycurve_1, x_polycurve_2);
|
||||||
check_make_x_monotone(curve_1);
|
//check_make_x_monotone(curve_1);
|
||||||
|
|
||||||
|
//checking if the cgal_assertion for curve construction for two points work or not.
|
||||||
|
//Point_2 push_back_point( Number_type (10, 1), Number_type (0, 1));
|
||||||
|
//traits.push_back_2_object()(x_polycurve_1, push_back_point);
|
||||||
|
|
||||||
|
|
||||||
|
if(Has_construct_x_monotone_curve_from_two_points_category())
|
||||||
|
std::cout << "It has a line segment constructor. " << std::endl;
|
||||||
|
|
||||||
|
//checking for trim.
|
||||||
|
Arc_traits_2 arc_traits;
|
||||||
|
source = Point_2 ( Number_type (1, 1), Number_type (0, 1) );
|
||||||
|
target = Point_2 ( Number_type (3, 1), Number_type (2, 1));
|
||||||
|
// source = Point_2 ( Number_type (2, 1), Number_type (-2, 1) );
|
||||||
|
// target = Point_2 ( Number_type (3, 1), Number_type (4, 1));
|
||||||
|
std::cout << " curve is : " << xc2 << std::endl;
|
||||||
|
Arc_x_monotone_section_2 trimmed_curve = arc_traits.trim_2_object()(xc2, source, target);
|
||||||
|
std::cout << "trimmed conic curve is : " << trimmed_curve << std::endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_configuration.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_configuration.h
Executable file → Normal file
36
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_conic_polycurve.cpp
Executable file → Normal file
36
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_conic_polycurve.cpp
Executable file → Normal file
|
|
@ -21,6 +21,9 @@ int main ()
|
||||||
#include <CGAL/Arr_polyline_traits_2.h>
|
#include <CGAL/Arr_polyline_traits_2.h>
|
||||||
#include <CGAL/Arr_conic_traits_2.h>
|
#include <CGAL/Arr_conic_traits_2.h>
|
||||||
#include <CGAL/Arrangement_2.h>
|
#include <CGAL/Arrangement_2.h>
|
||||||
|
#include <CGAL/tags.h>
|
||||||
|
#include <CGAL/Arr_tags.h>
|
||||||
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
||||||
//#include <CGAL/Arr_geometry_traits/Polyline_2.h>
|
//#include <CGAL/Arr_geometry_traits/Polyline_2.h>
|
||||||
|
|
||||||
|
|
@ -44,6 +47,8 @@ typedef CGAL::Arr_polyline_traits_2<Conic_traits_2> Polycu
|
||||||
typedef Polycurve_conic_traits_2::X_monotone_curve_2 Pc_x_monotone_curve_2;
|
typedef Polycurve_conic_traits_2::X_monotone_curve_2 Pc_x_monotone_curve_2;
|
||||||
//typedef Polycurve_conic_traits_2::Point_2 polypoint;
|
//typedef Polycurve_conic_traits_2::Point_2 polypoint;
|
||||||
|
|
||||||
|
typedef Conic_traits_2::Has_construct_x_monotone_curve_from_two_points_category Has_construct_x_monotone_curve_from_two_points_category;
|
||||||
|
|
||||||
|
|
||||||
// typedef CGAL::Arr_polyline_traits_2<
|
// typedef CGAL::Arr_polyline_traits_2<
|
||||||
// CGAL::Arr_conic_traits_2<CGAL::Cartesian<BigRat>,
|
// CGAL::Arr_conic_traits_2<CGAL::Cartesian<BigRat>,
|
||||||
|
|
@ -641,6 +646,11 @@ void check_compare_points(Curve& cv)
|
||||||
CGAL::Arr_parameter_space result = traits.parameter_space_in_x_2_object()(cv, CGAL::ARR_MAX_END);
|
CGAL::Arr_parameter_space result = traits.parameter_space_in_x_2_object()(cv, CGAL::ARR_MAX_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void check_enable_if(int a, int b, boost::enable_if<boost::is_same<Has_construct_x_monotone_curve_from_two_points_category(), boost::true_type>::type > )
|
||||||
|
// {
|
||||||
|
// std::cout << a+b << std::endl;
|
||||||
|
// }
|
||||||
|
|
||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
Polycurve_conic_traits_2 traits;
|
Polycurve_conic_traits_2 traits;
|
||||||
|
|
@ -732,6 +742,19 @@ int main ()
|
||||||
Polycurve_conic_traits_2::Curve_2 Expected_push_back_result = construct_polycurve( conic_curves.begin(), conic_curves.end() );
|
Polycurve_conic_traits_2::Curve_2 Expected_push_back_result = construct_polycurve( conic_curves.begin(), conic_curves.end() );
|
||||||
|
|
||||||
|
|
||||||
|
// //checking the orientattion consistency
|
||||||
|
// Conic_curve_2 c21(0,1,0,1,0,0,CGAL::CLOCKWISE, Conic_point_2( Algebraic(9), Algebraic(-3) ), Conic_point_2( Algebraic(0), Algebraic(0) ) );
|
||||||
|
// Conic_curve_2 c20(1,0,0,0,-1,0,CGAL::COUNTERCLOCKWISE, Conic_point_2( Algebraic(0), Algebraic(0) ), Conic_point_2( Algebraic(3), Algebraic(9) ) );
|
||||||
|
// Conic_x_monotone_curve_2 xc20 (c20);
|
||||||
|
// Conic_x_monotone_curve_2 xc21 (c21);
|
||||||
|
// xmono_conic_curves_2.clear();
|
||||||
|
// xmono_conic_curves_2.push_back(xc20);
|
||||||
|
// xmono_conic_curves_2.push_back(xc21);
|
||||||
|
// Pc_x_monotone_curve_2 eric_polycurve = construct_x_mono_polycurve(xmono_conic_curves_2.begin(), xmono_conic_curves_2.end());
|
||||||
|
// std::cout << "the polycurve is: " << eric_polycurve << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// std::cout<< std::endl;
|
// std::cout<< std::endl;
|
||||||
|
|
@ -782,11 +805,22 @@ int main ()
|
||||||
|
|
||||||
// check_compare_y_at_x_left();
|
// check_compare_y_at_x_left();
|
||||||
// std::cout<< std::endl;
|
// std::cout<< std::endl;
|
||||||
check_compare_points(conic_x_mono_polycurve_1);
|
//check_compare_points(conic_x_mono_polycurve_1);
|
||||||
|
|
||||||
//number of segments
|
//number of segments
|
||||||
//std::cout<< "Number of segments: " << traits.number_of_points_2_object()(base_curve_push_back) << std::endl;
|
//std::cout<< "Number of segments: " << traits.number_of_points_2_object()(base_curve_push_back) << std::endl;
|
||||||
|
|
||||||
|
Conic_traits_2 con_traits;
|
||||||
|
Conic_point_2 ps2 (1, 1);
|
||||||
|
Conic_point_2 pt2 (2, 4);
|
||||||
|
std::cout << "conic curve is : " << xc3 << std::endl;
|
||||||
|
Conic_x_monotone_curve_2 trimmed_curve = con_traits.trim_2_object()(xc3, ps2, pt2);
|
||||||
|
std::cout << "trimmed conic curve is : " << trimmed_curve << std::endl;
|
||||||
|
|
||||||
|
if(Has_construct_x_monotone_curve_from_two_points_category())
|
||||||
|
std::cout << "It has a line segment constructor. " << std::endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_geom_traits.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_geom_traits.h
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp
Executable file → Normal file
0
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp
Executable file → Normal file
Loading…
Reference in New Issue