Instead of having the return type wrapped in a `Needs_FT` tag,
not the call operator overloads that can be called with `RT` are
"tagged" by adding a last argument of type `RT_sufficient` with a
default value.
This commit introduces a new kind of predicate in
`<CGAL/Kernel/interface_macros.h>`. In addition to
- `CGAL_kernel_pred` for predicates,
- `CGAL_Kernel_pred_RT` for predicates that can be implemented using a
ring-type,
now there is also:
- `CGAL_Kernel_pred_RT_or_FT` for predicates with multiple overloads of
`operator()`, some needing a field type and other needing a ring type
(without the division operator).
The C++ code can discriminate between the two cases with a special wrapper
for the return type: `CGAL::Needs_FT<result_type` instead of `result_type`
(defined in `<CGAL/tags.h>`.
In `<CGAL/Filtered_predicate.h>`, in addition to the usual class template
`Filtered_predicate`, there is now also `Filtered_predicate_RT_FT` that
takes three predicates as template parameters instead of two:
- the exact predicate with an ring-type,
- the exact predicate with a field-type,
- the approximate predicate (with `Interval_nt` as number-type).
For the moment, only `Compare_distance_3` in
`<CGAL/Cartesian/function_objects.h>` is using the new
`Filtered_predicate_RT_FT`.
Before this commit, the file
`Kernel_23/test/Kernel_23/include/CGAL/_test_new_3.h` was testing
`Compare_distance_3` only with three points or for points. This commit adds:
- a test with `Point_3, Point_3, Segment_3`, and
- a test with `Line_3, Point_3, Point_3`, that actually needs a field type
with its current implementation.
In the test `Kernel_23/test/Kernel_23/Filtered_cartesian.cpp`, the macro
`CGAL_NO_MPZF_DIVISION_OPERATOR` is defined, to remove the division operator
from `CGAL::Mpzf`. `CGAL::Mpzf` is a ring-type, even with its `operator/`
(because that `operator/` can only compute exact divisions), but with
`CGAL_NO_MPZF_DIVISION_OPERATOR` defined, that is now checked by the compiler.
The LAS format, even binary, is not an exact representation.
The coordinates are encoded using and offset and a scaling, for each
coordinate.
In `write_LAS_with_properties()`, Simon has hard-coded:
```
LASheader header;
header.x_scale_factor = 1e-9 * (bbox.xmax() - bbox.xmin());
header.y_scale_factor = 1e-9 * (bbox.ymax() - bbox.ymin());
header.z_scale_factor = 1e-9 * (bbox.zmax() - bbox.zmin());
header.x_offset = bbox.xmin();
header.y_offset = bbox.ymin();
header.z_offset = bbox.zmin();
```
So, the approximate comparison of coordinates, for the I/O test,
should compare using about the same precision.
In doxygen the setting `HTML_COLORSTYLE` has been introduced with as default `AUTO_LIGHT` but due to the current strategy of CGAL in respect to HTML stylesheets the divider between the treeview and the text is not properly visible anymore. Due to the same strategy the setting to `AUTO_LIGHT` does not make sense for CGAL.
When setting `HTML_COLORSTYLE=LIGHT` the divider is properly visible again.