Same as #9195:
- add a CI test that verifies all CGAL headers can be included in two
compilation units and then linked together without error
- add missing inline keywords
but for 6.1.x-branch.
## Summary of Changes
- add a CI test that verifies all CGAL headers can be included in two
compilation units and then linked together without error
- add missing `inline` keywords
Before this PR, the check reported:
```
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::IO::internal::line_starts_with(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)':
test_headers2.cpp:(.text+0xdac): multiple definition of `CGAL::IO::internal::line_starts_with(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0xdac): first defined here
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::IO::internal::read_tetrahedra(std::istream&, std::vector<std::array<int, 4ul>, std::allocator<std::array<int, 4ul> > >&, int const&, bool)':
test_headers2.cpp:(.text+0xe19): multiple definition of `CGAL::IO::internal::read_tetrahedra(std::istream&, std::vector<std::array<int, 4ul>, std::allocator<std::array<int, 4ul> > >&, int const&, bool)'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0xe19): first defined here
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::IO::internal::go_to_at_label(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*)':
test_headers2.cpp:(.text+0x1092): multiple definition of `CGAL::IO::internal::go_to_at_label(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*)'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0x1092): first defined here
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::IO::internal::is_avizo_tetra_format(std::istream&, char const*)':
test_headers2.cpp:(.text+0x110a): multiple definition of `CGAL::IO::internal::is_avizo_tetra_format(std::istream&, char const*)'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0x110a): first defined here
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::Surface_mesh_parameterization::get_orbifold_type(int)':
test_headers2.cpp:(.text+0x1329): multiple definition of `CGAL::Surface_mesh_parameterization::get_orbifold_type(int)'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0x1329): first defined here
/usr/bin/ld: CMakeFiles/check_headers_linked_twice.dir/__/test_headers2.cpp.o: in function `CGAL::Tetrahedral_remeshing::cosine_of_90_degrees()':
test_headers2.cpp:(.text+0x135f): multiple definition of `CGAL::Tetrahedral_remeshing::cosine_of_90_degrees()'; CMakeFiles/check_headers_linked_twice.dir/__/test_headers.cpp.o:test_headers.cpp:(.text+0x135f): first defined here
collect2: error: ld returned 1 exit status
```
## Release Management
* Affected package(s): CGAL
* License and copyright ownership: N/A, maintenance by GeometryFactory
## Summary of Changes
`AABB_traits` was using `.bbox()`, and `AABB_traits_3.h` uses `.bbox()`,
so not sure why `AABB_traits_2.h` was changed to use `Compute_bbox_2`?
## Release Management
* Affected package(s): `AABB_tree`, `Triangulation_3`
* Issue(s) solved (if any): -
* Feature/Small Feature (if any): -
* License and copyright ownership: no change
## Summary of Changes
Tests for triangulate_hole_Polyhedron_3_no_delaunay_test and
triangulate_hole_Polyhedron_3_test were also added in absence of Eigen3
causing the testsuite to abort
## Release Management
* Affected package(s): PMP
## Summary of Changes
When snapping, we can simplify the range ahead of snapping to remove
too-close vertex pairs.
During this operation, we remove some halfedges from the range of
halfedges to be considerd for snapping.
But in fact, we also need to *add* some halfedges because when we
collapse edges, a non-border halfedge can become border and can replace
a halfedge that was to be considered for snapping. If we don't put that
new border halfedge in the range, its target vertex will not be
considered for snapping.
The case is that of opp(prev(opp(h)) being a border halfedge, which was
kinda known because we removed it from the test range, but we forgot to
add it in the range of halfedges considered for snapping.
On the image below, opp(onoh) must be in the range if opoh was in the
range.
<img width="1310" height="736" alt="image"
src="https://github.com/user-attachments/assets/06e13ad1-c97f-49f6-aa74-4740b0c4d015"
/>
We can also just take next(prev_h) because prev_h is a border halfedge
that cannot be removed by the collapse.
<img width="808" height="794" alt="image"
src="https://github.com/user-attachments/assets/0e4d9b14-3669-434d-ba6e-81a7f15cd11b"
/>
## Release Management
* Affected package(s): `Polygon_mesh_processing`
* Issue(s) solved (if any): -
* Feature/Small Feature (if any): -
* License and copyright ownership: no change
Fix case of non triangular faces having vertices tangent to the
clip/refine plane
+ clip volume with coplanar faces
## TODO:
- [x] clean up and rebase
- [x] add test cases
- [x] add comments in the code
checking with num_halfedges(tm) means this only applies
to something like union of triangular connected components.
And if we change to counting the number of border halfedges,
then we might as well just rely on the O(1) dynamic property map.