replacing compare_xy calls for comparisons on boundary

This commit is contained in:
Eric Berberich 2007-11-07 15:46:52 +00:00
parent 4249f1534e
commit aac3bec08a
1 changed files with 41 additions and 8 deletions

View File

@ -306,8 +306,28 @@ bool Arr_torus_topology_traits_2<GeomTraits, Dcel_>::are_equal
// TODO use compare_on_identification!
// check wether the two concrete points are equal
if (v->boundary_in_x() != CGAL::NO_BOUNDARY) {
if (bound_x == CGAL::NO_BOUNDARY) {
return false;
}
// else
bool res =
(this->_m_traits->compare_y_on_identification_2_object() (
v->point(),
(ind == CGAL::MIN_END ?
this->_m_traits->construct_min_vertex_2_object()(cv) :
this->_m_traits->construct_max_vertex_2_object()(cv)))
== CGAL::EQUAL
);
return res;
}
CGAL_assertion(v->boundary_in_y() != CGAL::NO_BOUNDARY);
if (bound_y == CGAL::NO_BOUNDARY) {
return false;
}
// else
bool res =
(this->_m_traits->compare_xy_2_object() (
(this->_m_traits->compare_x_on_identification_2_object() (
v->point(),
(ind == CGAL::MIN_END ?
this->_m_traits->construct_min_vertex_2_object()(cv) :
@ -1034,14 +1054,27 @@ _sign_of_path(
if (bcv1x != NO_BOUNDARY || bcv1y != NO_BOUNDARY ||
bcv2x != NO_BOUNDARY || bcv2y != NO_BOUNDARY) {
// counters can change!
CGAL::Comparison_result cmp =
(this->_m_traits->compare_xy_2_object()(
prev1->vertex()->point(),
this->_m_traits->construct_min_vertex_2_object()(cv)));
// sign can change!
if (cmp != CGAL::EQUAL) {
bool equal = false;
Point_2 minp = this->_m_traits->construct_min_vertex_2_object()(cv);
CGAL::Boundary_type bound_x =
this->_m_traits->boundary_in_x_2_object()(cv, CGAL::MIN_END);
CGAL::Boundary_type bound_y =
this->_m_traits->boundary_in_y_2_object()(cv, CGAL::MIN_END);
if (bcv1x != NO_BOUNDARY || bcv1y != NO_BOUNDARY) {
equal = this->are_equal(prev1->vertex(), cv, CGAL::MIN_END,
bound_x, bound_y);
} else {
equal = (this->_m_traits->compare_xy_2_object()(
prev1->vertex()->point(), minp
) == CGAL::EQUAL);
}
if (!equal) {
std::swap(bcv1x, bcv2x);
std::swap(bcv1y, bcv2y);
}