Merge branch 'master' into pr/lrineau/8273

This commit is contained in:
Laurent Rineau 2025-02-07 16:10:52 +01:00
commit 8eefb7f173
485 changed files with 3783 additions and 7047 deletions

View File

@ -0,0 +1,55 @@
# Use an official Fedora as a parent image for the build stage
FROM fedora:latest AS sources_deps
# Set environment variables to non-interactive
ENV DEBIAN_FRONTEND=noninteractive
# Install dependencies
RUN dnf update -y && dnf install -y \
wget \
make \
gcc \
gcc-c++ \
patch \
cmake \
bison \
flex \
unzip \
python3 \
&& dnf clean all
# Copy the patch file to the build context
COPY cgal-NO_ADDITIONAL_DETAILS.patch .
FROM sources_deps AS build
# Build and install Doxygen from sources
ARG DOXYGEN_VERSION=1.9.6
ARG MAKEFLAGS=-j$(nproc)
RUN if [ -n "$DEBUG"];then set -x && make --version && ls -lZ /tmp && id; fi \
&& DOXYGEN_VERSION_UNDERSCORE=$(echo ${DOXYGEN_VERSION} | sed 's/\./_/g') \
&& wget https://github.com/doxygen/doxygen/archive/refs/tags/Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
&& unzip Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
&& cd doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} \
&& patch -p1 < ../cgal-NO_ADDITIONAL_DETAILS.patch \
&& mkdir build \
&& cd build \
&& cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .. \
&& cmake --build . \
&& cmake --install . \
&& mkdir -p /usr/local/share/doc/doxygen && cp ../LICENSE /usr/local/share/doc/doxygen/LICENSE.TXT \
&& cd ../.. \
&& rm -rf doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} Release_${DOXYGEN_VERSION_UNDERSCORE}.zip
# Use a smaller base image for the final stage
FROM fedora:latest
# Install necessary runtime dependencies
RUN set -x \
&& dnf update -y && dnf install -y graphviz 'perl(Getopt::Std)' tex-bibtex cmake python3-lxml python3-pyquery \
&& dnf clean all
# Copy Doxygen from the build stage
COPY --from=build /usr/local/bin/doxygen /usr/local/bin
COPY --from=build /usr/local/share/doc/doxygen/LICENSE.TXT /usr/local/share/doc/doxygen/LICENSE.TXT
RUN doxygen --version

View File

@ -0,0 +1,23 @@
SHELL := /bin/bash
DOXYGEN_VERSIONS := 1.12.0 1.11.0 1.10.0 1.9.8 1.9.7 1.9.6
.PHONY: all build-% push-% build push
all: build
@echo "Use `$(MAKE) push` to push the images to the registry."
build-%:
@echo "MAKEFLAGS: $(MAKEFLAGS)"
@echo "Building Doxygen version $*..."
if [ "$$(getenforce || true)" == "Enforcing" ]; then Z=:z; else Z=; fi; \
F="$(MAKEFLAGS)"; F=$${F##*fifo:}; F=$${F%% *}; \
if [ -p "$$F" ]; then echo "The GNU make FIFO file exists:"; ls -l $$F; VOLUME_ARGS="-v $$F:$$F$$Z"; echo -- $$VOLUME_ARGS; fi; \
podman build --build-arg DOXYGEN_VERSION=$* --build-arg "MAKEFLAGS=$(MAKEFLAGS)" $$VOLUME_ARGS -t cgal/doxygen:$* .
push-%: build-%
@echo "Pushing cgal/doxygen:$*..."
podman push cgal/doxygen:$*
build: $(foreach version,$(DOXYGEN_VERSIONS),build-$(version))
push: $(foreach version,$(DOXYGEN_VERSIONS),push-$(version))

View File

@ -0,0 +1,44 @@
diff --git a/src/config.xml b/src/config.xml
index 13910958a6..31f1354e44 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -893,6 +893,18 @@ Go to the <a href="commands.html">next</a> section or return to the
\note This will also disable the warnings about undocumented members
that are normally produced when \ref cfg_warnings "WARNINGS" is
set to \c YES.
+]]>
+ </docs>
+ </option>
+ </group>
+ <group name='Build' docs='Build related configuration options'>
+ <option type='bool' id='NO_ADDITIONAL_DETAILS' defval='0'>
+ <docs>
+<![CDATA[
+ When the \c EXTRACT_ALL tag is set to \c YES and a member or class
+ as no documentation, no detailed section will be produced if
+ the \c NO_ADDITIONAL_DETAILS tag is set to \c YES.
+ This tag has no effect if the \c EXTRACT_ALL tag is set to \c NO.
]]>
</docs>
</option>
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 08d9bf24c5..ab04e994c5 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -2501,6 +2501,7 @@ bool MemberDefImpl::hasDetailedDescription() const
if (!m_hasDetailedDescriptionCached)
{
bool extractAll = Config_getBool(EXTRACT_ALL);
+ bool xAllNoDetailedSec = Config_getBool(NO_ADDITIONAL_DETAILS);
bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
bool repeatBrief = Config_getBool(REPEAT_BRIEF);
bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
@@ -2512,7 +2513,7 @@ bool MemberDefImpl::hasDetailedDescription() const
// the member has detailed documentation because the user added some comments
bool docFilter =
// extract all is enabled
- extractAll ||
+ (extractAll && !xAllNoDetailedSec) ||
// has detailed docs
!documentation().isEmpty() ||
// has inbody docs

View File

@ -0,0 +1,16 @@
{
"name": "CGAL Doxygen Dev Container, version 1.12.0, with CGAL patch",
"image": "docker.io/cgal/doxygen:1.12.0",
"features": {
"ghcr.io/devcontainers/features/git:1.3.2": {}
},
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools",
"bbenoist.Doxygen",
"ms-vscode.cpptools"
]
}
},
}

View File

@ -0,0 +1,29 @@
[distrobox-doxygen-1.12.0]
image=cgal/doxygen:1.12.0
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.12.0
[distrobox-doxygen-1.11.0]
image=cgal/doxygen:1.11.0
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.11.0
[distrobox-doxygen-1.10.0]
image=cgal/doxygen:1.10.0
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.10.0
[distrobox-doxygen-1.9.8]
image=cgal/doxygen:1.9.8
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.9.8
[distrobox-doxygen-1.9.7]
image=cgal/doxygen:1.9.7
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.9.7
[distrobox-doxygen-1.9.6]
image=cgal/doxygen:1.9.6
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
exported_bins_path=$HOME/.local/bin-doxygen-1.9.6

3
.gitattributes vendored
View File

@ -44,11 +44,9 @@ Documentation/Doxyfile text eol=lf
Documentation/pkglist_filter text eol=lf Documentation/pkglist_filter text eol=lf
Installation/update_CHANGES text eol=lf Installation/update_CHANGES text eol=lf
Scripts/developer_scripts/autotest_cgal text eol=lf Scripts/developer_scripts/autotest_cgal text eol=lf
Scripts/developer_scripts/autotest_cgal_with_cmake text eol=lf
Scripts/developer_scripts/cgal_build text eol=lf Scripts/developer_scripts/cgal_build text eol=lf
Scripts/developer_scripts/cgal_depend text eol=lf Scripts/developer_scripts/cgal_depend text eol=lf
Scripts/developer_scripts/cgal_git_update_hooks_for_client text eol=lf Scripts/developer_scripts/cgal_git_update_hooks_for_client text eol=lf
Scripts/developer_scripts/cgal_test_with_cmake text eol=lf
Scripts/developer_scripts/cgal2gml text eol=lf Scripts/developer_scripts/cgal2gml text eol=lf
Scripts/developer_scripts/check_library_uses_no_gpl_files text eol=lf Scripts/developer_scripts/check_library_uses_no_gpl_files text eol=lf
Scripts/developer_scripts/check_licenses text eol=lf Scripts/developer_scripts/check_licenses text eol=lf
@ -56,7 +54,6 @@ Scripts/developer_scripts/check_macro_names text eol=lf
Scripts/developer_scripts/check_no_CGAL_USE_without_includes_before text eol=lf Scripts/developer_scripts/check_no_CGAL_USE_without_includes_before text eol=lf
Scripts/developer_scripts/check_svn_keywords text eol=lf Scripts/developer_scripts/check_svn_keywords text eol=lf
Scripts/developer_scripts/create_cgal_test text eol=lf Scripts/developer_scripts/create_cgal_test text eol=lf
Scripts/developer_scripts/create_cgal_test_with_cmake text eol=lf
Scripts/developer_scripts/create_internal_release text eol=lf Scripts/developer_scripts/create_internal_release text eol=lf
Scripts/developer_scripts/create_new_release text eol=lf Scripts/developer_scripts/create_new_release text eol=lf
Scripts/developer_scripts/detect_files_with_mixed_eol_styles text eol=lf Scripts/developer_scripts/detect_files_with_mixed_eol_styles text eol=lf

58
.gitignore vendored
View File

@ -8,7 +8,6 @@ AABB_tree/demo/AABB_tree/Makefile
AABB_tree/examples/AABB_tree/*.kdev* AABB_tree/examples/AABB_tree/*.kdev*
AABB_tree/examples/AABB_tree/*_example AABB_tree/examples/AABB_tree/*_example
AABB_tree/examples/AABB_tree/Makefile AABB_tree/examples/AABB_tree/Makefile
AABB_tree/examples/AABB_tree/cgal_test_with_cmake
AABB_tree/test/AABB_tree/*.kdev* AABB_tree/test/AABB_tree/*.kdev*
AABB_tree/test/AABB_tree/Makefile AABB_tree/test/AABB_tree/Makefile
AABB_tree/test/AABB_tree/aabb_correctness_triangle_test AABB_tree/test/AABB_tree/aabb_correctness_triangle_test
@ -18,17 +17,14 @@ AABB_tree/test/AABB_tree/aabb_distance_triangle_test
AABB_tree/test/AABB_tree/aabb_intersection_triangle_test AABB_tree/test/AABB_tree/aabb_intersection_triangle_test
AABB_tree/test/AABB_tree/aabb_naive_vs_tree_distance_segment_test AABB_tree/test/AABB_tree/aabb_naive_vs_tree_distance_segment_test
AABB_tree/test/AABB_tree/aabb_projection_triangle_test AABB_tree/test/AABB_tree/aabb_projection_triangle_test
AABB_tree/test/AABB_tree/cgal_test_with_cmake
Algebraic_foundations/test/Algebraic_foundations/Algebraic_extension_traits Algebraic_foundations/test/Algebraic_foundations/Algebraic_extension_traits
Algebraic_foundations/test/Algebraic_foundations/Algebraic_structure_traits Algebraic_foundations/test/Algebraic_foundations/Algebraic_structure_traits
Algebraic_foundations/test/Algebraic_foundations/Chinese_remainder_traits Algebraic_foundations/test/Algebraic_foundations/Chinese_remainder_traits
Algebraic_foundations/test/Algebraic_foundations/Coercion_traits Algebraic_foundations/test/Algebraic_foundations/Coercion_traits
Algebraic_foundations/test/Algebraic_foundations/Real_embeddable_traits Algebraic_foundations/test/Algebraic_foundations/Real_embeddable_traits
Algebraic_foundations/test/Algebraic_foundations/Scalar_factor_traits Algebraic_foundations/test/Algebraic_foundations/Scalar_factor_traits
Algebraic_foundations/test/Algebraic_foundations/cgal_test_with_cmake
Algebraic_foundations/test/Algebraic_foundations/extended_euclidean_algorithm Algebraic_foundations/test/Algebraic_foundations/extended_euclidean_algorithm
Algebraic_foundations/test/Algebraic_foundations/ipower Algebraic_foundations/test/Algebraic_foundations/ipower
Algebraic_kernel_d/test/Algebraic_kernel_d/cgal_test_with_cmake
Algebraic_kernel_d/test/Algebraic_kernel_d/rs_isolator Algebraic_kernel_d/test/Algebraic_kernel_d/rs_isolator
Alpha_shapes_2/demo/Alpha_shapes_2/Makefile Alpha_shapes_2/demo/Alpha_shapes_2/Makefile
Alpha_shapes_2/demo/Alpha_shapes_2/alpha_shapes_2 Alpha_shapes_2/demo/Alpha_shapes_2/alpha_shapes_2
@ -37,7 +33,6 @@ Alpha_shapes_2/examples/Alpha_shapes_2/alpha_shapes_2
Alpha_shapes_3/demo/Alpha_shapes_3/Makefile Alpha_shapes_3/demo/Alpha_shapes_3/Makefile
Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3
Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3
Alpha_shapes_3/test/Alpha_shapes_3/cgal_test_with_cmake
Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3
@ -60,7 +55,6 @@ Arrangement_on_surface_2/examples/Arrangement_on_surface_2/batched_point_locatio
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_dual_adapter Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_dual_adapter
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_primal_adapter Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_primal_adapter
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bounded_planar_vertical_decomposition Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bounded_planar_vertical_decomposition
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/cgal_test_with_cmake
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circles Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circles
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_arcs Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_arcs
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_line_arcs Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_line_arcs
@ -103,30 +97,24 @@ Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_fu
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/vertical_ray_shooting Arrangement_on_surface_2/examples/Arrangement_on_surface_2/vertical_ray_shooting
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp
BGL/examples/BGL_arrangement_2/Makefile BGL/examples/BGL_arrangement_2/Makefile
BGL/examples/BGL_arrangement_2/cgal_test_with_cmake
BGL/examples/BGL_arrangement_2/dual BGL/examples/BGL_arrangement_2/dual
BGL/examples/BGL_arrangement_2/primal BGL/examples/BGL_arrangement_2/primal
BGL/test/BGL/cgal_test_with_cmake
Boolean_set_operations_2/demo/Boolean_set_operations_2/Makefile Boolean_set_operations_2/demo/Boolean_set_operations_2/Makefile
Boolean_set_operations_2/demo/Boolean_set_operations_2/boolean_operations_2 Boolean_set_operations_2/demo/Boolean_set_operations_2/boolean_operations_2
Box_intersection_d/test/Box_intersection_d/automated_test Box_intersection_d/test/Box_intersection_d/automated_test
Box_intersection_d/test/Box_intersection_d/benchmark.data Box_intersection_d/test/Box_intersection_d/benchmark.data
Box_intersection_d/test/Box_intersection_d/benchmark_box_intersection Box_intersection_d/test/Box_intersection_d/benchmark_box_intersection
Box_intersection_d/test/Box_intersection_d/box_grid Box_intersection_d/test/Box_intersection_d/box_grid
Box_intersection_d/test/Box_intersection_d/cgal_test_with_cmake
Box_intersection_d/test/Box_intersection_d/random_set_test Box_intersection_d/test/Box_intersection_d/random_set_test
CGAL_ImageIO/demo/CGALimageIO/Makefile CGAL_ImageIO/demo/CGALimageIO/Makefile
CGAL_ImageIO/demo/CGALimageIO/cgal_test_with_cmake
CGAL_ImageIO/demo/CGALimageIO/image_to_vtk_viewer CGAL_ImageIO/demo/CGALimageIO/image_to_vtk_viewer
CGAL_ImageIO/examples/CGALimageIO/Makefile CGAL_ImageIO/examples/CGALimageIO/Makefile
CGAL_ImageIO/examples/CGALimageIO/cgal_test_with_cmake
CGAL_ImageIO/examples/CGALimageIO/convert_raw_image_to_inr CGAL_ImageIO/examples/CGALimageIO/convert_raw_image_to_inr
CGAL_ImageIO/examples/CGALimageIO/makefile CGAL_ImageIO/examples/CGALimageIO/makefile
CGAL_ImageIO/examples/CGALimageIO/test_imageio CGAL_ImageIO/examples/CGALimageIO/test_imageio
CGAL_ImageIO/src/CGAL_ImageIO/Makefile CGAL_ImageIO/src/CGAL_ImageIO/Makefile
Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3_demo Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3_demo
Circular_kernel_3/demo/Circular_kernel_3/Makefile Circular_kernel_3/demo/Circular_kernel_3/Makefile
Circular_kernel_3/test/Circular_kernel_3/cgal_test_with_cmake
Circular_kernel_3/test/Circular_kernel_3/test_Exact_spherical_kernel Circular_kernel_3/test/Circular_kernel_3/test_Exact_spherical_kernel
Circular_kernel_3/test/Circular_kernel_3/test_Lazy_Spherical_kernel Circular_kernel_3/test/Circular_kernel_3/test_Lazy_Spherical_kernel
Circular_kernel_3/test/Circular_kernel_3/test_Lazy_spherical_kernel_basics Circular_kernel_3/test/Circular_kernel_3/test_Lazy_spherical_kernel_basics
@ -137,7 +125,6 @@ Documentation/log/*.*
Documentation/output Documentation/output
Documentation/tags/*.* Documentation/tags/*.*
Generator/examples/Generator/ball_d Generator/examples/Generator/ball_d
Generator/examples/Generator/cgal_test_with_cmake
Generator/examples/Generator/cube_d Generator/examples/Generator/cube_d
Generator/examples/Generator/grid_d Generator/examples/Generator/grid_d
Generator/examples/Generator/random_convex_set Generator/examples/Generator/random_convex_set
@ -149,7 +136,6 @@ Generator/examples/Generator/random_segments1
Generator/examples/Generator/random_segments2 Generator/examples/Generator/random_segments2
Generator/examples/Generator/sphere_d Generator/examples/Generator/sphere_d
Generator/test/Generator/bug Generator/test/Generator/bug
Generator/test/Generator/cgal_test_with_cmake
Generator/test/Generator/random_poly_test Generator/test/Generator/random_poly_test
Generator/test/Generator/rcs_test Generator/test/Generator/rcs_test
Generator/test/Generator/test_combination_enumerator Generator/test/Generator/test_combination_enumerator
@ -178,7 +164,6 @@ GraphicsView/demo/Triangulation_2/Makefile
GraphicsView/demo/Triangulation_2/Regular_triangulation_2 GraphicsView/demo/Triangulation_2/Regular_triangulation_2
GraphicsView/demo/Triangulation_2/qrc_*.cxx GraphicsView/demo/Triangulation_2/qrc_*.cxx
GraphicsView/demo/Triangulation_2/ui_*.h GraphicsView/demo/Triangulation_2/ui_*.h
HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake
HalfedgeDS/test/HalfedgeDS/test_hds HalfedgeDS/test/HalfedgeDS/test_hds
HalfedgeDS/test/HalfedgeDS/test_hds_decorator HalfedgeDS/test/HalfedgeDS/test_hds_decorator
Inscribed_areas/test/Inscribed_areas/Makefile Inscribed_areas/test/Inscribed_areas/Makefile
@ -188,11 +173,8 @@ Installation/auxiliary/gdb/python/CGAL/printers.pyc
Installation/auxiliary/gdb/test Installation/auxiliary/gdb/test
Installation/cmake/modules/*.tmp Installation/cmake/modules/*.tmp
Installation/test/Installation/cgal_test Installation/test/Installation/cgal_test
/Installation/test/Installation/cgal_test_with_cmake
Installation/test/Installation/deprecation_warning Installation/test/Installation/deprecation_warning
Interpolation/demo/Interpolation/cgal_test_with_cmake
Intersections_3/test/Intersections_3/bbox_other_do_intersect_test Intersections_3/test/Intersections_3/bbox_other_do_intersect_test
Intersections_3/test/Intersections_3/cgal_test_with_cmake
Intersections_3/test/Intersections_3/circle_other Intersections_3/test/Intersections_3/circle_other
Intersections_3/test/Intersections_3/line_line Intersections_3/test/Intersections_3/line_line
Intersections_3/test/Intersections_3/segment_segment Intersections_3/test/Intersections_3/segment_segment
@ -206,7 +188,6 @@ Jet_fitting_3/examples/Jet_fitting_3/Single_estimation
Jet_fitting_3/examples/Jet_fitting_3/VC Jet_fitting_3/examples/Jet_fitting_3/VC
Jet_fitting_3/test/Jet_fitting_3/Makefile Jet_fitting_3/test/Jet_fitting_3/Makefile
Jet_fitting_3/test/Jet_fitting_3/blind_1pt Jet_fitting_3/test/Jet_fitting_3/blind_1pt
/Jet_fitting_3/examples/Jet_fitting_3/cgal_test_with_cmake
/Jet_fitting_3/examples/Jet_fitting_3/data_ellipe0.003.off.4ogl.txt /Jet_fitting_3/examples/Jet_fitting_3/data_ellipe0.003.off.4ogl.txt
Kernel_23/test/Kernel_23/Cartesian Kernel_23/test/Kernel_23/Cartesian
Kernel_23/test/Kernel_23/Dimension Kernel_23/test/Kernel_23/Dimension
@ -220,7 +201,6 @@ Kernel_23/test/Kernel_23/Simple_cartesian
Kernel_23/test/Kernel_23/Simple_homogeneous Kernel_23/test/Kernel_23/Simple_homogeneous
Kernel_23/test/Kernel_23/Test_IO.out Kernel_23/test/Kernel_23/Test_IO.out
/Kernel_23/test/Kernel_23/Test-*IO.out /Kernel_23/test/Kernel_23/Test-*IO.out
Kernel_23/test/Kernel_23/cgal_test_with_cmake
Kernel_23/test/Kernel_23/test_kernel__ Kernel_23/test/Kernel_23/test_kernel__
Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_2 Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_2
Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_stable_subset_2 Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_stable_subset_2
@ -229,13 +209,11 @@ Kinetic_data_structures/demo/Kinetic_data_structures/KDS_Delaunay_triangulation_
Kinetic_data_structures/demo/Kinetic_data_structures/KDS_generate_data Kinetic_data_structures/demo/Kinetic_data_structures/KDS_generate_data
Kinetic_data_structures/demo/Kinetic_data_structures/KDS_gui_2 Kinetic_data_structures/demo/Kinetic_data_structures/KDS_gui_2
Kinetic_data_structures/demo/Kinetic_data_structures/Makefile Kinetic_data_structures/demo/Kinetic_data_structures/Makefile
Kinetic_data_structures/demo/Kinetic_data_structures/cgal_test_with_cmake
Kinetic_data_structures/demo/Kinetic_data_structures/generate_data Kinetic_data_structures/demo/Kinetic_data_structures/generate_data
Kinetic_data_structures/demo/Kinetic_data_structures/gui_2 Kinetic_data_structures/demo/Kinetic_data_structures/gui_2
Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2 Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2
Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3 Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3
Kinetic_data_structures/test/Kinetic_data_structures/active_objects_tables Kinetic_data_structures/test/Kinetic_data_structures/active_objects_tables
Kinetic_data_structures/test/Kinetic_data_structures/cgal_test_with_cmake
Kinetic_data_structures/test/Kinetic_data_structures/exact_kds Kinetic_data_structures/test/Kinetic_data_structures/exact_kds
Kinetic_data_structures/test/Kinetic_data_structures/instantaneous_kernel Kinetic_data_structures/test/Kinetic_data_structures/instantaneous_kernel
Kinetic_data_structures/test/Kinetic_data_structures/numbers Kinetic_data_structures/test/Kinetic_data_structures/numbers
@ -248,8 +226,6 @@ Kinetic_data_structures/test/Kinetic_data_structures/test_KDS_Delaunay_triangula
Kinetic_data_structures/test/Kinetic_data_structures/timings Kinetic_data_structures/test/Kinetic_data_structures/timings
Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3.qrc.depends Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3.qrc.depends
Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3_demo Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3_demo
Linear_cell_complex/demo/Linear_cell_complex/cgal_test_with_cmake
Linear_cell_complex/examples/Linear_cell_complex/cgal_test_with_cmake
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3 Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_triangulation Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_triangulation
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_with_colored_vertices Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_with_colored_vertices
@ -297,7 +273,6 @@ Mesh_2/demo/Mesh_2/*.core
Mesh_2/demo/Mesh_2/*.moc Mesh_2/demo/Mesh_2/*.moc
Mesh_2/demo/Mesh_2/.*.deps Mesh_2/demo/Mesh_2/.*.deps
Mesh_2/demo/Mesh_2/Makefile Mesh_2/demo/Mesh_2/Makefile
Mesh_2/demo/Mesh_2/cgal_test_with_cmake
Mesh_2/demo/Mesh_2/conform Mesh_2/demo/Mesh_2/conform
Mesh_2/demo/Mesh_2/depends Mesh_2/demo/Mesh_2/depends
Mesh_2/demo/Mesh_2/filename.edg Mesh_2/demo/Mesh_2/filename.edg
@ -309,7 +284,6 @@ Mesh_2/demo/Mesh_2/semantic.cache
Mesh_2/doxygen Mesh_2/doxygen
Mesh_2/examples/Mesh_2/*.core Mesh_2/examples/Mesh_2/*.core
Mesh_2/examples/Mesh_2/.*.deps Mesh_2/examples/Mesh_2/.*.deps
Mesh_2/examples/Mesh_2/cgal_test_with_cmake
Mesh_2/examples/Mesh_2/conform Mesh_2/examples/Mesh_2/conform
Mesh_2/examples/Mesh_2/conforming Mesh_2/examples/Mesh_2/conforming
Mesh_2/examples/Mesh_2/depends Mesh_2/examples/Mesh_2/depends
@ -324,7 +298,6 @@ Mesh_2/test/Mesh_2/*.core
Mesh_2/test/Mesh_2/.*.deps Mesh_2/test/Mesh_2/.*.deps
Mesh_2/test/Mesh_2/Makefile Mesh_2/test/Mesh_2/Makefile
Mesh_2/test/Mesh_2/bench_double_map Mesh_2/test/Mesh_2/bench_double_map
Mesh_2/test/Mesh_2/cgal_test_with_cmake
Mesh_2/test/Mesh_2/conform_plus Mesh_2/test/Mesh_2/conform_plus
Mesh_2/test/Mesh_2/depends Mesh_2/test/Mesh_2/depends
Mesh_2/test/Mesh_2/my_makefile Mesh_2/test/Mesh_2/my_makefile
@ -373,7 +346,6 @@ Mesh_3/examples/Mesh_3/.*.deps
Mesh_3/examples/Mesh_3/random-image.inr Mesh_3/examples/Mesh_3/random-image.inr
Mesh_3/examples/Mesh_3/Makefile Mesh_3/examples/Mesh_3/Makefile
Mesh_3/examples/Mesh_3/applications Mesh_3/examples/Mesh_3/applications
Mesh_3/examples/Mesh_3/cgal_test_with_cmake
Mesh_3/examples/Mesh_3/cgal_to_medit Mesh_3/examples/Mesh_3/cgal_to_medit
Mesh_3/examples/Mesh_3/chair-after.mesh Mesh_3/examples/Mesh_3/chair-after.mesh
Mesh_3/examples/Mesh_3/chair-after.png Mesh_3/examples/Mesh_3/chair-after.png
@ -411,7 +383,6 @@ Mesh_3/examples/Mesh_3/test_off
/Mesh_3/test/Mesh_3/a.lua /Mesh_3/test/Mesh_3/a.lua
/Mesh_3/test/Mesh_3/applications /Mesh_3/test/Mesh_3/applications
/Mesh_3/test/Mesh_3/*.cgal /Mesh_3/test/Mesh_3/*.cgal
/Mesh_3/test/Mesh_3/cgal_test_with_cmake
/Mesh_3/test/Mesh_3/cgal_to_medit /Mesh_3/test/Mesh_3/cgal_to_medit
/Mesh_3/test/Mesh_3/combined_spheres /Mesh_3/test/Mesh_3/combined_spheres
/Mesh_3/test/Mesh_3/combined_spheres-with-sphere-oracle /Mesh_3/test/Mesh_3/combined_spheres-with-sphere-oracle
@ -513,11 +484,9 @@ Min_ellipse_2/.tmp
Min_ellipse_2/Makefile Min_ellipse_2/Makefile
Min_ellipse_2/bin Min_ellipse_2/bin
Min_ellipse_2/doc_ps Min_ellipse_2/doc_ps
Minkowski_sum_3/test/Minkowski_sum_3/cgal_test_with_cmake
Nef_2/test/Nef_2/EPoint-test Nef_2/test/Nef_2/EPoint-test
Nef_2/test/Nef_2/Nef_polyhedron_2-test Nef_2/test/Nef_2/Nef_polyhedron_2-test
Nef_2/test/Nef_2/Polynomial-test Nef_2/test/Nef_2/Polynomial-test
Nef_2/test/Nef_2/cgal_test_with_cmake
Nef_2/test/Nef_2/nef_2_point_location Nef_2/test/Nef_2/nef_2_point_location
Nef_3/demo/Nef_3/Makefile Nef_3/demo/Nef_3/Makefile
Nef_3/examples/Nef_3/Makefile Nef_3/examples/Nef_3/Makefile
@ -575,7 +544,6 @@ Number_types/test/Number_types/_test_valid_finite_double
Number_types/test/Number_types/_test_valid_finite_float Number_types/test/Number_types/_test_valid_finite_float
Number_types/test/Number_types/bench_interval Number_types/test/Number_types/bench_interval
Number_types/test/Number_types/cgal_test Number_types/test/Number_types/cgal_test
Number_types/test/Number_types/cgal_test_with_cmake
Number_types/test/Number_types/constant Number_types/test/Number_types/constant
Number_types/test/Number_types/double Number_types/test/Number_types/double
Number_types/test/Number_types/doubletst Number_types/test/Number_types/doubletst
@ -626,7 +594,6 @@ Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/moc_*.cpp
Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/ui_*.h Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/ui_*.h
Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.qch Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.qch
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/Test_tds_IO_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/Test_tds_IO_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/cgal_test_with_cmake
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_alpha_shape_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_alpha_shape_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_hierarchy_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_hierarchy_3
@ -637,7 +604,6 @@ Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_trian
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_H_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_H_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SC_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SC_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SH_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SH_3
Point_set_2/test/Point_set_2/cgal_test_with_cmake
Point_set_2/test/Point_set_2/nearest_nb1 Point_set_2/test/Point_set_2/nearest_nb1
Point_set_2/test/Point_set_2/nearest_nb_fcn Point_set_2/test/Point_set_2/nearest_nb_fcn
Point_set_2/test/Point_set_2/range_search_fcn Point_set_2/test/Point_set_2/range_search_fcn
@ -683,7 +649,6 @@ Point_set_processing_3/test/Point_set_processing_3/smoothing_test
/Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-oriented.off /Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-oriented.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-shuffled.off /Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-shuffled.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/blobby_2cc_no_id.off /Polygon_mesh_processing/test/Polygon_mesh_processing/blobby_2cc_no_id.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/cgal_test_with_cmake
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/U.polylines.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/U.polylines.txt.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole1.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole1.txt.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole2.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole2.txt.off
@ -707,7 +672,6 @@ Polyhedron/demo/Polyhedron/snapshot.*
Polyhedron/demo/Polyhedron/ui_*.h Polyhedron/demo/Polyhedron/ui_*.h
Polyhedron/test/Polyhedron/*.kdev* Polyhedron/test/Polyhedron/*.kdev*
Polyhedron/test/Polyhedron/Makefile Polyhedron/test/Polyhedron/Makefile
Polyhedron/test/Polyhedron/cgal_test_with_cmake
Polyhedron/test/Polyhedron/test_polyhedron Polyhedron/test/Polyhedron/test_polyhedron
Polynomial/test/Polynomial/Exponent_vector Polynomial/test/Polynomial/Exponent_vector
Polynomial/test/Polynomial/Interpolator Polynomial/test/Polynomial/Interpolator
@ -715,7 +679,6 @@ Polynomial/test/Polynomial/Polynomial_traits_d
Polynomial/test/Polynomial/Polynomial_type_generator Polynomial/test/Polynomial/Polynomial_type_generator
Polynomial/test/Polynomial/Polynomial_using_core Polynomial/test/Polynomial/Polynomial_using_core
Polynomial/test/Polynomial/Polynomial_using_leda Polynomial/test/Polynomial/Polynomial_using_leda
Polynomial/test/Polynomial/cgal_test_with_cmake
Polynomial/test/Polynomial/modular_gcd_utcf_algorithm_M Polynomial/test/Polynomial/modular_gcd_utcf_algorithm_M
Polynomial/test/Polynomial/modular_gcd_utcf_dfai Polynomial/test/Polynomial/modular_gcd_utcf_dfai
Polynomial/test/Polynomial/modular_gcd_utcf_pure_wang Polynomial/test/Polynomial/modular_gcd_utcf_pure_wang
@ -745,10 +708,8 @@ Polytope_distance_d/.obj
Polytope_distance_d/.tmp Polytope_distance_d/.tmp
Polytope_distance_d/Makefile Polytope_distance_d/Makefile
Polytope_distance_d/bin Polytope_distance_d/bin
Polytope_distance_d/test/Polytope_distance_d/cgal_test_with_cmake
Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d_d Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d_d
Principal_component_analysis/test/Principal_component_analysis/bounding_box Principal_component_analysis/test/Principal_component_analysis/bounding_box
Principal_component_analysis/test/Principal_component_analysis/cgal_test_with_cmake
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_circles_2 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_circles_2
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_cuboids_3 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_cuboids_3
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_points_2 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_points_2
@ -773,7 +734,6 @@ Principal_component_analysis/test/Principal_component_analysis/test_linear_least
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_tetrahedra_3 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_tetrahedra_3
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_2 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_2
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_3 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_3
/Profiling_tools/test/Profiling_tools/cgal_test_with_cmake
/Profiling_tools/test/Profiling_tools/test_memory_sizer /Profiling_tools/test/Profiling_tools/test_memory_sizer
/Profiling_tools/test/Profiling_tools/test_timer /Profiling_tools/test/Profiling_tools/test_timer
QP_solver/documentation/Degeneracies.aux QP_solver/documentation/Degeneracies.aux
@ -805,7 +765,6 @@ Ridges_3/examples/Ridges_3/Compute_Ridges_Umbilics
Ridges_3/examples/Ridges_3/Makefile Ridges_3/examples/Ridges_3/Makefile
Ridges_3/test/Ridges_3/Makefile Ridges_3/test/Ridges_3/Makefile
Ridges_3/test/Ridges_3/ridge_test Ridges_3/test/Ridges_3/ridge_test
STL_Extension/test/STL_Extension/cgal_test_with_cmake
STL_Extension/test/STL_Extension/test_Cache STL_Extension/test/STL_Extension/test_Cache
STL_Extension/test/STL_Extension/test_Compact_container STL_Extension/test/STL_Extension/test_Compact_container
STL_Extension/test/STL_Extension/test_Concatenate_iterator STL_Extension/test/STL_Extension/test_Concatenate_iterator
@ -827,7 +786,6 @@ STL_Extension/test/STL_Extension/test_nth_element
STL_Extension/test/STL_Extension/test_stl_extension STL_Extension/test/STL_Extension/test_stl_extension
STL_Extension/test/STL_Extension/test_type_traits STL_Extension/test/STL_Extension/test_type_traits
STL_Extension/test/STL_Extension/test_vector STL_Extension/test/STL_Extension/test_vector
SearchStructures/test/RangeSegmentTrees/cgal_test_with_cmake
SearchStructures/test/RangeSegmentTrees/test_segment_tree_set_2 SearchStructures/test/RangeSegmentTrees/test_segment_tree_set_2
Skin_surface_3/.cdtproject Skin_surface_3/.cdtproject
Skin_surface_3/.project Skin_surface_3/.project
@ -838,7 +796,6 @@ Skin_surface_3/test/Skin_surface_3/err.txt
Skin_surface_3/test/Skin_surface_3/makefile Skin_surface_3/test/Skin_surface_3/makefile
Skin_surface_3/test/Skin_surface_3/msgs.txt Skin_surface_3/test/Skin_surface_3/msgs.txt
Skin_surface_3/test/Skin_surface_3/subdivision_test Skin_surface_3/test/Skin_surface_3/subdivision_test
Spatial_sorting/test/Spatial_sorting/cgal_test_with_cmake
Stream_lines_2/demo/Stream_lines_2/Makefile Stream_lines_2/demo/Stream_lines_2/Makefile
Stream_lines_2/demo/Stream_lines_2/streamlines Stream_lines_2/demo/Stream_lines_2/streamlines
Surface_mesh_parameterization/examples/Surface_mesh_parameterization/*.eps Surface_mesh_parameterization/examples/Surface_mesh_parameterization/*.eps
@ -966,20 +923,15 @@ Triangulation/test/Triangulation/output-pcds*
Triangulation/test/Triangulation/pc Triangulation/test/Triangulation/pc
Triangulation/test/Triangulation/pcds Triangulation/test/Triangulation/pcds
Triangulation/test/Triangulation/torture Triangulation/test/Triangulation/torture
/Triangulation/examples/Triangulation/cgal_test_with_cmake
/Triangulation/test/Triangulation/cgal_test_with_cmake
/Triangulation/test/Triangulation/output-tds-* /Triangulation/test/Triangulation/output-tds-*
Triangulation_2/cgal_test_with_cmake
Triangulation_2/demo/Triangulation_2/Makefile Triangulation_2/demo/Triangulation_2/Makefile
Triangulation_2/demo/Triangulation_2/constrained Triangulation_2/demo/Triangulation_2/constrained
Triangulation_2/demo/Triangulation_2/constrained_delaunay_triangulation_2 Triangulation_2/demo/Triangulation_2/constrained_delaunay_triangulation_2
Triangulation_2/demo/Triangulation_2/delaunay_triangulation_2 Triangulation_2/demo/Triangulation_2/delaunay_triangulation_2
Triangulation_2/demo/Triangulation_2/regular_triangulation_2 Triangulation_2/demo/Triangulation_2/regular_triangulation_2
Triangulation_2/examples/Triangulation_2/cgal_test_with_cmake
Triangulation_2/examples/Triangulation_2/regular Triangulation_2/examples/Triangulation_2/regular
Triangulation_2/test/Triangulation_2/Makefile Triangulation_2/test/Triangulation_2/Makefile
Triangulation_2/test/Triangulation_2/T??.triangulation Triangulation_2/test/Triangulation_2/T??.triangulation
Triangulation_2/test/Triangulation_2/cgal_test_with_cmake
Triangulation_2/test/Triangulation_2/file_tds* Triangulation_2/test/Triangulation_2/file_tds*
Triangulation_2/test/Triangulation_2/makefile Triangulation_2/test/Triangulation_2/makefile
Triangulation_2/test/Triangulation_2/test_cdt_degenerate_case Triangulation_2/test/Triangulation_2/test_cdt_degenerate_case
@ -997,10 +949,8 @@ Triangulation_2/test/Triangulation_2/test_triangulation_2_bis
Triangulation_2/test/Triangulation_2/test_triangulation_geom_traits Triangulation_2/test/Triangulation_2/test_triangulation_geom_traits
Triangulation_2/test/Triangulation_2/test_triangulation_tds Triangulation_2/test/Triangulation_2/test_triangulation_tds
Triangulation_2/test/Triangulation_2/vrml_tds* Triangulation_2/test/Triangulation_2/vrml_tds*
Triangulation_3/benchmark/Triangulation_3/cgal_test_with_cmake
Triangulation_3/benchmark/Triangulation_3/simple Triangulation_3/benchmark/Triangulation_3/simple
Triangulation_3/examples/Triangulation_3/adding_handles_3 Triangulation_3/examples/Triangulation_3/adding_handles_3
Triangulation_3/examples/Triangulation_3/cgal_test_with_cmake
Triangulation_3/examples/Triangulation_3/color Triangulation_3/examples/Triangulation_3/color
Triangulation_3/examples/Triangulation_3/fast_location_3 Triangulation_3/examples/Triangulation_3/fast_location_3
Triangulation_3/examples/Triangulation_3/find_conflicts_3 Triangulation_3/examples/Triangulation_3/find_conflicts_3
@ -1026,7 +976,6 @@ Triangulation_3/test/Triangulation_3/Test8_triangulation_IO_3_binary
Triangulation_3/test/Triangulation_3/Test??_triangulation_IO_3 Triangulation_3/test/Triangulation_3/Test??_triangulation_IO_3
Triangulation_3/test/Triangulation_3/Test?_triangulation_IO_3 Triangulation_3/test/Triangulation_3/Test?_triangulation_IO_3
Triangulation_3/test/Triangulation_3/Test_tds_IO_3 Triangulation_3/test/Triangulation_3/Test_tds_IO_3
Triangulation_3/test/Triangulation_3/cgal_test_with_cmake
Triangulation_3/test/Triangulation_3/makefile Triangulation_3/test/Triangulation_3/makefile
Triangulation_3/test/Triangulation_3/test_delaunay_3 Triangulation_3/test/Triangulation_3/test_delaunay_3
Triangulation_3/test/Triangulation_3/test_delaunay_hierarchy_3 Triangulation_3/test/Triangulation_3/test_delaunay_hierarchy_3
@ -1083,7 +1032,6 @@ ProgramOutput*
ErrorOutput* ErrorOutput*
CompilerOutput* CompilerOutput*
error.txt error.txt
cgal_test_with_cmake.log
# File created by the Semantic Bovinator (an Emacs package) # File created by the Semantic Bovinator (an Emacs package)
semantic.cache semantic.cache
@ -1140,9 +1088,7 @@ Doxyfile
gmon.* gmon.*
# Unsorted file names: # Unsorted file names:
/Point_set_processing_3/test/Point_set_processing_3/cgal_test_with_cmake
/Point_set_processing_3/test/Point_set_processing_3/read_test /Point_set_processing_3/test/Point_set_processing_3/read_test
/Nef_S2/test/Nef_S2/cgal_test_with_cmake
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/construction_test_suite_generator /Arrangement_on_surface_2/test/Arrangement_on_surface_2/construction_test_suite_generator
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_point /Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_point
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_segment /Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_segment
@ -1190,15 +1136,11 @@ gmon.*
/Principal_component_analysis/examples/Principal_component_analysis/barycenter /Principal_component_analysis/examples/Principal_component_analysis/barycenter
/Principal_component_analysis/examples/Principal_component_analysis/bounding_box /Principal_component_analysis/examples/Principal_component_analysis/bounding_box
/Principal_component_analysis/examples/Principal_component_analysis/centroid /Principal_component_analysis/examples/Principal_component_analysis/centroid
/Principal_component_analysis/examples/Principal_component_analysis/cgal_test_with_cmake
/Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_points_2 /Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_points_2
/Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_triangles_3 /Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_triangles_3
/Polygon/examples/Polygon/cgal_test_with_cmake
/Polygon/test/Polygon/cgal_test_with_cmake
/Polygon/test/Polygon/polytest.ascii /Polygon/test/Polygon/polytest.ascii
/Polygon/test/Polygon/polytest.binary /Polygon/test/Polygon/polytest.binary
/Polygon/test/Polygon/polytest.pretty /Polygon/test/Polygon/polytest.pretty
/Stream_support/test/Stream_support/cgal_test_with_cmake
/*.html /*.html
/Snap_rounding_2/test/Snap_rounding_2/data/out /Snap_rounding_2/test/Snap_rounding_2/data/out
Polygonal_surface_reconstruction/examples/build* Polygonal_surface_reconstruction/examples/build*

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(AABB_traits_benchmark) project(AABB_traits_benchmark)
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core)

View File

@ -1,6 +1,6 @@
# This is the CMake script for compiling the AABB tree demo. # This is the CMake script for compiling the AABB tree demo.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(AABB_tree_Demo) project(AABB_tree_Demo)
# Find includes in corresponding build directories # Find includes in corresponding build directories

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(AABB_tree_Examples) project(AABB_tree_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(AABB_tree_Tests) project(AABB_tree_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Advancing_front_surface_reconstruction_Examples) project(Advancing_front_surface_reconstruction_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Advancing_front_surface_reconstruction_Tests) project(Advancing_front_surface_reconstruction_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_foundations_Examples) project(Algebraic_foundations_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_foundations_Tests) project(Algebraic_foundations_Tests)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_kernel_d_Examples) project(Algebraic_kernel_d_Examples)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_kernel_d_Tests) project(Algebraic_kernel_d_Tests)
# CGAL and its components # CGAL and its components

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_kernel_for_circles_Tests) project(Algebraic_kernel_for_circles_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Algebraic_kernel_for_spheres_Tests) project(Algebraic_kernel_for_spheres_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_shapes_2_Examples) project(Alpha_shapes_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_shapes_2_Tests) project(Alpha_shapes_2_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_shapes_3_Demo) project(Alpha_shapes_3_Demo)
# Find includes in corresponding build directories # Find includes in corresponding build directories

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_shapes_3_Examples) project(Alpha_shapes_3_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_shapes_3_Tests) project(Alpha_shapes_3_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_wrap_3_Benchmark) project(Alpha_wrap_3_Benchmark)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_wrap_3_Examples) project(Alpha_wrap_3_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Alpha_wrap_3_Tests) project(Alpha_wrap_3_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Apollonius_graph_2_Examples) project(Apollonius_graph_2_Examples)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Apollonius_graph_2_Tests) project(Apollonius_graph_2_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arithmetic_kernel_Tests) project(Arithmetic_kernel_Tests)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,6 +1,6 @@
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arrangement_on_surface_2_Demo) project(Arrangement_on_surface_2_Demo)
if(NOT POLICY CMP0070 AND POLICY CMP0053) if(NOT POLICY CMP0070 AND POLICY CMP0053)

View File

@ -1,6 +1,6 @@
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arrangement_on_surface_2_earth_Demo) project(Arrangement_on_surface_2_earth_Demo)
if(NOT POLICY CMP0070 AND POLICY CMP0053) if(NOT POLICY CMP0070 AND POLICY CMP0053)

View File

@ -1438,14 +1438,15 @@ vary according to the user choice.} for answering queries:
points or choosing points on a grid, are also available; see the points or choosing points on a grid, are also available; see the
Reference Manual for more details. Reference Manual for more details.
The landmark strategy requires that the type of the attached The arrangement attached to the landmark strategy must be either (i)
arrangement be an instance of the `Arrangement_2<Traits,Dcel>` class an instance of the `Arrangement_2<Geom,Dcel>` class template, where
template, where the `Traits` parameter is substituted by a the `Traits` parameter is substituted by a geometry-traits class
geometry-traits class that models the `ArrangementLandmarkTraits_2` that models the `ArrangementLandmarkTraits_2` concept, or (ii) an
concept, which refines the basic `ArrangementBasicTraits_2` concept; instance of the `Arrangement_on_surface_2<GeomTraits,TopolTraits>`
see Section \ref aos_sssec-tr_landmarks_concept for details. Most class template, where the `GeomTraits` is similarly substituted;
traits classes included in the \ref PkgArrangementOnSurface2 package see Section \ref aos_sssec-tr_landmarks_concept for details about
are models of this refined concept. this concept. Most traits classes included in the \ref
PkgArrangementOnSurface2 package are models of this refined concept.
<LI>`Arr_trapezoid_ric_point_location<Arrangement>` implements an <LI>`Arr_trapezoid_ric_point_location<Arrangement>` implements an
improved variant of Mulmuley's point-location algorithm improved variant of Mulmuley's point-location algorithm

View File

@ -440,13 +440,14 @@ public:
Bbox_2 operator()(const X_monotone_curve_2& xcv) const { return bbox(xcv); } Bbox_2 operator()(const X_monotone_curve_2& xcv) const { return bbox(xcv); }
}; };
/*! \name Auxiliary Functor definitions, used gor, e.g., the landmarks /*! \name Auxiliary Functor definitions, used gor, e.g., the landmarks \
* point-location strategy and the drawing function. * point-location strategy and the drawing function.
*/ */
//@{ //@{
typedef double Approximate_number_type; typedef double Approximate_number_type;
typedef CGAL::Cartesian<Approximate_number_type> Approximate_kernel; typedef CGAL::Cartesian<Approximate_number_type> Approximate_kernel;
typedef Approximate_kernel::Point_2 Approximate_point_2; typedef Approximate_kernel::Point_2 Approximate_point_2;
//@}
/*! \class Approximate_2 /*! \class Approximate_2
* A functor that approximates a point and an \f$x\f$-monotone curve. * A functor that approximates a point and an \f$x\f$-monotone curve.

View File

@ -121,6 +121,7 @@ public:
X_monotone_curve_2(const X_monotone_curve_2& xcv, X_monotone_curve_2(const X_monotone_curve_2& xcv,
const Point_2& src, const Point_2& tgt) const; const Point_2& src, const Point_2& tgt) const;
//! @}
} /* end Arr_segment_traits_2::Trim_2 */ } /* end Arr_segment_traits_2::Trim_2 */
}; /* end Arr_segment_traits_2 */ }; /* end Arr_segment_traits_2 */

View File

@ -29,6 +29,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -29,6 +29,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -33,6 +33,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -29,6 +29,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -29,6 +29,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arrangement_on_surface_2_Examples) project(Arrangement_on_surface_2_Examples)
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6) find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6)

View File

@ -36,13 +36,6 @@ using Trap_pl = CGAL::Arr_trapezoid_ric_point_location<Gm>;
using Geom_traits = Gm::Geometry_traits_2; using Geom_traits = Gm::Geometry_traits_2;
using Point_2 = Geom_traits::Point_2; using Point_2 = Geom_traits::Point_2;
using Point_location_result = CGAL::Arr_point_location_result<Gm>;
using Query_result = std::pair<Point_2, Point_location_result::Type>;
using Vertex_const_handle = Gm::Vertex_const_handle;
using Halfedge_const_handle = Gm::Halfedge_const_handle;
using Face_const_handle = Gm::Face_const_handle;
int main() { int main() {
Gm_polyhedron p; Gm_polyhedron p;
p.make_tetrahedron(Point_3(1.0, 0.0, 0.0), Point_3(0.0, 1.0, 0.0), p.make_tetrahedron(Point_3(1.0, 0.0, 0.0), Point_3(0.0, 1.0, 0.0),
@ -50,7 +43,7 @@ int main() {
Gm gm; Gm gm;
Naive_pl naive_pl(gm); Naive_pl naive_pl(gm);
// Landmarks_pl landmarks_pl(gm); Landmarks_pl landmarks_pl(gm);
Walk_pl walk_pl(gm); Walk_pl walk_pl(gm);
// Trap_pl trap_pl(gm); // Trap_pl trap_pl(gm);
@ -70,30 +63,17 @@ int main() {
locate_point(naive_pl, points[1]); locate_point(naive_pl, points[1]);
locate_point(naive_pl, points[2]); locate_point(naive_pl, points[2]);
// locate_point(walk_pl, points[0]);
// locate_point(walk_pl, points[1]);
// locate_point(walk_pl, points[2]);
locate_point(landmarks_pl, points[0]);
locate_point(landmarks_pl, points[1]);
locate_point(landmarks_pl, points[2]);
// locate_point(trap_pl, points[0]); // locate_point(trap_pl, points[0]);
// locate_point(trap_pl, points[1]);
//////// // locate_point(trap_pl, points[2]);
std::list<Query_result> results;
// The following cause an assertion failure.
// CGAL::locate(gm, &points[0], &points[3], std::back_inserter(results));
// Print the results.
for (auto it = results.begin(); it != results.end(); ++it) {
std::cout << "The point (" << it->first << ") is located ";
if (const Face_const_handle* f =
std::get_if<Face_const_handle>(&(it->second))) // inside a face
std::cout << "inside "
<< (((*f)->is_unbounded()) ? "the unbounded" : "a bounded")
<< " face.\n";
else if (const Halfedge_const_handle* e =
std::get_if<Halfedge_const_handle>(&(it->second))) // on an edge
std::cout << "on an edge: " << (*e)->curve() << std::endl;
else if (const Vertex_const_handle* v =
std::get_if<Vertex_const_handle>(&(it->second))) // on a vertex
std::cout << "on "
<< (((*v)->is_isolated()) ? "an isolated" : "a")
<< " vertex: " << (*v)->point() << std::endl;
}
return 0; return 0;
} }

View File

@ -1515,7 +1515,7 @@ public:
//@} //@}
/*! \name Auxiliary Functor definitions, used gor, e.g., the landmarks /*! \name Auxiliary Functor definitions, used gor, e.g., the landmarks \
* point-location strategy and the drawing function. * point-location strategy and the drawing function.
*/ */
//@{ //@{

View File

@ -8,8 +8,8 @@
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
// //
// //
// Author(s) : Idit Haran <haranidi@post.tau.ac.il> // Author(s) : Idit Haran <haranidi@post.tau.ac.il>
// Ron Wein <wein@post.tau.ac.il> // Ron Wein <wein@post.tau.ac.il>
#ifndef CGAL_ARR_LANDMARKS_POINT_LOCATION_H #ifndef CGAL_ARR_LANDMARKS_POINT_LOCATION_H
#define CGAL_ARR_LANDMARKS_POINT_LOCATION_H #define CGAL_ARR_LANDMARKS_POINT_LOCATION_H
@ -27,6 +27,7 @@
#include <CGAL/Arr_point_location_result.h> #include <CGAL/Arr_point_location_result.h>
#include <CGAL/Arrangement_2/Arr_traits_adaptor_2.h> #include <CGAL/Arrangement_2/Arr_traits_adaptor_2.h>
#include <CGAL/Arr_point_location/Arr_lm_vertices_generator.h> #include <CGAL/Arr_point_location/Arr_lm_vertices_generator.h>
#include <CGAL/Arr_tags.h>
#include <set> #include <set>
@ -42,44 +43,54 @@ namespace CGAL {
* Generator is a class that generates the set of landmarks. * Generator is a class that generates the set of landmarks.
*/ */
template <class Arrangement_, template <typename Arrangement_,
class Generator_ = Arr_landmarks_vertices_generator<Arrangement_> > typename Generator_ = Arr_landmarks_vertices_generator<Arrangement_>>
class Arr_landmarks_point_location class Arr_landmarks_point_location {
{
public: public:
typedef Arrangement_ Arrangement_2; using Arrangement_2 = Arrangement_;
typedef typename Arrangement_2::Geometry_traits_2 Geometry_traits_2; using Generator = Generator_;
typedef Generator_ Generator; using Geometry_traits_2 = typename Arrangement_2::Geometry_traits_2;
typedef typename Arrangement_2::Vertex_const_handle Vertex_const_handle; using Vertex_const_handle = typename Arrangement_2::Vertex_const_handle;
typedef typename Arrangement_2::Halfedge_const_handle Halfedge_const_handle; using Halfedge_const_handle = typename Arrangement_2::Halfedge_const_handle;
typedef typename Arrangement_2::Face_const_handle Face_const_handle; using Face_const_handle = typename Arrangement_2::Face_const_handle;
typedef typename Arrangement_2::Vertex_const_iterator Vertex_const_iterator; using Vertex_const_iterator = typename Arrangement_2::Vertex_const_iterator;
typedef typename Arrangement_2::Halfedge_const_iterator using Halfedge_const_iterator =
Halfedge_const_iterator; typename Arrangement_2::Halfedge_const_iterator;
typedef typename Arrangement_2::Halfedge_around_vertex_const_circulator
Halfedge_around_vertex_const_circulator;
typedef typename Arrangement_2::Ccb_halfedge_const_circulator
Ccb_halfedge_const_circulator;
typedef typename Arrangement_2::Outer_ccb_const_iterator
Outer_ccb_const_iterator;
typedef typename Arrangement_2::Inner_ccb_const_iterator
Inner_ccb_const_iterator;
typedef typename Arrangement_2::Isolated_vertex_const_iterator
Isolated_vertex_const_iterator;
typedef typename Arrangement_2::Point_2 Point_2; using Halfedge_around_vertex_const_circulator =
typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2; typename Arrangement_2::Halfedge_around_vertex_const_circulator;
using Ccb_halfedge_const_circulator =
typename Arrangement_2::Ccb_halfedge_const_circulator;
using Outer_ccb_const_iterator =
typename Arrangement_2::Outer_ccb_const_iterator;
using Inner_ccb_const_iterator =
typename Arrangement_2::Inner_ccb_const_iterator;
using Isolated_vertex_const_iterator =
typename Arrangement_2::Isolated_vertex_const_iterator;
typedef Arr_point_location_result<Arrangement_2> Result; using Point_2 = typename Arrangement_2::Point_2;
typedef typename Result::Type Result_type; using X_monotone_curve_2 = typename Arrangement_2::X_monotone_curve_2;
using Result = Arr_point_location_result<Arrangement_2>;
using Result_type = typename Result::Type;
// Support cpp11::result_of // Support cpp11::result_of
typedef Result_type result_type; using result_type = Result_type;
private:
using Gt2 = Geometry_traits_2;
using Left_side_category =
typename internal::Arr_complete_left_side_category<Gt2>::Category;
using Right_side_category =
typename internal::Arr_complete_right_side_category<Gt2>::Category;
using Left_or_right_sides_category =
typename Arr_two_sides_category<Left_side_category,
Right_side_category>::result;
protected: protected:
typedef Arr_traits_basic_adaptor_2<Geometry_traits_2> Traits_adaptor_2; using Traits_adaptor_2 = Arr_traits_basic_adaptor_2<Geometry_traits_2>;
/*! \struct Less_halfedge_handle /*! \struct Less_halfedge_handle
* Used to sort handles. * Used to sort handles.
@ -92,10 +103,10 @@ protected:
typedef std::set<Halfedge_const_handle, Less_halfedge_handle> Halfedge_set; typedef std::set<Halfedge_const_handle, Less_halfedge_handle> Halfedge_set;
// Data members: // Data members:
const Arrangement_2* p_arr; // The associated arrangement. const Arrangement_2* p_arr; // The associated arrangement.
const Traits_adaptor_2* m_traits; // Its associated traits object. const Traits_adaptor_2* m_traits; // Its associated traits object.
Generator* lm_gen; // The associated landmark generator. Generator* lm_gen; // The associated landmark generator.
bool own_gen; // Indicates whether the generator bool own_gen; // Indicates whether the generator
// has been locally allocated. // has been locally allocated.
template<typename T> template<typename T>
@ -103,7 +114,7 @@ protected:
inline Result_type default_result() const { return Result::default_result(); } inline Result_type default_result() const { return Result::default_result(); }
public: public:
/*! Default constructor. */ /*! constructs default. */
Arr_landmarks_point_location() : Arr_landmarks_point_location() :
p_arr(nullptr), p_arr(nullptr),
m_traits(nullptr), m_traits(nullptr),
@ -111,34 +122,32 @@ public:
own_gen(false) own_gen(false)
{} {}
/*! Constructor given an arrangement only. */ /*! constructs given an arrangement only. */
Arr_landmarks_point_location(const Arrangement_2& arr) : Arr_landmarks_point_location(const Arrangement_2& arr) :
p_arr(&arr), p_arr(&arr),
m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())), m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())),
lm_gen(new Generator(arr)), // allocate the landmarks generator. lm_gen(new Generator(arr)), // allocate the landmarks generator.
own_gen(true) own_gen(true)
{ } {}
/*! Constructor given an arrangement, and landmarks generator. */ /*! constructs given an arrangement, and landmarks generator. */
Arr_landmarks_point_location(const Arrangement_2& arr, Generator* gen) : Arr_landmarks_point_location(const Arrangement_2& arr, Generator* gen) :
p_arr(&arr), p_arr(&arr),
m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())), m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())),
lm_gen(gen), lm_gen(gen),
own_gen(false) own_gen(false)
{ } {}
/*! Destructor. */ /*! destructs. */
~Arr_landmarks_point_location() ~Arr_landmarks_point_location() {
{
if (own_gen) { if (own_gen) {
delete lm_gen; delete lm_gen;
lm_gen = nullptr; lm_gen = nullptr;
} }
} }
/*! Attach an arrangement object (and a generator, if supplied). */ /*! attaches an arrangement object (and a generator, if supplied). */
void attach(const Arrangement_2& arr, Generator* gen = nullptr) void attach(const Arrangement_2& arr, Generator* gen = nullptr) {
{
// Keep a pointer to the associated arrangement. // Keep a pointer to the associated arrangement.
p_arr = &arr; p_arr = &arr;
m_traits = static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits()); m_traits = static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits());
@ -163,9 +172,8 @@ public:
} }
} }
/*! Detach the instance from the arrangement object. */ /*! detaches the instance from the arrangement object. */
void detach() void detach() {
{
p_arr = nullptr; p_arr = nullptr;
m_traits = nullptr; m_traits = nullptr;
@ -174,8 +182,7 @@ public:
lm_gen->detach(); lm_gen->detach();
} }
/*! /*! locates the arrangement feature containing the given point.
* Locate the arrangement feature containing the given point.
* \param p The query point. * \param p The query point.
* \return An object representing the arrangement feature containing the * \return An object representing the arrangement feature containing the
* query point. This object is either a Face_const_handle or a * query point. This object is either a Face_const_handle or a
@ -184,7 +191,7 @@ public:
result_type locate(const Point_2& p) const; result_type locate(const Point_2& p) const;
protected: protected:
/*! Walk from the given vertex to the query point. /*! walks from the given vertex to the query point.
* \param vh The given vertex handle. * \param vh The given vertex handle.
* \param p The query point. * \param p The query point.
* \param crossed_edges In/Out: The set of edges crossed so far. * \param crossed_edges In/Out: The set of edges crossed so far.
@ -196,7 +203,7 @@ protected:
const Point_2& p, const Point_2& p,
Halfedge_set& crossed_edges) const; Halfedge_set& crossed_edges) const;
/*! Locate an edge around a given vertex that is the predecessor of the /*! locates an edge around a given vertex that is the predecessor of the
* curve connecting the vertex to the query point in a clockwise order. * curve connecting the vertex to the query point in a clockwise order.
* \param vh The vertex. * \param vh The vertex.
* \param p The query point. * \param p The query point.
@ -207,7 +214,7 @@ protected:
const Point_2& p, const Point_2& p,
bool& new_vertex) const; bool& new_vertex) const;
/*! Walk from a point on a given halfedge to the query point. /*! walks from a point on a given halfedge to the query point.
* \param eh The given halfedge handle. * \param eh The given halfedge handle.
* \param np The point that the walk starts from. * \param np The point that the walk starts from.
* \param p The query point. * \param p The query point.
@ -220,7 +227,7 @@ protected:
const Point_2& np, const Point_2& np,
const Point_2& p, const Point_2& p,
Halfedge_set& crossed_edges) const; Halfedge_set& crossed_edges) const;
/*! In case the arrangement's curve contained in the segment /*! handles the arrangement curve contained in the segment
* from the nearest landmark to the query point * from the nearest landmark to the query point
* \param he The given halfedge handle. * \param he The given halfedge handle.
* \param p_is_left Is the query point the left endpoint of seg. * \param p_is_left Is the query point the left endpoint of seg.
@ -236,7 +243,7 @@ protected:
const Point_2& p, const Point_2& p,
Halfedge_set& crossed_edges) const; Halfedge_set& crossed_edges) const;
/*! Walk from a point in a face to the query point. /*! walks from a point in a face to the query point.
* \param fh A halfedge handle that points to the face. * \param fh A halfedge handle that points to the face.
* \param np The point that the walk starts from. * \param np The point that the walk starts from.
* \param p The query point. * \param p The query point.
@ -250,7 +257,7 @@ protected:
const Point_2& p, const Point_2& p,
Halfedge_set& crossed_edges) const; Halfedge_set& crossed_edges) const;
/*! Find a halfedge on the given CCB that intersects the given x-monotone /*! finds a halfedge on the given CCB that intersects the given x-monotone
* curve, connecting the current landmark to the query point. * curve, connecting the current landmark to the query point.
* \param circ The CCB circulator. * \param circ The CCB circulator.
* \param seg The segment connecting the landmark and the query point. * \param seg The segment connecting the landmark and the query point.
@ -275,7 +282,7 @@ protected:
bool& cv_is_contained_in_seg, bool& cv_is_contained_in_seg,
Vertex_const_handle& new_vertex) const; Vertex_const_handle& new_vertex) const;
/*! Return the halfedge that contains the query point. /*! returns the halfedge that contains the query point.
* \param he The halfedge handle. * \param he The halfedge handle.
* \param crossed_edges In/Out: The set of edges crossed so far. * \param crossed_edges In/Out: The set of edges crossed so far.
* \param p The query point. * \param p The query point.
@ -287,7 +294,7 @@ protected:
const Point_2& p, const Point_2& p,
bool& is_target) const; bool& is_target) const;
/*! Check whether the given curve intersects a simple segment, which connects /*! checks whether the given curve intersects a simple segment, which connects
* the current landmark to the query point, an odd number of times. * the current landmark to the query point, an odd number of times.
* \param cv The curve. * \param cv The curve.
* \param seg The segment connecting the landmark and the query point. * \param seg The segment connecting the landmark and the query point.
@ -303,9 +310,62 @@ protected:
bool& p_on_curve, bool& p_on_curve,
bool& cv_and_seg_overlap, bool& cv_and_seg_overlap,
bool& cv_is_contained_in_seg) const; bool& cv_is_contained_in_seg) const;
//!
template <typename T>
std::pair<X_monotone_curve_2, Comparison_result>
construct_segment(const Point_2& p, const Point_2& q, T const& traits,
...) const {
X_monotone_curve_2 seg = traits.construct_x_monotone_curve_2_object()(p, q);
Comparison_result res = traits.compare_xy_2_object()(p, q);
return std::make_pair(seg, res);
}
//*!
template <typename T, typename = typename T::Compare_endpoints_xy_2>
std::pair<X_monotone_curve_2, Comparison_result>
construct_segment(const Point_2& p, const Point_2& q, T const& traits,
int) const {
X_monotone_curve_2 seg = traits.construct_x_monotone_curve_2_object()(p, q);
Comparison_result res = traits.compare_endpoints_xy_2_object()(seg);
return std::make_pair(seg, res);
}
/*! Determines whether the $x$-coordinates of two points are equal.
*/
bool equal_x_2(const Point_2& p, const Point_2& q,
Arr_all_sides_oblivious_tag) const
{ return (m_traits->compare_x_2_object()(p, q) == EQUAL); }
/*! Determines whether the $x$-coordinates of two points are equal.
*/
bool equal_x_2(const Point_2& p, const Point_2& q,
Arr_has_identified_side_tag) const {
auto is_on_y_identification = m_traits->is_on_y_identification_2_object();
if (is_on_y_identification(p)) {
return is_on_y_identification(q);
}
if (is_on_y_identification(q)) return false;
return (m_traits->compare_x_2_object()(p, q) == EQUAL);
}
/*! Determines whether the $x$-coordinates of two points are equal.
*/
bool equal_x_2(const Point_2& p, const Point_2& q,
Arr_boundary_cond_tag) const {
auto param_space_in_x = m_traits->parameter_space_in_x_2_object();
switch (param_space_in_x(p)) {
case ARR_LEFT_BOUNDARY: return (param_space_in_x(q) == ARR_LEFT_BOUNDARY);
case ARR_RIGHT_BOUNDARY: return (param_space_in_x(q) == ARR_LEFT_BOUNDARY);
case ARR_INTERIOR: return (m_traits->compare_x_2_object()(p, q) == EQUAL);
default: CGAL_error();
}
CGAL_error();
return false;
}
}; };
} //namespace CGAL } // namespace CGAL
// The member-function definitions can be found under: // The member-function definitions can be found under:
#include <CGAL/Arr_point_location/Arr_landmarks_pl_impl.h> #include <CGAL/Arr_point_location/Arr_landmarks_pl_impl.h>

View File

@ -7,16 +7,15 @@
// $Id$ // $Id$
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
// //
// Author(s) : Idit Haran <haranidi@post.tau.ac.il> // Author(s) : Idit Haran <haranidi@post.tau.ac.il>
// Ron Wein <wein@post.tau.ac.il> // Ron Wein <wein@post.tau.ac.il>
// Efi Fogel <efif@post.tau.ac.il> // Efi Fogel <efif@post.tau.ac.il>
#ifndef CGAL_ARR_LANDMARKS_PL_IMPL_H #ifndef CGAL_ARR_LANDMARKS_PL_IMPL_H
#define CGAL_ARR_LANDMARKS_PL_IMPL_H #define CGAL_ARR_LANDMARKS_PL_IMPL_H
#include <CGAL/license/Arrangement_on_surface_2.h> #include <CGAL/license/Arrangement_on_surface_2.h>
/*! \file /*! \file
* Member-function definitions for the * Member-function definitions for the
* Arr_landmarks_point_location<Arrangement, Generator> class. * Arr_landmarks_point_location<Arrangement, Generator> class.
@ -24,60 +23,53 @@
namespace CGAL { namespace CGAL {
//----------------------------------------------------------------------------- /*! locates the arrangement feature containing the given point.
// Locate the arrangement feature containing the given point. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>::locate(const Point_2& p) const Arr_landmarks_point_location<Arr, Gen>::locate(const Point_2& p) const {
{
// If the arrangement is empty, return its initial (empty and // If the arrangement is empty, return its initial (empty and
// non-fictitious) face. // non-fictitious) face.
if (p_arr->number_of_vertices() == 0) { if (p_arr->number_of_vertices() == 0) {
CGAL_assertion(p_arr->number_of_faces() == 1); CGAL_assertion(p_arr->number_of_faces() == 1);
Face_const_handle fh = p_arr->faces_begin(); Face_const_handle fh = p_arr->faces_begin();
return make_result(fh); return make_result(fh);
} }
// Use the generator and to find the closest landmark to the query point. // Use the generator and to find the closest landmark to the query point.
result_type lm_location_obj; result_type lm_location_obj;
const Point_2& landmark_point = lm_gen->closest_landmark(p, lm_location_obj); const Point_2& landmark_point = lm_gen->closest_landmark(p, lm_location_obj);
// If the query point and the landmark point are equal, return the landmark. // If the query point and the landmark point are equal, return the landmark.
if (m_traits->equal_2_object()(landmark_point, p)) if (m_traits->equal_2_object()(landmark_point, p)) return lm_location_obj;
return lm_location_obj;
// Walk from the nearest_vertex to the point p, using walk algorithm, // Walk from the nearest_vertex to the point p, using walk algorithm,
// and find the location of the query point p. Note that the set of edges // and find the location of the query point p. Note that the set of edges
// we have crossed so far is initially empty. // we have crossed so far is initially empty.
Halfedge_set crossed_edges; Halfedge_set crossed_edges;
result_type out_obj; result_type out_obj;
// Locate the arrangement feature that contains the landmark. // Locate the arrangement feature that contains the landmark.
const Vertex_const_handle* vh; if (const auto* v = std::get_if<Vertex_const_handle>(&lm_location_obj))
const Halfedge_const_handle* hh; out_obj = _walk_from_vertex(*v, p, crossed_edges);
const Face_const_handle* fh; else if (const auto* e = std::get_if<Halfedge_const_handle>(&lm_location_obj))
if ( ( vh = Result().template assign<Vertex_const_handle>(&lm_location_obj) ) ) out_obj = _walk_from_edge(*e, landmark_point, p, crossed_edges);
out_obj = _walk_from_vertex(*vh, p, crossed_edges); else if (const auto* f = std::get_if<Face_const_handle>(&lm_location_obj))
else if ( ( hh = Result().template assign<Halfedge_const_handle>(&lm_location_obj) ) ) out_obj = _walk_from_face(*f, landmark_point, p, crossed_edges);
out_obj = _walk_from_edge(*hh, landmark_point, p, crossed_edges);
else if ( ( fh = Result().template assign<Face_const_handle>(&lm_location_obj) ) )
out_obj = _walk_from_face(*fh, landmark_point, p, crossed_edges);
else CGAL_error_msg("lm_location_obj of an unknown type."); else CGAL_error_msg("lm_location_obj of an unknown type.");
if ( ( fh = Result().template assign<Face_const_handle>(&out_obj) ) ) { if (const auto* fp = std::get_if<Face_const_handle>(&out_obj)) {
const auto& f = *fp;
// If we reached here, we did not locate the query point in any of the // If we reached here, we did not locate the query point in any of the
// holes inside the current face, so we conclude it is contained in this // holes inside the current face, so we conclude it is contained in this
// face. // face. However, we first have to check whether the query point coincides
// However, we first have to check whether the query point coincides with // with any of the isolated vertices contained inside this face.
// any of the isolated vertices contained inside this face. auto equal = m_traits->equal_2_object();
Isolated_vertex_const_iterator iso_verts_it; // Do not use 'auto' to define the iterator, as MSVC2017 complains.
typename Traits_adaptor_2::Equal_2 equal = m_traits->equal_2_object(); for (Isolated_vertex_const_iterator iso_verts_it = f->isolated_vertices_begin();
iso_verts_it != f->isolated_vertices_end(); ++iso_verts_it) {
for (iso_verts_it = (*fh)->isolated_vertices_begin();
iso_verts_it != (*fh)->isolated_vertices_end(); ++iso_verts_it)
{
if (equal(p, iso_verts_it->point())) { if (equal(p, iso_verts_it->point())) {
Vertex_const_handle ivh = iso_verts_it; Vertex_const_handle ivh = iso_verts_it;
return make_result(ivh); return make_result(ivh);
} }
} }
@ -86,28 +78,24 @@ Arr_landmarks_point_location<Arr, Gen>::locate(const Point_2& p) const
return out_obj; return out_obj;
} }
//----------------------------------------------------------------------------- /*! walks from a given vertex to the query point.
// Walk from a given vertex to the query point. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
_walk_from_vertex(Vertex_const_handle nearest_vertex, _walk_from_vertex(Vertex_const_handle nearest_vertex, const Point_2& p,
const Point_2& p, Halfedge_set& crossed_edges) const {
Halfedge_set& crossed_edges) const
{
Vertex_const_handle vh = nearest_vertex; Vertex_const_handle vh = nearest_vertex;
CGAL_assertion_msg(! vh->is_at_open_boundary(), CGAL_assertion_msg(! vh->is_at_open_boundary(),
"_walk_from_vertex() from a vertex at infinity."); "_walk_from_vertex() from a vertex at infinity.");
// Check if the query point p coincides with the vertex. // Check if the query point p coincides with the vertex.
if (m_traits->equal_2_object()(vh->point(), p)) if (m_traits->equal_2_object()(vh->point(), p)) return make_result(vh);
return make_result(vh);
// In case of an isolated vertex, walk to from the face that contains // In case of an isolated vertex, walk to from the face that contains
// it toward the query point. // it toward the query point.
if (vh->is_isolated()) { if (vh->is_isolated()) {
Face_const_handle fh = vh->face(); Face_const_handle fh = vh->face();
return (_walk_from_face(fh, vh->point(), p, crossed_edges)); return (_walk_from_face(fh, vh->point(), p, crossed_edges));
} }
@ -116,16 +104,15 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
Halfedge_around_vertex_const_circulator first = vh->incident_halfedges(); Halfedge_around_vertex_const_circulator first = vh->incident_halfedges();
// Create an x-monotone curve connecting the point associated with the // Create an x-monotone curve connecting the point associated with the
// vertex vp and the query point p. // vertex vp and the query point p.
const Point_2& vp = vh->point(); const Point_2& vp = vh->point();
X_monotone_curve_2 seg = X_monotone_curve_2 seg;
m_traits->construct_x_monotone_curve_2_object()(vp, p); Comparison_result res;
const bool seg_dir_right = std::tie(seg, res) = construct_segment(vp, p, *m_traits, 0);
(m_traits->compare_xy_2_object()(vp, p) == SMALLER); bool seg_dir_right = (res == SMALLER);
Halfedge_around_vertex_const_circulator curr_iter = first; Halfedge_around_vertex_const_circulator curr_iter = first;
Halfedge_around_vertex_const_circulator next_iter = curr_iter; Halfedge_around_vertex_const_circulator next_iter = curr_iter;
++next_iter; ++next_iter;
typename Traits_adaptor_2::Is_between_cw_2 is_between_cw = auto is_between_cw = m_traits->is_between_cw_2_object();
m_traits->is_between_cw_2_object();
// Traverse the halfedges around vp until we find the pair of adjacent // Traverse the halfedges around vp until we find the pair of adjacent
// halfedges such as seg is located clockwise in between them. // halfedges such as seg is located clockwise in between them.
do { do {
@ -134,12 +121,11 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
(curr_iter->direction() == ARR_RIGHT_TO_LEFT), (curr_iter->direction() == ARR_RIGHT_TO_LEFT),
next_iter->curve(), next_iter->curve(),
(next_iter->direction() == ARR_RIGHT_TO_LEFT), (next_iter->direction() == ARR_RIGHT_TO_LEFT),
vp, eq_curr_iter, eq_next_iter)) vp, eq_curr_iter, eq_next_iter)) {
{
// the assumption is that each edge is crossed at most twice // the assumption is that each edge is crossed at most twice
CGAL_assertion_msg(crossed_edges.count (curr_iter) < 2, CGAL_assertion_msg(crossed_edges.count(curr_iter) < 2,
"crossed_edges should contain each halfedge at most twice."); "crossed_edges should contain each halfedge at most twice.");
CGAL_assertion_msg(crossed_edges.count (next_iter) < 2, CGAL_assertion_msg(crossed_edges.count(next_iter) < 2,
"crossed_edges should contain each halfedge at most twice."); "crossed_edges should contain each halfedge at most twice.");
crossed_edges.insert(curr_iter); crossed_edges.insert(curr_iter);
crossed_edges.insert(curr_iter->twin()); crossed_edges.insert(curr_iter->twin());
@ -158,8 +144,7 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
result_type obj = _find_face_around_vertex(vh, p, new_vertex); result_type obj = _find_face_around_vertex(vh, p, new_vertex);
if (new_vertex) { if (new_vertex) {
// We found a vertex closer to p; Continue using this vertex. // We found a vertex closer to p; Continue using this vertex.
const Vertex_const_handle* p_vh = const auto* p_vh = std::get_if<Vertex_const_handle>(&obj);
Result().template assign<Vertex_const_handle>(&obj);
CGAL_assertion(p_vh != nullptr); CGAL_assertion(p_vh != nullptr);
vh = *p_vh; vh = *p_vh;
continue; continue;
@ -167,15 +152,13 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
// If p is located on an edge or on a vertex, return the object // If p is located on an edge or on a vertex, return the object
// that wraps this arrangement feature. // that wraps this arrangement feature.
if (Result().template assign<Halfedge_const_handle>(&obj) || if (std::get_if<Halfedge_const_handle>(&obj) ||
Result().template assign<Vertex_const_handle>(&obj)) std::get_if<Vertex_const_handle>(&obj))
return obj; return obj;
const Face_const_handle* p_fh = const auto* p_fh = std::get_if<Face_const_handle>(&obj);
Result().template assign<Face_const_handle>(&obj); // Walk to p from the face we have located:
if (p_fh) if (p_fh) return _walk_from_face(*p_fh, vh->point(), p, crossed_edges);
// Walk to p from the face we have located:
return _walk_from_face(*p_fh, vh->point(), p, crossed_edges);
CGAL_error_msg("_find_face_around_vertex() returned an unknown object."); CGAL_error_msg("_find_face_around_vertex() returned an unknown object.");
} }
@ -185,31 +168,27 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
return default_result(); return default_result();
} }
//----------------------------------------------------------------------------- /*! locates an edge around a given vertex that is the predecessor of the curve
// Locate an edge around a given vertex that is the predecessor of the curve * connecting the vertex to the query point in a clockwise order.
// connecting the vertex to the query point in a clockwise order. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
_find_face_around_vertex(Vertex_const_handle vh, _find_face_around_vertex(Vertex_const_handle vh, const Point_2& p,
const Point_2& p, bool& new_vertex) const {
bool& new_vertex) const
{
new_vertex = false; new_vertex = false;
// Create an x-monotone curve connecting the point associated with the // Create an x-monotone curve connecting the point associated with the
// vertex vp and the query point p. // vertex vp and the query point p.
const Point_2& vp = vh->point(); const Point_2& vp = vh->point();
X_monotone_curve_2 seg = X_monotone_curve_2 seg;
m_traits->construct_x_monotone_curve_2_object()(vp, p); Comparison_result res;
const bool seg_dir_right = std::tie(seg, res) = construct_segment(vp, p, *m_traits, 0);
(m_traits->compare_xy_2_object()(vp, p) == SMALLER); bool seg_dir_right = (res == SMALLER);
// Get the first incident halfedge around v and the next halfedge. // Get the first incident halfedge around v and the next halfedge.
Halfedge_around_vertex_const_circulator first = vh->incident_halfedges(); Halfedge_around_vertex_const_circulator first = vh->incident_halfedges();
Halfedge_around_vertex_const_circulator curr, next; Halfedge_around_vertex_const_circulator curr, next;
bool equal_curr = false; bool equal_curr = false;
next = curr = first; next = curr = first;
++next; ++next;
@ -241,16 +220,14 @@ _find_face_around_vertex(Vertex_const_handle vh,
else { else {
// Traverse the halfedges around v until we find the pair of adjacent // Traverse the halfedges around v until we find the pair of adjacent
// halfedges such as seg is located clockwise in between them. // halfedges such as seg is located clockwise in between them.
typename Traits_adaptor_2::Is_between_cw_2 is_between_cw = auto is_between_cw = m_traits->is_between_cw_2_object();
m_traits->is_between_cw_2_object(); bool eq_curr, eq_next;
bool eq_curr, eq_next;
while (! is_between_cw(seg, seg_dir_right, curr->curve(), while (! is_between_cw(seg, seg_dir_right, curr->curve(),
(curr->direction() == ARR_RIGHT_TO_LEFT), (curr->direction() == ARR_RIGHT_TO_LEFT),
next->curve(), next->curve(),
(next->direction() == ARR_RIGHT_TO_LEFT), (next->direction() == ARR_RIGHT_TO_LEFT),
vp, eq_curr, eq_next)) vp, eq_curr, eq_next)) {
{
// Break the loop if seg equals one of the halfedges next to v. // Break the loop if seg equals one of the halfedges next to v.
if (eq_curr) { if (eq_curr) {
equal_curr = true; equal_curr = true;
@ -291,10 +268,9 @@ _find_face_around_vertex(Vertex_const_handle vh,
// Check whether p lies on the curve associated with the edge. // Check whether p lies on the curve associated with the edge.
if (m_traits->is_in_x_range_2_object()(curr->curve(), p) && if (m_traits->is_in_x_range_2_object()(curr->curve(), p) &&
m_traits->compare_y_at_x_2_object()(p, curr->curve()) == EQUAL) m_traits->compare_y_at_x_2_object()(p, curr->curve()) == EQUAL) {
{
// p is located on the interior of the edge. // p is located on the interior of the edge.
Halfedge_const_handle he = curr; Halfedge_const_handle he = curr;
return make_result(he); return make_result(he);
} }
@ -304,22 +280,18 @@ _find_face_around_vertex(Vertex_const_handle vh,
return make_result(curr->source()); return make_result(curr->source());
} }
//----------------------------------------------------------------------------- /*! walks from the edge to the query point.
// Walk from the edge to the query point. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
_walk_from_edge(Halfedge_const_handle eh, _walk_from_edge(Halfedge_const_handle eh, const Point_2& np, const Point_2& p,
const Point_2& np, Halfedge_set& crossed_edges) const {
const Point_2& p,
Halfedge_set& crossed_edges) const
{
CGAL_assertion_msg(! eh->is_fictitious(), CGAL_assertion_msg(! eh->is_fictitious(),
"_walk_from_edge() from a fictitious edge."); "_walk_from_edge() from a fictitious edge.");
const X_monotone_curve_2& cv = eh->curve() ; const X_monotone_curve_2& cv = eh->curve() ;
Comparison_result res; Comparison_result res;
X_monotone_curve_2 seg = X_monotone_curve_2 seg =
m_traits->construct_x_monotone_curve_2_object()(np, p); m_traits->construct_x_monotone_curve_2_object()(np, p);
@ -345,8 +317,7 @@ _walk_from_edge(Halfedge_const_handle eh,
if (m_traits->is_in_x_range_2_object()(seg, temp_p)) { if (m_traits->is_in_x_range_2_object()(seg, temp_p)) {
//we must make sure that eh is not a tip on an "antena" //we must make sure that eh is not a tip on an "antena"
if (m_traits->compare_y_at_x_2_object()(temp_p, seg) == EQUAL && if (m_traits->compare_y_at_x_2_object()(temp_p, seg) == EQUAL &&
eh->prev() != eh->twin()) eh->prev() != eh->twin()) {
{
// the assumption is that each edge is crossed at most twice // the assumption is that each edge is crossed at most twice
CGAL_assertion_msg(crossed_edges.count(eh->prev()) < 2, CGAL_assertion_msg(crossed_edges.count(eh->prev()) < 2,
"crossed_edges should contain each halfedge at most twice."); "crossed_edges should contain each halfedge at most twice.");
@ -367,8 +338,7 @@ _walk_from_edge(Halfedge_const_handle eh,
if (m_traits->is_in_x_range_2_object()(seg, temp_p)) { if (m_traits->is_in_x_range_2_object()(seg, temp_p)) {
//we must make sure that eh is not a tip on an "antena" //we must make sure that eh is not a tip on an "antena"
if (m_traits->compare_y_at_x_2_object()(temp_p, seg) == EQUAL && if (m_traits->compare_y_at_x_2_object()(temp_p, seg) == EQUAL &&
eh->next() != eh->twin()) eh->next() != eh->twin()) {
{
// the assumption is that each edge is crossed at most twice // the assumption is that each edge is crossed at most twice
CGAL_assertion_msg(crossed_edges.count(eh->next()) < 2, CGAL_assertion_msg(crossed_edges.count(eh->next()) < 2,
"crossed_edges should contain each halfedge at most twice."); "crossed_edges should contain each halfedge at most twice.");
@ -428,89 +398,71 @@ _walk_from_edge(Halfedge_const_handle eh,
return (_walk_from_vertex(vh, p, crossed_edges)); return (_walk_from_vertex(vh, p, crossed_edges));
} }
//----------------------------------------------------------------------------- /*! deals with an arrangement curve contained in the segment from the nearest
// In case the arrangement's curve contained in the segment * landmark to the query point
// from the nearest landmark to the query point */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
_deal_with_curve_contained_in_segment(Halfedge_const_handle he, _deal_with_curve_contained_in_segment(Halfedge_const_handle he, bool p_is_left,
bool p_is_left,
const Point_2& p, const Point_2& p,
Halfedge_set& crossed_edges) const Halfedge_set& crossed_edges) const {
{
// in this case we want to walk from to the query point from the nearest // in this case we want to walk from to the query point from the nearest
// vertex either the halfedge's source or target // vertex either the halfedge's source or target
Vertex_const_handle vh; auto cmp_xy = m_traits->compare_xy_2_object();
bool target_is_left; bool target_is_left =
if (m_traits->compare_xy_2_object() (cmp_xy(he->source()->point(), he->target()->point()) == LARGER);
(he->source()->point(),he->target()->point()) == LARGER)
target_is_left = true; Vertex_const_handle vh;
else
target_is_left = false;
if (p_is_left) { if (p_is_left) {
if (target_is_left) if (target_is_left) vh = he->target();
vh = he->target(); else vh = he->source();
else
vh = he->source();
} }
else { else {
if (target_is_left) if (target_is_left) vh = he->source();
vh = he->source(); else vh = he->target();
else
vh = he->target();
} }
// vh is the closest vertex among the halfedge's end points // vh is the closest vertex among the halfedge's end points
return (_walk_from_vertex(vh, p, crossed_edges)); return (_walk_from_vertex(vh, p, crossed_edges));
} }
//----------------------------------------------------------------------------- /*! walks from the given face to the query point.
// Walk from the given face to the query point. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::result_type typename Arr_landmarks_point_location<Arr, Gen>::result_type
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
_walk_from_face(Face_const_handle face, _walk_from_face(Face_const_handle face, const Point_2& np, const Point_2& p,
const Point_2& np, Halfedge_set& crossed_edges) const {
const Point_2& p,
Halfedge_set& crossed_edges) const
{
// Construct an x-monotone curve connecting the nearest landmark point np // Construct an x-monotone curve connecting the nearest landmark point np
// to the query point p and check which CCB intersects this segment. // to the query point p and check which CCB intersects this segment.
X_monotone_curve_2 seg = X_monotone_curve_2 seg;
m_traits->construct_x_monotone_curve_2_object()(np, p); Comparison_result res;
const bool p_is_left = std::tie(seg, res) = construct_segment(np, p, *m_traits, 0);
(m_traits->compare_xy_2_object()(np, p) == LARGER); const bool p_is_left = (res == LARGER);
Inner_ccb_const_iterator inner_ccb_iter; const Halfedge_const_handle invalid_he;
Outer_ccb_const_iterator outer_ccb_iter; const Vertex_const_handle invalid_vertex;
const Halfedge_const_handle invalid_he; bool cv_is_contained_in_seg;
Halfedge_const_handle he;
Face_const_handle new_face;
bool is_on_edge;
bool is_target;
bool cv_is_contained_in_seg;
Vertex_const_handle new_vertex;
const Vertex_const_handle invalid_vertex;
do { do {
// Check whether p lies inside the current face (including its holes): // Check whether p lies inside the current face (including its holes):
if (p_arr->topology_traits()->is_in_face(&(*face), p, nullptr)) if (p_arr->topology_traits()->is_in_face(&(*face), p, nullptr)) {
{
// We know that p is located inside the current face, and we check // We know that p is located inside the current face, and we check
// whether it lies inside one of its holes (or on the boundary of // whether it lies inside one of its holes (or on the boundary of
// its holes). // its holes).
cv_is_contained_in_seg = false; cv_is_contained_in_seg = false;
new_face = face; auto new_face = face;
for (inner_ccb_iter = face->inner_ccbs_begin(); // Do not use 'auto' to define the iterator, as MSVC2017 complains.
inner_ccb_iter != face->inner_ccbs_end(); ++inner_ccb_iter) for (Inner_ccb_const_iterator inner_ccb_iter = face->inner_ccbs_begin();
{ inner_ccb_iter != face->inner_ccbs_end(); ++inner_ccb_iter) {
he = _intersection_with_ccb(*inner_ccb_iter,seg, p, p_is_left, bool is_on_edge;
crossed_edges,is_on_edge, is_target, bool is_target;
cv_is_contained_in_seg,new_vertex); Vertex_const_handle new_vertex;
if (he == invalid_he && cv_is_contained_in_seg) Halfedge_const_handle he =
{ _intersection_with_ccb(*inner_ccb_iter,seg, p, p_is_left,
crossed_edges, is_on_edge, is_target,
cv_is_contained_in_seg, new_vertex);
if (he == invalid_he && cv_is_contained_in_seg) {
return _deal_with_curve_contained_in_segment(*inner_ccb_iter, return _deal_with_curve_contained_in_segment(*inner_ccb_iter,
p_is_left,p, p_is_left,p,
crossed_edges); crossed_edges);
@ -535,8 +487,7 @@ _walk_from_face(Face_const_handle face,
// Check if we found a new face (hole) containing p. If not, the current // Check if we found a new face (hole) containing p. If not, the current
// face contains p. // face contains p.
if (new_face == face) if (new_face == face) return make_result(face);
return make_result(face);
// Continue from the new face (hole). // Continue from the new face (hole).
face = new_face; face = new_face;
@ -544,13 +495,17 @@ _walk_from_face(Face_const_handle face,
else { else {
// We know that p is not located inside the current face. We therefore // We know that p is not located inside the current face. We therefore
// look for an edge on its outer boundary that intersects seg. // look for an edge on its outer boundary that intersects seg.
new_face = face; auto new_face = face;
for (outer_ccb_iter = face->outer_ccbs_begin(); // Do not use 'auto' to define the iterator, as MSVC2017 complains.
outer_ccb_iter != face->outer_ccbs_end(); ++outer_ccb_iter) for (Inner_ccb_const_iterator outer_ccb_iter = face->outer_ccbs_begin();
{ outer_ccb_iter != face->outer_ccbs_end(); ++outer_ccb_iter) {
he = _intersection_with_ccb(*outer_ccb_iter,seg, p, p_is_left, bool is_on_edge;
crossed_edges,is_on_edge, is_target, bool is_target;
cv_is_contained_in_seg,new_vertex); Vertex_const_handle new_vertex;
Halfedge_const_handle he =
_intersection_with_ccb(*outer_ccb_iter,seg, p, p_is_left,
crossed_edges, is_on_edge, is_target,
cv_is_contained_in_seg, new_vertex);
if (he == invalid_he && cv_is_contained_in_seg) { if (he == invalid_he && cv_is_contained_in_seg) {
return _deal_with_curve_contained_in_segment(*outer_ccb_iter, return _deal_with_curve_contained_in_segment(*outer_ccb_iter,
p_is_left,p, p_is_left,p,
@ -585,10 +540,9 @@ _walk_from_face(Face_const_handle face,
return default_result(); return default_result();
} }
//----------------------------------------------------------------------------- /*! finds a halfedge on the given CCB that intersects the given x-monotone
// Find a halfedge on the given CCB that intersects the given x-monotone * curve, connecting the current landmark to the query point.
// curve, connecting the current landmark to the query point. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
typename Arr_landmarks_point_location<Arr, Gen>::Halfedge_const_handle typename Arr_landmarks_point_location<Arr, Gen>::Halfedge_const_handle
Arr_landmarks_point_location<Arr, Gen>:: Arr_landmarks_point_location<Arr, Gen>::
@ -598,17 +552,15 @@ _intersection_with_ccb(Ccb_halfedge_const_circulator circ,
Halfedge_set& crossed_edges, Halfedge_set& crossed_edges,
bool& is_on_edge, bool& is_target, bool& is_on_edge, bool& is_target,
bool& cv_is_contained_in_seg, bool& cv_is_contained_in_seg,
Vertex_const_handle & new_vertex) const Vertex_const_handle& new_vertex) const {
{
is_on_edge = false; is_on_edge = false;
is_target = false; is_target = false;
// Go over the CCB. // Go over the CCB.
typename Traits_adaptor_2::Is_in_x_range_2 is_in_x_range = auto is_in_x_range = m_traits->is_in_x_range_2_object();
m_traits->is_in_x_range_2_object(); Ccb_halfedge_const_circulator curr = circ , temp_circ;
Ccb_halfedge_const_circulator curr = circ , temp_circ; const Halfedge_const_handle invalid_he;
const Halfedge_const_handle invalid_he; Halfedge_const_handle he;
Halfedge_const_handle he;
bool cv_and_seg_overlap; bool cv_and_seg_overlap;
do { do {
he = curr; he = curr;
@ -646,33 +598,28 @@ _intersection_with_ccb(Ccb_halfedge_const_circulator circ,
// Check whether the current curve intersects seg an odd number of times. // Check whether the current curve intersects seg an odd number of times.
if (_have_odd_intersections(he->curve(), seg, p_is_left, if (_have_odd_intersections(he->curve(), seg, p_is_left,
is_on_edge,cv_and_seg_overlap, is_on_edge,cv_and_seg_overlap,
cv_is_contained_in_seg) cv_is_contained_in_seg) &&
&& !(cv_and_seg_overlap || cv_is_contained_in_seg)) ! (cv_and_seg_overlap || cv_is_contained_in_seg)) {
{
// Check if the query point lies on the current edge, or whether // Check if the query point lies on the current edge, or whether
// it lies in its interior. // it lies in its interior.
if (is_on_edge) if (is_on_edge)
return _in_case_p_is_on_edge(he,crossed_edges,p,is_target); return _in_case_p_is_on_edge(he,crossed_edges,p,is_target);
if ((!curr->target()->is_at_open_boundary()) && if ((!curr->target()->is_at_open_boundary()) &&
is_in_x_range(seg, curr->target()->point())) is_in_x_range(seg, curr->target()->point())) {
{
// if the target point of curr is located on seg // if the target point of curr is located on seg
// we should walk from it to the query point // we should walk from it to the query point
if (m_traits->compare_y_at_x_2_object() if (m_traits->compare_y_at_x_2_object()
(curr->target()->point(), seg) == EQUAL) (curr->target()->point(), seg) == EQUAL) {
{
new_vertex = curr->target(); new_vertex = curr->target();
} }
} }
else if ((!curr->source()->is_at_open_boundary()) && else if ((!curr->source()->is_at_open_boundary()) &&
is_in_x_range(seg , curr->source()->point() )) is_in_x_range(seg , curr->source()->point())) {
{
// if the source point of curr is located on seg // if the source point of curr is located on seg
// we should walk from it to the query point // we should walk from it to the query point
if (m_traits->compare_y_at_x_2_object() if (m_traits->compare_y_at_x_2_object()
(curr->source()->point() , seg) == EQUAL) (curr->source()->point(), seg) == EQUAL) {
{
new_vertex = curr->source(); new_vertex = curr->source();
} }
} }
@ -718,8 +665,7 @@ Arr_landmarks_point_location<Arr, Gen>::
_in_case_p_is_on_edge(Halfedge_const_handle he, _in_case_p_is_on_edge(Halfedge_const_handle he,
Halfedge_set& crossed_edges, Halfedge_set& crossed_edges,
const Point_2 & p, const Point_2 & p,
bool & is_target) const bool & is_target) const {
{
// cv and seg overlap, obviously we crossed it // cv and seg overlap, obviously we crossed it
// the assumption is that each edge is crossed at most twice // the assumption is that each edge is crossed at most twice
CGAL_assertion_msg(crossed_edges.count(he) < 2, CGAL_assertion_msg(crossed_edges.count(he) < 2,
@ -728,14 +674,12 @@ _in_case_p_is_on_edge(Halfedge_const_handle he,
crossed_edges.insert(he->twin()); crossed_edges.insert(he->twin());
// Check if p equals one of the edge end-vertices. // Check if p equals one of the edge end-vertices.
if (! he->target()->is_at_open_boundary() && if (! he->target()->is_at_open_boundary() &&
m_traits->compare_xy_2_object()(he->target()->point(), p) == EQUAL) m_traits->equal_2_object()(he->target()->point(), p)) {
{
// p is the target of the current halfedge. // p is the target of the current halfedge.
is_target = true; is_target = true;
} }
else if (! he->source()->is_at_open_boundary() && else if (! he->source()->is_at_open_boundary() &&
m_traits->compare_xy_2_object()(he->source()->point(), p) == EQUAL) m_traits->equal_2_object()(he->source()->point(), p)) {
{
// Take the twin halfedge, so p equals its target. // Take the twin halfedge, so p equals its target.
he = he->twin(); he = he->twin();
is_target = true; is_target = true;
@ -744,21 +688,17 @@ _in_case_p_is_on_edge(Halfedge_const_handle he,
return he; return he;
} }
//----------------------------------------------------------------------------- /*! checks whether the given curve intersects a simple segment, which connects
// Check whether the given curve intersects a simple segment, which connects * the current landmark to the query point, an odd number of times.
// the current landmark to the query point, an odd number of times. */
//
template <typename Arr, typename Gen> template <typename Arr, typename Gen>
bool Arr_landmarks_point_location<Arr, Gen>:: bool Arr_landmarks_point_location<Arr, Gen>::
_have_odd_intersections(const X_monotone_curve_2& cv, _have_odd_intersections(const X_monotone_curve_2& cv,
const X_monotone_curve_2& seg, const X_monotone_curve_2& seg,
bool p_is_left, bool p_is_left, bool& p_on_curve,
bool& p_on_curve,
bool& cv_and_seg_overlap, bool& cv_and_seg_overlap,
bool& cv_is_contained_in_seg) const bool& cv_is_contained_in_seg) const {
{ auto is_in_x_range = m_traits->is_in_x_range_2_object();
typename Traits_adaptor_2::Is_in_x_range_2 is_in_x_range =
m_traits->is_in_x_range_2_object();
p_on_curve = false; p_on_curve = false;
cv_and_seg_overlap = false; cv_and_seg_overlap = false;
cv_is_contained_in_seg = false; cv_is_contained_in_seg = false;
@ -776,9 +716,9 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
cv_right = m_traits->construct_max_vertex_2_object()(cv); cv_right = m_traits->construct_max_vertex_2_object()(cv);
if (cv_left_is_closed && cv_right_is_closed) { if (cv_left_is_closed && cv_right_is_closed) {
if (is_in_x_range(seg,cv_left) && is_in_x_range(seg,cv_right)) { if (is_in_x_range(seg,cv_left) && is_in_x_range(seg,cv_right)) {
if ((m_traits->compare_y_at_x_2_object()(cv_left, seg) == EQUAL) && auto cmp_y_at_x = m_traits->compare_y_at_x_2_object();
(m_traits->compare_y_at_x_2_object()(cv_right, seg) == EQUAL)) if ((cmp_y_at_x(cv_left, seg) == EQUAL) &&
{ (cmp_y_at_x(cv_right, seg) == EQUAL)) {
// cv is contained in seg non of the answer true or false is correct // cv is contained in seg non of the answer true or false is correct
// we must set a special flag to distinguish this case // we must set a special flag to distinguish this case
cv_is_contained_in_seg = true; cv_is_contained_in_seg = true;
@ -791,22 +731,17 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
if (cv_left_is_closed) { if (cv_left_is_closed) {
// Check if the left endpoint of cv has the same x-coordinate as the // Check if the left endpoint of cv has the same x-coordinate as the
// right endpoint of seg. // right endpoint of seg.
if (m_traits->compare_x_2_object() auto min_p = m_traits->construct_min_vertex_2_object()(cv);
(m_traits->construct_min_vertex_2_object()(cv), seg_right) == EQUAL) if (equal_x_2(min_p, seg_right, Left_or_right_sides_category())) {
{ if (! p_is_left && m_traits->equal_2_object()(min_p, seg_right)) {
if (! p_is_left &&
m_traits->compare_xy_2_object()
(m_traits->construct_min_vertex_2_object()(cv), seg_right) == EQUAL)
{
p_on_curve = true; p_on_curve = true;
return true; return true;
} }
else if (m_traits->is_vertical_2_object()(seg)) { else if (m_traits->is_vertical_2_object()(seg)) {
auto cmp_y_at_x = m_traits->compare_y_at_x_2_object();
// Special treatment for vertical segments. // Special treatment for vertical segments.
Comparison_result res_l = Comparison_result res_l = cmp_y_at_x(seg_left, cv);
m_traits->compare_y_at_x_2_object()(seg_left, cv); Comparison_result res_r = cmp_y_at_x(seg_right, cv);
Comparison_result res_r =
m_traits->compare_y_at_x_2_object()(seg_right, cv);
if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) { if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) {
p_on_curve = true; p_on_curve = true;
return true; return true;
@ -819,23 +754,17 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
if (cv_right_is_closed) { if (cv_right_is_closed) {
// Check if the right endpoint of cv has the same x-coordinate as the // Check if the right endpoint of cv has the same x-coordinate as the
// left endpoint of seg. // left endpoint of seg.
if (m_traits->compare_x_2_object() auto max_p = m_traits->construct_max_vertex_2_object()(cv);
(m_traits->construct_max_vertex_2_object()(cv), seg_left) == EQUAL) if (equal_x_2(max_p, seg_left, Left_or_right_sides_category())) {
{ if (p_is_left && m_traits->equal_2_object()(max_p, seg_left)) {
if (p_is_left &&
m_traits->compare_xy_2_object()
(m_traits->construct_max_vertex_2_object()(cv), seg_left) == EQUAL)
{
p_on_curve = true; p_on_curve = true;
return true; return true;
} }
else if (m_traits->is_vertical_2_object()(seg)) { else if (m_traits->is_vertical_2_object()(seg)) {
// Special treatment for vertical segments. // Special treatment for vertical segments.
Comparison_result res_l = auto cmp_y_at_x = m_traits->compare_y_at_x_2_object();
m_traits->compare_y_at_x_2_object()(seg_left, cv); Comparison_result res_l = cmp_y_at_x(seg_left, cv);
Comparison_result res_r = Comparison_result res_r = cmp_y_at_x(seg_right, cv);
m_traits->compare_y_at_x_2_object()(seg_right, cv);
if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) { if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) {
p_on_curve = true; p_on_curve = true;
return true; return true;
@ -846,8 +775,8 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
} }
} }
// Compare the two left ends of cv and seg. // Compare the two left ends of cv and seg.
Comparison_result left_res; Comparison_result left_res;
const Arr_parameter_space bx_l = const Arr_parameter_space bx_l =
m_traits->parameter_space_in_x_2_object()(cv, ARR_MIN_END); m_traits->parameter_space_in_x_2_object()(cv, ARR_MIN_END);
if (bx_l == ARR_LEFT_BOUNDARY) { if (bx_l == ARR_LEFT_BOUNDARY) {
// The left end of cv lies to the left of seg_left: // The left end of cv lies to the left of seg_left:
@ -858,11 +787,11 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
// The left end of cv lies to the right of seg_left. // The left end of cv lies to the right of seg_left.
// Compare the left endpoint of cv to seg. // Compare the left endpoint of cv to seg.
left_res = m_traits->compare_y_at_x_2_object() left_res = m_traits->compare_y_at_x_2_object()
(m_traits->construct_min_vertex_2_object()(cv), seg); (m_traits->construct_min_vertex_2_object()(cv), seg);
left_res = CGAL::opposite(left_res); left_res = CGAL::opposite(left_res);
} }
else { else {
const Arr_parameter_space by_l = const Arr_parameter_space by_l =
m_traits->parameter_space_in_y_2_object()(cv, ARR_MIN_END); m_traits->parameter_space_in_y_2_object()(cv, ARR_MIN_END);
if (by_l == ARR_BOTTOM_BOUNDARY) if (by_l == ARR_BOTTOM_BOUNDARY)
// The left end of cv is at y = -oo, so cv obviously lies above it. // The left end of cv is at y = -oo, so cv obviously lies above it.
@ -876,8 +805,7 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
Comparison_result res = m_traits->compare_xy_2_object()(cv_left, seg_left); Comparison_result res = m_traits->compare_xy_2_object()(cv_left, seg_left);
if (res != LARGER) { if (res != LARGER) {
left_res = m_traits->compare_y_at_x_2_object()(seg_left, cv); left_res = m_traits->compare_y_at_x_2_object()(seg_left, cv);
if (p_is_left && left_res == EQUAL) if (p_is_left && left_res == EQUAL) {
{
// In this case the query point p, which is the left endpoint of seg, // In this case the query point p, which is the left endpoint of seg,
// lies on cv. // lies on cv.
p_on_curve = true; p_on_curve = true;
@ -904,8 +832,7 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
// we must set a special flag to distinguish this case // we must set a special flag to distinguish this case
if (is_in_x_range(cv,( p_is_left ? seg_left : seg_right))) if (is_in_x_range(cv,( p_is_left ? seg_left : seg_right)))
if (m_traits->compare_y_at_x_2_object() if (m_traits->compare_y_at_x_2_object()
((p_is_left ? seg_left : seg_right), cv) == EQUAL) ((p_is_left ? seg_left : seg_right), cv) == EQUAL) {
{
p_on_curve = true; p_on_curve = true;
} }
cv_and_seg_overlap = true; cv_and_seg_overlap = true;
@ -913,8 +840,8 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
} }
} }
// Compare the two right ends of cv and seg. // Compare the two right ends of cv and seg.
Comparison_result right_res; Comparison_result right_res;
const Arr_parameter_space bx_r = const Arr_parameter_space bx_r =
m_traits->parameter_space_in_x_2_object()(cv, ARR_MAX_END); m_traits->parameter_space_in_x_2_object()(cv, ARR_MAX_END);
if (bx_r == ARR_RIGHT_BOUNDARY) { if (bx_r == ARR_RIGHT_BOUNDARY) {
// The right end of cv lies to the right of seg_right: // The right end of cv lies to the right of seg_right:
@ -925,11 +852,11 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
// The right end of cv lies to the left of seg_right. // The right end of cv lies to the left of seg_right.
// Compare the right endpoint of cv to seg. // Compare the right endpoint of cv to seg.
right_res = m_traits->compare_y_at_x_2_object() right_res = m_traits->compare_y_at_x_2_object()
(m_traits->construct_max_vertex_2_object()(cv), seg); (m_traits->construct_max_vertex_2_object()(cv), seg);
right_res = CGAL::opposite(right_res); right_res = CGAL::opposite(right_res);
} }
else { else {
const Arr_parameter_space by_r = const Arr_parameter_space by_r =
m_traits->parameter_space_in_y_2_object()(cv, ARR_MAX_END); m_traits->parameter_space_in_y_2_object()(cv, ARR_MAX_END);
if (by_r == ARR_BOTTOM_BOUNDARY) if (by_r == ARR_BOTTOM_BOUNDARY)
// The right end of cv is at y = -oo, so cv obviously lies above it. // The right end of cv is at y = -oo, so cv obviously lies above it.
@ -972,8 +899,7 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
// we must set a special flag to distinguish this case // we must set a special flag to distinguish this case
if (is_in_x_range(cv, (p_is_left ? seg_left : seg_right))) if (is_in_x_range(cv, (p_is_left ? seg_left : seg_right)))
if (m_traits->compare_y_at_x_2_object() if (m_traits->compare_y_at_x_2_object()
((p_is_left ? seg_left : seg_right), cv) == EQUAL) ((p_is_left ? seg_left : seg_right), cv) == EQUAL) {
{
p_on_curve = true; p_on_curve = true;
} }
cv_and_seg_overlap = true; cv_and_seg_overlap = true;
@ -986,6 +912,6 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
return (left_res != right_res); return (left_res != right_res);
} }
} //namespace CGAL } // namespace CGAL
#endif #endif

View File

@ -76,9 +76,9 @@ public:
NUMBER_OF_OPERATIONS NUMBER_OF_OPERATIONS
}; };
private:
using Base = BaseTraits; using Base = BaseTraits;
private:
//! A set of bits that indicate whether operations should be traced. //! A set of bits that indicate whether operations should be traced.
unsigned long long m_flags; unsigned long long m_flags;
@ -212,6 +212,7 @@ public:
using X_monotone_curve_2 = typename Base::X_monotone_curve_2; using X_monotone_curve_2 = typename Base::X_monotone_curve_2;
using Curve_2 = typename Base::Curve_2; using Curve_2 = typename Base::Curve_2;
using Multiplicity = typename Base::Multiplicity; using Multiplicity = typename Base::Multiplicity;
//@}
/*! A functor that compares the \f$x\f$-coordinates of two points. */ /*! A functor that compares the \f$x\f$-coordinates of two points. */
class Compare_x_2 { class Compare_x_2 {
@ -832,9 +833,16 @@ public:
std::cout << "approximate_2" << std::endl std::cout << "approximate_2" << std::endl
<< " xcv: " << xcv << ", error: " << error << " xcv: " << xcv << ", error: " << error
<< ", l2r: " << l2r << std::endl; << ", l2r: " << l2r << std::endl;
auto res = m_object(xcv, error, oi, l2r); std::list<Approximate_point_2> container;
std::cout << " result: " << res << std::endl; m_object(xcv, error, std::back_inserter(container), l2r);
return res; if (container.empty()) return oi;
std::size_t i = 0;
for (const auto& point : container) {
std::cout << " result[" << i++ << "]: " << point << std::endl;
*oi++ = point;
}
return oi;
} }
}; };

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arrangement_on_surface_2_Tests) project(Arrangement_on_surface_2_Tests)
enable_testing() enable_testing()

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_LCC_Examples) project(BGL_LCC_Examples)
# CGAL and its components # CGAL and its components

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_OpenMesh_Examples) project(BGL_OpenMesh_Examples)
# CGAL and its components # CGAL and its components

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_arrangement_2_Examples) project(BGL_arrangement_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_graphcut_Examples) project(BGL_graphcut_Examples)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_polyhedron_3_Examples) project(BGL_polyhedron_3_Examples)
# CGAL and its components # CGAL and its components

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_surface_mesh_Examples) project(BGL_surface_mesh_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_triangulation_2_Examples) project(BGL_triangulation_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -178,6 +178,7 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
} }
// detect if there are some non-manifold umbrellas and fix missing halfedge target pointers // detect if there are some non-manifold umbrellas and fix missing halfedge target pointers
std::map<sm_vertex_descriptor, std::vector<tm_halfedge_descriptor>> nm_umbrella_map;
typedef typename std::vector<tm_edge_descriptor>::iterator edge_iterator; typedef typename std::vector<tm_edge_descriptor>::iterator edge_iterator;
for (edge_iterator it=new_edges.begin(); it!=new_edges.end(); ++it) for (edge_iterator it=new_edges.begin(); it!=new_edges.end(); ++it)
{ {
@ -199,10 +200,19 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
// we recover tm_v using the halfedge associated to the target vertex of // we recover tm_v using the halfedge associated to the target vertex of
// the halfedge in sm corresponding to nh_t. This is working because we // the halfedge in sm corresponding to nh_t. This is working because we
// set the vertex halfedge pointer to the "same" halfedges. // set the vertex halfedge pointer to the "same" halfedges.
tm_vertex_descriptor tm_v =
target( get(hs_to_ht, halfedge(target(get(ht_to_hs, nh_t), sm), sm)), tm); sm_vertex_descriptor vs = target(get(ht_to_hs, nh_t), sm);
for(tm_halfedge_descriptor ht : halfedges_around_target(nh_t, tm)) sm_halfedge_descriptor hs = halfedge(vs, sm);
set_target(ht, tm_v, tm); if (hs == boost::graph_traits<SourceMesh>::null_halfedge())
{ // special case for Face_filtered_graph with a non-manifold input with not all umbrellas selected
nm_umbrella_map[vs].push_back(nh_t);
}
else
{
tm_vertex_descriptor tm_v = target( get(hs_to_ht, hs), tm);
for(tm_halfedge_descriptor ht : halfedges_around_target(nh_t, tm))
set_target(ht, tm_v, tm);
}
} }
nh_t = opposite(nh_t, tm); nh_t = opposite(nh_t, tm);
} }
@ -210,6 +220,18 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
break; break;
} }
} }
for (const auto& vs_and_hts : nm_umbrella_map)
{
sm_vertex_descriptor v_sm = vs_and_hts.first;
tm_vertex_descriptor v_tm = add_vertex(tm);
*v2v++=std::make_pair(v_sm, v_tm);
set_halfedge(v_tm, vs_and_hts.second.front(), tm);
put(tm_vpm, v_tm, conv(get(sm_vpm, v_sm)));
for (tm_halfedge_descriptor h_tm : vs_and_hts.second)
set_target(h_tm, v_tm, tm);
}
} }
} // end of namespace internal } // end of namespace internal

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script_with_options # Created by the script cgal_create_cmake_script_with_options
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(BGL_Tests) project(BGL_Tests)
# CGAL and its components # CGAL and its components

View File

@ -579,6 +579,102 @@ void test_Polyhedron_tetrahedron()
test_mesh<Polyhedron, FCMap, Poly_Adapter>(poly_adapter); test_mesh<Polyhedron, FCMap, Poly_Adapter>(poly_adapter);
} }
void non_manifoldness_test1()
{
// works out-of-the-box because Face_filtered_graph handles already non-manifold cycles
SM mesh;
SM::Vertex_index v0=add_vertex(mesh);
SM::Vertex_index v1=add_vertex(mesh);
SM::Vertex_index v2=add_vertex(mesh);
SM::Vertex_index v3=add_vertex(mesh);
SM::Vertex_index v4=add_vertex(mesh);
SM::Vertex_index v5=add_vertex(mesh);
SM::Vertex_index v6=add_vertex(mesh);
SM::Face_index f0=mesh.add_face(v0,v1,v2);
SM::Face_index f1=mesh.add_face(v0,v3,v4);
SM::Face_index f2=mesh.add_face(v0,v5,v6);
SM::Halfedge_index h = halfedge(f0,mesh);
while(target(h, mesh)!=v0)
h=next(h,mesh);
set_halfedge(v0, h, mesh);
std::vector<SM::Face_index> selection = {f1, f2};
CGAL::Face_filtered_graph<SM> ffg(mesh, selection);
SM out;
CGAL::copy_face_graph(ffg, out);
assert(vertices(out).size()==5);
assert(faces(out).size()==2);
}
void non_manifoldness_test2()
{
SM mesh;
SM::Vertex_index v0=add_vertex(mesh);
SM::Vertex_index v0b=add_vertex(mesh);
SM::Vertex_index v0t=add_vertex(mesh);
SM::Vertex_index v1=add_vertex(mesh);
SM::Vertex_index v2=add_vertex(mesh);
SM::Vertex_index v3=add_vertex(mesh);
SM::Vertex_index v4=add_vertex(mesh);
SM::Vertex_index v5=add_vertex(mesh);
SM::Vertex_index v6=add_vertex(mesh);
SM::Vertex_index v7=add_vertex(mesh);
SM::Vertex_index v8=add_vertex(mesh);
SM::Vertex_index v9=add_vertex(mesh);
SM::Face_index f00=mesh.add_face(v1,v2,v0);
SM::Face_index f01=mesh.add_face(v2,v3,v0);
SM::Face_index f02=mesh.add_face(v3,v1,v0);
SM::Face_index f10=mesh.add_face(v4,v5,v0b);
SM::Face_index f11=mesh.add_face(v5,v6,v0b);
SM::Face_index f12=mesh.add_face(v6,v4,v0b);
SM::Face_index f20=mesh.add_face(v7,v8,v0t);
SM::Face_index f21=mesh.add_face(v8,v9,v0t);
SM::Face_index f22=mesh.add_face(v9,v7,v0t);
assert(f00!=SM::Face_index());
assert(f01!=SM::Face_index());
assert(f02!=SM::Face_index());
assert(f10!=SM::Face_index());
assert(f11!=SM::Face_index());
assert(f12!=SM::Face_index());
assert(f20!=SM::Face_index());
assert(f21!=SM::Face_index());
assert(f22!=SM::Face_index());
#define UPDATE_V(fX, vX) \
{ SM::Halfedge_index h = halfedge(fX,mesh);\
while(target(h, mesh)!=vX) h=next(h,mesh);\
set_target(h, v0, mesh); }
UPDATE_V(f10, v0b)
UPDATE_V(f11, v0b)
UPDATE_V(f12, v0b)
UPDATE_V(f20, v0t)
UPDATE_V(f21, v0t)
UPDATE_V(f22, v0t)
remove_vertex(v0b, mesh);
remove_vertex(v0t, mesh);
std::vector<SM::Face_index> selection = {f10, f11, f12, f20, f21, f22};
CGAL::Face_filtered_graph<SM> ffg(mesh, selection);
SM out;
CGAL::copy_face_graph(ffg, out);
assert(vertices(out).size()==7);
assert(faces(out).size()==6);
}
int main(int, char**) int main(int, char**)
{ {
test_graph_range(poly_data()); test_graph_range(poly_data());
@ -590,6 +686,8 @@ int main(int, char**)
#endif #endif
test_invalid_selections(); test_invalid_selections();
non_manifoldness_test1();
non_manifoldness_test2();
test_SM_tetrahedron(); test_SM_tetrahedron();
test_Polyhedron_tetrahedron(); test_Polyhedron_tetrahedron();

View File

@ -10,13 +10,29 @@ typedef Traits::edge_descriptor edge_descriptor;
typedef Traits::halfedge_descriptor halfedge_descriptor; typedef Traits::halfedge_descriptor halfedge_descriptor;
typedef Traits::vertex_descriptor vertex_descriptor; typedef Traits::vertex_descriptor vertex_descriptor;
typedef Traits::face_descriptor face_descriptor; typedef Traits::face_descriptor face_descriptor;
//typedef Kernel::Point_3 Point_3;
int main() int main()
{ {
Om om; Om om;
for (Om::EdgeHandle ed : edges(om)) { for (Om::EdgeHandle ed : edges(om))
std::cout << "edge" << std::endl; {
CGAL_USE(ed);
}
for (edge_descriptor ed : edges(om))
{
CGAL_USE(ed);
}
for (halfedge_descriptor hd : halfedges(om))
{
CGAL_USE(hd);
}
for (face_descriptor fd : faces(om))
{
CGAL_USE(fd);
}
for (vertex_descriptor vd : vertices(om))
{
CGAL_USE(vd);
} }
return 0; return 0;
} }

View File

@ -3,7 +3,7 @@
project(Barycentric_coordinates_2_Benchmarks) project(Barycentric_coordinates_2_Benchmarks)
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script. # Created by the script cgal_create_cmake_script.
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Barycentric_coordinates_2_Examples) project(Barycentric_coordinates_2_Examples)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script. # Created by the script cgal_create_cmake_script.
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Barycentric_coordinates_2_Tests) project(Barycentric_coordinates_2_Tests)

View File

@ -6,7 +6,7 @@
# Used in /CGAL/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt. # Used in /CGAL/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt.
# Careful when modifying # Careful when modifying
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Basic_viewer_Examples) project(Basic_viewer_Examples)
#CGAL_Qt6 is needed for the drawing. #CGAL_Qt6 is needed for the drawing.

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Boolean_set_operations_2_Examples) project(Boolean_set_operations_2_Examples)
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6) find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Boolean_set_operations_2_Tests) project(Boolean_set_operations_2_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Approximate_min_ellipsoid_d_Examples) project(Approximate_min_ellipsoid_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_annulus_d_Examples) project(Min_annulus_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_circle_2_Examples) project(Min_circle_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_ellipse_2_Examples) project(Min_ellipse_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_quadrilateral_2_Examples) project(Min_quadrilateral_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_sphere_d_Examples) project(Min_sphere_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Min_sphere_of_spheres_d_Examples) project(Min_sphere_of_spheres_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Rectangular_p_center_2_Examples) project(Rectangular_p_center_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Bounding_volumes_Tests) project(Bounding_volumes_Tests)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Box_intersection_d_Examples) project(Box_intersection_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Box_intersection_d_Tests) project(Box_intersection_d_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Core_Examples) project(Core_Examples)
# CGAL and its components # CGAL and its components

View File

@ -600,6 +600,7 @@ inline long longValue(const BigFloat& bf)
{ {
return bf.longValue(); return bf.longValue();
} }
//@}
} //namespace CORE } //namespace CORE

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(CGALimageIO_Examples) project(CGALimageIO_Examples)
find_package(CGAL REQUIRED COMPONENTS ImageIO) find_package(CGAL REQUIRED COMPONENTS ImageIO)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(CGAL_ImageIO_Tests) project(CGAL_ImageIO_Tests)
find_package(CGAL REQUIRED COMPONENTS ImageIO) find_package(CGAL REQUIRED COMPONENTS ImageIO)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(CGAL_ipelets_Demo) project(CGAL_ipelets_Demo)
if(NOT POLICY CMP0070 AND POLICY CMP0053) if(NOT POLICY CMP0070 AND POLICY CMP0053)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(CGAL_ipelets_Tests) project(CGAL_ipelets_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Top level CMakeLists.txt for CGAL-branchbuild # Top level CMakeLists.txt for CGAL-branchbuild
# Minimal version of CMake: # Minimal version of CMake:
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
message("== CMake setup ==") message("== CMake setup ==")
project(CGAL CXX C) project(CGAL CXX C)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circular_kernel_2_Examples) project(Circular_kernel_2_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circular_kernel_2_Tests) project(Circular_kernel_2_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circular_kernel_3_Demo) project(Circular_kernel_3_Demo)
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circular_kernel_3_Examples) project(Circular_kernel_3_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circular_kernel_3_Tests) project(Circular_kernel_3_Tests)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circulator_Examples) project(Circulator_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Circulator_Tests) project(Circulator_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Classification_Examples) project(Classification_Examples)
# CGAL and its components # CGAL and its components

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_CMakeLists # Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications. # This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Classification_Tests) project(Classification_Tests)
# CGAL and its components # CGAL and its components

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Combinatorial_map_Examples) project(Combinatorial_map_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)

Some files were not shown because too many files have changed in this diff Show More