mirror of https://github.com/CGAL/cgal
Bugfix: Increment of invalidated iterator.
This commit is contained in:
parent
ce20aba740
commit
0fe13eb749
|
|
@ -381,7 +381,7 @@ public:
|
||||||
(geom_traits, q, polygon_out, arr_out);
|
(geom_traits, q, polygon_out, arr_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
conditional_regularize(arr_out, Regularization_category());
|
Visibility_2::conditional_regularize(arr_out, Regularization_category());
|
||||||
|
|
||||||
if (arr_out.faces_begin()->is_unbounded())
|
if (arr_out.faces_begin()->is_unbounded())
|
||||||
return ++arr_out.faces_begin();
|
return ++arr_out.faces_begin();
|
||||||
|
|
@ -405,7 +405,7 @@ public:
|
||||||
Visibility_2::report_while_handling_needles<Rotational_sweep_visibility_2>
|
Visibility_2::report_while_handling_needles<Rotational_sweep_visibility_2>
|
||||||
(geom_traits, q, polygon, arr_out);
|
(geom_traits, q, polygon, arr_out);
|
||||||
|
|
||||||
conditional_regularize(arr_out, Regularization_category());
|
Visibility_2::conditional_regularize(arr_out, Regularization_category());
|
||||||
|
|
||||||
if (arr_out.faces_begin()->is_unbounded())
|
if (arr_out.faces_begin()->is_unbounded())
|
||||||
return ++arr_out.faces_begin();
|
return ++arr_out.faces_begin();
|
||||||
|
|
@ -920,26 +920,6 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VARR>
|
|
||||||
void conditional_regularize(VARR& arr_out, CGAL::Tag_true) const {
|
|
||||||
regularize_output(arr_out);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VARR>
|
|
||||||
void conditional_regularize(VARR&, CGAL::Tag_false) const {
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VARR>
|
|
||||||
void regularize_output(VARR& arr_out) const {
|
|
||||||
typename VARR::Edge_iterator e_itr;
|
|
||||||
for (e_itr = arr_out.edges_begin();
|
|
||||||
e_itr != arr_out.edges_end();
|
|
||||||
e_itr++) {
|
|
||||||
if (e_itr->face() == e_itr->twin()->face())
|
|
||||||
arr_out.remove_edge(e_itr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -222,32 +222,6 @@ private:
|
||||||
mutable bool query_pt_is_vertex;
|
mutable bool query_pt_is_vertex;
|
||||||
mutable bool query_pt_is_on_halfedge;
|
mutable bool query_pt_is_on_halfedge;
|
||||||
|
|
||||||
/*! Regularize output if flag is set to true*/
|
|
||||||
template <typename VARR>
|
|
||||||
void conditional_regularize(VARR& out_arr, CGAL::Tag_true) const {
|
|
||||||
regularize_output(out_arr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! No need to regularize output if flag is set to false*/
|
|
||||||
template <typename VARR>
|
|
||||||
void conditional_regularize(VARR&, CGAL::Tag_false) const {
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*! Regularizes the output - removes edges that have the same face on both
|
|
||||||
sides */
|
|
||||||
template <typename VARR>
|
|
||||||
void regularize_output(VARR& out_arr) const {
|
|
||||||
typename VARR::Edge_iterator e_itr;
|
|
||||||
for (e_itr = out_arr.edges_begin(); e_itr != out_arr.edges_end(); ++e_itr) {
|
|
||||||
|
|
||||||
if (e_itr->face() == e_itr->twin()->face()) {
|
|
||||||
out_arr.remove_edge(e_itr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*! Initialized the constrained Delaunay triangulation using the edges of
|
/*! Initialized the constrained Delaunay triangulation using the edges of
|
||||||
the outer boundary of 'face' */
|
the outer boundary of 'face' */
|
||||||
|
|
@ -306,7 +280,7 @@ private:
|
||||||
CGAL_postcondition(out_arr.number_of_isolated_vertices() == 0);
|
CGAL_postcondition(out_arr.number_of_isolated_vertices() == 0);
|
||||||
CGAL_postcondition(s.empty());
|
CGAL_postcondition(s.empty());
|
||||||
|
|
||||||
conditional_regularize(out_arr, Regularization_category());
|
Visibility_2::conditional_regularize(out_arr, Regularization_category());
|
||||||
vertices.clear();
|
vertices.clear();
|
||||||
|
|
||||||
if (out_arr.faces_begin()->is_unbounded()) {
|
if (out_arr.faces_begin()->is_unbounded()) {
|
||||||
|
|
|
||||||
|
|
@ -401,6 +401,34 @@ void report_while_handling_needles(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename VARR>
|
||||||
|
void regularize_output(VARR& arr_out) {
|
||||||
|
typename VARR::Edge_iterator it = arr_out.edges_begin();
|
||||||
|
|
||||||
|
while(it != arr_out.edges_end()) {
|
||||||
|
if (it->face() == it->twin()->face()) {
|
||||||
|
typename VARR::Halfedge_handle he = it;
|
||||||
|
++it;
|
||||||
|
arr_out.remove_edge(he);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VARR>
|
||||||
|
void conditional_regularize(VARR& arr_out, CGAL::Tag_true) {
|
||||||
|
regularize_output(arr_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VARR>
|
||||||
|
void conditional_regularize(VARR&, CGAL::Tag_false) {
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace Visibility_2
|
} // end namespace Visibility_2
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue