weighted_circumcenter() replaces circumcenter() in the regular framework,
which is not a member of TriangulationCellBase_3 anymore.
Triangulation_cell_base_with_circumcenter_3 is deprecated and replaced by:
Delaunay_triangulation_cell_base_with_circumcenter_3
and
Regular_triangulation_cell_base_with_circumcenter_3.
Implement the changes in documentation, Triangulation_3 code and Mesh_3 code.
Triangulation_cell_base_with_circumcenter should not be responsible for
computing the circumcenter value. It is only responsible for its caching.
The Cell_base used as second template parameter should make the construction,
in the circumcenter() function.
Also fix the order of derivation in Mesh_cell_base_3
there might be inconsistencies (of a few bits) between sliver cached values (64 bits) and values computed on the fly (potentially 80 bit on some 32 bits platforms)
the sliver_cache should be updated by operator()(cell_handle).
It can be useful when we write a complex criterion that implies two simpler
criteria for example, and we want the cache to be updated for only one of them
(to avoid inconsistencies)
+ add a sliver_cache reset because valid_move does re-compute the cache
This variable is now stored exclusively in the sliver_criterion choosen for optimization.
And - remove some default parameters to avoid inconsistencies
Compact_mesh_cell_base_3 has a different API than Mesh_cell_base_3. Unless
one uses the default template parameters, the new API is less
convenient. We cannot deprecate Mesh_cell_base_3 so easily.
this would induce some bugs in global optimizers (because modified_cells should be an intrusive list, and we should not modify previous_intrusive and next_intrusive for cells that are not inside this list
- In Mesh_3, fix the sliver perturber
- the invalidatation of caches,
- the topological check (in check_surface_mesh) was not enough.
Tested in CGAL-4.3-Ic-194
The error was triggered by the following code in CGAL/Mesh_3/C3T3_helpers.h:
template <typename CellForwardIterator>
void reset_circumcenter_cache(CellForwardIterator cells_begin,
CellForwardIterator cells_end) const
{
namespace bl = boost::lambda;
std::for_each(cells_begin, cells_end,
bl::bind(&Cell::invalidate_circumcenter, *bl::_1) );
}
See for example test results here:
CGAL-4.3-Ic-193/Polyhedron_Demo/TestReport_lrineau_i686_Linux-2.6_g++-4.1.2_CentOS-5.1.gz
The testsuite showed that our previous patch was not correct: the sliver
cache is modified by a call to C3T3_helper::min_sliver_in_c3t3_value() when
its parameter use_cache=false. For that reason, the resetting of sliver
caches was not done at the right place in update_mesh_no_topo_change().