mirror of https://github.com/CGAL/cgal
Merge branch 'master' into pr/lrineau/8273
This commit is contained in:
commit
8eefb7f173
|
|
@ -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
|
||||
|
|
@ -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))
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -44,11 +44,9 @@ Documentation/Doxyfile text eol=lf
|
|||
Documentation/pkglist_filter text eol=lf
|
||||
Installation/update_CHANGES 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_depend 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/check_library_uses_no_gpl_files 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_svn_keywords 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_new_release text eol=lf
|
||||
Scripts/developer_scripts/detect_files_with_mixed_eol_styles text eol=lf
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ AABB_tree/demo/AABB_tree/Makefile
|
|||
AABB_tree/examples/AABB_tree/*.kdev*
|
||||
AABB_tree/examples/AABB_tree/*_example
|
||||
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/Makefile
|
||||
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_naive_vs_tree_distance_segment_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_structure_traits
|
||||
Algebraic_foundations/test/Algebraic_foundations/Chinese_remainder_traits
|
||||
Algebraic_foundations/test/Algebraic_foundations/Coercion_traits
|
||||
Algebraic_foundations/test/Algebraic_foundations/Real_embeddable_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/ipower
|
||||
Algebraic_kernel_d/test/Algebraic_kernel_d/cgal_test_with_cmake
|
||||
Algebraic_kernel_d/test/Algebraic_kernel_d/rs_isolator
|
||||
Alpha_shapes_2/demo/Alpha_shapes_2/Makefile
|
||||
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/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_fixed_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_primal_adapter
|
||||
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/circular_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/test/Arrangement_on_surface_2/test_point_location.cpp
|
||||
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/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/boolean_operations_2
|
||||
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_box_intersection
|
||||
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
|
||||
CGAL_ImageIO/demo/CGALimageIO/Makefile
|
||||
CGAL_ImageIO/demo/CGALimageIO/cgal_test_with_cmake
|
||||
CGAL_ImageIO/demo/CGALimageIO/image_to_vtk_viewer
|
||||
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/makefile
|
||||
CGAL_ImageIO/examples/CGALimageIO/test_imageio
|
||||
CGAL_ImageIO/src/CGAL_ImageIO/Makefile
|
||||
Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3_demo
|
||||
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_Lazy_Spherical_kernel
|
||||
Circular_kernel_3/test/Circular_kernel_3/test_Lazy_spherical_kernel_basics
|
||||
|
|
@ -137,7 +125,6 @@ Documentation/log/*.*
|
|||
Documentation/output
|
||||
Documentation/tags/*.*
|
||||
Generator/examples/Generator/ball_d
|
||||
Generator/examples/Generator/cgal_test_with_cmake
|
||||
Generator/examples/Generator/cube_d
|
||||
Generator/examples/Generator/grid_d
|
||||
Generator/examples/Generator/random_convex_set
|
||||
|
|
@ -149,7 +136,6 @@ Generator/examples/Generator/random_segments1
|
|||
Generator/examples/Generator/random_segments2
|
||||
Generator/examples/Generator/sphere_d
|
||||
Generator/test/Generator/bug
|
||||
Generator/test/Generator/cgal_test_with_cmake
|
||||
Generator/test/Generator/random_poly_test
|
||||
Generator/test/Generator/rcs_test
|
||||
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/qrc_*.cxx
|
||||
GraphicsView/demo/Triangulation_2/ui_*.h
|
||||
HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds_decorator
|
||||
Inscribed_areas/test/Inscribed_areas/Makefile
|
||||
|
|
@ -188,11 +173,8 @@ Installation/auxiliary/gdb/python/CGAL/printers.pyc
|
|||
Installation/auxiliary/gdb/test
|
||||
Installation/cmake/modules/*.tmp
|
||||
Installation/test/Installation/cgal_test
|
||||
/Installation/test/Installation/cgal_test_with_cmake
|
||||
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/cgal_test_with_cmake
|
||||
Intersections_3/test/Intersections_3/circle_other
|
||||
Intersections_3/test/Intersections_3/line_line
|
||||
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/test/Jet_fitting_3/Makefile
|
||||
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
|
||||
Kernel_23/test/Kernel_23/Cartesian
|
||||
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/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__
|
||||
Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_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_gui_2
|
||||
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/gui_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/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/instantaneous_kernel
|
||||
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
|
||||
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/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_triangulation
|
||||
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/.*.deps
|
||||
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/depends
|
||||
Mesh_2/demo/Mesh_2/filename.edg
|
||||
|
|
@ -309,7 +284,6 @@ Mesh_2/demo/Mesh_2/semantic.cache
|
|||
Mesh_2/doxygen
|
||||
Mesh_2/examples/Mesh_2/*.core
|
||||
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/conforming
|
||||
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/Makefile
|
||||
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/depends
|
||||
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/Makefile
|
||||
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/chair-after.mesh
|
||||
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/applications
|
||||
/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/combined_spheres
|
||||
/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/bin
|
||||
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/Nef_polyhedron_2-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_3/demo/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/bench_interval
|
||||
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/double
|
||||
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_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/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_delaunay_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_SC_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_nb_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-shuffled.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/hole1.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/test/Polyhedron/*.kdev*
|
||||
Polyhedron/test/Polyhedron/Makefile
|
||||
Polyhedron/test/Polyhedron/cgal_test_with_cmake
|
||||
Polyhedron/test/Polyhedron/test_polyhedron
|
||||
Polynomial/test/Polynomial/Exponent_vector
|
||||
Polynomial/test/Polynomial/Interpolator
|
||||
|
|
@ -715,7 +679,6 @@ Polynomial/test/Polynomial/Polynomial_traits_d
|
|||
Polynomial/test/Polynomial/Polynomial_type_generator
|
||||
Polynomial/test/Polynomial/Polynomial_using_core
|
||||
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_dfai
|
||||
Polynomial/test/Polynomial/modular_gcd_utcf_pure_wang
|
||||
|
|
@ -745,10 +708,8 @@ Polytope_distance_d/.obj
|
|||
Polytope_distance_d/.tmp
|
||||
Polytope_distance_d/Makefile
|
||||
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
|
||||
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_cuboids_3
|
||||
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_triangles_2
|
||||
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_timer
|
||||
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/test/Ridges_3/Makefile
|
||||
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_Compact_container
|
||||
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_type_traits
|
||||
STL_Extension/test/STL_Extension/test_vector
|
||||
SearchStructures/test/RangeSegmentTrees/cgal_test_with_cmake
|
||||
SearchStructures/test/RangeSegmentTrees/test_segment_tree_set_2
|
||||
Skin_surface_3/.cdtproject
|
||||
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/msgs.txt
|
||||
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/streamlines
|
||||
Surface_mesh_parameterization/examples/Surface_mesh_parameterization/*.eps
|
||||
|
|
@ -966,20 +923,15 @@ Triangulation/test/Triangulation/output-pcds*
|
|||
Triangulation/test/Triangulation/pc
|
||||
Triangulation/test/Triangulation/pcds
|
||||
Triangulation/test/Triangulation/torture
|
||||
/Triangulation/examples/Triangulation/cgal_test_with_cmake
|
||||
/Triangulation/test/Triangulation/cgal_test_with_cmake
|
||||
/Triangulation/test/Triangulation/output-tds-*
|
||||
Triangulation_2/cgal_test_with_cmake
|
||||
Triangulation_2/demo/Triangulation_2/Makefile
|
||||
Triangulation_2/demo/Triangulation_2/constrained
|
||||
Triangulation_2/demo/Triangulation_2/constrained_delaunay_triangulation_2
|
||||
Triangulation_2/demo/Triangulation_2/delaunay_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/test/Triangulation_2/Makefile
|
||||
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/makefile
|
||||
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_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/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/fast_location_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_tds_IO_3
|
||||
Triangulation_3/test/Triangulation_3/cgal_test_with_cmake
|
||||
Triangulation_3/test/Triangulation_3/makefile
|
||||
Triangulation_3/test/Triangulation_3/test_delaunay_3
|
||||
Triangulation_3/test/Triangulation_3/test_delaunay_hierarchy_3
|
||||
|
|
@ -1083,7 +1032,6 @@ ProgramOutput*
|
|||
ErrorOutput*
|
||||
CompilerOutput*
|
||||
error.txt
|
||||
cgal_test_with_cmake.log
|
||||
|
||||
# File created by the Semantic Bovinator (an Emacs package)
|
||||
semantic.cache
|
||||
|
|
@ -1140,9 +1088,7 @@ Doxyfile
|
|||
gmon.*
|
||||
|
||||
# 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
|
||||
/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/ex_kernel_point
|
||||
/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/bounding_box
|
||||
/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_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.binary
|
||||
/Polygon/test/Polygon/polytest.pretty
|
||||
/Stream_support/test/Stream_support/cgal_test_with_cmake
|
||||
/*.html
|
||||
/Snap_rounding_2/test/Snap_rounding_2/data/out
|
||||
Polygonal_surface_reconstruction/examples/build*
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# 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)
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# 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)
|
||||
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# 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)
|
||||
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Reference Manual for more details.
|
||||
|
||||
The landmark strategy requires that the type of the attached
|
||||
arrangement be an instance of the `Arrangement_2<Traits,Dcel>` class
|
||||
template, where the `Traits` parameter is substituted by a
|
||||
geometry-traits class that models the `ArrangementLandmarkTraits_2`
|
||||
concept, which refines the basic `ArrangementBasicTraits_2` concept;
|
||||
see Section \ref aos_sssec-tr_landmarks_concept for details. Most
|
||||
traits classes included in the \ref PkgArrangementOnSurface2 package
|
||||
are models of this refined concept.
|
||||
The arrangement attached to the landmark strategy must be either (i)
|
||||
an instance of the `Arrangement_2<Geom,Dcel>` class template, where
|
||||
the `Traits` parameter is substituted by a geometry-traits class
|
||||
that models the `ArrangementLandmarkTraits_2` concept, or (ii) an
|
||||
instance of the `Arrangement_on_surface_2<GeomTraits,TopolTraits>`
|
||||
class template, where the `GeomTraits` is similarly substituted;
|
||||
see Section \ref aos_sssec-tr_landmarks_concept for details about
|
||||
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
|
||||
improved variant of Mulmuley's point-location algorithm
|
||||
|
|
|
|||
|
|
@ -440,13 +440,14 @@ public:
|
|||
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.
|
||||
*/
|
||||
//@{
|
||||
typedef double Approximate_number_type;
|
||||
typedef CGAL::Cartesian<Approximate_number_type> Approximate_kernel;
|
||||
typedef Approximate_kernel::Point_2 Approximate_point_2;
|
||||
//@}
|
||||
|
||||
/*! \class Approximate_2
|
||||
* A functor that approximates a point and an \f$x\f$-monotone curve.
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ public:
|
|||
X_monotone_curve_2(const X_monotone_curve_2& xcv,
|
||||
const Point_2& src, const Point_2& tgt) const;
|
||||
|
||||
//! @}
|
||||
} /* end Arr_segment_traits_2::Trim_2 */
|
||||
|
||||
}; /* end Arr_segment_traits_2 */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
|
||||
/// \name Functor Types
|
||||
/// @{
|
||||
/// @}
|
||||
|
||||
/// \name Accessing Functor Objects
|
||||
/// @{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6)
|
||||
|
|
|
|||
|
|
@ -36,13 +36,6 @@ using Trap_pl = CGAL::Arr_trapezoid_ric_point_location<Gm>;
|
|||
using Geom_traits = Gm::Geometry_traits_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() {
|
||||
Gm_polyhedron p;
|
||||
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;
|
||||
|
||||
Naive_pl naive_pl(gm);
|
||||
// Landmarks_pl landmarks_pl(gm);
|
||||
Landmarks_pl landmarks_pl(gm);
|
||||
Walk_pl walk_pl(gm);
|
||||
// Trap_pl trap_pl(gm);
|
||||
|
||||
|
|
@ -70,30 +63,17 @@ int main() {
|
|||
locate_point(naive_pl, points[1]);
|
||||
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]);
|
||||
|
||||
////////
|
||||
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;
|
||||
}
|
||||
// locate_point(trap_pl, points[1]);
|
||||
// locate_point(trap_pl, points[2]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
//@{
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
//
|
||||
// Author(s) : Idit Haran <haranidi@post.tau.ac.il>
|
||||
// Ron Wein <wein@post.tau.ac.il>
|
||||
// Author(s) : Idit Haran <haranidi@post.tau.ac.il>
|
||||
// Ron Wein <wein@post.tau.ac.il>
|
||||
|
||||
#ifndef 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/Arrangement_2/Arr_traits_adaptor_2.h>
|
||||
#include <CGAL/Arr_point_location/Arr_lm_vertices_generator.h>
|
||||
#include <CGAL/Arr_tags.h>
|
||||
|
||||
#include <set>
|
||||
|
||||
|
|
@ -42,44 +43,54 @@ namespace CGAL {
|
|||
* Generator is a class that generates the set of landmarks.
|
||||
*/
|
||||
|
||||
template <class Arrangement_,
|
||||
class Generator_ = Arr_landmarks_vertices_generator<Arrangement_> >
|
||||
class Arr_landmarks_point_location
|
||||
{
|
||||
template <typename Arrangement_,
|
||||
typename Generator_ = Arr_landmarks_vertices_generator<Arrangement_>>
|
||||
class Arr_landmarks_point_location {
|
||||
public:
|
||||
typedef Arrangement_ Arrangement_2;
|
||||
typedef typename Arrangement_2::Geometry_traits_2 Geometry_traits_2;
|
||||
typedef Generator_ Generator;
|
||||
using Arrangement_2 = Arrangement_;
|
||||
using Generator = Generator_;
|
||||
using Geometry_traits_2 = typename Arrangement_2::Geometry_traits_2;
|
||||
|
||||
typedef typename Arrangement_2::Vertex_const_handle Vertex_const_handle;
|
||||
typedef typename Arrangement_2::Halfedge_const_handle Halfedge_const_handle;
|
||||
typedef typename Arrangement_2::Face_const_handle Face_const_handle;
|
||||
using Vertex_const_handle = typename Arrangement_2::Vertex_const_handle;
|
||||
using Halfedge_const_handle = typename Arrangement_2::Halfedge_const_handle;
|
||||
using Face_const_handle = typename Arrangement_2::Face_const_handle;
|
||||
|
||||
typedef typename Arrangement_2::Vertex_const_iterator Vertex_const_iterator;
|
||||
typedef typename Arrangement_2::Halfedge_const_iterator
|
||||
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;
|
||||
using Vertex_const_iterator = typename Arrangement_2::Vertex_const_iterator;
|
||||
using Halfedge_const_iterator =
|
||||
typename Arrangement_2::Halfedge_const_iterator;
|
||||
|
||||
typedef typename Arrangement_2::Point_2 Point_2;
|
||||
typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2;
|
||||
using Halfedge_around_vertex_const_circulator =
|
||||
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;
|
||||
typedef typename Result::Type Result_type;
|
||||
using Point_2 = typename Arrangement_2::Point_2;
|
||||
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
|
||||
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:
|
||||
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
|
||||
* Used to sort handles.
|
||||
|
|
@ -92,10 +103,10 @@ protected:
|
|||
typedef std::set<Halfedge_const_handle, Less_halfedge_handle> Halfedge_set;
|
||||
|
||||
// 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.
|
||||
Generator* lm_gen; // The associated landmark generator.
|
||||
bool own_gen; // Indicates whether the generator
|
||||
Generator* lm_gen; // The associated landmark generator.
|
||||
bool own_gen; // Indicates whether the generator
|
||||
// has been locally allocated.
|
||||
|
||||
template<typename T>
|
||||
|
|
@ -103,7 +114,7 @@ protected:
|
|||
inline Result_type default_result() const { return Result::default_result(); }
|
||||
|
||||
public:
|
||||
/*! Default constructor. */
|
||||
/*! constructs default. */
|
||||
Arr_landmarks_point_location() :
|
||||
p_arr(nullptr),
|
||||
m_traits(nullptr),
|
||||
|
|
@ -111,34 +122,32 @@ public:
|
|||
own_gen(false)
|
||||
{}
|
||||
|
||||
/*! Constructor given an arrangement only. */
|
||||
/*! constructs given an arrangement only. */
|
||||
Arr_landmarks_point_location(const Arrangement_2& arr) :
|
||||
p_arr(&arr),
|
||||
m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())),
|
||||
lm_gen(new Generator(arr)), // allocate the landmarks generator.
|
||||
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) :
|
||||
p_arr(&arr),
|
||||
m_traits(static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits())),
|
||||
lm_gen(gen),
|
||||
own_gen(false)
|
||||
{ }
|
||||
{}
|
||||
|
||||
/*! Destructor. */
|
||||
~Arr_landmarks_point_location()
|
||||
{
|
||||
/*! destructs. */
|
||||
~Arr_landmarks_point_location() {
|
||||
if (own_gen) {
|
||||
delete lm_gen;
|
||||
lm_gen = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/*! Attach an arrangement object (and a generator, if supplied). */
|
||||
void attach(const Arrangement_2& arr, Generator* gen = nullptr)
|
||||
{
|
||||
/*! attaches an arrangement object (and a generator, if supplied). */
|
||||
void attach(const Arrangement_2& arr, Generator* gen = nullptr) {
|
||||
// Keep a pointer to the associated arrangement.
|
||||
p_arr = &arr;
|
||||
m_traits = static_cast<const Traits_adaptor_2*>(p_arr->geometry_traits());
|
||||
|
|
@ -163,9 +172,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
/*! Detach the instance from the arrangement object. */
|
||||
void detach()
|
||||
{
|
||||
/*! detaches the instance from the arrangement object. */
|
||||
void detach() {
|
||||
p_arr = nullptr;
|
||||
m_traits = nullptr;
|
||||
|
||||
|
|
@ -174,8 +182,7 @@ public:
|
|||
lm_gen->detach();
|
||||
}
|
||||
|
||||
/*!
|
||||
* Locate the arrangement feature containing the given point.
|
||||
/*! locates the arrangement feature containing the given point.
|
||||
* \param p The query point.
|
||||
* \return An object representing the arrangement feature containing the
|
||||
* 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;
|
||||
|
||||
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 p The query point.
|
||||
* \param crossed_edges In/Out: The set of edges crossed so far.
|
||||
|
|
@ -196,7 +203,7 @@ protected:
|
|||
const Point_2& p,
|
||||
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.
|
||||
* \param vh The vertex.
|
||||
* \param p The query point.
|
||||
|
|
@ -207,7 +214,7 @@ protected:
|
|||
const Point_2& p,
|
||||
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 np The point that the walk starts from.
|
||||
* \param p The query point.
|
||||
|
|
@ -220,7 +227,7 @@ protected:
|
|||
const Point_2& np,
|
||||
const Point_2& p,
|
||||
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
|
||||
* \param he The given halfedge handle.
|
||||
* \param p_is_left Is the query point the left endpoint of seg.
|
||||
|
|
@ -236,7 +243,7 @@ protected:
|
|||
const Point_2& p,
|
||||
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 np The point that the walk starts from.
|
||||
* \param p The query point.
|
||||
|
|
@ -250,7 +257,7 @@ protected:
|
|||
const Point_2& p,
|
||||
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.
|
||||
* \param circ The CCB circulator.
|
||||
* \param seg The segment connecting the landmark and the query point.
|
||||
|
|
@ -275,7 +282,7 @@ protected:
|
|||
bool& cv_is_contained_in_seg,
|
||||
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 crossed_edges In/Out: The set of edges crossed so far.
|
||||
* \param p The query point.
|
||||
|
|
@ -287,7 +294,7 @@ protected:
|
|||
const Point_2& p,
|
||||
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.
|
||||
* \param cv The curve.
|
||||
* \param seg The segment connecting the landmark and the query point.
|
||||
|
|
@ -303,9 +310,62 @@ protected:
|
|||
bool& p_on_curve,
|
||||
bool& cv_and_seg_overlap,
|
||||
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:
|
||||
#include <CGAL/Arr_point_location/Arr_landmarks_pl_impl.h>
|
||||
|
|
|
|||
|
|
@ -7,16 +7,15 @@
|
|||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Idit Haran <haranidi@post.tau.ac.il>
|
||||
// Ron Wein <wein@post.tau.ac.il>
|
||||
// Efi Fogel <efif@post.tau.ac.il>
|
||||
// Author(s) : Idit Haran <haranidi@post.tau.ac.il>
|
||||
// Ron Wein <wein@post.tau.ac.il>
|
||||
// Efi Fogel <efif@post.tau.ac.il>
|
||||
|
||||
#ifndef CGAL_ARR_LANDMARKS_PL_IMPL_H
|
||||
#define CGAL_ARR_LANDMARKS_PL_IMPL_H
|
||||
|
||||
#include <CGAL/license/Arrangement_on_surface_2.h>
|
||||
|
||||
|
||||
/*! \file
|
||||
* Member-function definitions for the
|
||||
* Arr_landmarks_point_location<Arrangement, Generator> class.
|
||||
|
|
@ -24,60 +23,53 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Locate the arrangement feature containing the given point.
|
||||
//
|
||||
/*! locates the arrangement feature containing the given point.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
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
|
||||
// non-fictitious) face.
|
||||
if (p_arr->number_of_vertices() == 0) {
|
||||
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);
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
// If the query point and the landmark point are equal, return the landmark.
|
||||
if (m_traits->equal_2_object()(landmark_point, p))
|
||||
return lm_location_obj;
|
||||
if (m_traits->equal_2_object()(landmark_point, p)) return lm_location_obj;
|
||||
|
||||
// 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
|
||||
// we have crossed so far is initially empty.
|
||||
Halfedge_set crossed_edges;
|
||||
result_type out_obj;
|
||||
Halfedge_set crossed_edges;
|
||||
result_type out_obj;
|
||||
|
||||
// Locate the arrangement feature that contains the landmark.
|
||||
const Vertex_const_handle* vh;
|
||||
const Halfedge_const_handle* hh;
|
||||
const Face_const_handle* fh;
|
||||
if ( ( vh = Result().template assign<Vertex_const_handle>(&lm_location_obj) ) )
|
||||
out_obj = _walk_from_vertex(*vh, p, crossed_edges);
|
||||
else if ( ( hh = Result().template assign<Halfedge_const_handle>(&lm_location_obj) ) )
|
||||
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);
|
||||
if (const auto* v = std::get_if<Vertex_const_handle>(&lm_location_obj))
|
||||
out_obj = _walk_from_vertex(*v, p, crossed_edges);
|
||||
else if (const auto* e = std::get_if<Halfedge_const_handle>(&lm_location_obj))
|
||||
out_obj = _walk_from_edge(*e, landmark_point, p, crossed_edges);
|
||||
else if (const auto* f = std::get_if<Face_const_handle>(&lm_location_obj))
|
||||
out_obj = _walk_from_face(*f, landmark_point, p, crossed_edges);
|
||||
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
|
||||
// holes inside the current face, so we conclude it is contained in this
|
||||
// face.
|
||||
// However, we first have to check whether the query point coincides with
|
||||
// any of the isolated vertices contained inside this face.
|
||||
Isolated_vertex_const_iterator iso_verts_it;
|
||||
typename Traits_adaptor_2::Equal_2 equal = m_traits->equal_2_object();
|
||||
|
||||
for (iso_verts_it = (*fh)->isolated_vertices_begin();
|
||||
iso_verts_it != (*fh)->isolated_vertices_end(); ++iso_verts_it)
|
||||
{
|
||||
// face. However, we first have to check whether the query point coincides
|
||||
// with any of the isolated vertices contained inside this face.
|
||||
auto equal = m_traits->equal_2_object();
|
||||
// Do not use 'auto' to define the iterator, as MSVC2017 complains.
|
||||
for (Isolated_vertex_const_iterator iso_verts_it = f->isolated_vertices_begin();
|
||||
iso_verts_it != f->isolated_vertices_end(); ++iso_verts_it) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -86,28 +78,24 @@ Arr_landmarks_point_location<Arr, Gen>::locate(const Point_2& p) const
|
|||
return out_obj;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Walk from a given vertex to the query point.
|
||||
//
|
||||
/*! walks from a given vertex to the query point.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::result_type
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
_walk_from_vertex(Vertex_const_handle nearest_vertex,
|
||||
const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const
|
||||
{
|
||||
_walk_from_vertex(Vertex_const_handle nearest_vertex, const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const {
|
||||
Vertex_const_handle vh = nearest_vertex;
|
||||
CGAL_assertion_msg(! vh->is_at_open_boundary(),
|
||||
"_walk_from_vertex() from a vertex at infinity.");
|
||||
|
||||
// Check if the query point p coincides with the vertex.
|
||||
if (m_traits->equal_2_object()(vh->point(), p))
|
||||
return make_result(vh);
|
||||
if (m_traits->equal_2_object()(vh->point(), p)) return make_result(vh);
|
||||
|
||||
// In case of an isolated vertex, walk to from the face that contains
|
||||
// it toward the query point.
|
||||
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));
|
||||
}
|
||||
|
||||
|
|
@ -116,16 +104,15 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
|
|||
Halfedge_around_vertex_const_circulator first = vh->incident_halfedges();
|
||||
// Create an x-monotone curve connecting the point associated with the
|
||||
// vertex vp and the query point p.
|
||||
const Point_2& vp = vh->point();
|
||||
X_monotone_curve_2 seg =
|
||||
m_traits->construct_x_monotone_curve_2_object()(vp, p);
|
||||
const bool seg_dir_right =
|
||||
(m_traits->compare_xy_2_object()(vp, p) == SMALLER);
|
||||
const Point_2& vp = vh->point();
|
||||
X_monotone_curve_2 seg;
|
||||
Comparison_result res;
|
||||
std::tie(seg, res) = construct_segment(vp, p, *m_traits, 0);
|
||||
bool seg_dir_right = (res == SMALLER);
|
||||
Halfedge_around_vertex_const_circulator curr_iter = first;
|
||||
Halfedge_around_vertex_const_circulator next_iter = curr_iter;
|
||||
++next_iter;
|
||||
typename Traits_adaptor_2::Is_between_cw_2 is_between_cw =
|
||||
m_traits->is_between_cw_2_object();
|
||||
auto is_between_cw = m_traits->is_between_cw_2_object();
|
||||
// Traverse the halfedges around vp until we find the pair of adjacent
|
||||
// halfedges such as seg is located clockwise in between them.
|
||||
do {
|
||||
|
|
@ -134,12 +121,11 @@ _walk_from_vertex(Vertex_const_handle nearest_vertex,
|
|||
(curr_iter->direction() == ARR_RIGHT_TO_LEFT),
|
||||
next_iter->curve(),
|
||||
(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
|
||||
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.");
|
||||
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.insert(curr_iter);
|
||||
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);
|
||||
if (new_vertex) {
|
||||
// We found a vertex closer to p; Continue using this vertex.
|
||||
const Vertex_const_handle* p_vh =
|
||||
Result().template assign<Vertex_const_handle>(&obj);
|
||||
const auto* p_vh = std::get_if<Vertex_const_handle>(&obj);
|
||||
CGAL_assertion(p_vh != nullptr);
|
||||
vh = *p_vh;
|
||||
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
|
||||
// that wraps this arrangement feature.
|
||||
if (Result().template assign<Halfedge_const_handle>(&obj) ||
|
||||
Result().template assign<Vertex_const_handle>(&obj))
|
||||
if (std::get_if<Halfedge_const_handle>(&obj) ||
|
||||
std::get_if<Vertex_const_handle>(&obj))
|
||||
return obj;
|
||||
|
||||
const Face_const_handle* p_fh =
|
||||
Result().template assign<Face_const_handle>(&obj);
|
||||
if (p_fh)
|
||||
// Walk to p from the face we have located:
|
||||
return _walk_from_face(*p_fh, vh->point(), p, crossed_edges);
|
||||
const auto* p_fh = std::get_if<Face_const_handle>(&obj);
|
||||
// Walk to p from the face we have located:
|
||||
if (p_fh) return _walk_from_face(*p_fh, vh->point(), p, crossed_edges);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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.
|
||||
//
|
||||
/*! 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.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::result_type
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
_find_face_around_vertex(Vertex_const_handle vh,
|
||||
const Point_2& p,
|
||||
bool& new_vertex) const
|
||||
{
|
||||
_find_face_around_vertex(Vertex_const_handle vh, const Point_2& p,
|
||||
bool& new_vertex) const {
|
||||
new_vertex = false;
|
||||
|
||||
// Create an x-monotone curve connecting the point associated with the
|
||||
// vertex vp and the query point p.
|
||||
const Point_2& vp = vh->point();
|
||||
X_monotone_curve_2 seg =
|
||||
m_traits->construct_x_monotone_curve_2_object()(vp, p);
|
||||
const bool seg_dir_right =
|
||||
(m_traits->compare_xy_2_object()(vp, p) == SMALLER);
|
||||
|
||||
const Point_2& vp = vh->point();
|
||||
X_monotone_curve_2 seg;
|
||||
Comparison_result res;
|
||||
std::tie(seg, res) = construct_segment(vp, p, *m_traits, 0);
|
||||
bool seg_dir_right = (res == SMALLER);
|
||||
// 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 curr, next;
|
||||
bool equal_curr = false;
|
||||
Halfedge_around_vertex_const_circulator first = vh->incident_halfedges();
|
||||
Halfedge_around_vertex_const_circulator curr, next;
|
||||
bool equal_curr = false;
|
||||
|
||||
next = curr = first;
|
||||
++next;
|
||||
|
|
@ -241,16 +220,14 @@ _find_face_around_vertex(Vertex_const_handle vh,
|
|||
else {
|
||||
// Traverse the halfedges around v until we find the pair of adjacent
|
||||
// halfedges such as seg is located clockwise in between them.
|
||||
typename Traits_adaptor_2::Is_between_cw_2 is_between_cw =
|
||||
m_traits->is_between_cw_2_object();
|
||||
bool eq_curr, eq_next;
|
||||
auto is_between_cw = m_traits->is_between_cw_2_object();
|
||||
bool eq_curr, eq_next;
|
||||
|
||||
while (! is_between_cw(seg, seg_dir_right, curr->curve(),
|
||||
(curr->direction() == ARR_RIGHT_TO_LEFT),
|
||||
next->curve(),
|
||||
(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.
|
||||
if (eq_curr) {
|
||||
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.
|
||||
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.
|
||||
Halfedge_const_handle he = curr;
|
||||
Halfedge_const_handle he = curr;
|
||||
return make_result(he);
|
||||
}
|
||||
|
||||
|
|
@ -304,22 +280,18 @@ _find_face_around_vertex(Vertex_const_handle vh,
|
|||
return make_result(curr->source());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Walk from the edge to the query point.
|
||||
//
|
||||
/*! walks from the edge to the query point.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::result_type
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
_walk_from_edge(Halfedge_const_handle eh,
|
||||
const Point_2& np,
|
||||
const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const
|
||||
{
|
||||
_walk_from_edge(Halfedge_const_handle eh, const Point_2& np, const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const {
|
||||
CGAL_assertion_msg(! eh->is_fictitious(),
|
||||
"_walk_from_edge() from a fictitious edge.");
|
||||
|
||||
const X_monotone_curve_2& cv = eh->curve() ;
|
||||
Comparison_result res;
|
||||
Comparison_result res;
|
||||
|
||||
X_monotone_curve_2 seg =
|
||||
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)) {
|
||||
//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 &&
|
||||
eh->prev() != eh->twin())
|
||||
{
|
||||
eh->prev() != eh->twin()) {
|
||||
// the assumption is that each edge is crossed at most twice
|
||||
CGAL_assertion_msg(crossed_edges.count(eh->prev()) < 2,
|
||||
"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)) {
|
||||
//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 &&
|
||||
eh->next() != eh->twin())
|
||||
{
|
||||
eh->next() != eh->twin()) {
|
||||
// the assumption is that each edge is crossed at most twice
|
||||
CGAL_assertion_msg(crossed_edges.count(eh->next()) < 2,
|
||||
"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));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// In case the arrangement's curve contained in the segment
|
||||
// from the nearest landmark to the query point
|
||||
//
|
||||
/*! deals with an arrangement curve contained in the segment from the nearest
|
||||
* landmark to the query point
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::result_type
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
_deal_with_curve_contained_in_segment(Halfedge_const_handle he,
|
||||
bool p_is_left,
|
||||
_deal_with_curve_contained_in_segment(Halfedge_const_handle he, bool p_is_left,
|
||||
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
|
||||
// vertex either the halfedge's source or target
|
||||
Vertex_const_handle vh;
|
||||
bool target_is_left;
|
||||
if (m_traits->compare_xy_2_object()
|
||||
(he->source()->point(),he->target()->point()) == LARGER)
|
||||
target_is_left = true;
|
||||
else
|
||||
target_is_left = false;
|
||||
auto cmp_xy = m_traits->compare_xy_2_object();
|
||||
bool target_is_left =
|
||||
(cmp_xy(he->source()->point(), he->target()->point()) == LARGER);
|
||||
|
||||
Vertex_const_handle vh;
|
||||
if (p_is_left) {
|
||||
if (target_is_left)
|
||||
vh = he->target();
|
||||
else
|
||||
vh = he->source();
|
||||
if (target_is_left) vh = he->target();
|
||||
else vh = he->source();
|
||||
}
|
||||
else {
|
||||
if (target_is_left)
|
||||
vh = he->source();
|
||||
else
|
||||
vh = he->target();
|
||||
if (target_is_left) vh = he->source();
|
||||
else vh = he->target();
|
||||
}
|
||||
// vh is the closest vertex among the halfedge's end points
|
||||
return (_walk_from_vertex(vh, p, crossed_edges));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Walk from the given face to the query point.
|
||||
//
|
||||
/*! walks from the given face to the query point.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::result_type
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
_walk_from_face(Face_const_handle face,
|
||||
const Point_2& np,
|
||||
const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const
|
||||
{
|
||||
_walk_from_face(Face_const_handle face, const Point_2& np, const Point_2& p,
|
||||
Halfedge_set& crossed_edges) const {
|
||||
// Construct an x-monotone curve connecting the nearest landmark point np
|
||||
// to the query point p and check which CCB intersects this segment.
|
||||
X_monotone_curve_2 seg =
|
||||
m_traits->construct_x_monotone_curve_2_object()(np, p);
|
||||
const bool p_is_left =
|
||||
(m_traits->compare_xy_2_object()(np, p) == LARGER);
|
||||
X_monotone_curve_2 seg;
|
||||
Comparison_result res;
|
||||
std::tie(seg, res) = construct_segment(np, p, *m_traits, 0);
|
||||
const bool p_is_left = (res == LARGER);
|
||||
|
||||
Inner_ccb_const_iterator inner_ccb_iter;
|
||||
Outer_ccb_const_iterator outer_ccb_iter;
|
||||
const Halfedge_const_handle invalid_he;
|
||||
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;
|
||||
const Halfedge_const_handle invalid_he;
|
||||
const Vertex_const_handle invalid_vertex;
|
||||
bool cv_is_contained_in_seg;
|
||||
|
||||
do {
|
||||
// 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
|
||||
// whether it lies inside one of its holes (or on the boundary of
|
||||
// its holes).
|
||||
cv_is_contained_in_seg = false;
|
||||
new_face = face;
|
||||
for (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,
|
||||
crossed_edges,is_on_edge, is_target,
|
||||
cv_is_contained_in_seg,new_vertex);
|
||||
if (he == invalid_he && cv_is_contained_in_seg)
|
||||
{
|
||||
auto new_face = face;
|
||||
// Do not use 'auto' to define the iterator, as MSVC2017 complains.
|
||||
for (Inner_ccb_const_iterator inner_ccb_iter = face->inner_ccbs_begin();
|
||||
inner_ccb_iter != face->inner_ccbs_end(); ++inner_ccb_iter) {
|
||||
bool is_on_edge;
|
||||
bool is_target;
|
||||
Vertex_const_handle new_vertex;
|
||||
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,
|
||||
p_is_left,p,
|
||||
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
|
||||
// face contains p.
|
||||
if (new_face == face)
|
||||
return make_result(face);
|
||||
if (new_face == face) return make_result(face);
|
||||
|
||||
// Continue from the new face (hole).
|
||||
face = new_face;
|
||||
|
|
@ -544,13 +495,17 @@ _walk_from_face(Face_const_handle face,
|
|||
else {
|
||||
// We know that p is not located inside the current face. We therefore
|
||||
// look for an edge on its outer boundary that intersects seg.
|
||||
new_face = face;
|
||||
for (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,
|
||||
crossed_edges,is_on_edge, is_target,
|
||||
cv_is_contained_in_seg,new_vertex);
|
||||
auto new_face = face;
|
||||
// Do not use 'auto' to define the iterator, as MSVC2017 complains.
|
||||
for (Inner_ccb_const_iterator outer_ccb_iter = face->outer_ccbs_begin();
|
||||
outer_ccb_iter != face->outer_ccbs_end(); ++outer_ccb_iter) {
|
||||
bool is_on_edge;
|
||||
bool is_target;
|
||||
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) {
|
||||
return _deal_with_curve_contained_in_segment(*outer_ccb_iter,
|
||||
p_is_left,p,
|
||||
|
|
@ -585,10 +540,9 @@ _walk_from_face(Face_const_handle face,
|
|||
return default_result();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Find a halfedge on the given CCB that intersects the given x-monotone
|
||||
// curve, connecting the current landmark to the query point.
|
||||
//
|
||||
/*! finds a halfedge on the given CCB that intersects the given x-monotone
|
||||
* curve, connecting the current landmark to the query point.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
typename Arr_landmarks_point_location<Arr, Gen>::Halfedge_const_handle
|
||||
Arr_landmarks_point_location<Arr, Gen>::
|
||||
|
|
@ -598,17 +552,15 @@ _intersection_with_ccb(Ccb_halfedge_const_circulator circ,
|
|||
Halfedge_set& crossed_edges,
|
||||
bool& is_on_edge, bool& is_target,
|
||||
bool& cv_is_contained_in_seg,
|
||||
Vertex_const_handle & new_vertex) const
|
||||
{
|
||||
Vertex_const_handle& new_vertex) const {
|
||||
is_on_edge = false;
|
||||
is_target = false;
|
||||
|
||||
// Go over the CCB.
|
||||
typename Traits_adaptor_2::Is_in_x_range_2 is_in_x_range =
|
||||
m_traits->is_in_x_range_2_object();
|
||||
Ccb_halfedge_const_circulator curr = circ , temp_circ;
|
||||
const Halfedge_const_handle invalid_he;
|
||||
Halfedge_const_handle he;
|
||||
auto is_in_x_range = m_traits->is_in_x_range_2_object();
|
||||
Ccb_halfedge_const_circulator curr = circ , temp_circ;
|
||||
const Halfedge_const_handle invalid_he;
|
||||
Halfedge_const_handle he;
|
||||
bool cv_and_seg_overlap;
|
||||
do {
|
||||
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.
|
||||
if (_have_odd_intersections(he->curve(), seg, p_is_left,
|
||||
is_on_edge,cv_and_seg_overlap,
|
||||
cv_is_contained_in_seg)
|
||||
&& !(cv_and_seg_overlap || cv_is_contained_in_seg))
|
||||
{
|
||||
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
|
||||
// it lies in its interior.
|
||||
if (is_on_edge)
|
||||
return _in_case_p_is_on_edge(he,crossed_edges,p,is_target);
|
||||
|
||||
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
|
||||
// we should walk from it to the query point
|
||||
if (m_traits->compare_y_at_x_2_object()
|
||||
(curr->target()->point(), seg) == EQUAL)
|
||||
{
|
||||
(curr->target()->point(), seg) == EQUAL) {
|
||||
new_vertex = curr->target();
|
||||
}
|
||||
}
|
||||
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
|
||||
// we should walk from it to the query point
|
||||
if (m_traits->compare_y_at_x_2_object()
|
||||
(curr->source()->point() , seg) == EQUAL)
|
||||
{
|
||||
(curr->source()->point(), seg) == EQUAL) {
|
||||
new_vertex = curr->source();
|
||||
}
|
||||
}
|
||||
|
|
@ -718,8 +665,7 @@ Arr_landmarks_point_location<Arr, Gen>::
|
|||
_in_case_p_is_on_edge(Halfedge_const_handle he,
|
||||
Halfedge_set& crossed_edges,
|
||||
const Point_2 & p,
|
||||
bool & is_target) const
|
||||
{
|
||||
bool & is_target) const {
|
||||
// cv and seg overlap, obviously we crossed it
|
||||
// the assumption is that each edge is crossed at most twice
|
||||
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());
|
||||
// Check if p equals one of the edge end-vertices.
|
||||
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.
|
||||
is_target = true;
|
||||
}
|
||||
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.
|
||||
he = he->twin();
|
||||
is_target = true;
|
||||
|
|
@ -744,21 +688,17 @@ _in_case_p_is_on_edge(Halfedge_const_handle he,
|
|||
return he;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Check whether the given curve intersects a simple segment, which connects
|
||||
// the current landmark to the query point, an odd number of times.
|
||||
//
|
||||
/*! checks whether the given curve intersects a simple segment, which connects
|
||||
* the current landmark to the query point, an odd number of times.
|
||||
*/
|
||||
template <typename Arr, typename Gen>
|
||||
bool Arr_landmarks_point_location<Arr, Gen>::
|
||||
_have_odd_intersections(const X_monotone_curve_2& cv,
|
||||
const X_monotone_curve_2& seg,
|
||||
bool p_is_left,
|
||||
bool& p_on_curve,
|
||||
bool p_is_left, bool& p_on_curve,
|
||||
bool& cv_and_seg_overlap,
|
||||
bool& cv_is_contained_in_seg) const
|
||||
{
|
||||
typename Traits_adaptor_2::Is_in_x_range_2 is_in_x_range =
|
||||
m_traits->is_in_x_range_2_object();
|
||||
bool& cv_is_contained_in_seg) const {
|
||||
auto is_in_x_range = m_traits->is_in_x_range_2_object();
|
||||
p_on_curve = false;
|
||||
cv_and_seg_overlap = 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);
|
||||
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 ((m_traits->compare_y_at_x_2_object()(cv_left, seg) == EQUAL) &&
|
||||
(m_traits->compare_y_at_x_2_object()(cv_right, seg) == EQUAL))
|
||||
{
|
||||
auto cmp_y_at_x = m_traits->compare_y_at_x_2_object();
|
||||
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
|
||||
// we must set a special flag to distinguish this case
|
||||
cv_is_contained_in_seg = true;
|
||||
|
|
@ -791,22 +731,17 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
|
|||
if (cv_left_is_closed) {
|
||||
// Check if the left endpoint of cv has the same x-coordinate as the
|
||||
// right endpoint of seg.
|
||||
if (m_traits->compare_x_2_object()
|
||||
(m_traits->construct_min_vertex_2_object()(cv), seg_right) == EQUAL)
|
||||
{
|
||||
if (! p_is_left &&
|
||||
m_traits->compare_xy_2_object()
|
||||
(m_traits->construct_min_vertex_2_object()(cv), seg_right) == EQUAL)
|
||||
{
|
||||
auto min_p = m_traits->construct_min_vertex_2_object()(cv);
|
||||
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)) {
|
||||
p_on_curve = true;
|
||||
return true;
|
||||
}
|
||||
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.
|
||||
Comparison_result res_l =
|
||||
m_traits->compare_y_at_x_2_object()(seg_left, cv);
|
||||
Comparison_result res_r =
|
||||
m_traits->compare_y_at_x_2_object()(seg_right, cv);
|
||||
Comparison_result res_l = cmp_y_at_x(seg_left, cv);
|
||||
Comparison_result res_r = cmp_y_at_x(seg_right, cv);
|
||||
if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) {
|
||||
p_on_curve = true;
|
||||
return true;
|
||||
|
|
@ -819,23 +754,17 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
|
|||
if (cv_right_is_closed) {
|
||||
// Check if the right endpoint of cv has the same x-coordinate as the
|
||||
// left endpoint of seg.
|
||||
if (m_traits->compare_x_2_object()
|
||||
(m_traits->construct_max_vertex_2_object()(cv), seg_left) == EQUAL)
|
||||
{
|
||||
if (p_is_left &&
|
||||
m_traits->compare_xy_2_object()
|
||||
(m_traits->construct_max_vertex_2_object()(cv), seg_left) == EQUAL)
|
||||
{
|
||||
auto max_p = m_traits->construct_max_vertex_2_object()(cv);
|
||||
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)) {
|
||||
p_on_curve = true;
|
||||
return true;
|
||||
}
|
||||
else if (m_traits->is_vertical_2_object()(seg)) {
|
||||
// Special treatment for vertical segments.
|
||||
Comparison_result res_l =
|
||||
m_traits->compare_y_at_x_2_object()(seg_left, cv);
|
||||
Comparison_result res_r =
|
||||
m_traits->compare_y_at_x_2_object()(seg_right, cv);
|
||||
|
||||
auto cmp_y_at_x = m_traits->compare_y_at_x_2_object();
|
||||
Comparison_result res_l = cmp_y_at_x(seg_left, cv);
|
||||
Comparison_result res_r = cmp_y_at_x(seg_right, cv);
|
||||
if ((p_is_left && res_l == EQUAL) || (! p_is_left && res_r == EQUAL)) {
|
||||
p_on_curve = 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.
|
||||
Comparison_result left_res;
|
||||
const Arr_parameter_space bx_l =
|
||||
Comparison_result left_res;
|
||||
const Arr_parameter_space bx_l =
|
||||
m_traits->parameter_space_in_x_2_object()(cv, ARR_MIN_END);
|
||||
if (bx_l == ARR_LEFT_BOUNDARY) {
|
||||
// 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.
|
||||
// Compare the left endpoint of cv to seg.
|
||||
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);
|
||||
}
|
||||
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);
|
||||
if (by_l == ARR_BOTTOM_BOUNDARY)
|
||||
// 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);
|
||||
if (res != LARGER) {
|
||||
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,
|
||||
// lies on cv.
|
||||
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
|
||||
if (is_in_x_range(cv,( p_is_left ? seg_left : seg_right)))
|
||||
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;
|
||||
}
|
||||
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.
|
||||
Comparison_result right_res;
|
||||
const Arr_parameter_space bx_r =
|
||||
Comparison_result right_res;
|
||||
const Arr_parameter_space bx_r =
|
||||
m_traits->parameter_space_in_x_2_object()(cv, ARR_MAX_END);
|
||||
if (bx_r == ARR_RIGHT_BOUNDARY) {
|
||||
// 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.
|
||||
// Compare the right endpoint of cv to seg.
|
||||
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);
|
||||
}
|
||||
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);
|
||||
if (by_r == ARR_BOTTOM_BOUNDARY)
|
||||
// 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
|
||||
if (is_in_x_range(cv, (p_is_left ? seg_left : seg_right)))
|
||||
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;
|
||||
}
|
||||
cv_and_seg_overlap = true;
|
||||
|
|
@ -986,6 +912,6 @@ _have_odd_intersections(const X_monotone_curve_2& cv,
|
|||
return (left_res != right_res);
|
||||
}
|
||||
|
||||
} //namespace CGAL
|
||||
} // namespace CGAL
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -76,9 +76,9 @@ public:
|
|||
NUMBER_OF_OPERATIONS
|
||||
};
|
||||
|
||||
private:
|
||||
using Base = BaseTraits;
|
||||
|
||||
private:
|
||||
//! A set of bits that indicate whether operations should be traced.
|
||||
unsigned long long m_flags;
|
||||
|
||||
|
|
@ -212,6 +212,7 @@ public:
|
|||
using X_monotone_curve_2 = typename Base::X_monotone_curve_2;
|
||||
using Curve_2 = typename Base::Curve_2;
|
||||
using Multiplicity = typename Base::Multiplicity;
|
||||
//@}
|
||||
|
||||
/*! A functor that compares the \f$x\f$-coordinates of two points. */
|
||||
class Compare_x_2 {
|
||||
|
|
@ -832,9 +833,16 @@ public:
|
|||
std::cout << "approximate_2" << std::endl
|
||||
<< " xcv: " << xcv << ", error: " << error
|
||||
<< ", l2r: " << l2r << std::endl;
|
||||
auto res = m_object(xcv, error, oi, l2r);
|
||||
std::cout << " result: " << res << std::endl;
|
||||
return res;
|
||||
std::list<Approximate_point_2> container;
|
||||
m_object(xcv, error, std::back_inserter(container), l2r);
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
enable_testing()
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
std::map<sm_vertex_descriptor, std::vector<tm_halfedge_descriptor>> nm_umbrella_map;
|
||||
typedef typename std::vector<tm_edge_descriptor>::iterator edge_iterator;
|
||||
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
|
||||
// the halfedge in sm corresponding to nh_t. This is working because we
|
||||
// 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);
|
||||
for(tm_halfedge_descriptor ht : halfedges_around_target(nh_t, tm))
|
||||
set_target(ht, tm_v, tm);
|
||||
|
||||
sm_vertex_descriptor vs = target(get(ht_to_hs, nh_t), sm);
|
||||
sm_halfedge_descriptor hs = halfedge(vs, sm);
|
||||
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);
|
||||
}
|
||||
|
|
@ -210,6 +220,18 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
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
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script_with_options
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -579,6 +579,102 @@ void test_Polyhedron_tetrahedron()
|
|||
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**)
|
||||
{
|
||||
test_graph_range(poly_data());
|
||||
|
|
@ -590,6 +686,8 @@ int main(int, char**)
|
|||
#endif
|
||||
|
||||
test_invalid_selections();
|
||||
non_manifoldness_test1();
|
||||
non_manifoldness_test2();
|
||||
|
||||
test_SM_tetrahedron();
|
||||
test_Polyhedron_tetrahedron();
|
||||
|
|
|
|||
|
|
@ -10,13 +10,29 @@ typedef Traits::edge_descriptor edge_descriptor;
|
|||
typedef Traits::halfedge_descriptor halfedge_descriptor;
|
||||
typedef Traits::vertex_descriptor vertex_descriptor;
|
||||
typedef Traits::face_descriptor face_descriptor;
|
||||
//typedef Kernel::Point_3 Point_3;
|
||||
|
||||
int main()
|
||||
{
|
||||
Om om;
|
||||
for (Om::EdgeHandle ed : edges(om)) {
|
||||
std::cout << "edge" << std::endl;
|
||||
for (Om::EdgeHandle ed : edges(om))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
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)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script.
|
||||
# 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)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script.
|
||||
# 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)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
# Used in /CGAL/Documentation/doc/Documentation/Developer_manual/create_and_use_a_cmakelist.txt.
|
||||
# Careful when modifying
|
||||
|
||||
cmake_minimum_required(VERSION 3.12...3.29)
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
project(Basic_viewer_Examples)
|
||||
|
||||
#CGAL_Qt6 is needed for the drawing.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt6)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.12...3.29)
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
project(Core_Examples)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -600,6 +600,7 @@ inline long longValue(const BigFloat& bf)
|
|||
{
|
||||
return bf.longValue();
|
||||
}
|
||||
//@}
|
||||
|
||||
} //namespace CORE
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS ImageIO)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS ImageIO)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.12...3.29)
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
project(CGAL_ipelets_Demo)
|
||||
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Top level CMakeLists.txt for CGAL-branchbuild
|
||||
|
||||
# Minimal version of CMake:
|
||||
cmake_minimum_required(VERSION 3.12...3.29)
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
|
||||
message("== CMake setup ==")
|
||||
project(CGAL CXX C)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_CMakeLists
|
||||
# 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)
|
||||
|
||||
# CGAL and its components
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# 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)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue