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.
- 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().
On the paper, dleft_frac must be greater that 1.0. But with rounding
errors, it can be slightly lower. Let's try to compare it with
1.0-2*ulp(1.0).
I do not like that sort of hack but I do not know what to do best.
| commit 01ee3e94b6
| Author: Laurent Rineau <laurent.rineau@cgal.org>
| Date: Tue Jun 25 12:53:24 2013 +0200
|
| Use 'std::istream::operator!()' twice to replace 'operator bool()' (C++11 only)
|
| Fixes a compilation error from clang:
|
| include/CGAL/IO/File_binary_mesh_3.h:39:10: error: no viable conversion from 'std::ostream' (aka 'basic_ostream<char>') to 'bool'
| return os << c3t3;
| ^~~~~~~~~~
The return type of operator<< os std::ostream&, and not bool!
Fixes a compilation error from clang:
include/CGAL/IO/File_binary_mesh_3.h:39:10: error: no viable conversion from 'std::ostream' (aka 'basic_ostream<char>') to 'bool'
return os << c3t3;
^~~~~~~~~~
Successfully tested in CGAL-4.3-Ic-59
Approved by the release manager
Conflicts:
Kernel_23/doc/Kernel_23/CGAL/intersections.h
Kernel_23/doc_tex/Kernel_23_ref/intersection.tex
Kernel_d/doc/Kernel_d/Kernel_d.txt
STL_Extension/doc/STL_Extension/CGAL/iterator.h
... to be a pair< variant<XXX>, Primitive_id > rather than
pair<optional<variant<XXX> >, Primitive_id >
The rational is that the optional around the variant here is not needed
since there is one around the pair.