Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface

This commit is contained in:
Mael Rouxel-Labbé 2025-03-24 21:34:55 +01:00
commit 691fd789f9
1093 changed files with 22056 additions and 18097 deletions

35
.clang-format Normal file
View File

@ -0,0 +1,35 @@
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -2
AllowShortFunctionsOnASingleLine: true
BinPackParameters: false
BreakConstructorInitializers: BeforeComma
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: MultiLine
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: true
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
ColumnLimit: 120
# Force pointers to the type for C++.
DerivePointerAlignment: false
PointerAlignment: Left
# Control the spaces around conditionals
SpacesInConditionalStatement: false
SpaceBeforeParens: false
...

View File

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

View File

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

View File

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

View File

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

View File

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

3
.gitattributes vendored
View File

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

View File

@ -7,9 +7,8 @@ permissions:
jobs: jobs:
build: build:
if: github.repository == 'CGAL/cgal' || github.event_name != 'push'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: install dependencies - name: install dependencies

View File

@ -7,9 +7,8 @@ permissions:
jobs: jobs:
cmake-testsuite: cmake-testsuite:
if: github.repository == 'CGAL/cgal' || github.event_name != 'push'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: install dependencies - name: install dependencies
@ -21,9 +20,8 @@ jobs:
ctest -L Installation -j $(getconf _NPROCESSORS_ONLN) ctest -L Installation -j $(getconf _NPROCESSORS_ONLN)
cmake-testsuite-with-qt: cmake-testsuite-with-qt:
if: github.repository == 'CGAL/cgal' || github.event_name != 'push'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: install dependencies - name: install dependencies

58
.gitignore vendored
View File

@ -9,7 +9,6 @@ AABB_tree/demo/AABB_tree/Makefile
AABB_tree/examples/AABB_tree/*.kdev* AABB_tree/examples/AABB_tree/*.kdev*
AABB_tree/examples/AABB_tree/*_example AABB_tree/examples/AABB_tree/*_example
AABB_tree/examples/AABB_tree/Makefile AABB_tree/examples/AABB_tree/Makefile
AABB_tree/examples/AABB_tree/cgal_test_with_cmake
AABB_tree/test/AABB_tree/*.kdev* AABB_tree/test/AABB_tree/*.kdev*
AABB_tree/test/AABB_tree/Makefile AABB_tree/test/AABB_tree/Makefile
AABB_tree/test/AABB_tree/aabb_correctness_triangle_test AABB_tree/test/AABB_tree/aabb_correctness_triangle_test
@ -19,17 +18,14 @@ AABB_tree/test/AABB_tree/aabb_distance_triangle_test
AABB_tree/test/AABB_tree/aabb_intersection_triangle_test AABB_tree/test/AABB_tree/aabb_intersection_triangle_test
AABB_tree/test/AABB_tree/aabb_naive_vs_tree_distance_segment_test AABB_tree/test/AABB_tree/aabb_naive_vs_tree_distance_segment_test
AABB_tree/test/AABB_tree/aabb_projection_triangle_test AABB_tree/test/AABB_tree/aabb_projection_triangle_test
AABB_tree/test/AABB_tree/cgal_test_with_cmake
Algebraic_foundations/test/Algebraic_foundations/Algebraic_extension_traits Algebraic_foundations/test/Algebraic_foundations/Algebraic_extension_traits
Algebraic_foundations/test/Algebraic_foundations/Algebraic_structure_traits Algebraic_foundations/test/Algebraic_foundations/Algebraic_structure_traits
Algebraic_foundations/test/Algebraic_foundations/Chinese_remainder_traits Algebraic_foundations/test/Algebraic_foundations/Chinese_remainder_traits
Algebraic_foundations/test/Algebraic_foundations/Coercion_traits Algebraic_foundations/test/Algebraic_foundations/Coercion_traits
Algebraic_foundations/test/Algebraic_foundations/Real_embeddable_traits Algebraic_foundations/test/Algebraic_foundations/Real_embeddable_traits
Algebraic_foundations/test/Algebraic_foundations/Scalar_factor_traits Algebraic_foundations/test/Algebraic_foundations/Scalar_factor_traits
Algebraic_foundations/test/Algebraic_foundations/cgal_test_with_cmake
Algebraic_foundations/test/Algebraic_foundations/extended_euclidean_algorithm Algebraic_foundations/test/Algebraic_foundations/extended_euclidean_algorithm
Algebraic_foundations/test/Algebraic_foundations/ipower Algebraic_foundations/test/Algebraic_foundations/ipower
Algebraic_kernel_d/test/Algebraic_kernel_d/cgal_test_with_cmake
Algebraic_kernel_d/test/Algebraic_kernel_d/rs_isolator Algebraic_kernel_d/test/Algebraic_kernel_d/rs_isolator
Alpha_shapes_2/demo/Alpha_shapes_2/Makefile Alpha_shapes_2/demo/Alpha_shapes_2/Makefile
Alpha_shapes_2/demo/Alpha_shapes_2/alpha_shapes_2 Alpha_shapes_2/demo/Alpha_shapes_2/alpha_shapes_2
@ -38,7 +34,6 @@ Alpha_shapes_2/examples/Alpha_shapes_2/alpha_shapes_2
Alpha_shapes_3/demo/Alpha_shapes_3/Makefile Alpha_shapes_3/demo/Alpha_shapes_3/Makefile
Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3
Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3
Alpha_shapes_3/test/Alpha_shapes_3/cgal_test_with_cmake
Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3 Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3
@ -61,7 +56,6 @@ Arrangement_on_surface_2/examples/Arrangement_on_surface_2/batched_point_locatio
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_dual_adapter Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_dual_adapter
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_primal_adapter Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bgl_primal_adapter
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bounded_planar_vertical_decomposition Arrangement_on_surface_2/examples/Arrangement_on_surface_2/bounded_planar_vertical_decomposition
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/cgal_test_with_cmake
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circles Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circles
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_arcs Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_arcs
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_line_arcs Arrangement_on_surface_2/examples/Arrangement_on_surface_2/circular_line_arcs
@ -104,30 +98,24 @@ Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_fu
Arrangement_on_surface_2/examples/Arrangement_on_surface_2/vertical_ray_shooting Arrangement_on_surface_2/examples/Arrangement_on_surface_2/vertical_ray_shooting
Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp
BGL/examples/BGL_arrangement_2/Makefile BGL/examples/BGL_arrangement_2/Makefile
BGL/examples/BGL_arrangement_2/cgal_test_with_cmake
BGL/examples/BGL_arrangement_2/dual BGL/examples/BGL_arrangement_2/dual
BGL/examples/BGL_arrangement_2/primal BGL/examples/BGL_arrangement_2/primal
BGL/test/BGL/cgal_test_with_cmake
Boolean_set_operations_2/demo/Boolean_set_operations_2/Makefile Boolean_set_operations_2/demo/Boolean_set_operations_2/Makefile
Boolean_set_operations_2/demo/Boolean_set_operations_2/boolean_operations_2 Boolean_set_operations_2/demo/Boolean_set_operations_2/boolean_operations_2
Box_intersection_d/test/Box_intersection_d/automated_test Box_intersection_d/test/Box_intersection_d/automated_test
Box_intersection_d/test/Box_intersection_d/benchmark.data Box_intersection_d/test/Box_intersection_d/benchmark.data
Box_intersection_d/test/Box_intersection_d/benchmark_box_intersection Box_intersection_d/test/Box_intersection_d/benchmark_box_intersection
Box_intersection_d/test/Box_intersection_d/box_grid Box_intersection_d/test/Box_intersection_d/box_grid
Box_intersection_d/test/Box_intersection_d/cgal_test_with_cmake
Box_intersection_d/test/Box_intersection_d/random_set_test Box_intersection_d/test/Box_intersection_d/random_set_test
CGAL_ImageIO/demo/CGALimageIO/Makefile CGAL_ImageIO/demo/CGALimageIO/Makefile
CGAL_ImageIO/demo/CGALimageIO/cgal_test_with_cmake
CGAL_ImageIO/demo/CGALimageIO/image_to_vtk_viewer CGAL_ImageIO/demo/CGALimageIO/image_to_vtk_viewer
CGAL_ImageIO/examples/CGALimageIO/Makefile CGAL_ImageIO/examples/CGALimageIO/Makefile
CGAL_ImageIO/examples/CGALimageIO/cgal_test_with_cmake
CGAL_ImageIO/examples/CGALimageIO/convert_raw_image_to_inr CGAL_ImageIO/examples/CGALimageIO/convert_raw_image_to_inr
CGAL_ImageIO/examples/CGALimageIO/makefile CGAL_ImageIO/examples/CGALimageIO/makefile
CGAL_ImageIO/examples/CGALimageIO/test_imageio CGAL_ImageIO/examples/CGALimageIO/test_imageio
CGAL_ImageIO/src/CGAL_ImageIO/Makefile CGAL_ImageIO/src/CGAL_ImageIO/Makefile
Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3_demo Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3_demo
Circular_kernel_3/demo/Circular_kernel_3/Makefile Circular_kernel_3/demo/Circular_kernel_3/Makefile
Circular_kernel_3/test/Circular_kernel_3/cgal_test_with_cmake
Circular_kernel_3/test/Circular_kernel_3/test_Exact_spherical_kernel Circular_kernel_3/test/Circular_kernel_3/test_Exact_spherical_kernel
Circular_kernel_3/test/Circular_kernel_3/test_Lazy_Spherical_kernel Circular_kernel_3/test/Circular_kernel_3/test_Lazy_Spherical_kernel
Circular_kernel_3/test/Circular_kernel_3/test_Lazy_spherical_kernel_basics Circular_kernel_3/test/Circular_kernel_3/test_Lazy_spherical_kernel_basics
@ -138,7 +126,6 @@ Documentation/log/*.*
Documentation/output Documentation/output
Documentation/tags/*.* Documentation/tags/*.*
Generator/examples/Generator/ball_d Generator/examples/Generator/ball_d
Generator/examples/Generator/cgal_test_with_cmake
Generator/examples/Generator/cube_d Generator/examples/Generator/cube_d
Generator/examples/Generator/grid_d Generator/examples/Generator/grid_d
Generator/examples/Generator/random_convex_set Generator/examples/Generator/random_convex_set
@ -150,7 +137,6 @@ Generator/examples/Generator/random_segments1
Generator/examples/Generator/random_segments2 Generator/examples/Generator/random_segments2
Generator/examples/Generator/sphere_d Generator/examples/Generator/sphere_d
Generator/test/Generator/bug Generator/test/Generator/bug
Generator/test/Generator/cgal_test_with_cmake
Generator/test/Generator/random_poly_test Generator/test/Generator/random_poly_test
Generator/test/Generator/rcs_test Generator/test/Generator/rcs_test
Generator/test/Generator/test_combination_enumerator Generator/test/Generator/test_combination_enumerator
@ -179,7 +165,6 @@ GraphicsView/demo/Triangulation_2/Makefile
GraphicsView/demo/Triangulation_2/Regular_triangulation_2 GraphicsView/demo/Triangulation_2/Regular_triangulation_2
GraphicsView/demo/Triangulation_2/qrc_*.cxx GraphicsView/demo/Triangulation_2/qrc_*.cxx
GraphicsView/demo/Triangulation_2/ui_*.h GraphicsView/demo/Triangulation_2/ui_*.h
HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake
HalfedgeDS/test/HalfedgeDS/test_hds HalfedgeDS/test/HalfedgeDS/test_hds
HalfedgeDS/test/HalfedgeDS/test_hds_decorator HalfedgeDS/test/HalfedgeDS/test_hds_decorator
Inscribed_areas/test/Inscribed_areas/Makefile Inscribed_areas/test/Inscribed_areas/Makefile
@ -189,11 +174,8 @@ Installation/auxiliary/gdb/python/CGAL/printers.pyc
Installation/auxiliary/gdb/test Installation/auxiliary/gdb/test
Installation/cmake/modules/*.tmp Installation/cmake/modules/*.tmp
Installation/test/Installation/cgal_test Installation/test/Installation/cgal_test
/Installation/test/Installation/cgal_test_with_cmake
Installation/test/Installation/deprecation_warning Installation/test/Installation/deprecation_warning
Interpolation/demo/Interpolation/cgal_test_with_cmake
Intersections_3/test/Intersections_3/bbox_other_do_intersect_test Intersections_3/test/Intersections_3/bbox_other_do_intersect_test
Intersections_3/test/Intersections_3/cgal_test_with_cmake
Intersections_3/test/Intersections_3/circle_other Intersections_3/test/Intersections_3/circle_other
Intersections_3/test/Intersections_3/line_line Intersections_3/test/Intersections_3/line_line
Intersections_3/test/Intersections_3/segment_segment Intersections_3/test/Intersections_3/segment_segment
@ -207,7 +189,6 @@ Jet_fitting_3/examples/Jet_fitting_3/Single_estimation
Jet_fitting_3/examples/Jet_fitting_3/VC Jet_fitting_3/examples/Jet_fitting_3/VC
Jet_fitting_3/test/Jet_fitting_3/Makefile Jet_fitting_3/test/Jet_fitting_3/Makefile
Jet_fitting_3/test/Jet_fitting_3/blind_1pt Jet_fitting_3/test/Jet_fitting_3/blind_1pt
/Jet_fitting_3/examples/Jet_fitting_3/cgal_test_with_cmake
/Jet_fitting_3/examples/Jet_fitting_3/data_ellipe0.003.off.4ogl.txt /Jet_fitting_3/examples/Jet_fitting_3/data_ellipe0.003.off.4ogl.txt
Kernel_23/test/Kernel_23/Cartesian Kernel_23/test/Kernel_23/Cartesian
Kernel_23/test/Kernel_23/Dimension Kernel_23/test/Kernel_23/Dimension
@ -221,7 +202,6 @@ Kernel_23/test/Kernel_23/Simple_cartesian
Kernel_23/test/Kernel_23/Simple_homogeneous Kernel_23/test/Kernel_23/Simple_homogeneous
Kernel_23/test/Kernel_23/Test_IO.out Kernel_23/test/Kernel_23/Test_IO.out
/Kernel_23/test/Kernel_23/Test-*IO.out /Kernel_23/test/Kernel_23/Test-*IO.out
Kernel_23/test/Kernel_23/cgal_test_with_cmake
Kernel_23/test/Kernel_23/test_kernel__ Kernel_23/test/Kernel_23/test_kernel__
Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_2 Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_2
Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_stable_subset_2 Kinetic_data_structures/demo/Kinetic_data_structures/Delaunay_triangulation_stable_subset_2
@ -230,13 +210,11 @@ Kinetic_data_structures/demo/Kinetic_data_structures/KDS_Delaunay_triangulation_
Kinetic_data_structures/demo/Kinetic_data_structures/KDS_generate_data Kinetic_data_structures/demo/Kinetic_data_structures/KDS_generate_data
Kinetic_data_structures/demo/Kinetic_data_structures/KDS_gui_2 Kinetic_data_structures/demo/Kinetic_data_structures/KDS_gui_2
Kinetic_data_structures/demo/Kinetic_data_structures/Makefile Kinetic_data_structures/demo/Kinetic_data_structures/Makefile
Kinetic_data_structures/demo/Kinetic_data_structures/cgal_test_with_cmake
Kinetic_data_structures/demo/Kinetic_data_structures/generate_data Kinetic_data_structures/demo/Kinetic_data_structures/generate_data
Kinetic_data_structures/demo/Kinetic_data_structures/gui_2 Kinetic_data_structures/demo/Kinetic_data_structures/gui_2
Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2 Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2
Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3 Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3
Kinetic_data_structures/test/Kinetic_data_structures/active_objects_tables Kinetic_data_structures/test/Kinetic_data_structures/active_objects_tables
Kinetic_data_structures/test/Kinetic_data_structures/cgal_test_with_cmake
Kinetic_data_structures/test/Kinetic_data_structures/exact_kds Kinetic_data_structures/test/Kinetic_data_structures/exact_kds
Kinetic_data_structures/test/Kinetic_data_structures/instantaneous_kernel Kinetic_data_structures/test/Kinetic_data_structures/instantaneous_kernel
Kinetic_data_structures/test/Kinetic_data_structures/numbers Kinetic_data_structures/test/Kinetic_data_structures/numbers
@ -249,8 +227,6 @@ Kinetic_data_structures/test/Kinetic_data_structures/test_KDS_Delaunay_triangula
Kinetic_data_structures/test/Kinetic_data_structures/timings Kinetic_data_structures/test/Kinetic_data_structures/timings
Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3.qrc.depends Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3.qrc.depends
Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3_demo Linear_cell_complex/demo/Linear_cell_complex/Linear_cell_complex_3_demo
Linear_cell_complex/demo/Linear_cell_complex/cgal_test_with_cmake
Linear_cell_complex/examples/Linear_cell_complex/cgal_test_with_cmake
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3 Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_triangulation Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_triangulation
Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_with_colored_vertices Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_with_colored_vertices
@ -298,7 +274,6 @@ Mesh_2/demo/Mesh_2/*.core
Mesh_2/demo/Mesh_2/*.moc Mesh_2/demo/Mesh_2/*.moc
Mesh_2/demo/Mesh_2/.*.deps Mesh_2/demo/Mesh_2/.*.deps
Mesh_2/demo/Mesh_2/Makefile Mesh_2/demo/Mesh_2/Makefile
Mesh_2/demo/Mesh_2/cgal_test_with_cmake
Mesh_2/demo/Mesh_2/conform Mesh_2/demo/Mesh_2/conform
Mesh_2/demo/Mesh_2/depends Mesh_2/demo/Mesh_2/depends
Mesh_2/demo/Mesh_2/filename.edg Mesh_2/demo/Mesh_2/filename.edg
@ -310,7 +285,6 @@ Mesh_2/demo/Mesh_2/semantic.cache
Mesh_2/doxygen Mesh_2/doxygen
Mesh_2/examples/Mesh_2/*.core Mesh_2/examples/Mesh_2/*.core
Mesh_2/examples/Mesh_2/.*.deps Mesh_2/examples/Mesh_2/.*.deps
Mesh_2/examples/Mesh_2/cgal_test_with_cmake
Mesh_2/examples/Mesh_2/conform Mesh_2/examples/Mesh_2/conform
Mesh_2/examples/Mesh_2/conforming Mesh_2/examples/Mesh_2/conforming
Mesh_2/examples/Mesh_2/depends Mesh_2/examples/Mesh_2/depends
@ -325,7 +299,6 @@ Mesh_2/test/Mesh_2/*.core
Mesh_2/test/Mesh_2/.*.deps Mesh_2/test/Mesh_2/.*.deps
Mesh_2/test/Mesh_2/Makefile Mesh_2/test/Mesh_2/Makefile
Mesh_2/test/Mesh_2/bench_double_map Mesh_2/test/Mesh_2/bench_double_map
Mesh_2/test/Mesh_2/cgal_test_with_cmake
Mesh_2/test/Mesh_2/conform_plus Mesh_2/test/Mesh_2/conform_plus
Mesh_2/test/Mesh_2/depends Mesh_2/test/Mesh_2/depends
Mesh_2/test/Mesh_2/my_makefile Mesh_2/test/Mesh_2/my_makefile
@ -374,7 +347,6 @@ Mesh_3/examples/Mesh_3/.*.deps
Mesh_3/examples/Mesh_3/random-image.inr Mesh_3/examples/Mesh_3/random-image.inr
Mesh_3/examples/Mesh_3/Makefile Mesh_3/examples/Mesh_3/Makefile
Mesh_3/examples/Mesh_3/applications Mesh_3/examples/Mesh_3/applications
Mesh_3/examples/Mesh_3/cgal_test_with_cmake
Mesh_3/examples/Mesh_3/cgal_to_medit Mesh_3/examples/Mesh_3/cgal_to_medit
Mesh_3/examples/Mesh_3/chair-after.mesh Mesh_3/examples/Mesh_3/chair-after.mesh
Mesh_3/examples/Mesh_3/chair-after.png Mesh_3/examples/Mesh_3/chair-after.png
@ -412,7 +384,6 @@ Mesh_3/examples/Mesh_3/test_off
/Mesh_3/test/Mesh_3/a.lua /Mesh_3/test/Mesh_3/a.lua
/Mesh_3/test/Mesh_3/applications /Mesh_3/test/Mesh_3/applications
/Mesh_3/test/Mesh_3/*.cgal /Mesh_3/test/Mesh_3/*.cgal
/Mesh_3/test/Mesh_3/cgal_test_with_cmake
/Mesh_3/test/Mesh_3/cgal_to_medit /Mesh_3/test/Mesh_3/cgal_to_medit
/Mesh_3/test/Mesh_3/combined_spheres /Mesh_3/test/Mesh_3/combined_spheres
/Mesh_3/test/Mesh_3/combined_spheres-with-sphere-oracle /Mesh_3/test/Mesh_3/combined_spheres-with-sphere-oracle
@ -514,11 +485,9 @@ Min_ellipse_2/.tmp
Min_ellipse_2/Makefile Min_ellipse_2/Makefile
Min_ellipse_2/bin Min_ellipse_2/bin
Min_ellipse_2/doc_ps Min_ellipse_2/doc_ps
Minkowski_sum_3/test/Minkowski_sum_3/cgal_test_with_cmake
Nef_2/test/Nef_2/EPoint-test Nef_2/test/Nef_2/EPoint-test
Nef_2/test/Nef_2/Nef_polyhedron_2-test Nef_2/test/Nef_2/Nef_polyhedron_2-test
Nef_2/test/Nef_2/Polynomial-test Nef_2/test/Nef_2/Polynomial-test
Nef_2/test/Nef_2/cgal_test_with_cmake
Nef_2/test/Nef_2/nef_2_point_location Nef_2/test/Nef_2/nef_2_point_location
Nef_3/demo/Nef_3/Makefile Nef_3/demo/Nef_3/Makefile
Nef_3/examples/Nef_3/Makefile Nef_3/examples/Nef_3/Makefile
@ -576,7 +545,6 @@ Number_types/test/Number_types/_test_valid_finite_double
Number_types/test/Number_types/_test_valid_finite_float Number_types/test/Number_types/_test_valid_finite_float
Number_types/test/Number_types/bench_interval Number_types/test/Number_types/bench_interval
Number_types/test/Number_types/cgal_test Number_types/test/Number_types/cgal_test
Number_types/test/Number_types/cgal_test_with_cmake
Number_types/test/Number_types/constant Number_types/test/Number_types/constant
Number_types/test/Number_types/double Number_types/test/Number_types/double
Number_types/test/Number_types/doubletst Number_types/test/Number_types/doubletst
@ -627,7 +595,6 @@ Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/moc_*.cpp
Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/ui_*.h Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/ui_*.h
Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.qch Periodic_3_triangulation_3/demo/Periodic_Lloyd_3/Periodic_Lloyd_3.qch
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/Test_tds_IO_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/Test_tds_IO_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/cgal_test_with_cmake
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_alpha_shape_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_alpha_shape_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_hierarchy_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_hierarchy_3
@ -638,7 +605,6 @@ Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_trian
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_H_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_H_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SC_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SC_3
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SH_3 Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_SH_3
Point_set_2/test/Point_set_2/cgal_test_with_cmake
Point_set_2/test/Point_set_2/nearest_nb1 Point_set_2/test/Point_set_2/nearest_nb1
Point_set_2/test/Point_set_2/nearest_nb_fcn Point_set_2/test/Point_set_2/nearest_nb_fcn
Point_set_2/test/Point_set_2/range_search_fcn Point_set_2/test/Point_set_2/range_search_fcn
@ -684,7 +650,6 @@ Point_set_processing_3/test/Point_set_processing_3/smoothing_test
/Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-oriented.off /Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-oriented.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-shuffled.off /Polygon_mesh_processing/test/Polygon_mesh_processing/elephant-shuffled.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/blobby_2cc_no_id.off /Polygon_mesh_processing/test/Polygon_mesh_processing/blobby_2cc_no_id.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/cgal_test_with_cmake
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/U.polylines.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/U.polylines.txt.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole1.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole1.txt.off
/Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole2.txt.off /Polygon_mesh_processing/test/Polygon_mesh_processing/data/hole2.txt.off
@ -708,7 +673,6 @@ Polyhedron/demo/Polyhedron/snapshot.*
Polyhedron/demo/Polyhedron/ui_*.h Polyhedron/demo/Polyhedron/ui_*.h
Polyhedron/test/Polyhedron/*.kdev* Polyhedron/test/Polyhedron/*.kdev*
Polyhedron/test/Polyhedron/Makefile Polyhedron/test/Polyhedron/Makefile
Polyhedron/test/Polyhedron/cgal_test_with_cmake
Polyhedron/test/Polyhedron/test_polyhedron Polyhedron/test/Polyhedron/test_polyhedron
Polynomial/test/Polynomial/Exponent_vector Polynomial/test/Polynomial/Exponent_vector
Polynomial/test/Polynomial/Interpolator Polynomial/test/Polynomial/Interpolator
@ -716,7 +680,6 @@ Polynomial/test/Polynomial/Polynomial_traits_d
Polynomial/test/Polynomial/Polynomial_type_generator Polynomial/test/Polynomial/Polynomial_type_generator
Polynomial/test/Polynomial/Polynomial_using_core Polynomial/test/Polynomial/Polynomial_using_core
Polynomial/test/Polynomial/Polynomial_using_leda Polynomial/test/Polynomial/Polynomial_using_leda
Polynomial/test/Polynomial/cgal_test_with_cmake
Polynomial/test/Polynomial/modular_gcd_utcf_algorithm_M Polynomial/test/Polynomial/modular_gcd_utcf_algorithm_M
Polynomial/test/Polynomial/modular_gcd_utcf_dfai Polynomial/test/Polynomial/modular_gcd_utcf_dfai
Polynomial/test/Polynomial/modular_gcd_utcf_pure_wang Polynomial/test/Polynomial/modular_gcd_utcf_pure_wang
@ -746,10 +709,8 @@ Polytope_distance_d/.obj
Polytope_distance_d/.tmp Polytope_distance_d/.tmp
Polytope_distance_d/Makefile Polytope_distance_d/Makefile
Polytope_distance_d/bin Polytope_distance_d/bin
Polytope_distance_d/test/Polytope_distance_d/cgal_test_with_cmake
Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d_d Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d_d
Principal_component_analysis/test/Principal_component_analysis/bounding_box Principal_component_analysis/test/Principal_component_analysis/bounding_box
Principal_component_analysis/test/Principal_component_analysis/cgal_test_with_cmake
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_circles_2 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_circles_2
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_cuboids_3 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_cuboids_3
Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_points_2 Principal_component_analysis/test/Principal_component_analysis/linear_least_squares_fitting_points_2
@ -774,7 +735,6 @@ Principal_component_analysis/test/Principal_component_analysis/test_linear_least
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_tetrahedra_3 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_tetrahedra_3
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_2 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_2
Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_3 Principal_component_analysis/test/Principal_component_analysis/test_linear_least_squares_fitting_triangles_3
/Profiling_tools/test/Profiling_tools/cgal_test_with_cmake
/Profiling_tools/test/Profiling_tools/test_memory_sizer /Profiling_tools/test/Profiling_tools/test_memory_sizer
/Profiling_tools/test/Profiling_tools/test_timer /Profiling_tools/test/Profiling_tools/test_timer
QP_solver/documentation/Degeneracies.aux QP_solver/documentation/Degeneracies.aux
@ -806,7 +766,6 @@ Ridges_3/examples/Ridges_3/Compute_Ridges_Umbilics
Ridges_3/examples/Ridges_3/Makefile Ridges_3/examples/Ridges_3/Makefile
Ridges_3/test/Ridges_3/Makefile Ridges_3/test/Ridges_3/Makefile
Ridges_3/test/Ridges_3/ridge_test Ridges_3/test/Ridges_3/ridge_test
STL_Extension/test/STL_Extension/cgal_test_with_cmake
STL_Extension/test/STL_Extension/test_Cache STL_Extension/test/STL_Extension/test_Cache
STL_Extension/test/STL_Extension/test_Compact_container STL_Extension/test/STL_Extension/test_Compact_container
STL_Extension/test/STL_Extension/test_Concatenate_iterator STL_Extension/test/STL_Extension/test_Concatenate_iterator
@ -828,7 +787,6 @@ STL_Extension/test/STL_Extension/test_nth_element
STL_Extension/test/STL_Extension/test_stl_extension STL_Extension/test/STL_Extension/test_stl_extension
STL_Extension/test/STL_Extension/test_type_traits STL_Extension/test/STL_Extension/test_type_traits
STL_Extension/test/STL_Extension/test_vector STL_Extension/test/STL_Extension/test_vector
SearchStructures/test/RangeSegmentTrees/cgal_test_with_cmake
SearchStructures/test/RangeSegmentTrees/test_segment_tree_set_2 SearchStructures/test/RangeSegmentTrees/test_segment_tree_set_2
Skin_surface_3/.cdtproject Skin_surface_3/.cdtproject
Skin_surface_3/.project Skin_surface_3/.project
@ -839,7 +797,6 @@ Skin_surface_3/test/Skin_surface_3/err.txt
Skin_surface_3/test/Skin_surface_3/makefile Skin_surface_3/test/Skin_surface_3/makefile
Skin_surface_3/test/Skin_surface_3/msgs.txt Skin_surface_3/test/Skin_surface_3/msgs.txt
Skin_surface_3/test/Skin_surface_3/subdivision_test Skin_surface_3/test/Skin_surface_3/subdivision_test
Spatial_sorting/test/Spatial_sorting/cgal_test_with_cmake
Stream_lines_2/demo/Stream_lines_2/Makefile Stream_lines_2/demo/Stream_lines_2/Makefile
Stream_lines_2/demo/Stream_lines_2/streamlines Stream_lines_2/demo/Stream_lines_2/streamlines
Surface_mesh_parameterization/examples/Surface_mesh_parameterization/*.eps Surface_mesh_parameterization/examples/Surface_mesh_parameterization/*.eps
@ -967,20 +924,15 @@ Triangulation/test/Triangulation/output-pcds*
Triangulation/test/Triangulation/pc Triangulation/test/Triangulation/pc
Triangulation/test/Triangulation/pcds Triangulation/test/Triangulation/pcds
Triangulation/test/Triangulation/torture Triangulation/test/Triangulation/torture
/Triangulation/examples/Triangulation/cgal_test_with_cmake
/Triangulation/test/Triangulation/cgal_test_with_cmake
/Triangulation/test/Triangulation/output-tds-* /Triangulation/test/Triangulation/output-tds-*
Triangulation_2/cgal_test_with_cmake
Triangulation_2/demo/Triangulation_2/Makefile Triangulation_2/demo/Triangulation_2/Makefile
Triangulation_2/demo/Triangulation_2/constrained Triangulation_2/demo/Triangulation_2/constrained
Triangulation_2/demo/Triangulation_2/constrained_delaunay_triangulation_2 Triangulation_2/demo/Triangulation_2/constrained_delaunay_triangulation_2
Triangulation_2/demo/Triangulation_2/delaunay_triangulation_2 Triangulation_2/demo/Triangulation_2/delaunay_triangulation_2
Triangulation_2/demo/Triangulation_2/regular_triangulation_2 Triangulation_2/demo/Triangulation_2/regular_triangulation_2
Triangulation_2/examples/Triangulation_2/cgal_test_with_cmake
Triangulation_2/examples/Triangulation_2/regular Triangulation_2/examples/Triangulation_2/regular
Triangulation_2/test/Triangulation_2/Makefile Triangulation_2/test/Triangulation_2/Makefile
Triangulation_2/test/Triangulation_2/T??.triangulation Triangulation_2/test/Triangulation_2/T??.triangulation
Triangulation_2/test/Triangulation_2/cgal_test_with_cmake
Triangulation_2/test/Triangulation_2/file_tds* Triangulation_2/test/Triangulation_2/file_tds*
Triangulation_2/test/Triangulation_2/makefile Triangulation_2/test/Triangulation_2/makefile
Triangulation_2/test/Triangulation_2/test_cdt_degenerate_case Triangulation_2/test/Triangulation_2/test_cdt_degenerate_case
@ -998,10 +950,8 @@ Triangulation_2/test/Triangulation_2/test_triangulation_2_bis
Triangulation_2/test/Triangulation_2/test_triangulation_geom_traits Triangulation_2/test/Triangulation_2/test_triangulation_geom_traits
Triangulation_2/test/Triangulation_2/test_triangulation_tds Triangulation_2/test/Triangulation_2/test_triangulation_tds
Triangulation_2/test/Triangulation_2/vrml_tds* Triangulation_2/test/Triangulation_2/vrml_tds*
Triangulation_3/benchmark/Triangulation_3/cgal_test_with_cmake
Triangulation_3/benchmark/Triangulation_3/simple Triangulation_3/benchmark/Triangulation_3/simple
Triangulation_3/examples/Triangulation_3/adding_handles_3 Triangulation_3/examples/Triangulation_3/adding_handles_3
Triangulation_3/examples/Triangulation_3/cgal_test_with_cmake
Triangulation_3/examples/Triangulation_3/color Triangulation_3/examples/Triangulation_3/color
Triangulation_3/examples/Triangulation_3/fast_location_3 Triangulation_3/examples/Triangulation_3/fast_location_3
Triangulation_3/examples/Triangulation_3/find_conflicts_3 Triangulation_3/examples/Triangulation_3/find_conflicts_3
@ -1027,7 +977,6 @@ Triangulation_3/test/Triangulation_3/Test8_triangulation_IO_3_binary
Triangulation_3/test/Triangulation_3/Test??_triangulation_IO_3 Triangulation_3/test/Triangulation_3/Test??_triangulation_IO_3
Triangulation_3/test/Triangulation_3/Test?_triangulation_IO_3 Triangulation_3/test/Triangulation_3/Test?_triangulation_IO_3
Triangulation_3/test/Triangulation_3/Test_tds_IO_3 Triangulation_3/test/Triangulation_3/Test_tds_IO_3
Triangulation_3/test/Triangulation_3/cgal_test_with_cmake
Triangulation_3/test/Triangulation_3/makefile Triangulation_3/test/Triangulation_3/makefile
Triangulation_3/test/Triangulation_3/test_delaunay_3 Triangulation_3/test/Triangulation_3/test_delaunay_3
Triangulation_3/test/Triangulation_3/test_delaunay_hierarchy_3 Triangulation_3/test/Triangulation_3/test_delaunay_hierarchy_3
@ -1084,7 +1033,6 @@ ProgramOutput*
ErrorOutput* ErrorOutput*
CompilerOutput* CompilerOutput*
error.txt error.txt
cgal_test_with_cmake.log
# File created by the Semantic Bovinator (an Emacs package) # File created by the Semantic Bovinator (an Emacs package)
semantic.cache semantic.cache
@ -1141,9 +1089,7 @@ Doxyfile
gmon.* gmon.*
# Unsorted file names: # Unsorted file names:
/Point_set_processing_3/test/Point_set_processing_3/cgal_test_with_cmake
/Point_set_processing_3/test/Point_set_processing_3/read_test /Point_set_processing_3/test/Point_set_processing_3/read_test
/Nef_S2/test/Nef_S2/cgal_test_with_cmake
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/construction_test_suite_generator /Arrangement_on_surface_2/test/Arrangement_on_surface_2/construction_test_suite_generator
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_point /Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_point
/Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_segment /Arrangement_on_surface_2/test/Arrangement_on_surface_2/ex_kernel_segment
@ -1191,15 +1137,11 @@ gmon.*
/Principal_component_analysis/examples/Principal_component_analysis/barycenter /Principal_component_analysis/examples/Principal_component_analysis/barycenter
/Principal_component_analysis/examples/Principal_component_analysis/bounding_box /Principal_component_analysis/examples/Principal_component_analysis/bounding_box
/Principal_component_analysis/examples/Principal_component_analysis/centroid /Principal_component_analysis/examples/Principal_component_analysis/centroid
/Principal_component_analysis/examples/Principal_component_analysis/cgal_test_with_cmake
/Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_points_2 /Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_points_2
/Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_triangles_3 /Principal_component_analysis/examples/Principal_component_analysis/linear_least_squares_fitting_triangles_3
/Polygon/examples/Polygon/cgal_test_with_cmake
/Polygon/test/Polygon/cgal_test_with_cmake
/Polygon/test/Polygon/polytest.ascii /Polygon/test/Polygon/polytest.ascii
/Polygon/test/Polygon/polytest.binary /Polygon/test/Polygon/polytest.binary
/Polygon/test/Polygon/polytest.pretty /Polygon/test/Polygon/polytest.pretty
/Stream_support/test/Stream_support/cgal_test_with_cmake
/*.html /*.html
/Snap_rounding_2/test/Snap_rounding_2/data/out /Snap_rounding_2/test/Snap_rounding_2/data/out
Polygonal_surface_reconstruction/examples/build* Polygonal_surface_reconstruction/examples/build*

7
.markdownlint.json Normal file
View File

@ -0,0 +1,7 @@
{
"default": true,
"line-length": false,
"no-duplicate-heading": {
"siblings_only": true
}
}

View File

@ -1,7 +1,7 @@
# Created by the script cgal_create_cmake_script # Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(AABB_traits_benchmark) project(AABB_traits_benchmark)
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core)
@ -13,7 +13,7 @@ create_single_source_cgal_program("tree_construction.cpp")
find_package(benchmark QUIET) find_package(benchmark QUIET)
if(benchmark_FOUND) if(benchmark_FOUND)
create_single_source_cgal_program("tree_creation.cpp") create_single_source_cgal_program("tree_creation.cpp")
target_link_libraries(tree_creation benchmark::benchmark) target_link_libraries(tree_creation PRIVATE benchmark::benchmark)
else() else()
message(STATUS "NOTICE: The benchmark 'tree_creation.cpp' requires the Google benchmark library, and will not be compiled.") message(STATUS "NOTICE: The benchmark 'tree_creation.cpp' requires the Google benchmark library, and will not be compiled.")
endif() endif()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,6 @@
/*! /*!
\addtogroup PkgAlgebraicFoundationsRef \addtogroup PkgAlgebraicFoundationsRef
\todo check generated documentation
\cgalPkgDescriptionBegin{Algebraic Foundations,PkgAlgebraicFoundations} \cgalPkgDescriptionBegin{Algebraic Foundations,PkgAlgebraicFoundations}
\cgalPkgPicture{Algebraic_foundations2.png} \cgalPkgPicture{Algebraic_foundations2.png}

View File

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

View File

@ -21,6 +21,7 @@
#include <CGAL/Algebraic_structure_traits.h> #include <CGAL/Algebraic_structure_traits.h>
#include <CGAL/Real_embeddable_traits.h> #include <CGAL/Real_embeddable_traits.h>
#include <CGAL/Kernel/Same_uncertainty.h> #include <CGAL/Kernel/Same_uncertainty.h>
#include <boost/mpl/if.hpp>
namespace CGAL { namespace CGAL {
CGAL_NTS_BEGIN_NAMESPACE CGAL_NTS_BEGIN_NAMESPACE

View File

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

View File

@ -16,7 +16,6 @@
/*! /*!
\addtogroup PkgAlgebraicKernelDRef \addtogroup PkgAlgebraicKernelDRef
\todo check generated documentation
\cgalPkgDescriptionBegin{Algebraic Kernel,PkgAlgebraicKernelD} \cgalPkgDescriptionBegin{Algebraic Kernel,PkgAlgebraicKernelD}
\cgalPkgPicture{Algebraic_kernel_d.png} \cgalPkgPicture{Algebraic_kernel_d.png}
\cgalPkgSummaryBegin \cgalPkgSummaryBegin

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1442,7 +1442,7 @@ Alpha_shape_2<Dt,EACT>::find_alpha_solid() const
// takes O(#alpha_shape) time // takes O(#alpha_shape) time
Type_of_alpha alpha_solid = 0; Type_of_alpha alpha_solid = 0;
if (number_of_vertices()<3) return alpha_solid; if (dimension()!=2) return alpha_solid;
Finite_vertices_iterator vertex_it; Finite_vertices_iterator vertex_it;
// only finite vertices // only finite vertices

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -75,7 +75,7 @@ double mean_min_angle(const Mesh& mesh)
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
std::array<FT, 3> angles = triangle_angles(tr); std::array<FT, 3> angles = triangle_angles(tr);
FT min_angle = std::min({angles[0], angles[1], angles[2]}); FT min_angle = (std::min)({angles[0], angles[1], angles[2]});
min_angle = min_angle * (180.0 / CGAL_PI); min_angle = min_angle * (180.0 / CGAL_PI);
mean_min_angle += min_angle; mean_min_angle += min_angle;
@ -93,7 +93,7 @@ double mean_max_angle(const Mesh& mesh)
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh); const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
std::array<FT, 3> angles = triangle_angles(tr); std::array<FT, 3> angles = triangle_angles(tr);
FT max_angle = std::max({angles[0], angles[1], angles[2]}); FT max_angle = (std::max)({angles[0], angles[1], angles[2]});
max_angle = max_angle * (180.0 / CGAL_PI); max_angle = max_angle * (180.0 / CGAL_PI);
mean_max_angle += max_angle; mean_max_angle += max_angle;
@ -151,8 +151,8 @@ double mean_edge_ratio(const Mesh& mesh,
FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1])); FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1]));
FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2])); FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2]));
FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0])); FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0]));
FT min_edge = std::min({a, b, c}); FT min_edge = (std::min)({a, b, c});
FT max_edge = std::max({a, b, c}); FT max_edge = (std::max)({a, b, c});
FT edge_ratio = max_edge / min_edge; FT edge_ratio = max_edge / min_edge;
mean_edge_ratio += edge_ratio; mean_edge_ratio += edge_ratio;
@ -181,7 +181,7 @@ double mean_aspect_ratio(const Mesh& mesh,
FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0])); FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0]));
FT s = 0.5 * (a + b + c); FT s = 0.5 * (a + b + c);
FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s); FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s);
FT max_edge = std::max({a, b, c}); FT max_edge = (std::max)({a, b, c});
FT aspect_ratio = max_edge / inscribed_radius; FT aspect_ratio = max_edge / inscribed_radius;
aspect_ratio /= (2. * std::sqrt(3.)); // normalized aspect_ratio /= (2. * std::sqrt(3.)); // normalized
mean_aspect_ratio += aspect_ratio; mean_aspect_ratio += aspect_ratio;

View File

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

View File

@ -97,7 +97,7 @@ template <typename Cb>
class Cell_base_with_timestamp class Cell_base_with_timestamp
: public Cb : public Cb
{ {
std::size_t time_stamp_; std::size_t time_stamp_ = std::size_t(-2);
public: public:
using Has_timestamp = CGAL::Tag_true; using Has_timestamp = CGAL::Tag_true;
@ -112,7 +112,7 @@ public:
public: public:
template <typename... Args> template <typename... Args>
Cell_base_with_timestamp(const Args&... args) Cell_base_with_timestamp(const Args&... args)
: Cb(args...), time_stamp_(-1) : Cb(args...)
{ } { }
Cell_base_with_timestamp(const Cell_base_with_timestamp& other) Cell_base_with_timestamp(const Cell_base_with_timestamp& other)

View File

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

View File

@ -3,7 +3,6 @@
/// \ingroup PkgApolloniusGraph2Ref /// \ingroup PkgApolloniusGraph2Ref
/*! /*!
\addtogroup PkgApolloniusGraph2Ref \addtogroup PkgApolloniusGraph2Ref
\todo check generated documentation
\cgalPkgDescriptionBegin{2D Apollonius Graphs (Delaunay Graphs of Disks),PkgApolloniusGraph2} \cgalPkgDescriptionBegin{2D Apollonius Graphs (Delaunay Graphs of Disks),PkgApolloniusGraph2}
\cgalPkgPicture{CircleVoronoi.png} \cgalPkgPicture{CircleVoronoi.png}
\cgalPkgSummaryBegin \cgalPkgSummaryBegin

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# This is the CMake script for compiling a CGAL application. # This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.12...3.29) cmake_minimum_required(VERSION 3.12...3.31)
project(Arrangement_on_surface_2_earth_Demo) project(Arrangement_on_surface_2_earth_Demo)
if(NOT POLICY CMP0070 AND POLICY CMP0053) if(NOT POLICY CMP0070 AND POLICY CMP0053)
@ -16,27 +16,24 @@ find_package(Qt6 QUIET COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Xml)
find_package(CGAL COMPONENTS Qt6) find_package(CGAL COMPONENTS Qt6)
find_package(nlohmann_json QUIET 3.9) find_package(nlohmann_json QUIET 3.9)
if (NOT CGAL_FOUND OR NOT CGAL_Qt6_FOUND OR NOT Qt6_FOUND OR NOT Boost_FOUND OR NOT nlohmann_json_FOUND) set(MISSING_DEPS "")
if (NOT CGAL_FOUND) if (NOT CGAL_FOUND)
set(MISSING_DEPS "the CGAL library, ${MISSING_DEPS}") set(MISSING_DEPS "the CGAL library, ${MISSING_DEPS}")
endif() endif()
if (NOT CGAL_Qt6_FOUND) if (NOT CGAL_Qt6_FOUND)
set(MISSING_DEPS "the CGAL Qt6 component, ${MISSING_DEPS}") set(MISSING_DEPS "the CGAL Qt6 component, ${MISSING_DEPS}")
endif() endif()
if (NOT Qt6_FOUND) if (NOT Qt6_FOUND)
set(MISSING_DEPS "the Qt6 library, ${MISSING_DEPS}") set(MISSING_DEPS "the Qt6 library, ${MISSING_DEPS}")
endif() endif()
if (NOT Boost_FOUND) if (NOT nlohmann_json_FOUND)
set(MISSING_DEPS "the Boost library, ${MISSING_DEPS}") set(MISSING_DEPS "JSON for Modern C++ 3.9+ (know as nlohmann_json), ${MISSING_DEPS}")
endif()
if (NOT nlohmann_json_FOUND)
set(MISSING_DEPS "JSON for Modern C++ 3.9+ (know as nlohmann_json), ${MISSING_DEPS}")
endif()
message(STATUS "NOTICE: This project requires ${MISSING_DEPS} and will not be compiled.")
return()
endif() endif()
if (MISSING_DEPS)
message(STATUS "NOTICE: This project requires ${MISSING_DEPS}and will not be compiled.")
return()
endif()
add_compile_definitions(QT_NO_VERSION_TAGGING) add_compile_definitions(QT_NO_VERSION_TAGGING)

View File

@ -62,7 +62,7 @@ void GUI_country_pick_handler::mouse_press_event(QMouseEvent* e) {
auto sd = sqrt(d); auto sd = sqrt(d);
auto t1 = (-b - sd) / (2 * a); auto t1 = (-b - sd) / (2 * a);
auto t2 = (-b + sd) / (2 * a); auto t2 = (-b + sd) / (2 * a);
if (t1 > 0 && t2 > 0) ti = std::min(t1, t2); if (t1 > 0 && t2 > 0) ti = (std::min)(t1, t2);
else if (t1 > 0) ti = t1; else if (t1 > 0) ti = t1;
else ti = t2; else ti = t2;
} }

View File

@ -140,7 +140,7 @@ void Main_widget::initializeGL() {
for (auto& [country_name, triangle_points] : country_triangles_map) { for (auto& [country_name, triangle_points] : country_triangles_map) {
auto country_triangles = std::make_unique<Triangles>(triangle_points); auto country_triangles = std::make_unique<Triangles>(triangle_points);
auto color = QVector4D(rndm(), rndm(), rndm(), 1); auto color = QVector4D(rndm(), rndm(), rndm(), 1);
auto m = std::max(color.x(), std::max(color.y(), color.z())); auto m = (std::max)(color.x(), (std::max)(color.y(), color.z()));
color /= m; color /= m;
color *= m_dimming_factor; color *= m_dimming_factor;
color.setW(1); color.setW(1);

View File

@ -23,26 +23,25 @@ namespace CGAL {
template <typename Arrangement> template <typename Arrangement>
class Aos_observer { class Aos_observer {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! the type of the associated arrangement. /// the type of the associated arrangement.
typedef unspecified_type Arrangement_2; typedef unspecified_type Arrangement_2;
//! the point type. /// the point type.
typedef typename Arrangement_2::Point_2 Point_2; typedef typename Arrangement_2::Point_2 Point_2;
//! the \f$x\f$-monotone curve type. /// the \f$x\f$-monotone curve type.
typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2;
//! the type of a handle to an arrangement vertex. /// the type of a handle to an arrangement vertex.
typedef typename Arrangement_2::Vertex_handle Vertex_handle; typedef typename Arrangement_2::Vertex_handle Vertex_handle;
//! the type of a handle to an arrangement halfedge. /// the type of a handle to an arrangement halfedge.
typedef typename Arrangement_2::Halfedge_handle Halfedge_handle; typedef typename Arrangement_2::Halfedge_handle Halfedge_handle;
//! the type of a handle to an arrangement face. /// the type of a handle to an arrangement face.
typedef typename Arrangement_2::Face_handle Face_handle; typedef typename Arrangement_2::Face_handle Face_handle;
/*! represents a connected component of the boundary (CCB), either an outer /*! represents a connected component of the boundary (CCB), either an outer
@ -77,11 +76,11 @@ public:
/// \name Notifications on Global Arrangement Operations /// \name Notifications on Global Arrangement Operations
/// @{ /// @{
/*! issued just before the attached arrangement is assigned with the contents of another /*! issued just before the attached arrangement is assigned with the contents
* arrangement. * of another arrangement.
* \param arr The other arrangement. Notice that the arrangement type is the type used to * \param arr The other arrangement. Notice that the arrangement type is the
* instantiate the observer, which is conveniently defined as * type used to instantiate the observer, which is conveniently
* `Arrangement_2::Base_aos`. * defined as `Arrangement_2::Base_aos`.
*/ */
virtual void before_assign(const typename Arrangement_2::Base_aos& arr); virtual void before_assign(const typename Arrangement_2::Base_aos& arr);
@ -419,6 +418,6 @@ public:
virtual void after_remove_inner_ccb(Face_handle f); virtual void after_remove_inner_ccb(Face_handle f);
/// @} /// @}
}; /* end Aos_observer */ }; /* end Aos_observer */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,303 +1,265 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* The traits class `Arr_Bezier_curve_traits_2` is a model of the `AosTraits_2`
* concept that handles planar B&eacute;zier curves. A planar <I>B&eacute;zier
* curve</I> \f$B\f$ is a parametric curve defined by a sequence of <I>control
* points</I> \f$p_0, \ldots, p_n\f$ as follows:
The traits class `Arr_Bezier_curve_traits_2` is a model of the `ArrangementTraits_2` * \f{eqnarray*}{
concept that handles planar B&eacute;zier curves. A planar <I>B&eacute;zier curve</I> * B(t) = \left(X(t), Y(t)\right) = \ccSum{k=0}{n}{p_k \cdot \frac{n!}{k! (n-k)!} \cdot t^k (1-t)^{n-k}}\ ,
\f$ B\f$ is a parametric curve defined by a sequence of <I>control points</I>
\f$ p_0, \ldots, p_n\f$ as follows:
\f{eqnarray*}{
B(t) = \left(X(t), Y(t)\right)
= \ccSum{k=0}{n}{p_k \cdot \frac{n!}{k! (n-k)!} \cdot
t^k (1-t)^{n-k}}\ .
\f} \f}
where \f$ t \in [0, 1]\f$. The degree of the curve is therefore \f$ n\f$ - * where \f$t \in [0, 1]\f$. The degree of the curve is therefore \f$n\f$,
namely, \f$ X(t)\f$ and \f$ Y(t)\f$ are polynomials of degree \f$ n\f$. B&eacute;zier curves * namely, \f$X(t)\f$ and \f$Y(t)\f$ are polynomials of degree \f$n\f$.
have numerous applications in computer graphics and solid modelling. They * B&eacute;zier curves have numerous applications in computer graphics and
are used, for example, in free-form sketches and for defining the true-type * solid modelling. They are used, for example, in free-form sketches and for
fonts. * defining the true-type fonts.
In our representation, we assume that the coordinates of all control * In our representation, we assume that the coordinates of all control points
points are rational numbers (namely they are given as objects of the * are rational numbers (namely they are given as objects of the
`RatKernel::Point_2` type), so both \f$ X(t)\f$ and \f$ Y(t)\f$ are polynomials * `RatKernel::Point_2` type), so both \f$X(t)\f$ and \f$Y(t)\f$ are
with rational coefficients. The intersection points between curves are * polynomials with rational coefficients. The intersection points between
however algebraic numbers, and their exact computation is time-consuming. * curves are however algebraic numbers, and their exact computation is
The traits class therefore contains a layer of geometric filtering that * time-consuming. The traits class therefore contains a layer of geometric
performs all computation in an approximate manner whenever possible, and * filtering that performs all computation in an approximate manner whenever
it resorts to exact computations only when the approximate computation * possible, and it resorts to exact computations only when the approximate
fails to produce an unambiguous result. * computation fails to produce an unambiguous result.
We therefore require separate representations of the control points and * We therefore require separate representations of the control points and the
the intersection points. The `NtTraits` should be instantiated with a class * intersection points. The `NtTraits` should be instantiated with a class that
that defines nested `Integer`, `Rational` and `Algebraic` number * defines nested `Integer`, `Rational` and `Algebraic` number types and
types and supports various operations on them, yielding certified computation * supports various operations on them, yielding certified computation results
results (for example, in can convert rational numbers to algebraic numbers * (for example, in can convert rational numbers to algebraic numbers and can
and can compute roots of polynomials with integer coefficients). * compute roots of polynomials with integer coefficients). The other template
The other template parameters, `RatKernel` and `AlgKernel` should be * parameters, `RatKernel` and `AlgKernel` should be geometric kernels templated
geometric kernels templated with the `NtTraits::Rational` and * with the `NtTraits::Rational` and `NtTraits::Algebraic` number types,
`NtTraits::Algebraic` number types, respectively. It is recommended to * respectively. It is recommended to instantiate the
instantiate the `CORE_algebraic_number_traits` class as the `NtTraits` * `CORE_algebraic_number_traits` class as the `NtTraits` parameter, with
parameter, with `Cartesian<NtTraits::Rational>` and * `Cartesian<NtTraits::Rational>` and `Cartesian<NtTraits::Algebraic>`
`Cartesian<NtTraits::Algebraic>` instantiating the two kernel types, * instantiating the two kernel types, respectively. The number types in this
respectively. The number types in this case are provided by the \core * case are provided by the \core library, with its ability to exactly represent
library, with its ability to exactly represent simple algebraic numbers. * simple algebraic numbers.
While `Arr_Bezier_curve_traits_2` models the concept * While `Arr_Bezier_curve_traits_2` models the concept
`ArrangementDirectionalXMonotoneTraits_2`, the implementation of * `AosDirectionalXMonotoneTraits_2`, the implementation of the
the `Are_mergeable_2` operation does not enforce the input curves * `Are_mergeable_2` operation does not enforce the input curves to have the
to have the same direction as a precondition. Moreover, `Arr_Bezier_curve_traits_2` * same direction as a precondition. Moreover, `Arr_Bezier_curve_traits_2`
supports the merging of curves of opposite directions. * supports the merging of curves of opposite directions.
*
\cgalModels{ArrangementTraits_2,ArrangementDirectionalXMonotoneTraits_2} * \cgalModels{AosTraits_2,AosDirectionalXMonotoneTraits_2}
*/
template <typename RatKernel, typename AlgKernel, typename NtTraits>
*/
template< typename RatKernel, typename AlgKernel, typename NtTraits >
class Arr_Bezier_curve_traits_2 { class Arr_Bezier_curve_traits_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! /*! the `NtTraits::Rational` type (and also the `RatKernel::FT` type).
the `NtTraits::Rational` type */
(and also the `RatKernel::FT` type). typedef unspecified_type Rational;
*/
typedef unspecified_type Rational;
/*! /*! the `NtTraits::Algebraic` type (and also the `AlgKernel::FT` type).
the `NtTraits::Algebraic` type */
(and also the `AlgKernel::FT` type). typedef unspecified_type Algebraic;
*/
typedef unspecified_type Algebraic;
/// @} /// @}
/*! The `Curve_2` class nested within the B&eacute;zier traits class is used
* to represent a B&eacute;zier curve of arbitrary degree, which is defined by
* a sequence of rational control points. In addition to the methods listed
* below, the I/O operators \link PkgArrangementOnSurface2op_left_shift
* `operator<<` \endlink and \link PkgArrangementOnSurface2op_right_shift
* `operator>>` \endlink for standard output-streams are also supported. The
* copy constructor and assignment operator are supported as well.
*/
class Curve_2 {
public:
/*! /// \name Creation
/// @{
/*! default constructor.
*/
Curve_2();
The `Curve_2` class nested within the B&eacute;zier traits class is used /*! constructs a B&eacute;zier curve as defined by the given range of
to represent a B&eacute;zier curve of arbitrary degree, which is defined by a * control points. The value-type of `InputIterator` is
sequence of rational control points. In addition to the methods listed * `RatKernel::Point_2`.
below, the I/O operators \link PkgArrangementOnSurface2op_left_shift `operator<<` \endlink and \link PkgArrangementOnSurface2op_right_shift `operator>>` \endlink for *
standard output-streams are also supported. The copy constructor and * \pre The input range must contain at least two control points.
assignment operator are supported as well. */
template <typename InputIterator>
Curve_2(InputIterator pts_begin, InputIterator pts_end);
*/ /// @}
class Curve_2 {
public:
/// \name Creation /// \name Access Functions
/// @{ /// @{
/*! /*! returns the number of control points that define `B`.
default constructor. */
*/ std::size_t number_of_control_points() const;
Curve_2 ();
/*! /*! returns the \f$k\f$th control point. Note that the first control point
constructs a B&eacute;zier curve as defined by the given range of control * equals the curve source, while the last control point equals its
points. The value-type of `InputIterator` is `RatKernel::Point_2`. * target. The rest of the control points do not lie on the curve.
\pre The input range must contain at least two control points. *
* \pre \f$k\f$ is smaller than the number of control points.
*/
typename RatKernel::Point_2 control_point(std::size_t k) const;
*/ /*! returns the point \f$B(t)\f$ on the curve that corresponds to the given
template <class InputIterator> * rational parameter value.
Curve_2 (InputIterator pts_begin, InputIterator pts_end); */
typename RatKernel::Point_2 operator()(const Rational& t) const;
/// @} /*! returns the point \f$B(t)\f$ on the curve that corresponds to the given
* algebraic parameter value.
*/
typename AlgKernel::Point_2 operator()(const Algebraic& t) const;
/// \name Access Functions /// @}
/// @{
/*! }; /* end Arr_Bezier_curve_traits_2::Curve_2 */
returns the number of control points that define `B`.
*/
size_t number_of_control_points () const;
/*! /*! The `Point_2` class nested within the B&eacute;zier traits class is used
returns the \f$ k\f$th control point. Note that the first control point equals * to represent: (i) an endpoint of a B&eacute;zier curve, (ii) a vertical
the curve source, while the last control point equals its target. The rest * tangency point of a curve, used to subdivide it into \f$x\f$-monotone
of the control points do not lie on the curve. * subcurve, and (iii) an intersection point between two curves. While, points
\pre \f$ k\f$ is smaller than the number of control points. * of type (i) have rational coordinates and are given as part of the input,
*/ * points of the two latter types have algebraic coordinates. However, to
typename RatKernel::Point_2 control_point (size_t k) const; * speed up the arrangement construction, such point are not computed in an
* exact manner, and instead are given in an approximate representation. Note
* that the exact coordinates of a point may only be accessed if it is exactly
* computed.
/*! * In addition to the methods listed below, the copy constructor and assignment
returns the point \f$ B(t)\f$ on the curve that corresponds to the given * operator for `Point_2` objects are also supported.
rational parameter value. */
*/ class Point_2 {
typename RatKernel::Point_2 operator() (const Rational& t) const; public:
/*! /// \name Creation
returns the point \f$ B(t)\f$ on the curve that corresponds to the given /// @{
algebraic parameter value.
*/
typename AlgKernel::Point_2 operator() (const Algebraic& t) const;
/// @} /*!
default constructor.
*/
Point_2();
}; /* end Arr_Bezier_curve_traits_2::Curve_2 */ /*!
constructs the point \f$B(t_0)\f$ on the given curve. As \f$t_0\f$ is an
algebraic number, the point has algebraic coordinates.
*/
Point_2(const Curve_2& B, const Algebraic& t_0);
/*!
constructs the point \f$B(t_0)\f$ on the given curve. As \f$t_0\f$ is a
rational number, the point has rational coordinates.
*/
Point_2(const Curve_2& B, const Rational& t_0);
/*! /// @}
The `Point_2` class nested within the B&eacute;zier traits class is used /// \name Access Functions
to represent: (i) an endpoint of a B&eacute;zier curve, (ii) a vertical tangency /// @{
point of a curve, used to subdivide it into \f$ x\f$-monotone subcurve, and
(iii) an intersection point between two curves. While, points of type (i) have
rational coordinates and are given as part of the input, points of the two
latter types have algebraic coordinates. However, to speed up the arrangement
construction, such point are not computed in an exact manner, and instead
are given in an approximate representation. Note that the exact coordinates
of a point may only be accessed if it is exactly computed.
In addition to the methods listed below, the copy constructor and assignment /*! returns the approximated coordinates of `p`.
operator for `Point_2` objects are also supported. */
std::pair<double, double> approximate() const;
*/ /*! returns whether the coordinates of `p` are computed in an exact manner.
class Point_2 { */
public: bool is_exact() const;
/// \name Creation /*! returns the \f$x\f$-coordinate of `p`.
/// @{ *
* \pre `p` is exactly computed.
*/
Algebraic x() const;
/*! /*! returns the \f$y\f$-coordinate of `p`.
default constructor. *
*/ * \pre `p` is exactly computed.
Point_2 (); */
Algebraic y() const;
/*! /*! returns whether the coordinates of `p` are rational numbers.
constructs the point \f$ B(t_0)\f$ on the given curve. As \f$ t_0\f$ is an */
algebraic number, the point has algebraic coordinates. bool is_rational() const;
*/
Point_2 (const Curve_2& B, const Algebraic& t_0);
/*! /*! casts `p` to a point with rational coordinates.
constructs the point \f$ B(t_0)\f$ on the given curve. As \f$ t_0\f$ is a * \pre `p` has rational coordinates.
rational number, the point has rational coordinates. */
*/ operator typename RatKernel::Point_2() const;
Point_2 (const Curve_2& B, const Rational& t_0);
/// @} /// @}
/// \name Access Functions }; /* end Arr_Bezier_curve_traits_2::Point_2 */
/// @{
/*! /*! The `X_monotone_curve_2` class nested within the B&eacute;zier traits is
returns the approximated coordinates of `p`. * used to represent \f$x\f$-monotone subcurves of B&eacute;zier curves. The
*/ * subcurve is defined by a supporting B&eacute;zier curve \f$B(t)\f$ and a
std::pair<double, double> approximate () const; * range of definition in the parameter space \f$[t_1, t_2] \subseteq [0,1]\f$,
* where \f$B(t_1)\f$ is the subcurve source and \f$B(t_2)\f$ is its target.
* Note that as the point endpoints may only be approximated, the parameter
* range defining the subcurve may only be approximately known.
*
* It is not possible to construct \f$x\f$-monotone subcurves directly.
* Instead, use the `Make_x_monotone_2` functor supplied by the traits class to
* subdivide a `Curve_2` object into \f$x\f$-monotone subcurves.
*/
class X_monotone_curve_2 {
public:
/*! /// \name Access Functions
returns whether the coordinates of `p` are computed in an exact manner. /// @{
*/
bool is_exact () const;
/*! /*! returns the supporting B&eacute;zier curve of `b`.
returns the \f$ x\f$-coordinate of `p`. */
\pre `p` is exactly computed. Curve_2 supporting_curve() const;
*/
Algebraic x () const;
/*! /*! returns the source point of `b`.
returns the \f$ y\f$-coordinate of `p`. */
\pre `p` is exactly computed. Point_2 source() const;
*/
Algebraic y () const;
/*! /*! returns the target point of `b`.
returns whether the coordinates of `p` are rational numbers. */
*/ Point_2 target() const;
bool is_rational () const;
/*! /*! returns the left (\f$xy\f$-lexicographically smaller) endpoint of `b`.
casts `p` to a point with rational coordinates. */
\pre `p` has rational coordinates. Point_2 left() const;
*/
operator typename RatKernel::Point_2 () const;
/// @} /*! returns the right (\f$xy\f$-lexicographically smaller) endpoint of `b`.
*/
Point_2 right() const;
}; /* end Arr_Bezier_curve_traits_2::Point_2 */ /*! return the approximate parameter range defining the subcurve `b`.
*/
std::pair<double, double> parameter_range() const;
/*! /// @}
}; /* end Arr_Bezier_curve_traits_2::X_monotone_curve_2 */
The `X_monotone_curve_2` class nested within the B&eacute;zier traits is class Trim_2 {
used to represent \f$ x\f$-monotone subcurves of B&eacute;zier curves. The subcurve is public:
defined by a supporting B&eacute;zier curve \f$ B(t)\f$ and a range of definition in /// \name Creation
the parameter space \f$ [t_1, t_2] \subseteq [0, 1]\f$, where \f$ B(t_1)\f$ is the /// @{
subcurve source and \f$ B(t_2)\f$ is its target. Note that as the point endpoints
may only be approximated, the parameter range defining the subcurve may
only be approximately known.
It is not possible to construct \f$ x\f$-monotone subcurves directly. Instead, /*! Trims the given \f$x\f$-monotone curve to an from `src` to `tgt`.
use the `Make_x_monotone_2` functor supplied by the traits class to *
subdivide a `Curve_2` object into \f$ x\f$-monotone subcurves. * \ pre `src` and `tgt` lies on the curve
*/
X_monotone_curve_2(const X_monotone_curve_2& xcv,
const Point_2& src, const Point_2& tgt) const
*/ /// @}
class X_monotone_curve_2 {
public:
/// \name Access Functions } /* end Arr_Bezier_curve_traits_2::Trim_2 */
/// @{
/*!
returns the supporting B&eacute;zier curve of `b`.
*/
Curve_2 supporting_curve () const;
/*!
returns the source point of `b`.
*/
Point_2 source () const;
/*!
returns the target point of `b`.
*/
Point_2 target () const;
/*!
returns the left (\f$ xy\f$-lexicographically smaller) endpoint of `b`.
*/
Point_2 left () const;
/*!
returns the right (\f$ xy\f$-lexicographically smaller) endpoint of `b`.
*/
Point_2 right () const;
/*!
return the approximate parameter range defining the subcurve `b`.
*/
std::pair<double, double> parameter_range () const;
/// @}
}; /* end Arr_Bezier_curve_traits_2::X_monotone_curve_2 */
class Trim_2{
public:
/// \name Creation
/// @{
/*!
Trims the given x-monotone curve to an from src to tgt.
\ pre `src` and `tgt` lies on the curve
*/
X_monotone_curve_2(const X_monotone_curve_2& xcv,
const Point_2& src,
const Point_2& tgt)const
/// @}
}/* end Arr_Bezier_curve_traits_2::Trim_2 */
}; /* end Arr_Bezier_curve_traits_2 */ }; /* end Arr_Bezier_curve_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -18,122 +18,123 @@ namespace CGAL {
template <typename Arrangement> template <typename Arrangement>
class Arr_accessor { class Arr_accessor {
public: public:
/// \name Types
/// @{
/// \name Types /*! the type of the associated arrangement. */
/// @{ typedef unspecified_type Arrangement_2;
/*! the type of the associated arrangement. */ /*! the point type. */
typedef unspecified_type Arrangement_2; typedef typename Arrangement_2::Point_2 Point_2;
/*! the point type. */ /*! the \f$x\f$-monotone curve type. */
typedef typename Arrangement_2::Point_2 Point_2; typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2;
/*! the \f$ x\f$-monotone curve type. */ /*! */
typedef typename Arrangement_2::Vertex_handle Vertex_handle;
typedef typename Arrangement_2::X_monotone_curve_2 X_monotone_curve_2; /*! */
typedef typename Arrangement_2::Halfedge_handle Halfedge_handle;
/*! */ /*! */
typedef typename Arrangement_2::Vertex_handle Vertex_handle; typedef typename Arrangement_2::Face_handle Face_handle;
/*! */ /*! represents the boundary of a connected component (CCB). */
typedef typename Arrangement_2::Halfedge_handle Halfedge_handle; typedef typename Arrangement_2::Ccb_halfedge_circulator Ccb_halfedge_circulator;
/*! */ /// @}
typedef typename Arrangement_2::Face_handle Face_handle;
/*! represents the boundary of a connected component (CCB). */ /// \name Creation
typedef typename Arrangement_2::Ccb_halfedge_circulator Ccb_halfedge_circulator; /// @{
/// @} /*! constructs an accessor attached to the given arrangement `arr`. */
Arr_accessor(Arrangement_2& arr);
/// \name Creation /// @}
/// @{
/*! constructs an accessor attached to the given arrangement `arr`. */ /// \name Accessing the Notification Functions
Arr_accessor(Arrangement_2& arr);
/// @} /// @{
/// \name Accessing the Notification Functions /*! notifies the arrangement observer that a global change is going to take
* place (for the usage of the global functions that operate on arrangements).
*/
void notify_before_global_change();
/// @{ /*! notifies the arrangement observer that a global change has taken place
* (for the usage of the global functions that operate on arrangements).
*/
void notify_after_global_change();
/*! notifies the arrangement observer that a global change is going to take /// @}
* place (for the usage of the global functions that operate on arrangements).
*/
void notify_before_global_change();
/*! notifies the arrangement observer that a global change has taken place (for /// \name Arrangement Predicates
* the usage of the global functions that operate on arrangements). /// @{
*/
void notify_after_global_change();
/// @} /*! locates a place for the curve `c` around the vertex `v` and returns a
* halfedge whose target is `v`, where c should be inserted between this
* halfedge and the next halfedge around `v` in a clockwise order.
*/
Halfedge_handle
locate_around_vertex(Vertex_handle v, const X_monotone_curve_2& c) const;
/// \name Arrangement Predicates /*! counts the number of edges along the path from `e1` to `e2`. In case the
/// @{ * two halfedges do not belong to the same connected component, the function
* returns (-1).
*/
int halfedge_distance(Halfedge_const_handle e1,
Halfedge_const_handle e2) const;
/*! locates a place for the curve `c` around the vertex `v` and returns a /*! determines whether a new halfedge we are about to create, which is to be
* halfedge whose target is `v`, where c should be inserted between this * associated with the curve `c` and directed from `pred1->target()` to
* halfedge and the next halfedge around `v` in a clockwise order. * `pred2->target()`, lies on the inner CCB of the new face that will be
*/ * created, introducing this new edge.
Halfedge_handle *
locate_around_vertex(Vertex_handle v, const X_monotone_curve_2& c) const; * \pre `pred1->target()` and `pred2->target()` are associated with `c`'s
* endpoints.
*
* \pre `pred1` and `pred2` belong to the same connected component, such that
* a new face is created by connecting `pred1->target()` and
* `pred2->target()`.
*/
bool is_inside_new_face(Halfedge_handle pred1,
Halfedge_handle pred2,
const X_monotone_curve_2& c) const;
/*! counts the number of edges along the path from `e1` to `e2`. In case the /*! determines whether a given point lies within the region bounded by a
* two halfedges do not belong to the same connected component, the function * boundary of the connected component that `he` belongs to. Note that if the
* returns (-1). * function returns `true`, then `p` is contained within `he->face()` (but not
*/ * on its boundary), or inside one of the inner CCBs of this face, or it may
int halfedge_distance(Halfedge_const_handle e1, Halfedge_const_handle e2) const; * coincide with an isolated vertex in this face.
*/
bool point_is_in(const Point_2& p, Halfedge_const_handle he) const;
/*! determines whether a new halfedge we are about to create, which is to be /*! determines whether `he` lies on the outer boundary of its incident face.
* associated with the curve `c` and directed from `pred1->target()` to */
* `pred2->target()`, lies on the inner CCB of the new face that will be bool is_on_outer_boundary(Halfedge_const_handle he) const;
* created, introducing this new edge.
*
* \pre `pred1->target()` and `pred2->target()` are associated with `c`'s
* endpoints.
*
* \pre `pred1` and `pred2` belong to the same connected component, such that a
* new face is created by connecting `pred1->target()` and `pred2->target()`.
*/
bool is_inside_new_face(Halfedge_handle pred1,
Halfedge_handle pred2,
const X_monotone_curve_2& c) const;
/*! determines whether a given point lies within the region bounded by a /*! determines whether `he` lies on the inner boundary of its incident face
* boundary of the connected component that `he` belongs to. Note that if the * (that is, whether it lies on the boundary of one of the inner CCBs of this
* function returns `true`, then `p` is contained within `he->face()` (but not * face).
* on its boundary), or inside one of the inner CCBs of this face, or it may */
* coincide with an isolated vertex in this face. bool is_on_inner_boundary(Halfedge_const_handle he) const;
*/
bool point_is_in(const Point_2& p, Halfedge_const_handle he) const;
/*! determines whether `he` lies on the outer boundary of its incident face. */ /// @}
bool is_on_outer_boundary(Halfedge_const_handle he) const;
/*! determines whether `he` lies on the inner boundary of its incident face /// \name Arrangement Modifiers
* (that is, whether it lies on the boundary of one of the inner CCBs of this /// @{
* face).
*/
bool is_on_inner_boundary(Halfedge_const_handle he) const;
/// @} /*! creates a new vertex an associates it with the point `p`.
*
/// \name Arrangement Modifiers * \pre There is no existing vertex already associated with `p`.
/// @{ */
Vertex_handle create_vertex(const Point_2& p);
/*! creates a new vertex an associates it with the point `p`.
*
* \pre There is no existing vertex already associated with `p`.
*/
Vertex_handle create_vertex(const Point_2& p);
/*! inserts the curve `c` as a new inner CCBs (hole) of the face `f`, /*! inserts the curve `c` as a new inner CCBs (hole) of the face `f`,
* connecting the two isolated vertices `v1` and `v2`. `res` is the comparison * connecting the two isolated vertices `v1` and `v2`. `res` is the comparison
* result between these two end-vertices. The function returns a handle for one * result between these two end-vertices. The function returns a handle for one
* of the new halfedges corresponding to the inserted curve, directed from `v1` * one of the new halfedges corresponding to the inserted curve, directed from
* to `v2`. * `v1` to `v2`.
* *
* \pre `v1` and `v2` are associated with `c`'s endpoints, that they lie of * \pre `v1` and `v2` are associated with `c`'s endpoints, that they lie of
* `f`'s interior and that and that they have no incident edges. * `f`'s interior and that and that they have no incident edges.
@ -160,121 +161,122 @@ Halfedge_handle insert_from_vertex_ex(const X_monotone_curve_2& c,
Vertex_handle v, Vertex_handle v,
Comparison_result res); Comparison_result res);
/*! inserts the curve `c` into the arrangement, such that both `c`'s endpoints /*! inserts the curve `c` into the arrangement, such that both `c`'s endpoints
* correspond to existing arrangement vertices, given by `pred1->target()` and * correspond to existing arrangement vertices, given by `pred1->target()` and
* `pred2->target()`. `res` is the comparison result between these two * `pred2->target()`. `res` is the comparison result between these two
* end-vertices. The function creates a new halfedge pair that connects the two * end-vertices. The function creates a new halfedge pair that connects the
* vertices (with `pred1` and `pred2` indicate the exact place for these * two vertices (with `pred1` and `pred2` indicate the exact place for these
* halfedges around the two target vertices) and returns a handle for the * halfedges around the two target vertices) and returns a handle for the
* halfedge directed from `pred1->target()` to `pred2->target()`. The output * halfedge directed from `pred1->target()` to `pred2->target()`. The output
* flag `new_face` indicates whether a new face has been created following the * flag `new_face` indicates whether a new face has been created following the
* insertion of the new curve. * insertion of the new curve.
* *
* \pre `pred1->target()` and `pred2->target()` are associated with `c`'s * \pre `pred1->target()` and `pred2->target()` are associated with `c`'s
* endpoints and that if a new face is created, then `is_inside_new_face (pred1, * endpoints and that if a new face is created, then
* pred2, c)` is `true`. * `is_inside_new_face(pred1, pred2, c)` is `true`.
*/ */
Halfedge_handle insert_at_vertices_ex(const X_monotone_curve_2& c, Halfedge_handle insert_at_vertices_ex(const X_monotone_curve_2& c,
Halfedge_handle pred1, Halfedge_handle pred1,
Halfedge_handle pred2, Halfedge_handle pred2,
Comparison_result res, bool& new_face); Comparison_result res, bool& new_face);
/*! inserts `v` as an isolated vertex inside `f`. /*! inserts `v` as an isolated vertex inside `f`.
* *
* \pre `v->point()` is contained in the interior of the given face. * \pre `v->point()` is contained in the interior of the given face.
*/ */
void insert_isolated_vertex(Face_handle f, Vertex_handle v); void insert_isolated_vertex(Face_handle f, Vertex_handle v);
/*! moves the given hole (inner CCB) from the interior of the face `f1` to the /*! moves the given hole (inner CCB) from the interior of the face `f1` to the
* face `f2`. * face `f2`.
* *
* \pre `hole` is currently contained in `f1` and should be moved to `f2`. * \pre `hole` is currently contained in `f1` and should be moved to `f2`.
*/ */
void move_hole(Face_handle f1, Face_handle f2, Ccb_halfedge_circulator hole); void move_hole(Face_handle f1, Face_handle f2, Ccb_halfedge_circulator hole);
/*! moves the given isolated vertex from the interior of the face `f1` /*! moves the given isolated vertex from the interior of the face `f1`
* inside the face `f2`. * inside the face `f2`.
* *
* \pre `v` is indeed an isolated vertex currently contained in `f1` and should * \pre `v` is indeed an isolated vertex currently contained in `f1` and
* be moved to `f2`. * should be moved to `f2`.
*/ */
bool move_isolated_vertex(Face_handle f1, Face_handle f2, Vertex_handle v); bool move_isolated_vertex(Face_handle f1, Face_handle f2, Vertex_handle v);
/*! relocates all inner ccbs and isolated vertices to their proper position /*! relocates all inner ccbs and isolated vertices to their proper position
* immediately after a face has split due to the insertion of a new halfedge, * immediately after a face has split due to the insertion of a new halfedge,
* namely after `insert_at_vertices_ex()` was invoked and indicated that a new * namely after `insert_at_vertices_ex()` was invoked and indicated that a new
* face has been created. `he` is the halfedge returned by * face has been created. `he` is the halfedge returned by
* `insert_at_vertices_ex()`, such that `he->twin()->face` is the face that has * `insert_at_vertices_ex()`, such that `he->twin()->face` is the face that
* just been split and `he->face()` is the newly created face. * has just been split and `he->face()` is the newly created face.
*/ */
void relocate_in_new_face(Halfedge_handle he); void relocate_in_new_face(Halfedge_handle he);
/*! relocates all inner ccbs in a new face, as detailed above. */ /*! relocates all inner ccbs in a new face, as detailed above. */
void relocate_holes_in_new_face(Halfedge_handle he); void relocate_holes_in_new_face(Halfedge_handle he);
/*! relocates all isolated vertices in a new face, as detailed above. */ /*! relocates all isolated vertices in a new face, as detailed above. */
void relocate_isolated_vertices_in_new_face(Halfedge_handle he); void relocate_isolated_vertices_in_new_face(Halfedge_handle he);
/*! modifies the point associated with the vertex `v` (the point may be /*! modifies the point associated with the vertex `v` (the point may be
* geometrically different than the one currently associated with `v`). The * geometrically different than the one currently associated with `v`). The
* function returns a handle to the modified vertex (same as `v`). * function returns a handle to the modified vertex (same as `v`).
* *
* \pre No other arrangement vertex is already associated with `p`. * \pre No other arrangement vertex is already associated with `p`.
* *
* \pre The topology of the arrangement does not change after the vertex point * \pre The topology of the arrangement does not change after the vertex point
* is modified. * is modified.
*/ */
Vertex_handle modify_vertex_ex(Vertex_handle v, const Point_2& p); Vertex_handle modify_vertex_ex(Vertex_handle v, const Point_2& p);
/*! modifies the \f$ x\f$-monotone curve associated with the edge `e` (the curve /*! modifies the \f$x\f$-monotone curve associated with the edge `e` (the
* `c` may be geometrically different than the one currently associated with * curve `c` may be geometrically different than the one currently associated
* `e`). The function returns a handle to the modified edge (same as `e`). * with `e`). The function returns a handle to the modified edge (same as
* * `e`).
* \pre The interior of `c` is disjoint from all existing arrangement vertices *
* and edges. * \pre The interior of `c` is disjoint from all existing arrangement vertices
*/ * and edges.
Halfedge_handle modify_edge_ex(Halfedge_handle e, const X_monotone_curve_2& c); */
Halfedge_handle modify_edge_ex(Halfedge_handle e, const X_monotone_curve_2& c);
/*! splits a given edge into two at the split point `p`, and associate the /*! splits a given edge into two at the split point `p`, and associate the
* x-monotone curves `c1` and `c2` with the resulting edges, such that `c1` * \f$x\f$-monotone curves `c1` and `c2` with the resulting edges, such that
* connects `he->source()` with `p` and `c2` connects `p` with * `c1` connects `he->source()` with `p` and `c2` connects `p` with
* `he->target()`. The function return a handle to the split halfedge directed * `he->target()`. The function return a handle to the split halfedge directed
* from `he->source()` to the split point `p`. * from `he->source()` to the split point `p`.
* *
* \pre The endpoints of `c1` and `c2` correspond to `p` and to `he`'s * \pre The endpoints of `c1` and `c2` correspond to `p` and to `he`'s
* end-vertices, as indicated above. * end-vertices, as indicated above.
*/ */
Halfedge_handle split_edge_ex(Halfedge_handle he, const Point_2& p, Halfedge_handle split_edge_ex(Halfedge_handle he, const Point_2& p,
const X_monotone_curve_2& c1, const X_monotone_curve_2& c1,
const X_monotone_curve_2& c2); const X_monotone_curve_2& c2);
/*! splits a given edge into two at by the vertex `v`, and associate the /*! splits a given edge into two at by the vertex `v`, and associate the
* x-monotone curves `c1` and `c2` with the resulting edges, such that `c1` * \f$x\f$-monotone curves `c1` and `c2` with the resulting edges, such that
* connects `he->source()` with `v` and `c2` connects `v` with * `c1` connects `he->source()` with `v` and `c2` connects `v` with
* `he->target()`. The function return a handle to the split halfedge directed * `he->target()`. The function return a handle to the split halfedge directed
* from `he->source()` to `v`. * from `he->source()` to `v`.
* *
* \pre The endpoints of `c1` and `c2` correspond to `v` and to `he`'s * \pre The endpoints of `c1` and `c2` correspond to `v` and to `he`'s
* end-vertices, as indicated above. It is also assumed that `v` has no incident * end-vertices, as indicated above. It is also assumed that `v` has no
* edges. * incident edges.
*/ */
Halfedge_handle split_edge_ex(Halfedge_handle he, Vertex_handle v, Halfedge_handle split_edge_ex(Halfedge_handle he, Vertex_handle v,
const X_monotone_curve_2& c1, const X_monotone_curve_2& c1,
const X_monotone_curve_2& c2); const X_monotone_curve_2& c2);
/*! removes the edge `he` from the arrangement, such that if the edge removal /*! removes the edge `he` from the arrangement, such that if the edge removal
* causes the creation of a new hole (inner CCB), `he->target()` lies on the * causes the creation of a new hole (inner CCB), `he->target()` lies on the
* boundary of this hole. The flags `remove_source` and `remove_target` * boundary of this hole. The flags `remove_source` and `remove_target`
* indicate whether the end-vertices of `he` should be removed as well, in case * indicate whether the end-vertices of `he` should be removed as well, in
* they have no other incident edges. If the operation causes two faces to * case they have no other incident edges. If the operation causes two faces
* merge, the merged face is returned. Otherwise, the face to which the edge * to merge, the merged face is returned. Otherwise, the face to which the
* was incident is returned. * edge was incident is returned.
*/ */
Face_handle remove_edge_ex(Halfedge_handle he, Face_handle remove_edge_ex(Halfedge_handle he,
bool remove_source = true, bool remove_source = true,
bool remove_target = true); bool remove_target = true);
/// @}
/// @}
}; /* end Arr_accessor */ }; /* end Arr_accessor */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -3,22 +3,22 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The traits class `Arr_algebraic_segment_traits_2` is a model of the * The traits class `Arr_algebraic_segment_traits_2` is a model of the
* `ArrangementTraits_2` concept that handles planar algebraic curves of * `AosTraits_2` concept that handles planar algebraic curves of arbitrary
* arbitrary degree, and \f$ x\f$-monotone of such curves. A planar (real) * degree, and \f$x\f$-monotone of such curves. A planar (real) <I>algebraic
* <I>algebraic curve</I> is the vanishing set of a polynomial in two variables, * curve</I> is the vanishing set of a polynomial in two variables, that is,
* that is, the curve is defined by the defining equation \f[ * the curve is defined by the defining equation
* f(x):=\sum_{i+j\leq n} a_{ij} x^i y^j =0, \f] where \f$ n\f$ is the degree of * \f[f(x):=\sum_{i+j\leq n} a_{ij} x^i y^j =0, \f] where \f$n\f$ is the
* the curve. * degree of the curve.
* *
* The traits class allows the construction of algebraic curves, by specifying * The traits class allows the construction of algebraic curves, by specifying
* their implicit equation. \f$ x\f$-monotone and vertical segments of a curve * their implicit equation. \f$x\f$-monotone and vertical segments of a curve
* can also be defined; unbounded curves and segments are supported. The * can also be defined; unbounded curves and segments are supported. The
* template parameter `Coefficient` defines the innermost coefficient type of * template parameter `Coefficient` defines the innermost coefficient type of
* the polynomials. Currently, the types `leda::integer` and `CORE::BigInt` are * the polynomials. Currently, the types `leda::integer` and `CORE::BigInt` are
* supported as well as any instance of `CGAL::Sqrt_extension` that is * supported as well as any instance of `CGAL::Sqrt_extension` that is
* instantiated with one of the integral types above. * instantiated with one of the integral types above.
* *
* \cgalModels{ArrangementTraits_2} * \cgalModels{AosTraits_2}
*/ */
template <typename Coefficient> template <typename Coefficient>
@ -50,8 +50,7 @@ public:
*/ */
typedef unspecified_type Algebraic_real_1; typedef unspecified_type Algebraic_real_1;
/*! Typedef from `Algebraic_kernel_1::Bound` /// Typedef from `Algebraic_kernel_1::Bound`
*/
typedef unspecified_type Bound; typedef unspecified_type Bound;
/// @} /// @}
@ -77,7 +76,6 @@ public:
*/ */
class Construct_curve_2 { class Construct_curve_2 {
public: public:
/// \name Object Creation Functors /// \name Object Creation Functors
/// @{ /// @{
@ -102,40 +100,41 @@ public:
*/ */
class Construct_point_2 { class Construct_point_2 {
public: public:
/// \name Object Creation Functors /// \name Object Creation Functors
/// @{ /// @{
/*! returns a `Point_2` object that represents the `arcno`-th /*! returns a `Point_2` object that represents the `arcno`-th
* point in the fiber of `cv` at \f$ x\f$-coordinate `x`, * point in the fiber of `cv` at \f$x\f$-coordinate `x`,
* counted from the bottom, starting with zero. * counted from the bottom, starting with zero.
*
* \pre (`cv` must not have a vertical line at `x`, * \pre (`cv` must not have a vertical line at `x`,
* and \f$ 0\leq arcno < c\f$, where \f$ c\f$ is the number of points * and \f$0\leq arcno < c\f$, where \f$c\f$ is the number of points
* in the fiber of `cv` at `x`.) * in the fiber of `cv` at `x`.)
*/ */
Point_2 operator() (Algebraic_real_1 x, Curve_2 cv, int arcno); Point_2 operator()(Algebraic_real_1 x, Curve_2 cv, int arcno);
/*! returns a `Point_2` object that represents the /*! returns a `Point_2` object that represents the
* point on `xcv` at \f$ x\f$-coordinate `x` * point on `xcv` at \f$x\f$-coordinate `x`
* \pre (`x` is in the \f$ x\f$-range of `xcv`.) *
* \pre (`x` is in the \f$x\f$-range of `xcv`.)
*/ */
Point_2 operator() (Algebraic_real_1 x, X_monotone_curve_2 xcv); Point_2 operator()(Algebraic_real_1 x, X_monotone_curve_2 xcv);
/*! returns a `Point_2` object that represents (x,y) /*! returns a `Point_2` object that represents (x,y)
*/ */
Point_2 operator() (Algebraic_real_1 x, Algebraic_real_1 y); Point_2 operator()(Algebraic_real_1 x, Algebraic_real_1 y);
/*! returns a `Point_2` object that represents (x,y) /*! returns a `Point_2` object that represents (x,y)
*/ */
Point_2 operator() (Coefficient x, Coefficient y); Point_2 operator()(Coefficient x, Coefficient y);
/*! returns a `Point_2` object that represents (x,y) /*! returns a `Point_2` object that represents (x,y)
*/ */
Point_2 operator() (Bound x, Bound y); Point_2 operator()(Bound x, Bound y);
/*! returns a `Point_2` object that represents (x,y) /*! returns a `Point_2` object that represents (x,y)
*/ */
Point_2 operator() (int x, int y); Point_2 operator()(int x, int y);
/// @} /// @}
@ -145,7 +144,6 @@ public:
*/ */
class Construct_x_monotone_segment_2 { class Construct_x_monotone_segment_2 {
public: public:
/// \name Object Creation Functors /// \name Object Creation Functors
/// @{ /// @{
@ -162,54 +160,56 @@ public:
* *
* \pre `end_min` must have a unique \f$x\f$-monotone segment to its right, or * \pre `end_min` must have a unique \f$x\f$-monotone segment to its right, or
* `end_max` must have a unique \f$x\f$-monotone segment to its left. * `end_max` must have a unique \f$x\f$-monotone segment to its left.
* Furthermore, `end_min` and `end_max` must be connected by an * Furthermore, `end_min` and `end_max` must be connected by an
* \f$x\f$-monotone segment of `cv`) * \f$x\f$-monotone segment of `cv`)
*/ */
template <typename OutputIterator> template <typename OutputIterator>
OutputIterator operator() (Curve_2 cv, Point_2 end_min, Point_2 end_max, OutputIterator operator()(Curve_2 cv, Point_2 end_min, Point_2 end_max,
OutputIterator oi); OutputIterator oi);
/*! inserts a sequence of `X_monotone_curve_2` objects into an output container /*! inserts a sequence of `X_monotone_curve_2` objects into an output container
* given through an output iterator. These segments form an \f$x\f$-monotone * given through an output iterator. These segments form an \f$x\f$-monotone
* (or vertical) segment of the curve `cv`. * (or vertical) segment of the curve `cv`.
* *
* If `site_of_p==POINT_IN_INTERIOR`, the maximal segment is * If `site_of_p` == `POINT_IN_INTERIOR`, the maximal segment that contains
* returned that contains `p` in its interior. * `p` in its interior is returned .
* *
* returned that contains `p` as its left endpoint. * If `site_of_p` == `MIN_ENDPOINT`, the segment that contains
* `p` as its left endpoint returned .
* *
* returned that contains `p` as its left endpoint. * If `site_of_p` == `MAX_ENDPOINT`, the segment that contains
* `p` as its right endpoint returned .
* *
* \pre (If `site_of_p==POINT_IN_INTERIOR`, `p` * \pre If `site_of_p` == `POINT_IN_INTERIOR`, `p` must be an interior point
* must be an interior point of an \f$x\f$-monotone or a vertical * of an \f$x\f$-monotone or a vertical segment.
* segment. *
* must either have a unique \f$x\f$-monotone segment to the right, * \pre If `site_of_p` == `MIN_ENDPOINT`, `p` must either have a unique
* or a vertical segment from `p` upwards. * \f$x\f$-monotone segment to the right, or a vertical segment from `p` upwards.
* must either have a unique \f$x\f$-monotone segment to the left, *
* or a vertical segment from `p` downwards.) * \pre If `site_of_p` == `MAX_ENDPOINT`, `p` must either have a unique
* \f$x\f$-monotone segment to the left, or a vertical segment from `p` downwards.
*/ */
template <typename OutputIterator> template <typename OutputIterator>
OutputIterator operator() (Curve_2 cv, Point_2 p, Site_of_point site_of_p, OutputIterator operator()(Curve_2 cv, Point_2 p, Site_of_point site_of_p,
OutputIterator out); OutputIterator out);
/*! inserts a sequence of `X_monotone_curve_2` objects into an output container /*! inserts a sequence of `X_monotone_curve_2` objects into an output
* given through an output iterator. These segments form a straight-line * container given through an output iterator. These segments form a
* segment connecting the points `p` and `q`. If `p` and `q` share the same * straight-line segment connecting the points `p` and `q`. If `p` and `q`
* \f$x\f$-coordinate, the constructed vertical segment consists of only one * share the same \f$x\f$-coordinate, the constructed vertical segment
* `X_monotone_curve_2` object and can be computed efficiently. In the * consists of only one `X_monotone_curve_2` object and can be computed
* non-vertical case, the construction is only possible if `p` and `q` have both * efficiently. In the non-vertical case, the construction is only possible
* rational x- and y-coordinates. * if `p` and `q` have both rational \f$x\f$- and \f$y\f$-coordinates.
* *
* \pre (`p` must not be equal to `q`.) * \pre `p` must not be equal to `q`.
*/ */
template <typename OutputIterator> template <typename OutputIterator>
OutputIterator operator() (Point_2 p, Point_2 q, OutputIterator out); OutputIterator operator()(Point_2 p, Point_2 q, OutputIterator out);
/// @} /// @}
}; /* end Arr_algebraic_segment_traits_2::Construct_x_monotone_segment_2 */ }; /* end Arr_algebraic_segment_traits_2::Construct_x_monotone_segment_2 */
/*! A model of the the `ArrangementTraits_2::Curve_2` concept. /*! A model of the the `AosTraits_2::Curve_2` concept.
* Represents algebraic curves. Internally, the type stores * Represents algebraic curves. Internally, the type stores
* topological-geometric information about the particular curve. * topological-geometric information about the particular curve.
* In order to use internal caching, instances should only be created * In order to use internal caching, instances should only be created
@ -223,25 +223,25 @@ public:
/*! returns the defining polynomial of the curve. /*! returns the defining polynomial of the curve.
*/ */
Polynomial_2 polynomial () const; Polynomial_2 polynomial() const;
/// @} /// @}
}; /* end Arr_algebraic_segment_traits_2::Curve_2 */ }; /* end Arr_algebraic_segment_traits_2::Curve_2 */
/*! A model of the `ArrangementBasicTraits_2::Point_2` concept. /*! A model of the `AosBasicTraits_2::Point_2` concept.
* Represents points in \f$ \mathbb{R}^2\f$. Intersection points of algebraic * Represents points in \f$\mathbb{R}^2\f$. Intersection points of algebraic
* curves are in general non-rational, so we need a data structure that is * curves are in general non-rational, so we need a data structure that is
* capable of representing arbitrary points with algebraic coordinates. * capable of representing arbitrary points with algebraic coordinates.
* *
* The traits class represents algebraic coordinates by the type * The traits class represents algebraic coordinates by the type
* `Algebraic_real_1`, which is a model of the `AlgebraicReal_1` concept. * `Algebraic_real_1`, which is a model of the `AlgebraicReal_1` concept. A
* A point \f$ p\f$ is stored by a triple \f$ (x,cv,arcno)\f$, * point \f$p\f$ is stored by a triple \f$(x,cv,arcno)\f$, where \f$x\f$ is
* where \f$ x\f$ is the \f$ x\f$-coordinate of a point, \f$ cv\f$ is an instance * the \f$x\f$-coordinate of a point, \f$cv\f$ is an instance of `Curve_2`
* of `Curve_2` that contains the point, (and has no vertical line at \f$ x\f$), * that contains the point, (and has no vertical line at \f$x\f$), and
* and \f$ arcno\f$ is an `int`, denoting that \f$ p\f$ is met as the * \f$arcno\f$ is an `int`, denoting that \f$p\f$ is met as the \f$arcno\f$-th
* \f$arcno\f$-th point when shooting a vertical ray at \f$ x\f$, starting from * point when shooting a vertical ray at \f$x\f$, starting from \f$-\infty\f$
* \f$-\infty\f$ (where counting starts with \f$ 0\f$). * (where counting starts with \f$0\f$).
* *
* In addition to the methods listed below, the copy constructor and assignment * In addition to the methods listed below, the copy constructor and assignment
* operator for `Point_2` objects are also supported. * operator for `Point_2` objects are also supported.
@ -251,53 +251,52 @@ public:
class Point_2 { class Point_2 {
public: public:
/// \name Modifiers /// \name Modifiers
/// @{ /// @{
/*! returns the \f$ x\f$-coordinate of `p`. /*! returns the \f$x\f$-coordinate of `p`.
*/ */
Algebraic_real_1 x () const; Algebraic_real_1 x() const;
/*! returns the \f$ y\f$-coordinates of `p`. /*! returns the \f$y\f$-coordinates of `p`.
* *
* <B>Attention:</B> As described above, points are not stored * <B>Attention:</B> As described above, points are not stored by their
* by their \f$ y\f$-coordinate in `Algebraic_real_1` representation. In fact, * \f$y\f$-coordinate in `Algebraic_real_1` representation. In fact,
* this representation must be computed on demand, and might become quite * this representation must be computed on demand, and might become quite
* costly for points defined by high-degree polynomials. Therefore, it is * costly for points defined by high-degree polynomials. Therefore, it is
* recommended to avoid to call this function as much as possible. * recommended to avoid to call this function as much as possible.
*/ */
Algebraic_real_1 y () const; Algebraic_real_1 y() const;
/*! returns a `Curve_2` instance that `p`is part of. /*! returns a `Curve_2` instance that `p`is part of.
*/ */
Curve_2 curve () const; Curve_2 curve() const;
/*! returns the arc number of `p`. /*! returns the arc number of `p`.
*/ */
int arcno () const; int arcno() const;
/*! returns double-approximations of the \f$ x\f$- and \f$ y\f$-coordinates. /*! returns double-approximations of the \f$x\f$- and \f$y\f$-coordinates.
*/ */
std::pair<double,double> to_double () const; std::pair<double,double> to_double() const;
/// @} /// @}
}; /* end Arr_algebraic_segment_traits_2::Point_2 */ }; /* end Arr_algebraic_segment_traits_2::Point_2 */
/*! A model of the `ArrangementBasicTraits_2::X_monotone_curve_2` concept. /*! A model of the `AosBasicTraits_2::X_monotone_curve_2` concept.
* Represents terminal segments of an algebraic curves, that means vertical * Represents terminal segments of an algebraic curves, that means vertical
* segments or \f$ x\f$-monotone segments with no critical \f$ x\f$-coordinate * segments or \f$x\f$-monotone segments with no critical \f$x\f$-coordinate
* in the interior of their \f$ x\f$-range. Terminal segments might either be * in the interior of their \f$x\f$-range. Terminal segments might either be
* bounded or unbounded. By definition, each interior point of a non-vertical * bounded or unbounded. By definition, each interior point of a non-vertical
* segment has the same arc number (see the documentation of type `Point_2` * segment has the same arc number (see the documentation of type `Point_2`
* above, which is called the <I>arc number</I> of the segment (note the arc * above, which is called the <I>arc number</I> of the segment (note the arc
* number at the endpoints might differ). Such segments are represented * number at the endpoints might differ). Such segments are represented
* internally by a 4-tuple \f$ (p,q,cv,arcno)\f$, where \f$ p\f$ and \f$ q\f$ * internally by a 4-tuple \f$(p,q,cv,arcno)\f$, where \f$p\f$ and \f$q\f$
* are the endpoints, \f$ cv\f$ is the <I>supporting curve</I> that the segment * are the endpoints, \f$cv\f$ is the <I>supporting curve</I> that the
* belongs to, and arcno is the arc number of the segment. * segment belongs to, and arcno is the arc number of the segment.
* *
* Arbitrary (weakly) \f$ x\f$-monotone segments are presented by a range * Arbitrary (weakly) \f$x\f$-monotone segments are presented by a range
* of `X_monotone_curve_2` instances, whose union equals the segment. * of `X_monotone_curve_2` instances, whose union equals the segment.
* The functor `Construct_x_monotone_segment_2` allows their construction. * The functor `Construct_x_monotone_segment_2` allows their construction.
* To construct all (maximal) terminal segments of a curve, * To construct all (maximal) terminal segments of a curve,
@ -311,34 +310,34 @@ public:
/*! returns the supporting algebraic curve of `s`. /*! returns the supporting algebraic curve of `s`.
*/ */
Curve_2 curve () const; Curve_2 curve() const;
/*! returns whether `s` is a vertical segment. /*! returns whether `s` is a vertical segment.
*/ */
bool is_vertical () const; bool is_vertical() const;
/*! returns whether `s` has a finite endpoint on the left /*! returns whether `s` has a finite endpoint on the left
*/ */
bool is_finite (CGAL::Arr_curve_end ce) const; bool is_finite(CGAL::Arr_curve_end ce) const;
/*! \pre (The corresponding curve end is finite) /*! \pre (The corresponding curve end is finite)
*/ */
Point_2 curve_end (CGAL::Arr_curve_end ce) const; Point_2 curve_end(CGAL::Arr_curve_end ce) const;
/*! returns the arc number of the segment. /*! returns the arc number of the segment.
* \pre (The segment is non-vertical) * \pre (The segment is non-vertical)
*/ */
int arcno () const; int arcno() const;
/*! returns the \f$ x\f$-coordinate of a vertical segment. /*! returns the \f$x\f$-coordinate of a vertical segment.
*
* \pre (The segment is vertical) * \pre (The segment is vertical)
*/ */
Algebraic_real_1 x () const; Algebraic_real_1 x() const;
/// @} /// @}
}; /* end Arr_algebraic_segment_traits_2::X_monotone_curve_2 */ }; /* end Arr_algebraic_segment_traits_2::X_monotone_curve_2 */
}; /* end Arr_algebraic_segment_traits_2 */ }; /* end Arr_algebraic_segment_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -30,9 +30,8 @@ namespace CGAL {
*/ */
template <typename Traits, typename Dcel, template <typename Traits, typename Dcel,
typename InputIterator, typename OutputIterator> typename InputIterator, typename OutputIterator>
OutputIterator locate (const Arrangement_2<Traits, Dcel>& arr, OutputIterator locate(const Arrangement_2<Traits, Dcel>& arr,
InputIterator begin, InputIterator begin, InputIterator end,
InputIterator end, OutputIterator oi);
OutputIterator oi);
} /* namespace CGAL */ } /* namespace CGAL */

View File

@ -10,18 +10,18 @@ namespace CGAL {
* The `Arr_bounded_planar_topology_traits_2` template has two parameters: * The `Arr_bounded_planar_topology_traits_2` template has two parameters:
* <UL> * <UL>
* <LI>The `GeometryTraits_2` template-parameter should be substituted by * <LI>The `GeometryTraits_2` template-parameter should be substituted by
* a model of the `ArrangementBasicTraits_2` concept. The traits * a model of the `AosBasicTraits_2` concept. The traits
* class defines the types of \f$x\f$-monotone curves and two-dimensional * class defines the types of \f$x\f$-monotone curves and two-dimensional
* points, namely `ArrangementBasicTraits_2::X_monotone_curve_2` and * points, namely `AosBasicTraits_2::X_monotone_curve_2` and
* `ArrangementBasicTraits_2::Point_2`, * `AosBasicTraits_2::Point_2`,
* respectively, and supports basic geometric predicates on them. * respectively, and supports basic geometric predicates on them.
* <LI>The `Dcel` template-parameter should be substituted by * <LI>The `Dcel` template-parameter should be substituted by
* a class that is a model of the `ArrangementDcel` concept. The * a class that is a model of the `AosDcel` concept. The
* value of this parameter is by default * value of this parameter is by default
* `Arr_default_dcel<Traits>`. * `Arr_default_dcel<Traits>`.
* </UL> * </UL>
* *
* \cgalModels{ArrangementBasicTopologyTraits} * \cgalModels{AosBasicTopologyTraits}
* *
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>` * \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>`
@ -62,10 +62,10 @@ public:
/// \name Accessors /// \name Accessors
/// @{ /// @{
/*! obtains the DCEL (const version). */ /*! obtains the \dcel (const version). */
const Dcel& dcel() const; const Dcel& dcel() const;
/*! obtains the DCEL (non-const version). */ /*! obtains the \dcel (non-const version). */
Dcel& dcel(); Dcel& dcel();
/*! obtains the unbounded face (const version). */ /*! obtains the unbounded face (const version). */

View File

@ -3,7 +3,7 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The class `Arr_circle_segment_traits_2` is a model of the * The class `Arr_circle_segment_traits_2` is a model of the
* `ArrangementTraits_2` concept and can be used to construct and maintain * `AosTraits_2` concept and can be used to construct and maintain
* arrangements of circular arcs and line segments. * arrangements of circular arcs and line segments.
* *
* The traits class must be instantiated with a geometric kernel, such that the * The traits class must be instantiated with a geometric kernel, such that the
@ -11,34 +11,33 @@ namespace CGAL {
* the supporting lines of the line segments are of type `Kernel::Line_2`. * the supporting lines of the line segments are of type `Kernel::Line_2`.
* Thus, the coordinates of the center of supporting circles, and its squared * Thus, the coordinates of the center of supporting circles, and its squared
* radius are of type `Kernel::FT`, which should be an exact rational * radius are of type `Kernel::FT`, which should be an exact rational
* number-type; similarly, the coefficients of each supporting line \f$ ax + by * number-type; similarly, the coefficients of each supporting line
* + c = 0\f$ are also of type `Kernel::FT`. Note however that the intersection * \f$ax + by + c = 0\f$ are also of type `Kernel::FT`. Note however that the
* point between two such arcs do not have rational coordinates in general. For * intersection point between two such arcs do not have rational coordinates in
* this reason, we do not require the endpoints of the input arcs and segments * general. For this reason, we do not require the endpoints of the input arcs
* to have rational coordinates. * and segments to have rational coordinates.
* *
* The nested `Point_2` type defined by the traits class is therefore * The nested `Point_2` type defined by the traits class is therefore
* <I>different</I> than the `Kernel::Point_2` type. Its coordinates are of type * <I>different</I> than the `Kernel::Point_2` type. Its coordinates are of type
* `CoordNT`, which an instantiation of `Sqrt_extension<NT,ROOT>` where `NT = * `CoordNT`, which an instantiation of `Sqrt_extension<NT,ROOT>` where
* ROOT = Kernel::FT`. Moreover, the third and fourth (hidden) template * `NT` = `ROOT` = `Kernel::FT`. Moreover, the third and fourth (hidden)
* parameters of `Sqrt_extension<NT,ROOT>` are set to `CGAL::Tag_true`, which * template parameters of `Sqrt_extension<NT,ROOT>` are set to `CGAL::Tag_true`,
* enables efficient comparison among different extensions. * which enables efficient comparison among different extensions.
* *
* For more details see the documentation of `Sqrt_extension<NT,ROOT>`. * For more details see the documentation of `Sqrt_extension<NT,ROOT>`.
* *
* While `Arr_circle_segment_traits_2` models the concept * While `Arr_circle_segment_traits_2` models the concept
* `ArrangementDirectionalXMonotoneTraits_2`, the implementation of the * `AosDirectionalXMonotoneTraits_2`, the implementation of the
* `Are_mergeable_2` operation does not enforce the input curves to have the * `Are_mergeable_2` operation does not enforce the input curves to have the
* same direction as a precondition. Moreover, `Arr_circle_segment_traits_2` * same direction as a precondition. Moreover, `Arr_circle_segment_traits_2`
* supports the merging of curves of opposite directions. * supports the merging of curves of opposite directions.
* *
* \cgalModels{ArrangementTraits_2,ArrangementDirectionalXMonotoneTraits_2} * \cgalModels{AosTraits_2,AosApproximateTraits_2,AosDirectionalXMonotoneTraits_2}
* *
*/ */
template <typename Kernel> template <typename Kernel>
class Arr_circle_segment_traits_2 { class Arr_circle_segment_traits_2 {
public: public:
/*! The `Curve_2` class nested within the traits class can represent /*! The `Curve_2` class nested within the traits class can represent
* arbitrary circular arcs, full circles and line segments and support their * arbitrary circular arcs, full circles and line segments and support their
* construction in various ways. The copy and default constructor as well as * construction in various ways. The copy and default constructor as well as
@ -88,7 +87,7 @@ public:
* center point with rational coordinates and whose <I>squared</I> radius is * center point with rational coordinates and whose <I>squared</I> radius is
* rational, with the given endpoints. The orientation of the arc is the * rational, with the given endpoints. The orientation of the arc is the
* same as the orientation of `circ`. * same as the orientation of `circ`.
*
* \pre Both endpoints must lie on the given supporting circle. * \pre Both endpoints must lie on the given supporting circle.
*/ */
Curve_2(const typename Kernel::Circle_2& circ, Curve_2(const typename Kernel::Circle_2& circ,
@ -111,9 +110,9 @@ public:
* *
* \pre The three points must not be collinear. * \pre The three points must not be collinear.
*/ */
Curve_2 (const typename Kernel::Point_2& source, Curve_2(const typename Kernel::Point_2& source,
const typename Kernel::Point_2& mid, const typename Kernel::Point_2& mid,
const typename Kernel::Point_2& target); const typename Kernel::Point_2& target);
/// @} /// @}
@ -162,7 +161,6 @@ public:
typename Kernel::Circle_2 supporting_circle() const; typename Kernel::Circle_2 supporting_circle() const;
/// @} /// @}
}; /* end Arr_circle_segment_traits_2::Curve_2 */ }; /* end Arr_circle_segment_traits_2::Curve_2 */
@ -172,16 +170,13 @@ public:
*/ */
class Point_2 { class Point_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! the `Kernel::FT` type. /// the `Kernel::FT` type.
*/
typedef unspecified_type Rational; typedef unspecified_type Rational;
/*! the algebraic number-type. /// the algebraic number-type.
*/
typedef unspecified_type CoordNT; typedef unspecified_type CoordNT;
/// @} /// @}
@ -193,11 +188,11 @@ public:
*/ */
Point_2(); Point_2();
/*! creates the point \f$ (x,y)\f$. /*! creates the point \f$(x,y)\f$.
*/ */
Point_2(const Rational& x, const Rational& y); Point_2(const Rational& x, const Rational& y);
/*! creates the point \f$ (x,y)\f$. /*! creates the point \f$(x,y)\f$.
*/ */
Point_2(const CoordNT& x, const CoordNT& y); Point_2(const CoordNT& x, const CoordNT& y);
@ -206,36 +201,34 @@ public:
/// \name Access Functions /// \name Access Functions
/// @{ /// @{
/*! returns the \f$ x\f$-coordinate. /*! returns the \f$x\f$-coordinate.
*/ */
CoordNT x() const; CoordNT x() const;
/*! returns the \f$ y\f$-coordinate. /*! returns the \f$y\f$-coordinate.
*/ */
CoordNT y() const; CoordNT y() const;
/// @} /// @}
}; /* end Arr_circle_segment_traits_2::Point_2 */ }; /* end Arr_circle_segment_traits_2::Point_2 */
/*! The `X_monotone_curve_2` class nested within the traits class can /*! The `X_monotone_curve_2` class nested within the traits class can
* represent \f$ x\f$-monotone and line segments (which are always weakly * represent \f$x\f$-monotone and line segments (which are always weakly
* \f$x\f$-monotone). The copy and default constructor as well as the * \f$x\f$-monotone). The copy and default constructor as well as the
* assignment operator are provided. In addition, an `operator<<` for the * assignment operator are provided. In addition, an `operator<<` for the
* curves is defined for standard output streams. * curves is defined for standard output streams.
*/ */
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
/// \name Creation /// \name Creation
/// @{ /// @{
/*! constructs an curve corresponding to the line segment directed /*! constructs an curve corresponding to the line segment directed
* from `source` to `target`, both having rational coordinates. * from `source` to `target`, both having rational coordinates.
*/ */
X_monotone_curve_2 (const typename Kernel::Point_2& source, X_monotone_curve_2(const typename Kernel::Point_2& source,
const typename Kernel::Point_2& target); const typename Kernel::Point_2& target);
/*! constructs an curve corresponding to the line segment supported by /*! constructs an curve corresponding to the line segment supported by
* the given line, directed from `source` to `target`. Note that the two * the given line, directed from `source` to `target`. Note that the two
@ -254,7 +247,7 @@ public:
* *
* \pre Both endpoints must lie on the given supporting circle. * \pre Both endpoints must lie on the given supporting circle.
* *
* \pre The circular arc is \f$ x\f$-monotone. * \pre The circular arc is \f$x\f$-monotone.
*/ */
X_monotone_curve_2(const typename Kernel::Circle_2& circ, X_monotone_curve_2(const typename Kernel::Circle_2& circ,
const Point_2& source, const Point_2& target, const Point_2& source, const Point_2& target,
@ -275,7 +268,7 @@ public:
/*! returns true if `xcv` is directed right, false otherwise. /*! returns true if `xcv` is directed right, false otherwise.
*/ */
bool is_directed_right () const; bool is_directed_right() const;
/*! returns the left (lexicographically smaller) endpoint of `xcv`. /*! returns the left (lexicographically smaller) endpoint of `xcv`.
*/ */
@ -292,11 +285,11 @@ public:
/*! determines whether `xcv` is a line segment. /*! determines whether `xcv` is a line segment.
*/ */
bool is_linear () const; bool is_linear() const;
/*! determines whether `xcv` is a circular arc. /*! determines whether `xcv` is a circular arc.
*/ */
bool is_circular () const; bool is_circular() const;
/*! returns the supporting line of `xcv`. /*! returns the supporting line of `xcv`.
* *
@ -315,7 +308,6 @@ public:
Bbox_2 bbox() const; Bbox_2 bbox() const;
/// @} /// @}
}; /* end Arr_circle_segment_traits_2::X_monotone_curve_2 */ }; /* end Arr_circle_segment_traits_2::X_monotone_curve_2 */
class Trim_2 { class Trim_2 {
@ -323,16 +315,15 @@ public:
/// \name Creation /// \name Creation
/// @{ /// @{
/*! trims the given x-monotone curve to an from src to tgt. /*! trims the given \f$x\f$-monotone curve to an from `src` to `tgt`.
* \ pre `src` and `tgt` lies on the curve * \ pre `src` and `tgt` lies on the curve
*/ */
X_monotone_curve_2(const X_monotone_curve_2& xcv, X_monotone_curve_2(const X_monotone_curve_2& xcv,
const Point_2& src, const Point_2& src,
const Point_2& tgt) const const Point_2& tgt) const
/// @} /// @}
} /* end Arr_circle_segment_traits_2::Trim_2 */ } /* end Arr_circle_segment_traits_2::Trim_2 */
}; /* end Arr_circle_segment_traits_2 */ }; /* end Arr_circle_segment_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,19 +1,14 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* This class is a traits class for \cgal arrangements, built on top of a model
* of concept `CircularKernel`.
* It provides curves of type `CGAL::Circular_arc_2<CircularKernel>`.
*
* \cgalModels{AosTraits_2}
*/
template <typename CircularKernel>
class Arr_circular_arc_traits_2 {};
This class is a traits class for \cgal arrangements, built on top of a model of
concept `CircularKernel`.
It provides curves of type `CGAL::Circular_arc_2<CircularKernel>`.
\cgalModels{ArrangementTraits_2}
*/
template< typename CircularKernel >
class Arr_circular_arc_traits_2 {
public:
}; /* end Arr_circular_arc_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,23 +1,17 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* This class is a traits class for \cgal arrangements, built on top of a model
* of concept `CircularKernel`. It provides curves that can be of both types
* `CGAL::Line_arc_2<CircularKernel>` or `CGAL::Circular_arc_2<CircularKernel>`.
*
* It uses the
* <A HREF="https://www.boost.org/doc/html/variant.html">std::variant</A>.
*
* \cgalModels{AosTraits_2}
*/
template <typename CircularKernel>
class Arr_circular_line_arc_traits_2 {};
This class is a traits class for \cgal arrangements, built on top of a
model of concept `CircularKernel`. It provides curves that can be
of both types
`CGAL::Line_arc_2<CircularKernel>` or
`CGAL::Circular_arc_2<CircularKernel>`.
It uses the <A HREF="https://www.boost.org/doc/html/variant.html">std::variant</A>.
\cgalModels{ArrangementTraits_2}
*/
template< typename CircularKernel >
class Arr_circular_line_arc_traits_2 {
public:
}; /* end Arr_circular_line_arc_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -2,7 +2,7 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The class `Arr_conic_traits_2` is a model of the `ArrangementTraits_2` * The class `Arr_conic_traits_2` is a model of the `AosTraits_2`
* concept and can be used to construct and maintain arrangements of bounded * concept and can be used to construct and maintain arrangements of bounded
* segments of algebraic curves of degree \f$2\f$ at most, also known as * segments of algebraic curves of degree \f$2\f$ at most, also known as
* <I>conic curves</I>. * <I>conic curves</I>.
@ -13,13 +13,13 @@ namespace CGAL {
* *
* <UL> * <UL>
* <LI>If \f$4 r s - t^2 > 0\f$, \f$ C\f$ is an ellipse. A special case occurs * <LI>If \f$4 r s - t^2 > 0\f$, \f$C\f$ is an ellipse. A special case occurs
* when \f$r = s\f$ and \f$ t = 0\f$, when \f$ C\f$ becomes a circle. * when \f$r = s\f$ and \f$t = 0\f$, when \f$C\f$ becomes a circle.
* *
* <LI>If \f$4 r s - t^2 < 0\f$, \f$ C\f$ is a hyperbola. * <LI>If \f$4 r s - t^2 < 0\f$, \f$C\f$ is a hyperbola.
* *
* <LI>If \f$4 r s - t^2 = 0\f$, \f$ C\f$ is a parabola. A degenerate case * <LI>If \f$4 r s - t^2 = 0\f$, \f$C\f$ is a parabola. A degenerate case
* occurs when \f$r = s = t = 0\f$, when \f$ C\f$ is a line. * occurs when \f$r = s = t = 0\f$, when \f$C\f$ is a line.
* *
* </UL> * </UL>
* *
@ -27,15 +27,15 @@ namespace CGAL {
* *
* <UL> * <UL>
* *
* <LI>A full ellipse (or a circle) \f$ C\f$. * <LI>A full ellipse (or a circle) \f$C\f$.
* *
* <LI>The tuple \f$ \langle C, p_s, p_t, o \rangle\f$, where \f$ C\f$ is the * <LI>The tuple \f$\langle C, p_s, p_t, o \rangle\f$, where \f$C\f$ is the
* supporting conic curve, with the arc endpoints being \f$ p_s\f$ and \f$ * supporting conic curve, with the arc endpoints being \f$p_s\f$ and
* p_t\f$ (the source and target points, respectively). The orientation \f$ o\f$ * \f$p_t\f$ (the source and target points, respectively). The orientation
* indicates whether we proceed from \f$ p_s\f$ to \f$ p_t\f$ in a clockwise or * \f$o\f$ indicates whether we proceed from \f$p_s\f$ to \f$p_t\f$ in a
* in a counterclockwise direction. Note that \f$ C\f$ may also correspond to a * clockwise or in a counterclockwise direction. Note that \f$C\f$ may also
* line or to pair of lines---in this case \f$ o\f$ may specify a `COLLINEAR` * correspond to a line or to pair of lines---in this case \f$o\f$ may specify a
* orientation. * `COLLINEAR` orientation.
* *
* </UL> * </UL>
* *
@ -54,7 +54,7 @@ namespace CGAL {
* must be rational numbers. This guarantees that the coordinates of all * must be rational numbers. This guarantees that the coordinates of all
* arrangement vertices (in particular, those representing intersection points) * arrangement vertices (in particular, those representing intersection points)
* are algebraic numbers of degree \f$4\f$ (a real number \f$\alpha\f$ is an * are algebraic numbers of degree \f$4\f$ (a real number \f$\alpha\f$ is an
* algebraic number of degree \f$d\f$ if there exist a polynomial \f$ p\f$ with * algebraic number of degree \f$d\f$ if there exist a polynomial \f$p\f$ with
* <I>integer</I> coefficient of degree \f$d\f$ such that \f$p(\alpha) = 0\f$). * <I>integer</I> coefficient of degree \f$d\f$ such that \f$p(\alpha) = 0\f$).
* We therefore require separate representations of the curve * We therefore require separate representations of the curve
* coefficients and the point coordinates. The `NtTraits` should be substituted * coefficients and the point coordinates. The `NtTraits` should be substituted
@ -75,34 +75,31 @@ namespace CGAL {
* and defines a curve and \f$x\f$-monotone curve types, as detailed below. * and defines a curve and \f$x\f$-monotone curve types, as detailed below.
* *
* While the `Arr_conic_traits_2` models the concept * While the `Arr_conic_traits_2` models the concept
* `ArrangementDirectionalXMonotoneTraits_2`, the implementation of * `AosDirectionalXMonotoneTraits_2`, the implementation of
* the `Are_mergeable_2` operation does not enforce the input curves * the `Are_mergeable_2` operation does not enforce the input curves
* to have the same direction as a precondition. Moreover, `Arr_conic_traits_2` * to have the same direction as a precondition. Moreover, `Arr_conic_traits_2`
* supports the merging of curves of opposite directions. * supports the merging of curves of opposite directions.
* *
* \cgalModels{ArrangementTraits_2,ArrangementLandmarkTraits_2,ArrangementDirectionalXMonotoneTraits_2} * \cgalModels{AosTraits_2,AosLandmarkTraits_2,AosApproximateTraits_2,AosDirectionalXMonotoneTraits_2}
* *
* \cgalHeading{Types} * \cgalHeading{Types}
*/ */
template <typename RatKernel, typename AlgKernel, typename NtTraits> template <typename RatKernel, typename AlgKernel, typename NtTraits>
class Arr_conic_traits_2 { class Arr_conic_traits_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! the `NtTraits::Rational` type (and also the `RatKernel::FT` type). /// the `NtTraits::Rational` type (and also the `RatKernel::FT` type).
*/
typedef unspecified_type Rational; typedef unspecified_type Rational;
/*! the `NtTraits::Algebraic` type (and also the `AlgKernel::FT` type). /// the `NtTraits::Algebraic` type (and also the `AlgKernel::FT` type).
*/
typedef unspecified_type Algebraic; typedef unspecified_type Algebraic;
/// @} /// @}
/*! The `Curve_2` class nested within the conic-arc traits can represent /*! The `Curve_2` class nested within the conic-arc traits can represent
* arbitrary conic arcs and support their construction in various ways. The * arbitrary conic arcs and support their construction in various ways. The
* copy and default constructor as well as the assignment operator are * copy and default constructor as well as the assignment operator are
* provided for conic arcs. In addition, an `operator<<` for the curves is * provided for conic arcs. In addition, an `operator<<` for the curves is
* defined for standard output streams. * defined for standard output streams.
@ -211,7 +208,6 @@ public:
void set_target(const Point_2 & pt); void set_target(const Point_2 & pt);
/// @} /// @}
}; /* end Arr_conic_traits_2::Curve_2 */ }; /* end Arr_conic_traits_2::Curve_2 */
/*! \class X_monotone_curve_2 /*! \class X_monotone_curve_2
@ -227,7 +223,6 @@ public:
*/ */
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
/// \name Creation /// \name Creation
/// @{ /// @{
@ -249,7 +244,6 @@ public:
const Point_2& right() const; const Point_2& right() const;
/// @} /// @}
}; /* end Arr_conic_traits_2::X_monotone_curve_2 */ }; /* end Arr_conic_traits_2::X_monotone_curve_2 */
/*! The `Point_2` class nested within the conic-arc traits is /*! The `Point_2` class nested within the conic-arc traits is
@ -366,7 +360,8 @@ public:
* respectively) is available, and their exact locations are given * respectively) is available, and their exact locations are given
* implicitly, specified by the intersections of the supporting conic curve * implicitly, specified by the intersections of the supporting conic curve
* with \f$r_1 x^2 + s_1 y^2 + t_1 x y + u_1 x + v_1 y + w_1 = 0\f$ and * with \f$r_1 x^2 + s_1 y^2 + t_1 x y + u_1 x + v_1 y + w_1 = 0\f$ and
* \f$r_2 x^2 + s_2 y^2 + t_2 x y + u_2 x + v_2 y + w_2 = 0\f$, respectively. * \f$r_2 x^2 + s_2 y^2 + t_2 x y + u_2 x + v_2 y + w_2 = 0\f$,
* respectively.
* *
* \pre The two auxiliary curves specifying the endpoints really intersect * \pre The two auxiliary curves specifying the endpoints really intersect
* with the supporting conic curve, such that the arc endpoints define a * with the supporting conic curve, such that the arc endpoints define a
@ -407,11 +402,13 @@ public:
* \pre `source` and `target` must not be the same. * \pre `source` and `target` must not be the same.
* \return A segment connecting `source` and `target`. * \return A segment connecting `source` and `target`.
*/ */
X_monotone_curve_2 operator()(const Point_2& source, const Point_2& target) const; X_monotone_curve_2 operator()(const Point_2& source,
const Point_2& target) const;
/*! constructs a special segment of a given line connecting to given /*! constructs a special segment of a given line connecting to given
* endpoints. * endpoints.
* \param a, b, c The coefficients of the supporting line (\f$ax + by + c = 0\f$). * \param a, b, c The coefficients of the supporting line
* (\f$ax + by + c = 0\f$).
* \param source The source point. * \param source The source point.
* \param target The target point. * \param target The target point.
* \pre `source` and `target` must not be the same. * \pre `source` and `target` must not be the same.
@ -419,7 +416,8 @@ public:
*/ */
X_monotone_curve_2 operator()(const Algebraic& a, const Algebraic& b, X_monotone_curve_2 operator()(const Algebraic& a, const Algebraic& b,
const Algebraic& c, const Algebraic& c,
const Point_2& source, const Point_2& target) const; const Point_2& source,
const Point_2& target) const;
}; };
/*! \class Construct_bbox_2 /*! \class Construct_bbox_2
@ -440,56 +438,14 @@ public:
Bbox_2 operator()(const X_monotone_curve_2& xcv) const { return bbox(xcv); } Bbox_2 operator()(const X_monotone_curve_2& xcv) const { return bbox(xcv); }
}; };
/*! \name Auxiliary Functor definitions, used gor, e.g., the landmarks /*! \name Auxiliary Functor definitions, used for, e.g., the landmarks \
* point-location strategy and the drawing function. * point-location strategy and the drawing function.
*/ */
//@{ /// @{
typedef double Approximate_number_type; typedef double Approximate_number_type;
typedef CGAL::Cartesian<Approximate_number_type> Approximate_kernel; typedef CGAL::Cartesian<Approximate_number_type> Approximate_kernel;
typedef Approximate_kernel::Point_2 Approximate_point_2; typedef Approximate_kernel::Point_2 Approximate_point_2;
/// @}
/*! \class Approximate_2
* A functor that approximates a point and an \f$x\f$-monotone curve.
*/
class Approximate_2 {
public:
/*! obtains an approximation of a point coordinate.
* \param p The exact point.
* \param i The coordinate index (either 0 or 1).
* \pre `i` is either 0 or 1.
* \return An approximation of p's \f$x\f$-coordinate (if `i` == 0), or an
* approximation of p's \f$y\f$-coordinate (if `i` == 1).
*/
Approximate_number_type operator()(const Point_2& p, int i) const;
/*! obtains an approximation of a point.
* \param p The exact point.
*/
Approximate_point_2 operator()(const Point_2& p) const;
/*! approximates a given \f$x\f$-monotone curve. It computes a sequence of
* approximate points that represent an approximate polyline, and inserts
* them into an output container given through an output iterator. The
* first and last points in the sequence are always approximations of the
* endpoints of the given arc.
*
* \param oi An output iterator for the output container.
* \param error The error bound of the polyline approximation. This is the
* Hausdorff distance between the arc and the polyline that
* approximates the arc.
* \param xcv The exact \f$x\f$-monotone arc.
* \param l2r A Boolean flag that indicates whether the arc direction is
* left to right.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield an object of type
* `Arr_conic_traits_2::Approximate_point_2`.
*/
template <typename OutputIterator>
OutputIterator operator()(OutputIterator oi, double error,
const X_monotone_curve_2& xcv,
bool l2r = true) const;
};
/*! \class Trim_2 /*! \class Trim_2
* A functor that trims a conic arc. * A functor that trims a conic arc.
@ -522,11 +478,7 @@ public:
/*! obtains a `Trim_2` functor. */ /*! obtains a `Trim_2` functor. */
Trim_2 trim_2_object() const; Trim_2 trim_2_object() const;
/*! obtains an `Approximate_2` functor. */
Approximate_2 approximate_2_object() const;
/// @} /// @}
}; /* end Arr_conic_traits_2 */ }; /* end Arr_conic_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,10 +1,9 @@
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The class `Arr_consolidated_curve_data_traits_2` is a model of the concept * The class `Arr_consolidated_curve_data_traits_2` is a model of the concept
* `ArrangementTraits_2`, and serves as a decorator class that enables the * `AosTraits_2`, and serves as a decorator class that enables the
* extension of the curve type defined by the `Traits` parameter. The traits * extension of the curve type defined by the `Traits` parameter. The traits
* class inherits its point type from `Traits::Point_2`, and defines the types * class inherits its point type from `Traits::Point_2`, and defines the types
* `Curve_2` and `X_monotone_curve_2` extended with extraneous data fields of * `Curve_2` and `X_monotone_curve_2` extended with extraneous data fields of
@ -12,24 +11,21 @@ namespace CGAL {
* *
* Each `Curve_2` object is associated with a single data field of type `Data`, * Each `Curve_2` object is associated with a single data field of type `Data`,
* and each `X_monotone_curve_2` object is associated with a set of unique data * and each `X_monotone_curve_2` object is associated with a set of unique data
* objects. When a curve is subdivided into \f$ x\f$-monotone subcurves, all * objects. When a curve is subdivided into \f$x\f$-monotone subcurves, all
* resulting subcurves are associated with a list containing a single data * resulting subcurves are associated with a list containing a single data
* object, copied from the inducing curve. When an \f$ x\f$-monotone curve is * object, copied from the inducing curve. When an \f$x\f$-monotone curve is
* split, its data set is duplicated, and inserted into the sets of both * split, its data set is duplicated, and inserted into the sets of both
* resulting subcurves. In case two (or more) \f$ x\f$-monotone curves overlap, * resulting subcurves. In case two (or more) \f$x\f$-monotone curves overlap,
* their data sets are consolidated, and are inserted into the set of the \f$ * their data sets are consolidated, and are inserted into the set of the
* x\f$-monotone curve that represents the overlap. * \f$x\f$-monotone curve that represents the overlap.
* *
* \cgalModels{ArrangementTraits_2} * \cgalModels{AosTraits_2}
*/ */
template <typename Traits, typename Data> template <typename Traits, typename Data>
class Arr_consolidated_curve_data_traits_2 class Arr_consolidated_curve_data_traits_2 :
: public Arr_curve_data_traits_2<Traits, _Unique_list<Data>, public Arr_curve_data_traits_2<Traits, _Unique_list<Data>,
_Consolidate_unique_lists<Data>, _Consolidate_unique_lists<Data>, Data> {
Data>
{
public: public:
/// \name Types /// \name Types
/// @{ /// @{
@ -39,10 +35,10 @@ public:
//! the base curve. //! the base curve.
typedef typename Base_traits_2::Curve_2 Base_curve_2; typedef typename Base_traits_2::Curve_2 Base_curve_2;
//! the base \f$ x\f$-monotone curve curve. //! the base \f$x\f$-monotone curve curve.
typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2; typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2;
//! a set of data objects that is associated with an \f$ x\f$-monotone curve. //! a set of data objects that is associated with an \f$x\f$-monotone curve.
typedef unspecified_type typedef Data_container; typedef unspecified_type typedef Data_container;
//! a non-mutable iterator for the data objects in the data container. //! a non-mutable iterator for the data objects in the data container.
@ -59,14 +55,15 @@ public:
*/ */
class Data_container { class Data_container {
public: public:
/// \name Creation /// \name Creation
/// @{ /// @{
/*! constructs default */ /*! constructs default.
*/
Data_container(); Data_container();
/*! constructs set containing a single `data` object. */ /*! constructs set containing a single `data` object.
*/
Data_container(const Data& data); Data_container(const Data& data);
/// @} /// @}
@ -74,22 +71,27 @@ public:
/// \name Access Functions /// \name Access Functions
/// @{ /// @{
/*! returns the number of data objects in the set. */ /*! returns the number of data objects in the set.
*/
std::size_t size() const; std::size_t size() const;
/*! returns an iterator pointing to the first data object. */ /*! returns an iterator pointing to the first data object.
*/
Data_iterator begin() const; Data_iterator begin() const;
/*! returns a past-the-end iterator for the data objects. */ /*! returns a past-the-end iterator for the data objects.
*/
Data_iterator end() const; Data_iterator end() const;
/*! returns the first data object inserted into the set. /*! returns the first data object inserted into the set.
* \pre The number of data objects is not \f$ 0\f$. *
* \pre The number of data objects is not \f$0\f$.
*/ */
const Data& front() const; const Data& front() const;
/*! returns the last data object inserted into the set. /*! returns the last data object inserted into the set.
* \pre The number of data objects is not \f$ 0\f$. *
* \pre The number of data objects is not \f$0\f$.
*/ */
const Data& back() const; const Data& back() const;
@ -123,13 +125,12 @@ public:
*/ */
bool erase(const Data& data); bool erase(const Data& data);
/*! clears the set. */ /*! clears the set.
*/
void clear(); void clear();
/// @} /// @}
}; /* end Arr_consolidated_curve_data_traits_2::Data_container */ }; /* end Arr_consolidated_curve_data_traits_2::Data_container */
}; /* end Arr_consolidated_curve_data_traits_2 */ }; /* end Arr_consolidated_curve_data_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -2,10 +2,10 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The class `Arr_curve_data_traits_2` is a model of the `ArrangementTraits_2` * The class `Arr_curve_data_traits_2` is a model of the `AosTraits_2`
* concept and serves as a decorator class that allows the extension of the * concept and serves as a decorator class that allows the extension of the
* curves defined by the base traits-class (the `Tr` parameter), which serves as * curves defined by the base traits-class (the `Tr` parameter), which serves
* a geometric traits-class (a model of the `ArrangementTraits_2` concept), with * as a geometric traits-class (a model of the `AosTraits_2` concept), with
* extraneous (non-geometric) data fields. * extraneous (non-geometric) data fields.
* *
* The traits class inherits its point type from `Traits::Point_2`, and defines * The traits class inherits its point type from `Traits::Point_2`, and defines
@ -13,7 +13,7 @@ namespace CGAL {
* *
* Each `Curve_2` object is associated with a single data field of type `CData`, * Each `Curve_2` object is associated with a single data field of type `CData`,
* and each `X_monotone_curve_2` object is associated with a single data field * and each `X_monotone_curve_2` object is associated with a single data field
* of type `XData`. When a curve is subdivided into \f$ x\f$-monotone subcurves, * of type `XData`. When a curve is subdivided into \f$x\f$-monotone subcurves,
* its data field is converted using the conversion functor, which is specified * its data field is converted using the conversion functor, which is specified
* by the `Cnv` template-parameter, and the resulting objects is copied to all * by the `Cnv` template-parameter, and the resulting objects is copied to all
* `X_monotone_curve_2` objects induced by this curve. The conversion functor * `X_monotone_curve_2` objects induced by this curve. The conversion functor
@ -24,21 +24,18 @@ namespace CGAL {
* By default, the two data types are the same, so the conversion operator * By default, the two data types are the same, so the conversion operator
* is trivial: * is trivial:
* *
* <TABLE><TR><TD> * <TABLE>
* `CData` = * <TR>
* </TD> * <TD>`CData` = </TD>
* <TD> * <TD>`XData`</TD>
* `XData` * </TR>
* </TD></TR> * <TR>
* <TR><TD> * <TD>`Cnv` =</TD>
* `Cnv` = * <TD>`_Default_convert_functor<CData,XData>`</TD>
* </TD> * </TR>
* <TD>
* `_Default_convert_functor<CData,XData>`
* </TD></TR>
* </TABLE> * </TABLE>
* *
* In case two (or more) \f$ x\f$-monotone curves overlap, their data fields are * In case two (or more) \f$x\f$-monotone curves overlap, their data fields are
* merged to a single field, using the merge functor functor, which is specified * merged to a single field, using the merge functor functor, which is specified
* by the `Mrg` template-parameter. This functor should provide an operator with * by the `Mrg` template-parameter. This functor should provide an operator with
* the following prototype: * the following prototype:
@ -46,48 +43,39 @@ namespace CGAL {
* `XData operator() (const XData& d1, const XData& d2) const;` * `XData operator() (const XData& d1, const XData& d2) const;`
* *
* which returns a single data object that represents the merged data field of * which returns a single data object that represents the merged data field of
* `d1` and `d2`. The \f$ x\f$-monotone curve that represents the overlap is * `d1` and `d2`. The \f$x\f$-monotone curve that represents the overlap is
* associated with the output of this functor. * associated with the output of this functor.
* *
* \cgalModels{ArrangementTraits_2} * \cgalModels{AosTraits_2}
*/ */
template <typename Tr, typename XData, typename Mrg, typename CData, typename Cnv> template <typename Tr, typename XData, typename Mrg, typename CData, typename Cnv>
class Arr_curve_data_traits_2 : public Tr { class Arr_curve_data_traits_2 : public Tr {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! the base traits-class. /// the base traits-class.
*/
typedef Tr Base_traits_2; typedef Tr Base_traits_2;
/*! the base curve. /// the base curve.
*/
typedef typename Base_traits_2::Curve_2 Base_curve_2; typedef typename Base_traits_2::Curve_2 Base_curve_2;
/*! the base \f$ x\f$-monotone curve curve. /// the base \f$x\f$-monotone curve curve.
*/
typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2; typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2;
/*! the point type. /// the point type.
*/
typedef typename Base_traits_2::Point_2 Point_2; typedef typename Base_traits_2::Point_2 Point_2;
/*! the merge functor. /// the merge functor.
*/
typedef Mrg Merge; typedef Mrg Merge;
/*! the conversion functor. /// the conversion functor.
*/
typedef Cnv Convert; typedef Cnv Convert;
/*! the type of data associated with curves. /// the type of data associated with curves.
*/
typedef CData Curve_data; typedef CData Curve_data;
/*! the type of data associated with \f$ x\f$-monotone curves. /// the type of data associated with \f$x\f$-monotone curves.
*/
typedef XData X_monotone_curve_data; typedef XData X_monotone_curve_data;
/// @} /// @}
@ -97,7 +85,6 @@ public:
*/ */
class Curve_2 : public Base_curve_2 { class Curve_2 : public Base_curve_2 {
public: public:
/// \name Creation /// \name Creation
/// @{ /// @{
@ -129,7 +116,6 @@ public:
void set_data(const Curve_data& data); void set_data(const Curve_data& data);
/// @} /// @}
}; /* end Arr_curve_data_traits_2::Curve_2 */ }; /* end Arr_curve_data_traits_2::Curve_2 */
/*! The `X_monotone_curve_2` class nested within the curve-data traits extends /*! The `X_monotone_curve_2` class nested within the curve-data traits extends
@ -137,20 +123,19 @@ public:
*/ */
class X_monotone_curve_2 : public Base_x_monotone_curve_2 { class X_monotone_curve_2 : public Base_x_monotone_curve_2 {
public: public:
/// \name Creation /// \name Creation
/// @{ /// @{
/*! constructs default */ /*! constructs default */
X_monotone_curve_2(); X_monotone_curve_2();
/*! constructs an \f$ x\f$-monotone curve from the given `base` curve with /*! constructs an \f$x\f$-monotone curve from the given `base` curve with
* uninitialized data field. * uninitialized data field.
*/ */
X_monotone_curve_2(const Base_x_monotone_curve_2& base); X_monotone_curve_2(const Base_x_monotone_curve_2& base);
/*! constructs an \f$ x\f$-monotone curve from the given `base` \f$ /*! constructs an \f$x\f$-monotone curve from the given `base`
* x\f$-monotone curve with an attached `data` field. * \f$x\f$-monotone curve with an attached `data` field.
*/ */
X_monotone_curve_2(const Base_x_monotone_curve_2& base, X_monotone_curve_2(const Base_x_monotone_curve_2& base,
const X_monotone_curve_data& data); const X_monotone_curve_data& data);
@ -170,9 +155,7 @@ public:
void set_data(const X_monotone_curve_data& data); void set_data(const X_monotone_curve_data& data);
/// @} /// @}
}; /* end Arr_curve_data_traits_2::X_monotone_curve_2 */ }; /* end Arr_curve_data_traits_2::X_monotone_curve_2 */
}; /* end Arr_curve_data_traits_2 */ }; /* end Arr_curve_data_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -7,8 +7,8 @@ namespace CGAL {
* class templates and other templates. It is parameterized by a geometry * class templates and other templates. It is parameterized by a geometry
* traits type and optionally by a vertex, halfedge, or face types. By default, * traits type and optionally by a vertex, halfedge, or face types. By default,
* the `Arr_dcel` class template uses the \link * the `Arr_dcel` class template uses the \link
* ArrangementBasicTraits_2::Point_2 `Point_2`\endlink and \link * AosBasicTraits_2::Point_2 `Point_2`\endlink and \link
* ArrangementBasicTraits_2::X_monotone_curve_2 `X_monotone_curve_2`\endlink * AosBasicTraits_2::X_monotone_curve_2 `X_monotone_curve_2`\endlink
* types nested in the traits type to instantiate the vertex and base halfedge * types nested in the traits type to instantiate the vertex and base halfedge
* types, respectively. Thus, by default the \dcel only stores the topological * types, respectively. Thus, by default the \dcel only stores the topological
* incidence relations and the geometric data attached to vertices and * incidence relations and the geometric data attached to vertices and
@ -16,15 +16,15 @@ namespace CGAL {
* overridden. Notice that if the vertex and halfedge types are overridden, the * overridden. Notice that if the vertex and halfedge types are overridden, the
* traits type is ignored. * traits type is ignored.
* *
* \cgalModels{ArrangementDcelWithRebind} * \cgalModels{AosDcelWithRebind}
* *
* \tparam Traits a geometry traits type, which is a model of the * \tparam Traits a geometry traits type, which is a model of the
* `ArrangementBasicTraits_2` concept. * `AosBasicTraits_2` concept.
* \tparam V the vertex type, which is a model of the `ArrangementDcelVertex` * \tparam V the vertex type, which is a model of the `AosDcelVertex`
* concept. * concept.
* \tparam H the halfedge type, which is a model of the * \tparam H the halfedge type, which is a model of the
* `ArrangementDcelHalfedge` concept. * `AosDcelHalfedge` concept.
* \tparam F the face type, which is a model of the `ArrangementDcelFace` * \tparam F the face type, which is a model of the `AosDcelFace`
* concept. * concept.
* *
* \sa `Arr_dcel_base<V, H, F>` * \sa `Arr_dcel_base<V, H, F>`
@ -33,7 +33,6 @@ template <typename Traits,
typename V = Arr_vertex_base<typename Traits::Point_2>, typename V = Arr_vertex_base<typename Traits::Point_2>,
typename H = Arr_halfedge_base<typename Traits::X_monotone_curve_2>, typename H = Arr_halfedge_base<typename Traits::X_monotone_curve_2>,
typename F = Arr_face_base> typename F = Arr_face_base>
class Arr_dcel : public Arr_dcel_base<V, H, F> { class Arr_dcel : public Arr_dcel_base<V, H, F> {};
};
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,71 +1,46 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2DCEL
\ingroup PkgArrangementOnSurface2DCEL *
* \anchor arr_refarr_dcel_base
\anchor arr_refarr_dcel_base *
* The `Arr_dcel_base` class is an important ingredient in the definition of
The `Arr_dcel_base` class is an important ingredient in the * \dcel data structures. It serves as a basis class for any instance of the
definition of \dcel data structures. It serves as a basis class for * `Dcel` template parameter of the `Arrangement_2` template. In particular it
any instance of the `Dcel` template parameter of the * is the basis class of the default `Dcel` template parameter, and the basis
`Arrangement_2` template. In particular it is the basis class of * class of any extended \dcel. The template parameters `V`, `H`, and `F` must
the default `Dcel` template parameter, and the basis class of any * be instantiated with models of the concepts `AosVertex`, `AosHalfedge`, and
extended \dcel. The template parameters `V`, `H`, and `F` * `AosFace` respectively.
must be instantiated with models of the concepts *
`ArrangementDcelVertex`, `ArrangementDcelHalfedge`, * \cgalModels{Aos}
and `ArrangementDcelFace` respectively. */
template <typename V, typename H, typename F>
\cgalModels{ArrangementDcel}
*/
template< typename V, typename H, typename F >
class Arr_dcel_base { class Arr_dcel_base {
public: public:
/*! The basic \dcel face type. Serves as a basis class for an extended
* face record with auxiliary data fields.
*
* \cgalModels{AosFace}
*/
class Arr_face_base {};
/*! The basic \dcel halfedge type. Serves as a basis class for an extended
* halfedge record with auxiliary data fields. The `Curve` parameter is the
* type of \f$x\f$-monotone curves associated with the vertices.
*
* \cgalModels{AosHalfedge}
*/
template <typename Curve>
class Arr_halfedge_base {};
/*! /*! The basic \dcel vertex type. Serves as a basis class for an extended
* vertex record with auxiliary data fields. The `Point` parameter is the
The basic \dcel face type. Serves as a basis class for an extended * type of points associated with the vertices.
face record with auxiliary data fields. *
* \cgalModels{AosVertex}
\cgalModels{ArrangementDcelFace} */
template <typename Point>
*/ class Arr_vertex_base {};
class Arr_face_base {
}; /* end Arr_dcel_base::Arr_face_base */
/*!
The basic \dcel halfedge type. Serves as a basis class for an
extended halfedge record with auxiliary data fields. The `Curve`
parameter is the type of \f$ x\f$-monotone curves associated with the vertices.
\cgalModels{ArrangementDcelHalfedge}
*/
template< typename Curve >
class Arr_halfedge_base {
}; /* end Arr_dcel_base::Arr_halfedge_base */
/*!
The basic \dcel vertex type. Serves as a basis class for an extended
vertex record with auxiliary data fields. The `Point` parameter is
the type of points associated with the vertices.
\cgalModels{ArrangementDcelVertex}
*/
template< typename Point >
class Arr_vertex_base {
}; /* end Arr_dcel_base::Arr_vertex_base */
}; /* end Arr_dcel_base */ }; /* end Arr_dcel_base */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -5,17 +5,17 @@ namespace CGAL {
* The default \dcel class used by the `Arrangement_2`, * The default \dcel class used by the `Arrangement_2`,
* `Arr_bounded_planar_topology_traits_2`, `Arr_unb_planar_topology_traits_2` * `Arr_bounded_planar_topology_traits_2`, `Arr_unb_planar_topology_traits_2`
* class templates and other templates. It is parameterized by a geometry * class templates and other templates. It is parameterized by a geometry
* traits type. It uses the \link ArrangementBasicTraits_2::Point_2 * traits type. It uses the \link AosBasicTraits_2::Point_2
* `Point_2`\endlink and \link ArrangementBasicTraits_2::X_monotone_curve_2 * `Point_2`\endlink and \link AosBasicTraits_2::X_monotone_curve_2
* `X_monotone_curve_2`\endlink types nested in the traits type to instantiate * `X_monotone_curve_2`\endlink types nested in the traits type to instantiate
* the vertex and base halfedge types, respectively. Thus, by default the \dcel * the vertex and base halfedge types, respectively. Thus, by default the \dcel
* only stores the topological incidence relations and the geometric data * only stores the topological incidence relations and the geometric data
* attached to vertices and edges. * attached to vertices and edges.
* *
* \cgalModels{ArrangementDcelWithRebind} * \cgalModels{AosDcelWithRebind}
* *
* \tparam Traits a geometry traits type, which is a model of the * \tparam Traits a geometry traits type, which is a model of the
* `ArrangementBasicTraits_2` concept. * `AosBasicTraits_2` concept.
* *
* \sa `Arr_dcel<Traits, V, H, F>` * \sa `Arr_dcel<Traits, V, H, F>`
* \sa `Arr_dcel_base<V, H, F>` * \sa `Arr_dcel_base<V, H, F>`

View File

@ -1,57 +1,45 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses * \ingroup PkgArrangementOnSurface2Overlay
\ingroup PkgArrangementOnSurface2Overlay *
* An instance of `Arr_default_overlay_traits` should be used for overlaying two
* arrangements of type `Arrangement` that store no auxiliary data with their
* \dcel records, where the resulting overlaid arrangement stores no auxiliary
* \dcel data as well. This class simply gives empty implementation for all
* traits-class functions.
*
* \cgalModels{OverlayTraits}
*
* \sa `overlay`
*/
template <typename Arrangement>
class Arr_default_overlay_traits {};
An instance of `Arr_default_overlay_traits` should be used for overlaying two arrangements /*! \ingroup PkgArrangementOnSurface2TraitsClasses
of type `Arrangement` that store no auxiliary data with their \dcel records, where the resulting overlaid arrangement stores no auxiliary * \ingroup PkgArrangementOnSurface2Overlay
\dcel data as well. This class simply gives empty implementation for all *
traits-class functions. * An instance of `Arr_face_overlay_traits` should be used for overlaying two
* arrangements of types `Arr_A` and `Arr_B`, which are instantiated using the
* same geometric traits-class and with the \dcel classes `Dcel_A` and `Dcel_B`
* respectively, in order to store their overlay in an arrangement of type
* `Arr_R`, which is instantiated using a third \dcel class `Dcel_R`. All three
* \dcel classes are assumed to be instantiations of the
* `Arr_face_extended_dcel` template with types `FaceData_A`, `FaceData_B` and
* `FaceData_R`, respectively.
*
* This class gives empty implementation for all overlay traits-class functions,
* except the function that computes the overlay of two faces. In this case, it
* uses the functor `OvlFaceData`, which accepts a `FaceData_A` object and a
* `FaceData_B` object and computes a corresponding `FaceData_R` object, in
* order to set the auxiliary data of the overlay face.
*
* \cgalModels{OverlayTraits}
*
* \sa `overlay`
* \sa `CGAL::Arr_face_extended_dcel<Traits,FData,V,H,F>`
*/
template <typename Arr_A, typename Arr_B, typename Arr_R, typename OvlFaceData>
class Arr_face_overlay_traits {};
\cgalModels{OverlayTraits}
\sa `overlay`
*/
template< typename Arrangement >
class Arr_default_overlay_traits {
public:
}; /* end Arr_default_overlay_traits */
} /* end namespace CGAL */
namespace CGAL {
/*!
\ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2Overlay
An instance of `Arr_face_overlay_traits` should be used for overlaying two arrangements
of types `Arr_A` and `Arr_B`, which are instantiated using the same
geometric traits-class and with the \dcel classes `Dcel_A` and
`Dcel_B` respectively, in order to store their overlay in an arrangement
of type `Arr_R`, which is instantiated using a third \dcel class
`Dcel_R`. All three \dcel classes are assumed to be instantiations of the
`Arr_face_extended_dcel` template with types `FaceData_A`,
`FaceData_B` and `FaceData_R`, respectively.
This class gives empty implementation for all overlay traits-class functions,
except the function that computes the overlay of two faces. In this case,
it uses the functor `OvlFaceData`, which accepts a `FaceData_A` object
and a `FaceData_B` object and computes a corresponding `FaceData_R`
object, in order to set the auxiliary data of the overlay face.
\cgalModels{OverlayTraits}
\sa `overlay`
\sa `CGAL::Arr_face_extended_dcel<Traits,FData,V,H,F>`
*/
template< typename Arr_A, typename Arr_B, typename Arr_R, typename OvlFaceData >
class Arr_face_overlay_traits {
public:
}; /* end Arr_face_overlay_traits */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -6,7 +6,7 @@ namespace CGAL {
* \f$x\f$-monotone curve. It is used by models geometry traits concept that * \f$x\f$-monotone curve. It is used by models geometry traits concept that
* handle boundary conditions. * handle boundary conditions.
* *
* \sa `ArrangementOpenBoundaryTraits_2` * \sa `AosOpenBoundaryTraits_2`
*/ */
enum Arr_curve_end { ARR_MIN_END, ARR_MAX_END }; enum Arr_curve_end { ARR_MIN_END, ARR_MAX_END };

View File

@ -1,246 +1,208 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2DCEL
\ingroup PkgArrangementOnSurface2DCEL *
* The `Arr_extended_dcel` class-template extends the topological-features of
* the \dcel namely the vertex, halfedge, and face types. While it is possible
* to maintain extra (non-geometric) data with the curves or points of the
* arrangement by extending their types respectively, it is also possible to
* extend the vertex, halfedge, or face types of the \dcel through
* inheritance. As the technique to extend these types is somewhat cumbersome
* and difficult for inexperienced users, the `Arr_extended_dcel` class-template
* provides a convenient way to do that. Each one of the three features is
* extended with a corresponding data type provided as parameters. This class
* template is also parameterized with a traits class used to extract default
* values for the vertex, halfedge, and face base classes, which are the
* remaining three template parameters respectively. The default values follow:
*
* <TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
*
* `V` =
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
* `Arr_vertex_base<typename Traits::Point_2>`
* <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
* `H` =
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
* `Arr_halfedge_base<typename Traits::X_monotone_curve_2>`
* <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
* `F` =
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
* `Arr_face_base`
*
* </TABLE>
*
* \cgalModels{AosDcelWithRebind}
*
* \sa `Arr_dcel_base<V,H,F>`
*/
template <typename Traits, typename VData, typename HData, typename FData,
typename V, typename H, typename F>
class Arr_extended_dcel : public Arr_dcel_base<Arr_extended_vertex<V, VData>,
Arr_extended_halfedge<H, HData>,
Arr_extended_face<F, FData>>
{};
The `Arr_extended_dcel` class-template extends the topological-features of the \dcel /*! \ingroup PkgArrangementOnSurface2DCEL
namely the vertex, halfedge, and face types. While it is possible to maintain *
extra (non-geometric) data with the curves or points of the arrangement by * The `Arr_extended_face` class-template extends the face topological-features
extending their types respectively, it is also possible to extend the vertex, * of the \dcel. It is parameterized by a face base-type `FaceBase` and a data
halfedge, or face types of the \dcel through inheritance. As the technique to * type `FData` used to extend the face base-type.
extend these types is somewhat cumbersome and difficult for inexperienced *
users, the `Arr_extended_dcel` class-template provides a convenient way to do that. * \cgalModels{AosDcelFace}
Each one of the three features is extended with a corresponding data type *
provided as parameters. This class template is also parameterized with a * \sa `Arr_dcel_base<V,H,F>`
traits class used to extract default values for the vertex, halfedge, and face */
base classes, which are the remaining three template parameters respectively. template <typename FaceBase, typename FData>
The default values follow:
<TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`V` =
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`Arr_vertex_base<typename Traits::Point_2>`
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`H` =
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`Arr_halfedge_base<typename Traits::X_monotone_curve_2>`
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`F` =
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`Arr_face_base`
</TABLE>
\cgalModels{ArrangementDcelWithRebind}
\sa `Arr_dcel_base<V,H,F>`
*/
template< typename Traits, typename VData, typename HData, typename FData, typename V, typename H, typename F >
class Arr_extended_dcel
: public Arr_dcel_base<Arr_extended_vertex<V, VData>,
Arr_extended_halfedge<H, HData>,
Arr_extended_face<F, FData> >
{
}; /* end Arr_extended_dcel */
} /* end namespace CGAL */
namespace CGAL {
/*!
\ingroup PkgArrangementOnSurface2DCEL
The `Arr_extended_face` class-template extends the face topological-features of the
\dcel. It is parameterized by a face base-type `FaceBase` and a data type
`FData` used to extend the face base-type.
\cgalModels{ArrangementDcelFace}
\sa `Arr_dcel_base<V,H,F>`
*/
template< typename FaceBase, typename FData >
class Arr_extended_face : FaceBase { class Arr_extended_face : FaceBase {
public: public:
/// \name Creation
/// @{
/// \name Creation /*! assigns `f` with the contents of the `other` vertex.
/// @{ */
void assign(const Self & other);
/*! /// @}
assigns `f` with the contents of the `other` vertex.
*/
void assign (const Self & other);
/// @} /// \name Access Functions
/// @{
/// \name Access Functions /*! obtains the auxiliary data (a non-const version, returning a reference
/// @{ * to a mutable data object is also available).
*/
const FData & data() const;
/*! /// @}
obtains the auxiliary data (a non-const version, returning a reference
to a mutable data object is also available).
*/
const FData & data () const;
/// @} /// \name Modifiers
/// @{
/// \name Modifiers /*! sets the auxiliary data.
/// @{ */
void set_data(const FData & data);
/*!
sets the auxiliary data.
*/
void set_data (const FData & data);
/// @}
/// @}
}; /* end Arr_extended_face */ }; /* end Arr_extended_face */
} /* end namespace CGAL */
namespace CGAL { /*! \ingroup PkgArrangementOnSurface2DCEL
*
/*! * The `Arr_extended_halfedge` class-template extends the halfedge
\ingroup PkgArrangementOnSurface2DCEL * topological-features of the \dcel. It is parameterized by a halfedge
* base-type `HalfedgeBase` and a data type `HData` used to extend the halfedge
The `Arr_extended_halfedge` class-template extends the halfedge topological-features of * base-type.
the \dcel. It is parameterized by a halfedge base-type `HalfedgeBase` *
and a data type `HData` used to extend the halfedge base-type. * \cgalModels{AosDcelHalfedge}
*
\cgalModels{ArrangementDcelHalfedge} * \sa `Arr_dcel_base<V,H,F>`
*/
\sa `Arr_dcel_base<V,H,F>` template <typename HalfedgeBase, typename HData>
*/
template< typename HalfedgeBase, typename HData >
class Arr_extended_halfedge : public HalfedgeBase { class Arr_extended_halfedge : public HalfedgeBase {
public: public:
/// \name Creation
/// @{
/// \name Creation /*! assigns `he` with the contents of the `other` vertex.
/// @{ */
void assign(const Self & other);
/*! /// @}
assigns `he` with the contents of the `other` vertex.
*/
void assign (const Self & other);
/// @} /// \name Access Functions
/// @{
/// \name Access Functions /*! obtains the auxiliary data (a non-const version, returning a reference
/// @{ * to a mutable data object is also available).
*/
const HData & data() const;
/*! /// @}
obtains the auxiliary data (a non-const version, returning a reference
to a mutable data object is also available).
*/
const HData & data () const;
/// @} /// \name Modifiers
/// @{
/// \name Modifiers /*! sets the auxiliary data.
/// @{ */
void set_data(const HData & data);
/*!
sets the auxiliary data.
*/
void set_data (const HData & data);
/// @}
/// @}
}; /* end Arr_extended_halfedge */ }; /* end Arr_extended_halfedge */
} /* end namespace CGAL */
namespace CGAL { /*! \ingroup PkgArrangementOnSurface2DCEL
*
/*! * The `Arr_extended_vertex` class-template extends the vertex
\ingroup PkgArrangementOnSurface2DCEL * topological-features of the \dcel. It is parameterized by a
* vertex base-type `VertexBase` and a data type `VData` used to extend
The `Arr_extended_vertex` class-template extends the vertex * the vertex base-type.
topological-features of the \dcel. It is parameterized by a *
vertex base-type `VertexBase` and a data type `VData` used to extend * \cgalModels{AosDcelVertex}
the vertex base-type. *
* \sa `Arr_dcel_base<V,H,F>`
\cgalModels{ArrangementDcelVertex} */
template <typename VertexBase, typename VData>
\sa `Arr_dcel_base<V,H,F>`
*/
template< typename VertexBase, typename VData >
class Arr_extended_vertex : public VertexBase { class Arr_extended_vertex : public VertexBase {
public: public:
/// \name Creation
/// @{
/// \name Creation /*! assigns `v` with the contents of the `other` vertex.
/// @{ */
void assign(const Self & other);
/*! /// @}
assigns `v` with the contents of the `other` vertex.
*/
void assign (const Self & other);
/// @} /// \name Access Functions
/// @{
/// \name Access Functions /*! obtains the auxiliary data (a non-const version, returning a reference
/// @{ * to a mutable data object is also available).
*/
const VData & data() const;
/*! /// @}
obtains the auxiliary data (a non-const version, returning a reference
to a mutable data object is also available).
*/
const VData & data () const;
/// @} /// \name Modifiers
/// @{
/// \name Modifiers /*! sets the auxiliary data.
/// @{ */
void set_data(const VData & data);
/*!
sets the auxiliary data.
*/
void set_data (const VData & data);
/// @}
/// @}
}; /* end Arr_extended_vertex */ }; /* end Arr_extended_vertex */
} /* end namespace CGAL */
/*! \ingroup PkgArrangementOnSurface2DCEL
namespace CGAL { *
* The `Arr_face_extended_dcel` class-template extends the \dcel face-records,
/*! * making it possible to store extra (non-geometric) data with the arrangement
\ingroup PkgArrangementOnSurface2DCEL * faces. The class should be instantiated by an `FData` type which represents
* the extra data stored with each face.
The `Arr_face_extended_dcel` class-template extends the \dcel face-records, making it *
possible to store extra (non-geometric) data with the arrangement faces. * Note that all types of \dcel features (namely vertex, halfedge and face)
The class should be instantiated by an `FData` type which represents the * are provided as template parameters. However, by default they are defined
extra data stored with each face. * as follows:
*
Note that all types of \dcel features (namely vertex, halfedge and face) * <TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
are provided as template parameters. However, by default they are defined *
as follows: * `V` =
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
<TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP> * `Arr_vertex_base<typename Traits::Point_2>`
* <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`V` = * `H` =
<TD ALIGN=LEFT VALIGN=TOP NOWRAP> * <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`Arr_vertex_base<typename Traits::Point_2>` * `Arr_halfedge_base<typename Traits::X_monotone_curve_2>`
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP> * <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`H` = * `F` =
<TD ALIGN=LEFT VALIGN=TOP NOWRAP> * <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
`Arr_halfedge_base<typename Traits::X_monotone_curve_2>` * `Arr_face_base`
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP> *
`F` = * </TABLE>
<TD ALIGN=LEFT VALIGN=TOP NOWRAP> *
`Arr_face_base` * \cgalModels{AosDcelWithRebind}
*
</TABLE> * \sa `Arr_dcel_base<V,H,F>`
*/
\cgalModels{ArrangementDcelWithRebind} template <typename Traits, typename FData, typename V, typename H, typename F>
class Arr_face_extended_dcel :
\sa `Arr_dcel_base<V,H,F>` public Arr_dcel_base<V, H, Arr_extended_face<F, FData>> {};
*/
template< typename Traits, typename FData, typename V, typename H, typename F >
class Arr_face_extended_dcel : public Arr_dcel_base<V, H, Arr_extended_face<F, FData> > {
}; /* end Arr_face_extended_dcel */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,69 +1,64 @@
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Ref /*! \ingroup PkgArrangementOnSurface2Ref
* *
* `Arr_face_index_map` maintains a mapping of face handles of an attached * `Arr_face_index_map` maintains a mapping of face handles of an attached
* arrangement object to indices (of type `unsigned int`). This class template * arrangement object to indices (of type `unsigned int`). This class template
* is a model of the concept `ReadablePropertyMap`. A mapping between face * is a model of the concept `ReadablePropertyMap`. A mapping between face
* handles and indices enables convenient usage of property-map classes supplied * handles and indices enables convenient usage of property-map classes supplied
* by `boost`. For example, the property-map class templates * by `boost`. For example, the property-map class templates
* `boost::vector_property_map`, which is based on `std::vector`, and * `boost::vector_property_map`, which is based on `std::vector`, and
* `boost::iterator_property_map`, which can be used to implement a property map * `boost::iterator_property_map`, which can be used to implement a property map
* based on a native \CC array, require the user to supply a mapping such as * based on a native \CC array, require the user to supply a mapping such as
* `Arr_face_index_map`. * `Arr_face_index_map`.
* *
* As new faces might be inserted into the attached arrangement, and * As new faces might be inserted into the attached arrangement, and
* existing faces might be removed, the notification mechanism is used * existing faces might be removed, the notification mechanism is used
* to dynamically maintain the mapping of face handles to indices. * to dynamically maintain the mapping of face handles to indices.
* *
* \cgalModels{DefaultConstructible,CopyConstructible,Assignable,ReadablePropertyMap} * \cgalModels{DefaultConstructible,CopyConstructible,Assignable,ReadablePropertyMap}
* *
* \sa `Arr_vertex_index_map<Arrangement>` * \sa `Arr_vertex_index_map<Arrangement>`
*/
template <typename Arrangement_>
class Arr_face_index_map: public Arrangement_::Observer {
public:
/// \name Types
/// @{
/// the type of the attached arrangement.
typedef Arrangement_ Arrangement_2;
typedef typename Arrangement_2::Base_aos Base_aos;
typedef boost::readable_property_map_tag category;
typedef unsigned int value_type;
typedef unsigned int reference;
typedef Face_handle key_type;
/// The face handle type.
typedef typename Base_aos::Face_handle Face_handle;
/// The type of mapping of faces to indices.
typedef Unique_hash_map<Face_handle, value_type> Index_map;
/// @}
/// \name Creation
/// @{
/*! constructs a map that is unattached to any arrangement instance.
*/ */
Arr_face_index_map();
template <typename Arrangement_> /*! constructs a map and attaches it to the given arrangement `arr`.
class Arr_face_index_map: public Arrangement_::Observer { */
public: Arr_face_index_map(Base_aos& arr);
/// \name Types /// @}
/// @{ }; /* end Arr_accessor */
/*! the type of the attached arrangement.
*/
typedef Arrangement_ Arrangement_2;
typedef typename Arrangement_2::Base_aos Base_aos;
typedef boost::readable_property_map_tag category;
typedef unsigned int value_type;
typedef unsigned int reference;
typedef Face_handle key_type;
/*! The face handle type.
*/
typedef typename Base_aos::Face_handle Face_handle;
/*! The type of mapping of faces to indices.
*/
typedef Unique_hash_map<Face_handle, value_type> Index_map;
/// @}
/// \name Creation
/// @{
/*! constructs a map that is unattached to any arrangement instance.
*/
Arr_face_index_map();
/*! constructs a map and attaches it to the given arrangement `arr`.
*/
Arr_face_index_map(Base_aos& arr);
/// @}
}; /* end Arr_accessor */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,451 +1,452 @@
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The traits class `Arr_geodesic_arc_on_sphere_traits_2` is a model of the * The traits class `Arr_geodesic_arc_on_sphere_traits_2` is a model of the
* `ArrangementTraits_2` concept. It enables the construction and * `AosTraits_2` concept. It enables the construction and
* maintenance of arrangements of arcs of great circles (also known as * maintenance of arrangements of arcs of great circles (also known as
* geodesic arcs) that lie on the sphere (centered at the origin). Almost * geodesic arcs) that lie on the sphere (centered at the origin). Almost
* all operations on arrangements require a kernel that supports exact * all operations on arrangements require a kernel that supports exact
* predicates. Most operations also require a kernel that supports exact * predicates. Most operations also require a kernel that supports exact
* constructions. However, all operations on such arrangements can be * constructions. However, all operations on such arrangements can be
* computed efficiently, since all calculations are performed with * computed efficiently, since all calculations are performed with
* rational arithmetic. * rational arithmetic.
* *
* There is an analogy between this class of arrangements and the class of * There is an analogy between this class of arrangements and the class of
* planar arrangements induced by linear curves (i.e., segments, rays, and * planar arrangements induced by linear curves (i.e., segments, rays, and
* lines), as properties of linear curves in the plane often, but not always, * lines), as properties of linear curves in the plane often, but not always,
* hold for geodesic arcs on the sphere. For example, given any two * hold for geodesic arcs on the sphere. For example, given any two
* non-antipodal points on the sphere there exists a unique great circle * non-antipodal points on the sphere there exists a unique great circle
* connecting the two points. * connecting the two points.
* *
* We use the following parameterization of the unit sphere \f$S = * We use the following parameterization of the unit sphere \f$S =
* \phi_S(\Phi)\f$: \f$\Phi = [\alpha, 2\pi + \alpha] \times [-\frac{\pi}{2}, * \phi_S(\Phi)\f$: \f$\Phi = [\alpha, 2\pi + \alpha] \times [-\frac{\pi}{2},
* \frac{\pi}{2}]\f$, \f$\phi_S(x, y) = (\cos y \cos x, \sin y \cos x, \sin * \frac{\pi}{2}]\f$, \f$\phi_S(x, y) = (\cos y \cos x, \sin y \cos x, \sin
* x)\f$, where \f$\alpha = \arctan(X, Y)\f$. By default, \f$X = -1, Y = 0\f$, * x)\f$, where \f$\alpha = \arctan(X, Y)\f$. By default, \f$X = -1, Y = 0\f$,
* which implies \f$\alpha = \pi\f$, and a default parameterization \f$\Phi = * which implies \f$\alpha = \pi\f$, and a default parameterization \f$\Phi =
* [-\pi, \pi] \times [-\frac{\pi}{2}, \frac{\pi}{2}]\f$. The equator curve, * [-\pi, \pi] \times [-\frac{\pi}{2}, \frac{\pi}{2}]\f$. The equator curve,
* for example, is given by \f$\gamma(t) = (\pi(2t - 1) + \alpha, 0)\f$, for * for example, is given by \f$\gamma(t) = (\pi(2t - 1) + \alpha, 0)\f$, for
* \f$t \in [0,1]\f$. This parameterization induces two contraction points * \f$t \in [0,1]\f$. This parameterization induces two contraction points
* \f$p_s = (0, 0, -1) = \phi_S(y,-\frac{\pi}{2})\f$ and \f$p_n = (0, 0, 1) = * \f$p_s = (0, 0, -1) = \phi_S(y,-\frac{\pi}{2})\f$ and \f$p_n = (0, 0, 1) =
* \phi_S(y,\frac{\pi}{2})\f$, referred to as the south and north poles, * \phi_S(y,\frac{\pi}{2})\f$, referred to as the south and north poles,
* respectively, and an identification curve \f$\{\phi_S(\pi + * respectively, and an identification curve \f$\{\phi_S(\pi +
* \alpha,x)\,|\,-\frac{\pi}{2} \leq v \leq \frac{\pi}{2}\}\f$, as * \alpha,x)\,|\,-\frac{\pi}{2} \leq v \leq \frac{\pi}{2}\}\f$, as
* \f$\phi_S(-\pi + \alpha,v) = \phi_S(+\pi + \alpha,v)\f$ for all \f$x\f$ * \f$\phi_S(-\pi + \alpha,v) = \phi_S(+\pi + \alpha,v)\f$ for all \f$x\f$
* (which coincides with the opposite Prime (Greenwich) Meridian when * (which coincides with the opposite Prime (Greenwich) Meridian when
* \f$\alpha = \pi\f$). The elements that substitutes the template parameters * \f$\alpha = \pi\f$). The elements that substitutes the template parameters
* `X` and `Y` when `Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>` is * `X` and `Y` when `Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>` is
* instantiated must be integral values that define a not necessarily * instantiated must be integral values that define a not necessarily
* normalized vector \f$(x,y)\f$ in the \f$xy\f$-plane that bisects the * normalized vector \f$(x,y)\f$ in the \f$xy\f$-plane that bisects the
* identification curve. * identification curve.
* \cgalModels{ArrangementTraits_2,ArrangementLandmarkTraits_2,ArrangementSphericalBoundaryTraits_2} * \cgalModels{AosTraits_2,AosLandmarkTraits_2,AosApproximateTraits_2,AosSphericalBoundaryTraits_2}
*/
template <typename Kernel, typename X, typename Y>
class Arr_geodesic_arc_on_sphere_traits_2 {
public:
/*! The `Point_2` class nested within the traits is used to represent a
* point on a sphere centered at the origin. The point is in fact a
* not-necessarily normalized 3D direction extended with information that
* specifies the location of the point pre-image in the parameter space.
*
* \cgalModels{Assignable,DefaultConstructible,CopyConstructible}
*/ */
class Point_2 {
template <typename Kernel, typename X, typename Y>
class Arr_geodesic_arc_on_sphere_traits_2 {
public: public:
/*! The `Point_2` class nested within the traits is used to represent a /// \name Enumeration types
* point on a sphere centered at the origin. The point is in fact a /// @{
* not-necessarily normalized 3D direction extended with information that
* specifies the location of the point pre-image in the parameter space. /*! The location type indicates a location in the parameter space.
*
* \cgalModels{Assignable,DefaultConstructible,CopyConstructible}
*/ */
class Point_2 { enum Location_type {
public: /// Internal to the parameter space.
/// \name Enumeration types NO_BOUNDARY_LOC = 0,
/// @{
/*! The location type indicates a location in the parameter space. /// The bottom side boundary of the parameter space (the south pole).
*/ MIN_BOUNDARY_LOC,
enum Location_type {
/// Internal to the parameter space.
NO_BOUNDARY_LOC = 0,
/// The bottom side boundary of the parameter space (the south pole). /// The identified left and right side boundaries of the parameter space.
MIN_BOUNDARY_LOC, MID_BOUNDARY_LOC,
/// The identified left and right side boundaries of the parameter space. /// The top side boundary of the parameter space (the north pole).
MID_BOUNDARY_LOC, MAX_BOUNDARY_LOC
/// The top side boundary of the parameter space (the north pole).
MAX_BOUNDARY_LOC
};
/// @}
/// \name Types
/// @{
typedef Kernel::Direction_3 Direction_3;
/// @}
/// \name Creation
/// @{
/*! constructs a point from a direction and a location.
* \param[in] dir the direction.
* \param[in] location indicates the location of the point pre-image
* in the parameter space.
*/
Point_2(const Direction_3& dir, Location_type location);
/// @}
/// \name Operations
/// @{
/*! sets the location of the point pre-image in the parameter space.
* \param[in] location the updated location of the point pre-image in
* the parameter space.
*/
void set_location(Location_type location);
/*! obtains the location of the point.
* \return the location of the point pre-image in the parameter space.
*/
Location_type location() const;
/// @}
}; };
/// @}
/*! The `X_monotone_curve_2` class nested within the traits is used to /// \name Types
* represent an \f$x\f$-monotone geodesic arc on the a sphere centered at /// @{
* the origin. The pre-image of an \f$x\f$-monotone geodesic arc does not typedef Kernel::Direction_3 Direction_3;
* intersect the identified left and right sides of the boundary of the /// @}
* parameter space.
* /// \name Creation
* \cgalModels{Assignable,DefaultConstructible,CopyConstructible} /// @{
/*! constructs a point from a direction and a location.
* \param[in] dir the direction.
* \param[in] location indicates the location of the point pre-image
* in the parameter space.
*/ */
class X_monotone_curve_2 { Point_2(const Direction_3& dir, Location_type location);
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
/// @}
/// \name Creation /// @}
/// @{
/*! constructs an \f$x\f$-monotone geodesic arc. /// \name Operations
* \param[in] source the source point of the arc. /// @{
* \param[in] target the target point of the arc.
* \param[in] normal the normal of the plane that contains the arc.
* \param[in] is_vertical is the arc vertical ?
* \param[in] is_directed_right is the arc directed from left to right?
* \param[in] is_full is the arc a full great circle?
* \param[in] is_degenerate is the arc degenerate (single point)?
* \param[in] is_empty is the arc empty?
* \pre Both endpoints lie on the given plane.
*/
X_monotone_curve_2(const Point_2& source,
const Point_2& target,
const Direction_3& normal,
bool is_vertical,
bool is_directed_right,
bool is_full = false,
bool is_degenerate = false,
bool is_empty = false);
/*! construct an \f$x\f$-monotone geodesic arc. /*! sets the location of the point pre-image in the parameter space.
* \param[in] normal the normal of the plane containing the arc. * \param[in] location the updated location of the point pre-image in
* \param[in] source the source-point direction. * the parameter space.
* \param[in] target the target-point direction.
* \pre Both endpoints lie on the given plane.
*/
X_monotone_curve_2(const Point_2& source,
const Point_2& target,
const Direction_3& normal);
/*! construct a full great-circle.
* \param[in] point the endpoint of the full great-circle.
* \param[in] normal the normal of the plane containing the arc.
* \pre the point lies on the given plane.
* \pre the point pre-image lies on the identified left and right sides
* of the boundary of the parameter space.
*/
X_monotone_curve_2(const Point_2& point,
const Direction_3& normal);
/// @}
/// \name Operations
/// @{
/*! sets the source endpoint.
* \param[in] source the updated source endpoint.
*/
void set_source(const Point_2& source);
/*! sets the target endpoint.
* \param[in] target the updated target endpoint.
*/
void set_target(const Point_2& target);
/*! sets the normal of the underlying plane.
* \param[in] normal the updated normal of the underlying plane.
*/
void set_normal(const Direction_3& normal);
/*! sets the flag that indicates whether the arc is vertical.
* \param[in] flag indicates whether the arc pre-image in the parameter
* space is vertical.
*/
void set_is_vertical(bool flag);
/*! sets the flag that indicates whether the direction of the arc
* pre-image in the parameter space is from left to right.
* \param flag indicates whether the arc pre-image in the parameter
* space is from left to right.
*/
void set_is_directed_right(bool flag);
/*! sets the flag that indicates whether the arc is a full great circle.
* \param[in] flag indicates whether the arc is a full great circle.
*/
void set_is_full(bool flag);
/*! sets the flag that indicates whether the arc degenerates to a point.
* \param[in] flag indicates whether the arc degenerates to a point.
*/
void set_is_degenerate(bool flag);
/*! sets the flag that indicates whether the arc is empty.
* \param[in] flag indicates whether the arc is empty.
*/
void set_is_empty(bool flag);
/*! obtains the source point.
*/
const Point_2& source() const;
/*! obtains the target point.
*/
const Point_2& target() const;
/*! obtains the normal to the containing plane.
*/
const Direction_3& normal() const;
/*! obtains the (lexicographically) left endpoint direction.
*/
const Point_2& left() const;
/*! obtains the (lexicographically) right endpoint.
*/
const Point_2& right() const;
/*! determines whether the arc is vertical.
*/
bool is_vertical() const;
/*! determines whether the arc is directed lexicographically from left to
* right.
*/
bool is_directed_right() const;
/*! determines whether the arc is a great circle.
*/
bool is_full() const;
/*! determines whether the arc is degenerate.
*/
bool is_degenerate() const;
/*! determines whether the arc is empty. */
bool is_empty() const;
/*! determines whether the arc is a meridian.
*/
bool is_meridian() const;
/// @}
};
/*!
*/ */
class Curve_2 { void set_location(Location_type location);
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
/// @}
/// \name Creation /*! obtains the location of the point.
/// @{ * \return the location of the point pre-image in the parameter space.
/// @}
/// \name Operations
/// @{
/// @}
};
/*! Construction functor of a point.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableTernaryFunction}
*/ */
Location_type location() const;
/*! /// @}
*/
class Construct_point_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 result_type;
typedef typename Kernel::FT FT;
typedef typename Kernel::Direction_3 Direction_3;
/// @}
/// \name Operations
/// @{
/*! constructs a point on the sphere from three coordinates, which define
* a (not necessarily normalized) direction.
* \param[in] x the x coordinate
* \param[in] y the y coordinate
* \param[in] z the z coordinate
*/
Point_2 operator()(const FT& x, const FT& y, const FT& z);
/*! constructs a point on the sphere from a (not necessarily normalized)
* direction.
* \param other the other direction
*/
Point_2 operator()(const Direction_3& other);
/// @}
};
/*! Construction functor of \f$x\f$-monotone geodesic arcs.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableBinaryFunction,AdaptableTernaryFunction}
*/
class Construct_x_monotone_curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::X_monotone_curve_2 result_type;
typedef Kernel::Direction_3 Direction_3;
typedef Direction_3 argument_type;
/// @}
/// \name Operations
/// @{
/*! constructs the minor geodesic arc from two endpoints. The minor arc
* is the one with the smaller angle among the two geodesic arcs with
* the given endpoints.
* 1. Find out whether the arc is x-monotone.
* 2. If it is x-monotone,
* 2.1 Find out whether it is vertical, and
* 2.2 whether the target is larger than the source (directed right).
*
* An arc is vertical, iff
* 1. one of its endpoint direction pierces a pole, or
* 2. the projections of the endpoint directions onto the xy-plane coincide.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \pre p and q must not coincide.
* \pre p and q cannot be antipodal.
* \pre The constructed minor arc does not intersect the identification
* curve in its interior.
*/
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q);
/*! constructs a full great circle from a normal to a plane.
* Observe that the constructed arc has one endpoint that lies on
* the identification curve. This point is considered both the source and
* target (and also the left and right) point of the arc.
* \param normal the normal to the plane containing the great circle.
* \pre the plane is not vertical.
*/
X_monotone_curve_2 operator()(const Direction_3& normal);
/*! constructs a geodesic arc from two endpoints and a normal to the plane
* containing the arc. The two endpoints determine the plane. The normal
* determines the orientation of the plane and the final arc (whether its
* the minor arc or the major arc). The right-hand rule can be used
* to select the appropriate normal.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \param[in] normal the normal to the oriented plane containing the arc.
* \pre Both endpoints lie on the given oriented plane.
* \pre The constructed arc does not intersect the identification curve
* in its interior.
*/
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q,
const Direction_3& normal);
/// @} /* end of operations */
};
/*! Construction functor of geodesic arcs.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableBinaryFunction,AdaptableTernaryFunction}
*/
class Construct_curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Curve_2 result_type;
typedef Kernel::Direction_3 Direction_3;
typedef Direction_3 argument_type;
/// @}
/// \name Operations
/// @{
/*! constructs a full great circle from a normal to a plane.
* \param normal the normal to the plane containing the great circle.
*/
X_monotone_curve_2 operator()(const Direction_3& normal);
/*! constructs the minor geodesic arc from two endpoints. The minor arc
* is the one with the smaller angle among the two geodesic arcs with
* the given endpoints.
* 1. Find out whether the arc is x-monotone.
* 2. If it is x-monotone,
* 1. Find out whether it is vertical, and
* 2. whether the target is larger than the source (directed right).
*
* An arc is vertical, iff
* 1. one of its endpoint direction pierces a pole, or
* 2. the projections of the endpoint directions onto the xy-plane coincide.
*
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \pre p and q must not coincide.
* \pre p and q cannot be antipodal.
*/
Curve_2 operator()(const Point_2& p, const Point_2& q);
/*! constructs a geodesic arc from two endpoints and a normal to the plane
* containing the arc. The two endpoints determine the plane. The normal
* determines the orientation of the plane and the final arc (whether its
* the minor arc or the major arc). The right-hand rule can be used
* to select the appropriate normal.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \param[in] normal the normal to the oriented plane containing the arc.
* \pre Both endpoints lie on the given oriented plane.
*/
Curve_2 operator()(const Point_2& p, const Point_2& q,
const Direction_3& normal);
/// @}
};
/*! returns an instance of `Construct_point_2`.
*/
Construct_point_2 construct_point_2_object() const;
/*! returns an instance of `Construct_x_monotone_curve_2`.
*/
Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object() const;
/*! returns an instance of `Construct_curve_2`.
*/
Construct_curve_2 construct_curve_2_object() const;
}; };
/*! The `X_monotone_curve_2` class nested within the traits is used to
* represent an \f$x\f$-monotone geodesic arc on the a sphere centered at
* the origin. The pre-image of an \f$x\f$-monotone geodesic arc does not
* intersect the identified left and right sides of the boundary of the
* parameter space.
*
* \cgalModels{Assignable,DefaultConstructible,CopyConstructible}
*/
class X_monotone_curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
/// @}
/// \name Creation
/// @{
/*! constructs an \f$x\f$-monotone geodesic arc.
* \param[in] source the source point of the arc.
* \param[in] target the target point of the arc.
* \param[in] normal the normal of the plane that contains the arc.
* \param[in] is_vertical is the arc vertical ?
* \param[in] is_directed_right is the arc directed from left to right?
* \param[in] is_full is the arc a full great circle?
* \param[in] is_degenerate is the arc degenerate (single point)?
* \param[in] is_empty is the arc empty?
*
* \pre Both endpoints lie on the given plane.
*/
X_monotone_curve_2(const Point_2& source,
const Point_2& target,
const Direction_3& normal,
bool is_vertical,
bool is_directed_right,
bool is_full = false,
bool is_degenerate = false,
bool is_empty = false);
/*! constructs an \f$x\f$-monotone geodesic arc.
* \param[in] normal the normal of the plane containing the arc.
* \param[in] source the source-point direction.
* \param[in] target the target-point direction.
*
* \pre Both endpoints lie on the given plane.
*/
X_monotone_curve_2(const Point_2& source,
const Point_2& target,
const Direction_3& normal);
/*! constructs a full great-circle.
* \param[in] point the endpoint of the full great-circle.
* \param[in] normal the normal of the plane containing the arc.
*
* \pre the point lies on the given plane.
* \pre the point pre-image lies on the identified left and right sides
* of the boundary of the parameter space.
*/
X_monotone_curve_2(const Point_2& point,
const Direction_3& normal);
/// @}
/// \name Operations
/// @{
/*! sets the source endpoint.
* \param[in] source the updated source endpoint.
*/
void set_source(const Point_2& source);
/*! sets the target endpoint.
* \param[in] target the updated target endpoint.
*/
void set_target(const Point_2& target);
/*! sets the normal of the underlying plane.
* \param[in] normal the updated normal of the underlying plane.
*/
void set_normal(const Direction_3& normal);
/*! sets the flag that indicates whether the arc is vertical.
* \param[in] flag indicates whether the arc pre-image in the parameter
* space is vertical.
*/
void set_is_vertical(bool flag);
/*! sets the flag that indicates whether the direction of the arc
* pre-image in the parameter space is from left to right.
* \param flag indicates whether the arc pre-image in the parameter
* space is from left to right.
*/
void set_is_directed_right(bool flag);
/*! sets the flag that indicates whether the arc is a full great circle.
* \param[in] flag indicates whether the arc is a full great circle.
*/
void set_is_full(bool flag);
/*! sets the flag that indicates whether the arc degenerates to a point.
* \param[in] flag indicates whether the arc degenerates to a point.
*/
void set_is_degenerate(bool flag);
/*! sets the flag that indicates whether the arc is empty.
* \param[in] flag indicates whether the arc is empty.
*/
void set_is_empty(bool flag);
/*! obtains the source point.
*/
const Point_2& source() const;
/*! obtains the target point.
*/
const Point_2& target() const;
/*! obtains the normal to the containing plane.
*/
const Direction_3& normal() const;
/*! obtains the (lexicographically) left endpoint direction.
*/
const Point_2& left() const;
/*! obtains the (lexicographically) right endpoint.
*/
const Point_2& right() const;
/*! Determines whether the arc is vertical.
*/
bool is_vertical() const;
/*! determines whether the arc is directed lexicographically from left to right.
*/
bool is_directed_right() const;
/*! determines whether the arc is a great circle.
*/
bool is_full() const;
/*! determines whether the arc is degenerate.
*/
bool is_degenerate() const;
/*! determines whether the arc is empty. */
bool is_empty() const;
/*! determines whether the arc is a meridian.
*/
bool is_meridian() const;
/// @}
};
/*!
*/
class Curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
/// @}
/// \name Creation
/// @{
/// @}
/// \name Operations
/// @{
/// @}
};
/*! Construction functor of a point.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableTernaryFunction}
*/
/*!
*/
class Construct_point_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 result_type;
typedef typename Kernel::FT FT;
typedef typename Kernel::Direction_3 Direction_3;
/// @}
/// \name Operations
/// @{
/*! constructs a point on the sphere from three coordinates, which define
* a (not necessarily normalized) direction.
* \param[in] x the x coordinate
* \param[in] y the y coordinate
* \param[in] z the z coordinate
*/
Point_2 operator()(const FT& x, const FT& y, const FT& z);
/*! constructs a point on the sphere from a (not necessarily normalized)
* direction.
* \param other the other direction
*/
Point_2 operator()(const Direction_3& other);
/// @}
};
/*! Construction functor of \f$x\f$-monotone geodesic arcs.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableBinaryFunction,AdaptableTernaryFunction}
*/
class Construct_x_monotone_curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::X_monotone_curve_2 result_type;
typedef Kernel::Direction_3 Direction_3;
typedef Direction_3 argument_type;
/// @}
/// \name Operations
/// @{
/*! constructs the minor geodesic arc from two endpoints. The minor arc
* is the one with the smaller angle among the two geodesic arcs with
* the given endpoints.
* 1. Find out whether the arc is \f$x\f$-monotone.
* 2. If it is \f$x\f$-monotone,
* 2.1 Find out whether it is vertical, and
* 2.2 whether the target is larger than the source (directed right).
*
* An arc is vertical, iff
* 1. one of its endpoint direction pierces a pole, or
* 2. the projections of the endpoint directions onto the \f$xy\f$-plane coincide.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \pre p and q must not coincide.
* \pre p and q cannot be antipodal.
* \pre The constructed minor arc does not intersect the identification
* curve in its interior.
*/
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q);
/*! constructs a full great circle from a normal to a plane.
* Observe that the constructed arc has one endpoint that lies on
* the identification curve. This point is considered both the source and
* target (and also the left and right) point of the arc.
* \param normal the normal to the plane containing the great circle.
* \pre the plane is not vertical.
*/
X_monotone_curve_2 operator()(const Direction_3& normal);
/*! constructs a geodesic arc from two endpoints and a normal to the plane
* containing the arc. The two endpoints determine the plane. The normal
* determines the orientation of the plane and the final arc (whether its
* the minor arc or the major arc). The right-hand rule can be used
* to select the appropriate normal.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \param[in] normal the normal to the oriented plane containing the arc.
* \pre Both endpoints lie on the given oriented plane.
* \pre The constructed arc does not intersect the identification curve
* in its interior.
*/
X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q,
const Direction_3& normal);
/// @} /* end of operations */
};
/*! Construction functor of geodesic arcs.
*
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableBinaryFunction,AdaptableTernaryFunction}
*/
class Construct_curve_2 {
public:
/// \name Types
/// @{
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Point_2 Point_2;
typedef Arr_geodesic_arc_on_sphere_traits_2<Kernel, X, Y>::Curve_2 result_type;
typedef Kernel::Direction_3 Direction_3;
typedef Direction_3 argument_type;
/// @}
/// \name Operations
/// @{
/*! constructs a full great circle from a normal to a plane.
* \param normal the normal to the plane containing the great circle.
*/
X_monotone_curve_2 operator()(const Direction_3& normal);
/*! constructs the minor geodesic arc from two endpoints. The minor arc
* is the one with the smaller angle among the two geodesic arcs with
* the given endpoints.
* 1. Find out whether the arc is \f$x\f$-monotone.
* 2. If it is \f$x\f$-monotone,
* 1. Find out whether it is vertical, and
* 2. whether the target is larger than the source (directed right).
*
* An arc is vertical, iff
* 1. one of its endpoint direction pierces a pole, or
* 2. the projections of the endpoint directions onto the \f$xy\f$-plane coincide.
*
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \pre p and q must not coincide.
* \pre p and q cannot be antipodal.
*/
Curve_2 operator()(const Point_2& p, const Point_2& q);
/*! constructs a geodesic arc from two endpoints and a normal to the plane
* containing the arc. The two endpoints determine the plane. The normal
* determines the orientation of the plane and the final arc (whether its
* the minor arc or the major arc). The right-hand rule can be used
* to select the appropriate normal.
* \param[in] p the first endpoint.
* \param[in] q the second endpoint.
* \param[in] normal the normal to the oriented plane containing the arc.
*
* \pre Both endpoints lie on the given oriented plane.
*/
Curve_2 operator()(const Point_2& p, const Point_2& q,
const Direction_3& normal);
/// @}
};
/*! returns an instance of `Construct_point_2`.
*/
Construct_point_2 construct_point_2_object() const;
/*! returns an instance of `Construct_x_monotone_curve_2`.
*/
Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object() const;
/*! returns an instance of `Construct_curve_2`.
*/
Construct_curve_2 construct_curve_2_object() const;
};
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,62 +1,58 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2PointLocation
\ingroup PkgArrangementOnSurface2PointLocation *
* \anchor arr_reflm_pl
*
* The `Arr_landmarks_point_location` class implements a Jump & Walk algorithm,
* where special points, referred to as "landmarks", are chosen in a
* preprocessing stage, their place in the arrangement is found, and they are
* inserted into a data-structure that enables efficient nearest-neighbor search
* (a <span class="textsc">Kd</span>-tree). Given a query point, the nearest
* landmark is located and a "walk" strategy is applied from the landmark to the
* query point.
*
* There are various strategies to select the landmark set in the
* arrangement, where the strategy is determined by the
* `Generator` template parameter. The following landmark-generator
* classes are available:
* <DL>
* <DT><B>`Arr_landmarks_vertices_generator`</B><DD>
* The arrangement vertices are used as the landmarks set.
*
* <DT><B>`Arr_random_landmarks_generator`</B><DD>
* \f$n\f$ random points in the bounding box of the arrangement are chosen
* as the landmarks set.
*
* <DT><B>`Arr_halton_landmarks_generator`</B><DD>
* \f$n\f$ Halton points in the bounding box of the arrangement are chosen
* as the landmarks set.
*
* <DT><B>`Arr_middle_edges_landmarks_generator`</B><DD>
* The midpoint of each arrangement edge is computed, and the resulting
* set of points is used as the landmarks set. This generator can be applied
* only for arrangements of line segments.
*
* <DT><B>`Arr_grid_landmarks_generator`</B><DD>
* A set of \f$n\f$ landmarks are chosen on a
* \f$\lceil \sqrt{n} \rceil \times \lceil \sqrt{n} \rceil\f$
* grid that covers the bounding box of the arrangement.
* </DL>
* The `Arr_landmarks_vertices_generator` class is the default generator
* and used if no `Generator` parameter is specified.
*
* It is recommended to use the landmarks point-location strategy
* when the application frequently issues point-location queries on a
* rather static arrangement that the changes applied to it are mainly
* insertions of curves and not deletions of them.
*
* \cgalModels{AosPointLocation_2,AosVerticalRayShoot_2}
*
* \sa `AosPointLocation_2`
* \sa `AosVerticalRayShoot_2`
* \sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template <typename Arrangement, typename Generator>
class Arr_landmarks_point_location {};
\anchor arr_reflm_pl
The `Arr_landmarks_point_location` class implements a Jump & Walk algorithm, where special
points, referred to as "landmarks", are chosen in a preprocessing stage,
their place in the arrangement is found, and they are inserted into a
data-structure that enables efficient nearest-neighbor search (a
<span class="textsc">Kd</span>-tree). Given a query point, the nearest landmark is located and a
"walk" strategy is applied from the landmark to the query point.
There are various strategies to select the landmark set in the
arrangement, where the strategy is determined by the
`Generator` template parameter. The following landmark-generator
classes are available:
<DL>
<DT><B>`Arr_landmarks_vertices_generator` - </B><DD>
The arrangement vertices are used as the landmarks set.
<DT><B>`Arr_random_landmarks_generator` - </B><DD>
\f$ n\f$ random points in the bounding box of the arrangement are chosen
as the landmarks set.
<DT><B>`Arr_halton_landmarks_generator` - </B><DD>
\f$ n\f$ Halton points in the bounding box of the arrangement are chosen
as the landmarks set.
<DT><B>`Arr_middle_edges_landmarks_generator` - </B><DD>
The midpoint of each arrangement edge is computed, and the resulting
set of points is used as the landmarks set. This generator can be applied
only for arrangements of line segments.
<DT><B>`Arr_grid_landmarks_generator` - </B><DD>
A set of \f$ n\f$ landmarks are chosen on a
\f$ \lceil \sqrt{n} \rceil \times \lceil \sqrt{n} \rceil\f$
grid that covers the bounding box of the arrangement.
</DL>
The `Arr_landmarks_vertices_generator` class is the default generator
and used if no `Generator` parameter is specified.
It is recommended to use the landmarks point-location strategy
when the application frequently issues point-location queries on a
rather static arrangement that the changes applied to it are mainly
insertions of curves and not deletions of them.
\cgalModels{ArrangementPointLocation_2,ArrangementVerticalRayShoot_2}
\sa `ArrangementPointLocation_2`
\sa `ArrangementVerticalRayShoot_2`
\sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template< typename Arrangement, typename Generator >
class Arr_landmarks_point_location {
public:
}; /* end Arr_landmarks_point_location */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,19 +1,14 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* This class is a traits class for \cgal arrangements, built on top of a
* model of concept `CircularKernel`. It provides curves of type
* `CGAL::Line_arc_2<CircularKernel>`.
*
* \cgalModels{AosTraits_2}
*/
template <typename CircularKernel>
class Arr_line_arc_traits_2 {};
This class is a traits class for \cgal arrangements, built on top of a
model of concept `CircularKernel`. It provides curves of type
`CGAL::Line_arc_2<CircularKernel>`.
\cgalModels{ArrangementTraits_2}
*/
template< typename CircularKernel >
class Arr_line_arc_traits_2 {
public:
}; /* end Arr_line_arc_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -3,10 +3,10 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The traits class `Arr_linear_traits_2` is a model of the * The traits class `Arr_linear_traits_2` is a model of the
* `ArrangementTraits_2` concept, which enables the construction and maintenance * `AosTraits_2` concept, which enables the construction and maintenance
* of arrangements of linear objects. The linear objects may be bounded (line * of arrangements of linear objects. The linear objects may be bounded (line
* segments) or unbounded (rays and lines). Thus, it is also a model of the * segments) or unbounded (rays and lines). Thus, it is also a model of the
* concept `ArrangementOpenBoundaryTraits_2`. The traits class is parameterized * concept `AosOpenBoundaryTraits_2`. The traits class is parameterized
* parameterized with a \cgal-kernel model; see the reference page of * parameterized with a \cgal-kernel model; see the reference page of
* `Arr_segment_traits_2<Kernel>` for further explanations and recommendations * `Arr_segment_traits_2<Kernel>` for further explanations and recommendations
* on choosing a kernel. * on choosing a kernel.
@ -14,35 +14,34 @@ namespace CGAL {
* `Arr_linear_traits_2` defines `Kernel::Point_2` as its point type. The nested * `Arr_linear_traits_2` defines `Kernel::Point_2` as its point type. The nested
* `X_monotone_curve_2` and `Curve_2` types defined by the traits class (as is * `X_monotone_curve_2` and `Curve_2` types defined by the traits class (as is
* the case with the various segment-traits classes, both types refer to the * the case with the various segment-traits classes, both types refer to the
* same class, as <I>every</I> linear object is (weakly) \f$ x\f$-monotone), are * same class, as <I>every</I> linear object is (weakly) \f$x\f$-monotone), are
* constructible from a point, a line segment, a ray and from a line (objects of * constructible from a point, a line segment, a ray and from a line (objects of
* types `Kernel::Point_2`, `Kernel::Segment_2`, `Kernel::Ray_2` and * types `Kernel::Point_2`, `Kernel::Segment_2`, `Kernel::Ray_2` and
* `Kernel::Line_2`, respectively). On the other hand, when we are given a curve * `Kernel::Line_2`, respectively). On the other hand, when we are given a curve
* we can find out its actual type and convert it to the respective kernel * we can find out its actual type and convert it to the respective kernel
* object (say, to a `Kernel::Ray_2`). * object (say, to a `Kernel::Ray_2`).
* *
* \cgalModels{ArrangementTraits_2,ArrangementLandmarkTraits_2,ArrangementOpenBoundaryTraits_2} * \cgalModels{AosTraits_2,AosLandmarkTraits_2,AosOpenBoundaryTraits_2}
*/ */
template <typename Kernel> template <typename Kernel>
class Arr_linear_traits_2 { class Arr_linear_traits_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! ///
typedef typename Kernel::Segment_2 Segment_2; typedef typename Kernel::Segment_2 Segment_2;
//! ///
typedef typename Kernel::Ray_2 Ray_2; typedef typename Kernel::Ray_2 Ray_2;
//! ///
typedef typename Kernel::Line_2 Line_2; typedef typename Kernel::Line_2 Line_2;
//! ///
typedef typename Kernel::Point_2 Point_2; typedef typename Kernel::Point_2 Point_2;
//! ///
typedef typename X_monotone_curve_2 Curve_2; typedef typename X_monotone_curve_2 Curve_2;
/// @} /// @}
@ -57,20 +56,19 @@ public:
*/ */
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! ///
typedef typename Kernel::Point_2 Point_2; typedef typename Kernel::Point_2 Point_2;
//! ///
typedef typename Kernel::Segment_2 Segment_2; typedef typename Kernel::Segment_2 Segment_2;
//! ///
typedef typename Kernel::Ray_2 Ray_2; typedef typename Kernel::Ray_2 Ray_2;
//! ///
typedef typename Kernel::Line_2 Line_2; typedef typename Kernel::Line_2 Line_2;
/// @} /// @}
@ -139,7 +137,6 @@ public:
Point_2 target() const; Point_2 target() const;
/// @} /// @}
}; /* end Arr_linear_traits_2::X_monotone_curve_2 */ }; /* end Arr_linear_traits_2::X_monotone_curve_2 */
class Trim_2 { class Trim_2 {
@ -147,7 +144,7 @@ public:
/// \name Creation /// \name Creation
/// @{ /// @{
/*! trims the given x-monotone curve to an from src to tgt. /*! trims the given \f$x\f$-monotone curve to an from `src` to `tgt`.
* \ pre `src` and `tgt` lies on the curve * \ pre `src` and `tgt` lies on the curve
*/ */
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv, X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
@ -157,7 +154,6 @@ public:
} /* end Arr_linear_traits_2::Trim_2 */ } /* end Arr_linear_traits_2::Trim_2 */
Trim_2 trim_2_object() const; Trim_2 trim_2_object() const;
}; /* end Arr_linear_traits_2 */ }; /* end Arr_linear_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,28 +1,22 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2PointLocation
\ingroup PkgArrangementOnSurface2PointLocation *
* \anchor arr_refnaive_pl
*
* The `Arr_naive_point_location` class implements a naive algorithm that
* traverses all the vertices and halfedges in the arrangement in search for an
* answer to a point-location query. The query time is therefore linear in the
* complexity of the arrangement. Naturally, this point-location strategy could
* turn into a heavy time-consuming process when applied to dense arrangements.
*
* \cgalModels{AosPointLocation_2,AosVerticalRayShoot_2}
*
* \sa `AosPointLocation_2`
* \sa `AosVerticalRayShoot_2`
* \sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template <typename Arrangement>
class Arr_naive_point_location {};
\anchor arr_refnaive_pl
The `Arr_naive_point_location` class implements a naive algorithm that traverses
all the vertices and halfedges in the arrangement in search for an
answer to a point-location query.
The query time is therefore linear in the complexity of the arrangement.
Naturally, this point-location strategy could turn into a heavy
time-consuming process when applied to dense arrangements.
\cgalModels{ArrangementPointLocation_2,ArrangementVerticalRayShoot_2}
\sa `ArrangementPointLocation_2`
\sa `ArrangementVerticalRayShoot_2`
\sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template< typename Arrangement >
class Arr_naive_point_location {
public:
}; /* end Arr_naive_point_location */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,32 +1,26 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* The traits class `Arr_non_caching_segment_basic_traits_2` is a model of the
* `AosTraits_2` concept that allow the construction and maintenance of
* arrangements of sets of pairwise interior-disjoint line segments. It is
* templated with a \cgal-Kernel model, and it is derived from it. This traits
* class is a thin layer above the parameterized kernel. It inherits the
* `Point_2` from the kernel and its `X_monotone_curve_2` type is defined as
* `Kernel::Segment_2`. Most traits-class functor are inherited from the kernel
* functor, and the traits class only supplies the necessary functors that are
* not provided by the kernel. The kernel is parameterized with a number type,
* which should support the arithmetic operations \f$+\f$, \f$-\f$ and
* \f$\times\f$ in an exact manner in order to avoid robustness problems. Using
* `Cartesian<MP_Float>` or `Cartesian<Gmpz>` are possible substitutions for the
* kernel. Using other (inexact) number types (for example, instantiating the
* template with `Simple_cartesian<double>`) is also possible, at the user's own
* risk.
*
* \cgalModels{AosLandmarkTraits_2}
*/
template <typename Kernel>
class Arr_non_caching_segment_basic_traits_2 {};
The traits class `Arr_non_caching_segment_basic_traits_2` is a model of the `ArrangementTraits_2`
concept that allow the construction and maintenance of arrangements of
sets of pairwise interior-disjoint line segments. It is templated with a
\cgal-Kernel model, and it is derived from it. This traits class is a
thin layer above the parameterized kernel. It inherits the `Point_2`
from the kernel and its `X_monotone_curve_2` type is defined as
`Kernel::Segment_2`. Most traits-class functor are inherited from the
kernel functor, and the traits class only supplies the necessary functors
that are not provided by the kernel. The kernel is parameterized with a
number type, which should support the arithmetic operations \f$ +\f$, \f$ -\f$ and
\f$ \times\f$ in an exact manner in order to avoid robustness problems.
Using `Cartesian<MP_Float>` or `Cartesian<Gmpz>` are possible
substitutions for the kernel. Using other (inexact) number types
(for example, instantiating the template with
`Simple_cartesian<double>`) is also possible, at the user's own
risk.
\cgalModels{ArrangementLandmarkTraits_2}
*/
template< typename Kernel >
class Arr_non_caching_segment_basic_traits_2 {
public:
}; /* end Arr_non_caching_segment_basic_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,47 +1,41 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2TraitsClasses
\ingroup PkgArrangementOnSurface2TraitsClasses *
* The traits class `Arr_non_caching_segment_traits_2` is a model of the
* `AosTraits_2` concept that allows the construction and maintenance of
* arrangements of line segments. It is parameterized with a \cgal-Kernel type,
* and it is derived from it. This traits class is a thin layer above the
* parameterized kernel. It inherits the `Point_2` from the kernel and its
* `X_monotone_curve_2` and `Curve_2` types are both defined as
* `Kernel::Segment_2`. Most traits-class functor are inherited from the kernel
* functor, and the traits class only supplies the necessary functors that are
* not provided by the kernel. The kernel is parameterized with a number type,
* which should support exact rational arithmetic in order to avoid robustness
* problems, although other number types could be used at the user's own risk.
*
* The traits-class implementation is very simple, yet may lead to a cascaded
* representation of intersection points with exponentially long bit-lengths,
* especially if the kernel is parameterized with a number type that does not
* perform normalization (e.g. `Quotient<MP_Float>`). The
* `Arr_segment_traits_2` traits class avoids this cascading problem, and should
* be the default choice for implementing arrangements of line segments. It is
* recommended to use `Arr_non_caching_segment_traits_2` only for very sparse
* arrangements of huge sets of input segments.
*
* While `Arr_non_caching_segment_traits_2` models the concept
* `AosDirectionalXMonotoneTraits_2`, the implementation of the
* `Are_mergeable_2` operation does not enforce the input curves to have the
* same direction as a precondition. Moreover,
* `Arr_non_caching_segment_traits_2` supports the merging of curves of opposite
* directions.
*
* \cgalModels{AosTraits_2,AosLandmarkTraits_2,AosDirectionalXMonotoneTraits_2}
*
* \sa `Arr_segment_traits_2<Kernel>`
*/
template <typename Kernel>
class Arr_non_caching_segment_traits_2 :
public Arr_non_caching_segment_basic_traits_2<Kernel> {};
The traits class `Arr_non_caching_segment_traits_2` is a model of the `ArrangementTraits_2`
concept that allows the construction and maintenance of arrangements of
line segments. It is parameterized with a \cgal-Kernel type, and it
is derived from it. This traits class is a thin layer above the
parameterized kernel. It inherits the `Point_2` from the kernel and its
`X_monotone_curve_2` and `Curve_2` types are both defined as
`Kernel::Segment_2`. Most traits-class functor are inherited from the
kernel functor, and the traits class only supplies the necessary functors
that are not provided by the kernel. The kernel is parameterized with a
number type, which should support exact rational arithmetic in order to
avoid robustness problems, although other number types could be used at the
user's own risk.
The traits-class implementation is very simple, yet may lead to
a cascaded representation of intersection points with exponentially long
bit-lengths, especially if the kernel is parameterized with a number type
that does not perform normalization (e.g. `Quotient<MP_Float>`).
The `Arr_segment_traits_2` traits class avoids this cascading
problem, and should be the default choice for implementing arrangements of
line segments. It is recommended to use `Arr_non_caching_segment_traits_2` only for very sparse
arrangements of huge sets of input segments.
While `Arr_non_caching_segment_traits_2` models the concept
`ArrangementDirectionalXMonotoneTraits_2`, the implementation of
the `Are_mergeable_2` operation does not enforce the input curves
to have the same direction as a precondition. Moreover, `Arr_non_caching_segment_traits_2`
supports the merging of curves of opposite directions.
\cgalModels{ArrangementTraits_2,ArrangementLandmarkTraits_2,ArrangementDirectionalXMonotoneTraits_2}
\sa `Arr_segment_traits_2<Kernel>`
*/
template< typename Kernel >
class Arr_non_caching_segment_traits_2
: public Arr_non_caching_segment_basic_traits_2<Kernel>
{
public:
}; /* end Arr_non_caching_segment_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,75 +1,72 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2Funcs
\ingroup PkgArrangementOnSurface2Funcs * \brief Computes the overlay of two arrangements `arr1` and `arr2`, and sets
\brief Computes the overlay of two arrangements `arr1` and `arr2`, and sets * the output arrangement `res` to represent the overlaid arrangement.
the output arrangement `res` to represent the overlaid arrangement. *
* \details
* Computes the overlay of two input arrangement
* objects, and returns the overlaid arrangement. All three arrangements
* can be instantiated with different geometric traits classes and different
* \dcel classes (encapsulated in the various topology-traits classes).
* The geometry traits of the resulting arrangement is used to construct the
* resulting arrangement. This means that all the types (e.g.,
* `Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
* of both input arrangements have to be convertible to the types in the
* resulting arrangement. A given overlay-traits object is used to properly
* construct the overlaid \dcel that represents the resulting arrangement.
*
* \pre `res` does not refer to either `arr1` or `arr2` (that is,
* "self overlay" is not supported).
*
* \pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
* concept, which is able to construct records of the `ResDcel` class on
* the basis of the `Dcel1` and `Dcel2` records that induce them.
*
* \sa `OverlayTraits`
*/
template <typename GeomTraitsA, typename GeomTraitsB,
typename GeomTraitsRes, typename TopTraitsA,
typename TopTraitsB, typename TopTraitsRes,
typename OverlayTraits>
void overlay(const Arrangement_2<GeomTraitsA, TopTraitsA>& arr1,
const Arrangement_2<GeomTraitsB, TopTraitsB>& arr2,
Arrangement_2<GeomTraitsRes, TopTraitsRes>& arr_res,
OverlayTraits& ovl_tr);
\details /*! \ingroup PkgArrangementOnSurface2Funcs
Computes the overlay of two input arrangement * \brief
objects, and returns the overlaid arrangement. All three arrangements * Computes the overlay of two arrangements with history `arr1` and
can be instantiated with different geometric traits classes and different * `arr2`, and sets the output arrangement with history `res` to
\dcel classes (encapsulated in the various topology-traits classes). * represent the overlaid arrangement. The function also constructs a
The geometry traits of the resulting arrangement is used to construct the * consolidated set of curves that induce `res`.
resulting arrangement. This means that all the types (e.g., *
`Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`) * \details
of both input arrangements have to be convertible to the types in the * Computes the overlay of two input arrangement
resulting arrangement. A given overlay-traits object is used to properly * objects, and returns the overlaid arrangement. All three arrangements
construct the overlaid \dcel that represents the resulting arrangement. * can be instantiated with different geometric traits classes and different
* \dcel classes (encapsulated in the various topology-traits classes).
\pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" is not supported). * The geometry traits of the resulting arrangement is used to construct the
* resulting arrangement. This means that all the types (e.g.,
\pre The overlay-traits object `ovl_tr` must model the `OverlayTraits` * `Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
concept, which is able to construct records of the `ResDcel` class on * of both input arrangements have to be convertible to the types in the
the basis of the `Dcel1` and `Dcel2` records that induce them. * resulting arrangement. A given overlay-traits object is used to properly
* construct the overlaid \dcel that represents the resulting arrangement.
\sa `OverlayTraits` *
*/ * \pre `res` does not refer to either `arr1` or `arr2` (that is,
template <class GeomTraitsA, class GeomTraitsB, * "self overlay" is not supported).
class GeomTraitsRes, class TopTraitsA, *
class TopTraitsB, class TopTraitsRes, * \pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
class OverlayTraits> * concept, which is able to construct records of the `ResDcel` class on
void overlay (const Arrangement_2<GeomTraitsA, TopTraitsA>& arr1, * the basis of the `Dcel1` and `Dcel2` records that induce them.
const Arrangement_2<GeomTraitsB, TopTraitsB>& arr2, *
Arrangement_2<GeomTraitsRes, TopTraitsRes>& arr_res, * \sa `OverlayTraits`
OverlayTraits& ovl_tr); */
template <typename Traits, typename Dcel1, typename Dcel2,
/*!
\ingroup PkgArrangementOnSurface2Funcs
\brief Computes the overlay of two arrangements with history `arr1` and
`arr2`, and sets the output arrangement with history `res` to
represent the overlaid arrangement. The function also constructs a
consolidated set of curves that induce `res`.
\details
Computes the overlay of two input arrangement
objects, and returns the overlaid arrangement. All three arrangements
can be instantiated with different geometric traits classes and different
\dcel classes (encapsulated in the various topology-traits classes).
The geometry traits of the resulting arrangement is used to construct the
resulting arrangement. This means that all the types (e.g.,
`Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
of both input arrangements have to be convertible to the types in the
resulting arrangement. A given overlay-traits object is used to properly
construct the overlaid \dcel that represents the resulting arrangement.
\pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" is not supported).
\pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
concept, which is able to construct records of the `ResDcel` class on
the basis of the `Dcel1` and `Dcel2` records that induce them.
\sa `OverlayTraits`
*/
template<typename Traits, typename Dcel1, typename Dcel2,
typename ResDcel, typename OverlayTraits> typename ResDcel, typename OverlayTraits>
void overlay (const Arrangement_with_history_2<Traits,Dcel1>& arr1, void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1,
const Arrangement_with_history_2<Traits,Dcel2>& arr2, const Arrangement_with_history_2<Traits,Dcel2>& arr2,
Arrangement_with_history_2<Traits,ResDcel>& res, Arrangement_with_history_2<Traits,ResDcel>& res,
OverlayTraits& ovl_tr); OverlayTraits& ovl_tr);
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -8,16 +8,15 @@ namespace CGAL {
* \tparam Arrangement must be an instance of the * \tparam Arrangement must be an instance of the
* `CGAL::Arrangement_on_surface_2<GeometryTraits,Topology>` class template. * `CGAL::Arrangement_on_surface_2<GeometryTraits,Topology>` class template.
* *
* \sa `ArrangementPointLocation_2` * \sa `AosPointLocation_2`
* \sa `ArrangementVerticalRayShoot_2` * \sa `AosVerticalRayShoot_2`
* \sa `CGAL::Arr_naive_point_location<Arrangement>` * \sa `CGAL::Arr_naive_point_location<Arrangement>`
* \sa `CGAL::Arr_walk_along_line_point_location<Arrangement>` * \sa `CGAL::Arr_walk_along_line_point_location<Arrangement>`
* \sa `CGAL::Arr_landmarks_point_location<Arrangement,Generator>` * \sa `CGAL::Arr_landmarks_point_location<Arrangement,Generator>`
* \sa `CGAL::Arr_trapezoid_ric_point_location<Arrangement>` * \sa `CGAL::Arr_trapezoid_ric_point_location<Arrangement>`
*/ */
template <typename Arrangement> template <typename Arrangement>
struct Arr_point_location_result struct Arr_point_location_result {
{
/*! The type of the arrangement feature that is the result of a /*! The type of the arrangement feature that is the result of a
* point-location query or a vertical ray-shoot query, namely, * point-location query or a vertical ray-shoot query, namely,
* `std::variant<Arrangement_on_surface_2::Vertex_const_handle, Arrangement_on_surface_2::Halfedge_const_handle, Arrangement_on_surface_2::Face_const_handle>` * `std::variant<Arrangement_on_surface_2::Vertex_const_handle, Arrangement_on_surface_2::Halfedge_const_handle, Arrangement_on_surface_2::Face_const_handle>`

View File

@ -30,15 +30,15 @@ namespace CGAL {
* The type substituting the template parameter `SegmentTraits_2` when * The type substituting the template parameter `SegmentTraits_2` when
* the template Arr_polyline_traits_2 is instantiated must be a model * the template Arr_polyline_traits_2 is instantiated must be a model
* of the concepts * of the concepts
* - `ArrangementTraits_2`, * - `AosTraits_2`,
* - `ArrangementDirectionalXMonotoneTraits_2`, * - `AosDirectionalXMonotoneTraits_2`,
* - `ArrangementConstructXMonotoneCurveTraits_2`, * - `AosConstructXMonotoneCurveTraits_2`,
* - `ArrangementConstructCurveTraits_2`. * - `AosConstructCurveTraits_2`.
* *
* If, in addition, the GeometryTraits_2 models the concept * If, in addition, the GeometryTraits_2 models the concept
* `ArrangementApproximateTraits_2` then `Arr_polycurve_traits_2` models * `AosApproximateTraits_2` (or `AosApproximatePointTraits_2`) then
* this concept as well. The same holds for the concept * `Arr_polycurve_traits_2` models this concept as well. The same holds for the
* `ArrangementOpenBoundaryTraits_2`. If no type is provided, then * concept `AosOpenBoundaryTraits_2`. If no type is provided, then
* `Arr_segment_traits_2` (instantiated with * `Arr_segment_traits_2` (instantiated with
* `Exact_predicates_exact_constructions_kernel` as the kernel) is used. * `Exact_predicates_exact_constructions_kernel` as the kernel) is used.
* Otherwise, * Otherwise,
@ -52,17 +52,17 @@ namespace CGAL {
* *
* The number type used by the injected segment traits should support exact * The number type used by the injected segment traits should support exact
* rational arithmetic (that is, the number type should support the arithmetic * rational arithmetic (that is, the number type should support the arithmetic
* operations \f$ +\f$, \f$ -\f$, \f$ \times\f$ and \f$ \div\f$ carried out * operations \f$+\f$, \f$-\f$, \f$\times\f$ and \f$\div\f$ carried out
* without loss of precision), in order to avoid robustness problems, although * without loss of precision), in order to avoid robustness problems, although
* other inexact number types could be used at the user's own risk. * other inexact number types could be used at the user's own risk.
* *
* A polyline that comprises \f$n > 0\f$ segments has \f$ n+1 \f$ points, and * A polyline that comprises \f$n > 0\f$ segments has \f$n+1\f$ points, and
* they are represented as objects of type `SegmentTraits_2::Point_2`. Since the * they are represented as objects of type `SegmentTraits_2::Point_2`. Since
* notion of a \a vertex is reserved to 0-dimensional elements of an * the notion of a \a vertex is reserved to 0-dimensional elements of an
* arrangement, we use, in this context, the notion of \a points in order to * arrangement, we use, in this context, the notion of \a points in order to
* refer to the vertices of a polyline. For example, an arrangement induced by a * refer to the vertices of a polyline. For example, an arrangement induced by
* single non-self intersecting polyline has exactly two vertices regardless of * a single non-self intersecting polyline has exactly two vertices regardless
* the number of points. Finally, the types `Segment_2` and * of the number of points. Finally, the types `Segment_2` and
* `X_monotone_segment_2` nested in `Arr_polyline_traits_2` are nothing but * `X_monotone_segment_2` nested in `Arr_polyline_traits_2` are nothing but
* `SegmentTraits_2::Curve_2` and `SegmentTraits_2::X_monotone_curve_2`, * `SegmentTraits_2::Curve_2` and `SegmentTraits_2::X_monotone_curve_2`,
* respectively. * respectively.
@ -77,9 +77,9 @@ namespace CGAL {
* the macro `CGAL_ALWAYS_LEFT_TO_RIGHT` to 1 before any \cgal header is * the macro `CGAL_ALWAYS_LEFT_TO_RIGHT` to 1 before any \cgal header is
* included. * included.
* *
* \cgalModels{ArrangementTraits_2,ArrangementDirectionalXMonotoneTraits_2,`ArrangementConstructXMonotoneCurveTraits_2` * \cgalModels{AosTraits_2,AosDirectionalXMonotoneTraits_2,AosConstructXMonotoneCurveTraits_2,AosConstructCurveTraits_2,AosApproximateTraits_2
* ArrangementConstructCurveTraits_2,ArrangementApproximateTraits_2 (if the type that substitutes * (if the type that substitutes the template parameter `SegmentTraits_2`
* the template parameter `SegmentTraits_2` models the concept as well)} * models the concept as well)}
* *
* \sa `Arr_polycurve_traits_2<SubcurveTraits_2>` * \sa `Arr_polycurve_traits_2<SubcurveTraits_2>`
* \sa `Arr_Bezier_curve_traits_2<RatKernel, AlgKernel, NtTraits>` * \sa `Arr_Bezier_curve_traits_2<RatKernel, AlgKernel, NtTraits>`
@ -91,22 +91,23 @@ namespace CGAL {
* \sa `CGAL_ALWAYS_LEFT_TO_RIGHT` * \sa `CGAL_ALWAYS_LEFT_TO_RIGHT`
*/ */
template <typename SegmentTraits_2> template <typename SegmentTraits_2>
class Arr_polyline_traits_2 : public Arr_polycurve_traits_2<SegmentTraits_2>{ class Arr_polyline_traits_2 : public Arr_polycurve_traits_2<SegmentTraits_2> {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*!
*/ ///
typedef SegmentTraits_2 Segment_traits_2; typedef SegmentTraits_2 Segment_traits_2;
// TODO: Have to turn these into links, so whenever I mention Point_2 it
// will point here and *not* to Kernel::Point_2 for instance. ///
typedef SegmentTraits_2::Point_2 Point_2; typedef SegmentTraits_2::Point_2 Point_2;
/*! ///
*/
typedef SegmentTraits_2::Curve_2 Segment_2; typedef SegmentTraits_2::Curve_2 Segment_2;
///
typedef SegmentTraits_2::X_monotone_curve_2 X_monotone_segment_2; typedef SegmentTraits_2::X_monotone_curve_2 X_monotone_segment_2;
/// @} /// @}
/*! The `Curve_2` type nested within the traits class respresnts /*! The `Curve_2` type nested within the traits class respresnts
@ -114,18 +115,18 @@ public:
*/ */
class Curve_2 { class Curve_2 {
public: public:
//! Const iterator of subcurves. /// Const iterator of subcurves.
typedef std::vector<X_monotone_segment_2>::const_iterator typedef std::vector<X_monotone_segment_2>::const_iterator
Segment_const_iterator; Segment_const_iterator;
//! Reverse const iterator of subcurves. /// Reverse const iterator of subcurves.
typedef std::reverse_iterator<Segment_const_iterator> typedef std::reverse_iterator<Segment_const_iterator>
Segment_const_reverse_iterator; Segment_const_reverse_iterator;
//! constructs default. /// constructs default.
Curve_2(); Curve_2();
//! constructs from a subcurve. /// constructs from a subcurve.
Curve_2(const Segment_2& seg); Curve_2(const Segment_2& seg);
/*! constructs a polyline from a range of subcurves. /*! constructs a polyline from a range of subcurves.
@ -137,16 +138,16 @@ public:
template <typename InputIterator> template <typename InputIterator>
void Curve_2(InputIterator begin, InputIterator end); void Curve_2(InputIterator begin, InputIterator end);
//! obtains an iterator for the polycurve subcurves. /// obtains an iterator for the polycurve subcurves.
Segment_const_iterator begin_segments() const; Segment_const_iterator begin_segments() const;
//! obtains a past-the-end iterator for the polycurve subcurves. /// obtains a past-the-end iterator for the polycurve subcurves.
Segment_const_iterator end_segments() const; Segment_const_iterator end_segments() const;
//! obtains the first reverse iterator of the polyline subcurves. /// obtains the first reverse iterator of the polyline subcurves.
Segment_const_reverse_iterator rbegin_segments() const; Segment_const_reverse_iterator rbegin_segments() const;
//! obtains the past-the-end reverse iterator for the polyline points. /// obtains the past-the-end reverse iterator for the polyline points.
Segment_const_reverse_iterator rend_segments() const; Segment_const_reverse_iterator rend_segments() const;
/*! obtains the number of subcurves that comprise the poyline. /*! obtains the number of subcurves that comprise the poyline.
@ -161,11 +162,11 @@ public:
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
//! Const iterator of subcurves. /// Const iterator of subcurves.
typedef std::vector<X_monotone_segment_2>::const_iterator typedef std::vector<X_monotone_segment_2>::const_iterator
Segment_const_iterator; Segment_const_iterator;
//! Reverse const iterator of subcurves. /// Reverse const iterator of subcurves.
typedef std::reverse_iterator<Segment_const_iterator> typedef std::reverse_iterator<Segment_const_iterator>
Segment_const_reverse_iterator; Segment_const_reverse_iterator;
@ -177,8 +178,8 @@ public:
/*! constructs from a range. Similar to the constructor of a general /*! constructs from a range. Similar to the constructor of a general
* polycurve. Like in the case of general polycurve, for the sake of * polycurve. Like in the case of general polycurve, for the sake of
* backwards compatibility we have to keep an implementation of construction * backwards compatibility we have to keep an implementation of
* from a range of points. DO NOT USE THIS CONSTRUCTION. * construction from a range of points. DO NOT USE THIS CONSTRUCTION.
*/ */
template <typename InputIterator> template <typename InputIterator>
X_monotone_curve_2(InputIterator begin, InputIterator end); X_monotone_curve_2(InputIterator begin, InputIterator end);
@ -222,15 +223,15 @@ public:
/*! obtains a polyline connecting the two given endpoints. /*! obtains a polyline connecting the two given endpoints.
* \param p The first point. * \param p The first point.
* \param q The second point. * \param q The second point.
* \pre `p` and `q` are distinct.
* \return A segment connecting `p` and `q`. * \return A segment connecting `p` and `q`.
* \pre `p` and `q` are distinct.
*/ */
Curve_2 operator()(const Point_2& p, const Point_2& q) const; Curve_2 operator()(const Point_2& p, const Point_2& q) const;
/*! obtains a polyline that comprises of one given segment. /*! obtains a polyline that comprises of one given segment.
* \param seg input segment * \param seg input segment
* \pre `seg` is not degenerated (not tested)
* \return A polyline with one segment, namely `seg`. * \return A polyline with one segment, namely `seg`.
* \pre `seg` is not degenerated (not tested)
*/ */
Curve_2 operator()(const Segment_2& seg) const; Curve_2 operator()(const Segment_2& seg) const;
@ -239,10 +240,10 @@ public:
* *
* \param begin iterator pointing to the first element in the range. * \param begin iterator pointing to the first element in the range.
* \param end iterator pointing to the past-the-end element in the range. * \param end iterator pointing to the past-the-end element in the range.
* \return A polyline using the corresponding construction implementation.
* \pre The given range form a continuous and well-oriented polyline * \pre The given range form a continuous and well-oriented polyline
* (not tested). * (not tested).
* \pre Contains no degenerated segments (not tested) * \pre Contains no degenerated segments (not tested)
* \return A polyline using the corresponding construction implementation.
*/ */
template <typename ForwardIterator> template <typename ForwardIterator>
Curve_2 operator()(ForwardIterator begin, ForwardIterator end) const; Curve_2 operator()(ForwardIterator begin, ForwardIterator end) const;
@ -272,7 +273,7 @@ public:
/*! appends a point `p` to an existing polyline `cv` at the back. /*! appends a point `p` to an existing polyline `cv` at the back.
* \param cv a polyline. Note, `cv` is not (necessarily) * \param cv a polyline. Note, `cv` is not (necessarily)
* \f$ x\f$-monotone. * \f$x\f$-monotone.
* \param p a point to be appended to `cv` at the back. * \param p a point to be appended to `cv` at the back.
* \pre `cv` contains at least one segment. * \pre `cv` contains at least one segment.
*/ */
@ -322,7 +323,7 @@ public:
/*! appends a point `p` to an existing polyline `cv` at the front. /*! appends a point `p` to an existing polyline `cv` at the front.
* \param cv a polyline. Note, `cv` is not (necessarily) * \param cv a polyline. Note, `cv` is not (necessarily)
* \f$ x\f$-monotone. * \f$x\f$-monotone.
* \param p a point to be appended to `cv` at the back. * \param p a point to be appended to `cv` at the back.
* \pre `cv` contains at least one segment. * \pre `cv` contains at least one segment.
*/ */
@ -382,7 +383,6 @@ public:
Push_front_2 push_front_2_object() const; Push_front_2 push_front_2_object() const;
/// @} /* End Accessing Functor Objects */ /// @} /* End Accessing Functor Objects */
}; /* end Arr_polyline_traits_2 */ }; /* end Arr_polyline_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,30 +1,28 @@
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The traits class `Arr_rational_function_traits_2` is a model of the * The traits class `Arr_rational_function_traits_2` is a model of the
* `ArrangementTraits_2` concept. It handles bounded and unbounded arcs of * `AosTraits_2` concept. It handles bounded and unbounded arcs of
* rational functions, referred to as <i>rational arcs</i> (in particular, such * rational functions, referred to as <i>rational arcs</i> (in particular, such
* an arc may correspond to the entire graph of a rational function). It * an arc may correspond to the entire graph of a rational function). It
* supports bounded and unbounded arcs. Thus, it is also a model of the concept * supports bounded and unbounded arcs. Thus, it is also a model of the concept
* `ArrangementOpenBoundaryTraits_2`. The traits class enables the construction * `AosOpenBoundaryTraits_2`. The traits class enables the construction
* and maintenance of arrangements of such arcs. * and maintenance of arrangements of such arcs.
* *
* A rational function \f$y = \frac{P(x)}{Q(x)}\f$ is defined by two polynomials * A rational function \f$y = \frac{P(x)}{Q(x)}\f$ is defined by two polynomials
* \f$P\f$ and \f$Q\f$ of arbitrary degrees. If \f$Q(x) = 1\f$ then the * \f$P\f$ and \f$Q\f$ of arbitrary degrees. If \f$Q(x) = 1\f$ then the
* function is a simple polynomial function. Usually the domain is * function is a simple polynomial function. Usually the domain is
* \f$\mathbb{R}\f$ but the function may also be restricted to a bounded * \f$\mathbb{R}\f$ but the function may also be restricted to a bounded
* interval \f$[x_{\rm min}, x_{\rm max}]\f$ or defined over a ray \f$(-\infty, * interval \f$[x_{\rm min}, x_{\rm max}]\f$ or defined over a ray
* x_{\rm max}]\f$ or over \f$[x_{\rm min}, \infty)\f$. Rational functions are * \f$(-\infty,x_{\rm max}]\f$ or over \f$[x_{\rm min}, \infty)\f$. Rational
* represented by the nested type `Curve_2`. Note that a rational function may * functions are represented by the nested type `Curve_2`. Note that a rational
* be not continuous since roots of \f$Q\f$ induce vertical asymptotes, which * function may be not continuous since roots of \f$Q\f$ induce vertical asymptotes,
* would contradict the notion of an \f$x\f$-monotone curve as it is introduced * which would contradict the notion of an \f$x\f$-monotone curve as it is introduced
* by the `ArrangementTraits_2` concept. Thus, continuous portions of rational * by the `AosTraits_2` concept. Thus, continuous portions of rational functions are
* functions are represented by the nested type `X_monotone_curve_2`, which is * represented by the nested type `X_monotone_curve_2`, which is different from
* different from `Curve_2`. Constructors for both classes are provided by the * `Curve_2`. Constructors for both classes are provided by the traits. A `Curve_2`
* traits. A `Curve_2` may be split up into several `X_monotone_curve_2` using * may be split up into several `X_monotone_curve_2` using `Make_x_monotone_2`.
* `Make_x_monotone_2`.
* *
* The template parameter of the traits must be a model of the concept * The template parameter of the traits must be a model of the concept
* `AlgebraicKernel_d_1`. A rational function is then represented by two * `AlgebraicKernel_d_1`. A rational function is then represented by two
@ -44,12 +42,12 @@ namespace CGAL {
* cleans up the cache on demand. * cleans up the cache on demand.
* *
* While `Arr_rational_function_traits_2` models the concept * While `Arr_rational_function_traits_2` models the concept
* `ArrangementDirectionalXMonotoneTraits_2`, the implementation of the * `AosDirectionalXMonotoneTraits_2`, the implementation of the
* `Are_mergeable_2` operation does not enforce the input curves to have the * `Are_mergeable_2` operation does not enforce the input curves to have the
* same direction as a precondition. Moreover, `Arr_rational_function_traits_2` * same direction as a precondition. Moreover, `Arr_rational_function_traits_2`
* supports the merging of curves of opposite directions. * supports the merging of curves of opposite directions.
* *
* \cgalModels{ArrangementTraits_2,ArrangementDirectionalXMonotoneTraits_2,ArrangementOpenBoundaryTraits_2} * \cgalModels{AosTraits_2,AosDirectionalXMonotoneTraits_2,AosOpenBoundaryTraits_2}
*/ */
template <typename AlgebraicKernel_d_1> template <typename AlgebraicKernel_d_1>
class Arr_rational_function_traits_2 { class Arr_rational_function_traits_2 {
@ -57,24 +55,19 @@ public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1 Algebraic_kernel_d_1; typedef AlgebraicKernel_d_1 Algebraic_kernel_d_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Coefficient Coefficient; typedef AlgebraicKernel_d_1::Coefficient Coefficient;
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Bound Bound; typedef AlgebraicKernel_d_1::Bound Bound;
/// @} /// @}
@ -83,7 +76,7 @@ public:
/// @{ /// @{
/*! constructs an empty traits that uses the kernel pointed by `kernel` /*! constructs an empty traits that uses the kernel pointed by `kernel`
* for performing algebraic operations. * for performing algebraic operations.
*/ */
Arr_rational_function_traits_2<AlgebraicKernel_d_1>(const Algebraic_kernel_d_1* kernel); Arr_rational_function_traits_2<AlgebraicKernel_d_1>(const Algebraic_kernel_d_1* kernel);
@ -116,34 +109,27 @@ public:
* *
* \cgalModels{Assignable,CopyConstructible,AdaptableBinaryFunction,AdaptableUnaryFunction} * \cgalModels{Assignable,CopyConstructible,AdaptableBinaryFunction,AdaptableUnaryFunction}
*/ */
class Construct_curve_2 { class Construct_curve_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/*! ///
*/
typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::Curve_2 result_type; typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::Curve_2 result_type;
/*! ///
*/
typedef Polynomial_1 argument_type; typedef Polynomial_1 argument_type;
/*! ///
*/
typedef Polynomial_1 first_argument_type; typedef Polynomial_1 first_argument_type;
/*! ///
*/
typedef Polynomial_1 second_argument_type; typedef Polynomial_1 second_argument_type;
/// @} /// @}
@ -156,7 +142,7 @@ public:
Curve_2 operator()(Polynomial_1 P) const; Curve_2 operator()(Polynomial_1 P) const;
/*! constructs a curve representing the polynomial function \f$y = P(x)\f$. /*! constructs a curve representing the polynomial function \f$y = P(x)\f$.
* The function is defined over the interval \f$[x,+\infty)\f$ if \f$ right\f$ * The function is defined over the interval \f$[x,+\infty)\f$ if \f$right\f$
* is true and \f$(-\infty,x]\f$ otherwise. * is true and \f$(-\infty,x]\f$ otherwise.
*/ */
Curve_2 operator()(Polynomial_1 P, const Algebraic_real_1& x, Curve_2 operator()(Polynomial_1 P, const Algebraic_real_1& x,
@ -174,8 +160,8 @@ public:
/*! constructs a curve representing the rational function \f$y = P(x)/Q(x)\f$. /*! constructs a curve representing the rational function \f$y = P(x)/Q(x)\f$.
* The function is defined over the interval * The function is defined over the interval
* \f$ I=[x,+\infty)\f$ if \f$ right\f$ is true and * \f$I=[x,+\infty)\f$ if \f$right\f$ is true and
* \f$ I=(-\infty,x]\f$ otherwise. * \f$I=(-\infty,x]\f$ otherwise.
*/ */
Curve_2 operator()(Polynomial_1 P, Polynomial_1 Q, Curve_2 operator()(Polynomial_1 P, Polynomial_1 Q,
const Algebraic_real_1& x, bool right) const; const Algebraic_real_1& x, bool right) const;
@ -196,8 +182,7 @@ public:
/*! constructs a curve representing the polynomial function \f$y = P(x)\f$, /*! constructs a curve representing the polynomial function \f$y = P(x)\f$,
* where the coefficients of \f$P\f$ are given in the range `[begin,end)`. * where the coefficients of \f$P\f$ are given in the range `[begin,end)`.
* The function is defined over the interval * The function is defined over the interval
* \f$[x,+\infty)\f$ if \f$ right\f$ is true and \f$(-\infty,x]\f$ * \f$[x,+\infty)\f$ if \f$right\f$ is true and \f$(-\infty,x]\f$ otherwise.
* otherwise.
*/ */
template <typename InputIterator> template <typename InputIterator>
Curve_2 operator()(InputIterator begin, InputIterator end, Curve_2 operator()(InputIterator begin, InputIterator end,
@ -221,7 +206,7 @@ public:
InputIterator begin_denom, InputIterator end_denom) const; InputIterator begin_denom, InputIterator end_denom) const;
/*! constructs a curve representing the rational function \f$y = P(x)/Q(x)\f$, /*! constructs a curve representing the rational function \f$y = P(x)/Q(x)\f$,
* where the coefficients of \f$P\f$ and \f$ Q\f$ are given in the ranges * where the coefficients of \f$P\f$ and \f$Q\f$ are given in the ranges
* `[begin_numer,end_numer)` and `[begin_denom,end_denom)`, respectively. * `[begin_numer,end_numer)` and `[begin_denom,end_denom)`, respectively.
* The function is defined over the interval \f$I=[x,+\infty)\f$ * The function is defined over the interval \f$I=[x,+\infty)\f$
* if \f$right\f$ is true and \f$I=(-\infty,x]\f$ otherwise. * if \f$right\f$ is true and \f$I=(-\infty,x]\f$ otherwise.
@ -243,7 +228,6 @@ public:
const Algebraic_real_1& upper) const; const Algebraic_real_1& upper) const;
/// @} /// @}
}; /* end Arr_rational_function_traits_2::Construct_curve_2 */ }; /* end Arr_rational_function_traits_2::Construct_curve_2 */
/*! Functor to construct a `X_monotone_curve_2`. To enable caching the class is /*! Functor to construct a `X_monotone_curve_2`. To enable caching the class is
@ -254,32 +238,25 @@ public:
*/ */
class Construct_x_monotone_curve_2 { class Construct_x_monotone_curve_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/*! ///
*/
typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::X_monotone_curve_2 result_type; typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::X_monotone_curve_2 result_type;
/*! ///
*/
typedef Polynomial_1 argument_type; typedef Polynomial_1 argument_type;
/*! ///
*/
typedef Polynomial_1 first_argument_type; typedef Polynomial_1 first_argument_type;
/*! ///
*/
typedef Polynomial_1 second_argument_type; typedef Polynomial_1 second_argument_type;
/// @} /// @}
@ -287,14 +264,14 @@ public:
/// \name Operations /// \name Operations
/// @{ /// @{
/*! constructs an \f$ x\f$-monotone curve supported by the polynomial function /*! constructs an \f$x\f$-monotone curve supported by the polynomial function
* \f$ y = P(x)\f$. * \f$y = P(x)\f$.
*/ */
X_monotone_curve_2 operator()(Polynomial_1 P) const; X_monotone_curve_2 operator()(Polynomial_1 P) const;
/*! constructs an \f$x\f$-monotone curve supported by the polynomial function /*! constructs an \f$x\f$-monotone curve supported by the polynomial function
* \f$y = P(x)\f$. The function is defined over the interval * \f$y = P(x)\f$. The function is defined over the interval
* \f$[x,+\infty)\f$ if \f$ right\f$ is true and \f$(-\infty,x]\f$ * \f$[x,+\infty)\f$ if \f$right\f$ is true and \f$(-\infty,x]\f$
* otherwise. * otherwise.
*/ */
X_monotone_curve_2 operator()(Polynomial_1 P, X_monotone_curve_2 operator()(Polynomial_1 P,
@ -311,14 +288,16 @@ public:
/*! constructs an \f$x\f$-monotone curve supported by the rational function /*! constructs an \f$x\f$-monotone curve supported by the rational function
* \f$y = P(x)/Q(x)\f$. * \f$y = P(x)/Q(x)\f$.
*
* \pre \f$Q\f$ has no real roots. * \pre \f$Q\f$ has no real roots.
*/ */
X_monotone_curve_2 operator()(Polynomial_1 P, Polynomial_1 Q) const; X_monotone_curve_2 operator()(Polynomial_1 P, Polynomial_1 Q) const;
/*! constructs an \f$x\f$-monotone curve supported by the rational function /*! constructs an \f$x\f$-monotone curve supported by the rational function
* \f$y = P(x)/Q(x)\f$. The function is defined over the interval * \f$y = P(x)/Q(x)\f$. The function is defined over the interval
* \f$I=[x,+\infty)\f$ if \f$ right\f$ is true and \f$I=(-\infty,x]\f$ * \f$I=[x,+\infty)\f$ if \f$right\f$ is true and \f$I=(-\infty,x]\f$
* otherwise. * otherwise.
*
* \pre \f$Q\f$ has no real roots in the interior of \f$I\f$. * \pre \f$Q\f$ has no real roots in the interior of \f$I\f$.
*/ */
X_monotone_curve_2 operator()(Polynomial_1 P, Polynomial_1 Q, X_monotone_curve_2 operator()(Polynomial_1 P, Polynomial_1 Q,
@ -334,8 +313,8 @@ public:
const Algebraic_real_1& lower, const Algebraic_real_1& lower,
const Algebraic_real_1& upper) const; const Algebraic_real_1& upper) const;
/*! constructs an \f$ x\f$-monotone curve supported by the polynomial function /*! constructs an \f$x\f$-monotone curve supported by the polynomial function
* \f$ y = P(x)\f$, where the coefficients of \f$P\f$ are given in the range * \f$y = P(x)\f$, where the coefficients of \f$P\f$ are given in the range
* `[begin,end)`. * `[begin,end)`.
*/ */
template <typename InputIterator> template <typename InputIterator>
@ -376,9 +355,10 @@ public:
* \f$y = P(x)/Q(x)\f$, where the coefficients of \f$P\f$ and \f$Q\f$ are * \f$y = P(x)/Q(x)\f$, where the coefficients of \f$P\f$ and \f$Q\f$ are
* given in the ranges `[begin_numer,end_numer)` and * given in the ranges `[begin_numer,end_numer)` and
* `[begin_denom,end_denom)`, respectively. The function is defined over the * `[begin_denom,end_denom)`, respectively. The function is defined over the
* interval \f$ I=[x,+\infty)\f$ if \f$ right\f$ is true and * interval \f$I=[x,+\infty)\f$ if \f$right\f$ is true and
* \f$ I=(-\infty,x]\f$ otherwise. * \f$I=(-\infty,x]\f$ otherwise.
* \pre \f$ Q\f$ has no real roots in the interior of \f$ I\f$. *
* \pre \f$Q\f$ has no real roots in the interior of \f$I\f$.
*/ */
template <typename InputIterator> template <typename InputIterator>
X_monotone_curve_2 operator()(InputIterator begin_numer, X_monotone_curve_2 operator()(InputIterator begin_numer,
@ -388,7 +368,7 @@ public:
const Algebraic_real_1& x, bool right) const; const Algebraic_real_1& x, bool right) const;
/*! constructs an \f$x\f$-monotone curve supported by the rational function /*! constructs an \f$x\f$-monotone curve supported by the rational function
* \f$y = P(x)/Q(x)\f$, where the coefficients of \f$ P\f$ and \f$Q\f$ are * \f$y = P(x)/Q(x)\f$, where the coefficients of \f$P\f$ and \f$Q\f$ are
* given in the ranges `[begin_numer,end_numer)` and * given in the ranges `[begin_numer,end_numer)` and
* `[begin_denom,end_denom)`, respectively. The function is defined over the * `[begin_denom,end_denom)`, respectively. The function is defined over the
* interval \f$I=[lower,upper]\f$. * interval \f$I=[lower,upper]\f$.
@ -403,7 +383,6 @@ public:
const Algebraic_real_1& upper) const; const Algebraic_real_1& upper) const;
/// @} /// @}
}; /* end Arr_rational_function_traits_2::Construct_x_monotone_curve_2 */ }; /* end Arr_rational_function_traits_2::Construct_x_monotone_curve_2 */
/*! The `Curve_2` class nested within the traits is used to represent rational /*! The `Curve_2` class nested within the traits is used to represent rational
@ -413,16 +392,13 @@ public:
*/ */
class Curve_2 { class Curve_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/// @} /// @}
@ -432,11 +408,11 @@ public:
/*! returns the numerator of the supporting rational function. /*! returns the numerator of the supporting rational function.
*/ */
const Polynomial_1& numerator () const; const Polynomial_1& numerator() const;
/*! returns the denominator of the supporting rational function. /*! returns the denominator of the supporting rational function.
*/ */
const Polynomial_1& denominator () const; const Polynomial_1& denominator() const;
/*! returns whether &ccedil;urve is continuous, namely whether it does not /*! returns whether &ccedil;urve is continuous, namely whether it does not
* contains any vertical asymptotes in its interior. * contains any vertical asymptotes in its interior.
@ -446,19 +422,21 @@ public:
/*! returns whether the \f$x\f$-coordinate of &ccedil;urve's left end is /*! returns whether the \f$x\f$-coordinate of &ccedil;urve's left end is
* finite or whether it is \f$\pm\infty\f$. * finite or whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space left_parameter_space_in_x () const; Arr_parameter_space left_parameter_space_in_x() const;
/*! returns whether the \f$x\f$-coordinate of &ccedil;urve's right end is /*! returns whether the \f$x\f$-coordinate of &ccedil;urve's right end is
* finite or whether it is \f$\pm\infty\f$. * finite or whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space right_parameter_space_in_x () const; Arr_parameter_space right_parameter_space_in_x() const;
/*! returns the \f$x\f$-coordinate of the left end. /*! returns the \f$x\f$-coordinate of the left end.
*
* \pre `left_boundary_in_x()` == `ARR_INTERIOR` * \pre `left_boundary_in_x()` == `ARR_INTERIOR`
*/ */
Algebraic_real_1 left_x() const; Algebraic_real_1 left_x() const;
/*! returns the \f$x\f$-coordinate of the right end. /*! returns the \f$x\f$-coordinate of the right end.
*
* \pre `right_boundary_in_x()` == `ARR_INTERIOR` * \pre `right_boundary_in_x()` == `ARR_INTERIOR`
*/ */
Algebraic_real_1 right_x() const; Algebraic_real_1 right_x() const;
@ -475,16 +453,13 @@ public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Bound Bound; typedef AlgebraicKernel_d_1::Bound Bound;
/// @} /// @}
@ -494,22 +469,22 @@ public:
/*! returns the numerator of the supporting rational function. /*! returns the numerator of the supporting rational function.
*/ */
Polynomial_1 numerator () const; Polynomial_1 numerator() const;
/*! returns the denominator of the supporting rational function. /*! returns the denominator of the supporting rational function.
*/ */
Polynomial_1 denominator () const; Polynomial_1 denominator() const;
/*! returns double-approximations of the x- and y-coordinates. /*! returns double-approximations of the x- and y-coordinates.
*/ */
std::pair<double,double> to_double() const; std::pair<double,double> to_double() const;
/*! returns the \f$ x\f$-coordinate of the point. /*! returns the \f$x\f$-coordinate of the point.
*/ */
Algebraic_real_1 x() const; Algebraic_real_1 x() const;
/*! obtains the \f$y\f$-coordinates of the point. <B>Attention:</B> As /*! obtains the \f$y\f$-coordinates of the point. <B>Attention:</B> As
* described above, points are not stored by their y-coordinate in * described above, points are not stored by their \f$y\f$-coordinate in
* `Algebraic_real_1` representation. In fact, this representation must be * `Algebraic_real_1` representation. In fact, this representation must be
* computed on demand, and might become quite costly for points defined by * computed on demand, and might become quite costly for points defined by
* high-degree polynomials. Therefore, it is recommended to avoid calls to * high-degree polynomials. Therefore, it is recommended to avoid calls to
@ -519,27 +494,31 @@ public:
/*! Computes a pair \f$p\f$ approximating the \f$x\f$-coordinate with /*! Computes a pair \f$p\f$ approximating the \f$x\f$-coordinate with
* respect to the given absolute precision \f$a\f$. * respect to the given absolute precision \f$a\f$.
*
* \post \f$p.first \leq x \leq p.second\f$ * \post \f$p.first \leq x \leq p.second\f$
* \post \f$p.second - p.first \leq2^{-a}\f$ * \post \f$p.second - p.first \leq 2^{-a}\f$
*/ */
std::pair<Bound,Bound> approximate_absolute_x(int a) const; std::pair<Bound,Bound> approximate_absolute_x(int a) const;
/*! Computes a pair \f$p\f$ approximating the \f$y\f$-coordinate with /*! Computes a pair \f$p\f$ approximating the \f$y\f$-coordinate with
* respect to the given absolute precision \f$a\f$. * respect to the given absolute precision \f$a\f$.
*
* \post \f$p.first \leq y \leq p.second\f$ * \post \f$p.first \leq y \leq p.second\f$
* \post \f$p.second - p.first \leq2^{-a}\f$ * \post \f$p.second - p.first \leq 2^{-a}\f$
*/ */
std::pair<Bound,Bound> approximate_absolute_y(int a) const; std::pair<Bound,Bound> approximate_absolute_y(int a) const;
/*! Computes a pair \f$p\f$ approximating the \f$x\f$-coordinate with /*! Computes a pair \f$p\f$ approximating the \f$x\f$-coordinate with
* respect to the given relative precision \f$r\f$. * respect to the given relative precision \f$r\f$.
*
* \post \f$p.first \leq x \leq p.second\f$ * \post \f$p.first \leq x \leq p.second\f$
* \post \f$p.second - p.first \leq2^{-r}|x|\f$ * \post \f$p.second - p.first \leq2^{-r}|x|\f$
*/ */
std::pair<Bound,Bound> approximate_relative_x(int r) const; std::pair<Bound,Bound> approximate_relative_x(int r) const;
/*! Computes a pair \f$p\f$ approximating the \f$ y\f$-coordinate with /*! computes a pair \f$p\f$ approximating the \f$y\f$-coordinate with
* respect to the given relative precision \f$r\f$. * respect to the given relative precision \f$r\f$.
*
* \post \f$p.first \leq y \leq p.second\f$ * \post \f$p.first \leq y \leq p.second\f$
* \post \f$p.second - p.first \leq2^{-r}|y|\f$ * \post \f$p.second - p.first \leq2^{-r}|y|\f$
*/ */
@ -550,7 +529,7 @@ public:
}; /* end Arr_rational_function_traits_2::Point_2 */ }; /* end Arr_rational_function_traits_2::Point_2 */
/*! The `X_monotone_curve_2` class nested within the traits is used to represent /*! The `X_monotone_curve_2` class nested within the traits is used to represent
* \f$ x\f$-monotone parts of rational functions. In particular, such an * \f$x\f$-monotone parts of rational functions. In particular, such as
* \f$x\f$-monotone curve may not contain a vertical asymptote in its interior * \f$x\f$-monotone curve may not contain a vertical asymptote in its interior
* \f$x\f$-range. * \f$x\f$-range.
* *
@ -558,20 +537,16 @@ public:
*/ */
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! ///
*/
typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1; typedef AlgebraicKernel_d_1::Polynomial_1 Polynomial_1;
/*! ///
*/
typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1; typedef AlgebraicKernel_d_1::Algebraic_real_1 Algebraic_real_1;
/*! ///
*/
typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::Point_2 Point_2; typedef Arr_rational_function_traits_2<AlgebraicKernel_d_1>::Point_2 Point_2;
/// @} /// @}
@ -581,21 +556,21 @@ public:
/*! returns the numerator of the supporting rational function. /*! returns the numerator of the supporting rational function.
*/ */
const Polynomial_1& numerator () const; const Polynomial_1& numerator() const;
/*! returns the denominator of the supporting rational function. /*! returns the denominator of the supporting rational function.
*/ */
const Polynomial_1& denominator () const; const Polynomial_1& denominator() const;
/*! returns whether the \f$x\f$-coordinate of the source is finite or /*! returns whether the \f$x\f$-coordinate of the source is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space source_parameter_space_in_x () const; Arr_parameter_space source_parameter_space_in_x() const;
/*! returns whether the \f$y\f$-coordinate of the source is finite or /*! returns whether the \f$y\f$-coordinate of the source is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space source_parameter_space_in_y () const; Arr_parameter_space source_parameter_space_in_y() const;
/*! returns the source point of the arc. /*! returns the source point of the arc.
* \pre Both the \f$x\f$- and \f$y\f$-coordinates of the source point is * \pre Both the \f$x\f$- and \f$y\f$-coordinates of the source point is
@ -604,6 +579,7 @@ public:
const Point_2& source() const; const Point_2& source() const;
/*! returns the \f$x\f$-coordinate of the source point. /*! returns the \f$x\f$-coordinate of the source point.
*
* \pre The \f$x\f$-coordinate of the source point is finite. * \pre The \f$x\f$-coordinate of the source point is finite.
*/ */
Algebraic_real_1 source_x() const; Algebraic_real_1 source_x() const;
@ -611,12 +587,12 @@ public:
/*! returns whether the \f$x\f$-coordinate of the target is finite or /*! returns whether the \f$x\f$-coordinate of the target is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space target_parameter_space_in_x () const; Arr_parameter_space target_parameter_space_in_x() const;
/*! returns whether the \f$y\f$-coordinate of the target is finite or /*! returns whether the \f$y\f$-coordinate of the target is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space target_parameter_space_in_y () const; Arr_parameter_space target_parameter_space_in_y() const;
/*! returns the target point of the arc. /*! returns the target point of the arc.
* \pre Both the \f$x\f$- and \f$y\f$-coordinates of the target point is * \pre Both the \f$x\f$- and \f$y\f$-coordinates of the target point is
@ -625,6 +601,7 @@ public:
const Point_2& target() const; const Point_2& target() const;
/*! returns the \f$x\f$-coordinate of the target point. /*! returns the \f$x\f$-coordinate of the target point.
*
* \pre The \f$x\f$-coordinate of the target point is finite. * \pre The \f$x\f$-coordinate of the target point is finite.
*/ */
Algebraic_real_1 target_x() const; Algebraic_real_1 target_x() const;
@ -632,19 +609,21 @@ public:
/*! returns whether the \f$x\f$-coordinate of the left curve end is finite or /*! returns whether the \f$x\f$-coordinate of the left curve end is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space left_parameter_space_in_x () const; Arr_parameter_space left_parameter_space_in_x() const;
/*! returns whether the \f$y\f$-coordinate of the left curve end is finite or /*! returns whether the \f$y\f$-coordinate of the left curve end is finite or
* whether it is \f$\pm\infty\f$. * whether it is \f$\pm\infty\f$.
*/ */
Arr_parameter_space left_parameter_space_in_y () const; Arr_parameter_space left_parameter_space_in_y() const;
/*! returns the left point of the arc. /*! returns the left point of the arc.
*
* \pre Both the \f$x\f$- and \f$y\f$-coordinates of the left point is finite. * \pre Both the \f$x\f$- and \f$y\f$-coordinates of the left point is finite.
*/ */
const Point_2& left() const; const Point_2& left() const;
/*! returns the \f$x\f$-coordinate of the left point. /*! returns the \f$x\f$-coordinate of the left point.
*
* \pre The \f$x\f$-coordinate of the left point is finite. * \pre The \f$x\f$-coordinate of the left point is finite.
*/ */
Algebraic_real_1 left_x() const; Algebraic_real_1 left_x() const;
@ -666,18 +645,18 @@ public:
const Point_2& right() const; const Point_2& right() const;
/*! returns the \f$x\f$-coordinate of the right point. /*! returns the \f$x\f$-coordinate of the right point.
*
* \pre The \f$x\f$-coordinate of the right point is finite. * \pre The \f$x\f$-coordinate of the right point is finite.
*/ */
Algebraic_real_1 right_x() const; Algebraic_real_1 right_x() const;
/*! returns whether the curve is oriented from left to right. /*! returns whether the curve is oriented from left to right.
*/ */
bool is_left_to_right () const; bool is_left_to_right() const;
/// @} /// @}
}; /* end Arr_rational_function_traits_2::X_monotone_curve_2 */ }; /* end Arr_rational_function_traits_2::X_monotone_curve_2 */
}; /* end Arr_rational_function_traits_2 */ }; /* end Arr_rational_function_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -3,12 +3,12 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses /*! \ingroup PkgArrangementOnSurface2TraitsClasses
* *
* The traits class `Arr_segment_traits_2` is a model of the * The traits class `Arr_segment_traits_2` is a model of the
* `ArrangementTraits_2` concept, which allows the construction and maintenance * `AosTraits_2` concept, which allows the construction and maintenance
* of arrangements of line segments. It is parameterized with a * of arrangements of line segments. It is parameterized with a
* \cgal-kernel model that is templated in turn with a number type. To avoid * \cgal-kernel model that is templated in turn with a number type. To avoid
* numerical errors and robustness problems, the number type should support * numerical errors and robustness problems, the number type should support
* exact rational arithmetic; that is, the number type should support the * exact rational arithmetic; that is, the number type should support the
* arithmetic operations \f$ +\f$, \f$ -\f$, \f$ \times\f$ and \f$ \div\f$ * arithmetic operations \f$+\f$, \f$-\f$, \f$\times\f$ and \f$\div\f$
* carried out without loss of precision. * carried out without loss of precision.
* *
* For example, instantiating the traits template with kernels that support * For example, instantiating the traits template with kernels that support
@ -30,7 +30,7 @@ namespace CGAL {
* endpoints only, while the traits class needs to store extra data with its * endpoints only, while the traits class needs to store extra data with its
* segments, in order to efficiently operate on them. Nevertheless, the nested * segments, in order to efficiently operate on them. Nevertheless, the nested
* `X_monotone_curve_2` and `Curve_2` types (in this case both types refer to * `X_monotone_curve_2` and `Curve_2` types (in this case both types refer to
* the same class, as <I>every</I> line segment is (weakly) \f$ x\f$-monotone) * the same class, as <I>every</I> line segment is (weakly) \f$x\f$-monotone)
* can however be converted to the type `Kernel::Segment_2`. * can however be converted to the type `Kernel::Segment_2`.
* *
* `Arr_segment_traits_2` achieves faster running times than the * `Arr_segment_traits_2` achieves faster running times than the
@ -47,81 +47,82 @@ namespace CGAL {
* `Arr_non_caching_segment_traits_2` traits-class. * `Arr_non_caching_segment_traits_2` traits-class.
* *
* While `Arr_segment_traits_2` models the concept * While `Arr_segment_traits_2` models the concept
* `ArrangementDirectionalXMonotoneTraits_2`, the implementation of the * `AosDirectionalXMonotoneTraits_2`, the implementation of the
* `Are_mergeable_2` operation does not enforce the input curves to have the * `Are_mergeable_2` operation does not enforce the input curves to have the
* same direction as a precondition. Moreover, `Arr_segment_traits_2` supports * same direction as a precondition. Moreover, `Arr_segment_traits_2` supports
* the merging of curves of opposite directions. * the merging of curves of opposite directions.
* *
* \cgalModels{ArrangementTraits_2,ArrangementLandmarkTraits_2,ArrangementDirectionalXMonotoneTraits_2} * \cgalModels{AosTraits_2,AosLandmarkTraits_2,AosApproximateTraits_2,AosDirectionalXMonotoneTraits_2}
*/ */
template <typename Kernel> template <typename Kernel>
class Arr_segment_traits_2 : public Kernel { class Arr_segment_traits_2 : public Kernel {
public: public:
/// \name Types
/// @{
//! \name Types /// the segment type.
//! @{
//! the segment type.
typedef typename Kernel::Segment_2 Segment_2; typedef typename Kernel::Segment_2 Segment_2;
//! the line type. /// the line type.
typedef typename Kernel::Line_2 Line_2; typedef typename Kernel::Line_2 Line_2;
//! the point type. /// the point type.
typedef typename Kernel::Point_2 Point_2; typedef typename Kernel::Point_2 Point_2;
//! @} /// @}
/*! The `X_monotone_curve_2` class nested within the traits class is /*! The `X_monotone_curve_2` class nested within the traits class is
* used to represent segments. * used to represent segments.
*/ */
class X_monotone_curve_2 { class X_monotone_curve_2 {
public: public:
//! \name Creation /// \name Creation
//! @{ /// @{
/*! constructs default. */ /*! constructs default. */
X_monotone_curve_2(); X_monotone_curve_2();
//! @} /// @}
//! \name Access Functions /// \name Access Functions
//! @{ /// @{
//! obtains the (lexicographically) left endpoint. /// obtains the (lexicographically) left endpoint.
const Point_2& left() const; const Point_2& left() const;
//! obtains the (lexicographically) right endpoint. /// obtains the (lexicographically) right endpoint.
const Point_2& right() const; const Point_2& right() const;
//! obtains the supporting line. /// obtains the supporting line.
const Line_2& line() const; const Line_2& line() const;
//! determines whether the curve is vertical. /// determines whether the curve is vertical.
bool is_vertical() const; bool is_vertical() const;
//! determines whether the curve is directed lexicographic from left to right /// determines whether the curve is directed lexicographic from left to right
bool is_directed_right() const; bool is_directed_right() const;
//! @} /// @}
}; };
//! The curve type. /// The curve type.
typedef X_monotone_curve_2 Curve_2; typedef X_monotone_curve_2 Curve_2;
//! A functor that trims curves. /// A functor that trims curves.
class Trim_2 { class Trim_2 {
public: public:
//! \name Creation /// \name Creation
//! @{ /// @{
/*! trims the given x-monotone curve to an from src to tgt. /*! trims the given \f$x\f$-monotone curve to an from `src` to `tgt`.
*
* \ pre `src` and `tgt` lies on the curve * \ pre `src` and `tgt` lies on the curve
*/ */
X_monotone_curve_2(const X_monotone_curve_2& xcv, X_monotone_curve_2(const X_monotone_curve_2& xcv,
const Point_2& src, const Point_2& tgt) const; const Point_2& src, const Point_2& tgt) const;
//! @}
} /* end Arr_segment_traits_2::Trim_2 */ } /* end Arr_segment_traits_2::Trim_2 */
}; /* end Arr_segment_traits_2 */ }; /* end Arr_segment_traits_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -10,18 +10,18 @@ namespace CGAL {
* The `Arr_spherical_topology_traits_2` template has two parameters: * The `Arr_spherical_topology_traits_2` template has two parameters:
* <UL> * <UL>
* <LI>The `GeometryTraits_2` template-parameter should be substituted by * <LI>The `GeometryTraits_2` template-parameter should be substituted by
* a model of the `ArrangementBasicTraits_2` concept. The traits * a model of the `AosBasicTraits_2` concept. The traits
* class defines the types of \f$x\f$-monotone curves and two-dimensional * class defines the types of \f$x\f$-monotone curves and two-dimensional
* points, namely `ArrangementBasicTraits_2::X_monotone_curve_2` and * points, namely `AosBasicTraits_2::X_monotone_curve_2` and
* `ArrangementBasicTraits_2::Point_2`, * `AosBasicTraits_2::Point_2`,
* respectively, and supports basic geometric predicates on them. * respectively, and supports basic geometric predicates on them.
* <LI>The `Dcel` template-parameter should be substituted by * <LI>The `Dcel` template-parameter should be substituted by
* a class that is a model of the `ArrangementDcel` concept. The * a class that is a model of the `AosDcel` concept. The
* value of this parameter is by default * value of this parameter is by default
* `Arr_default_dcel<Traits>`. * `Arr_default_dcel<Traits>`.
* </UL> * </UL>
* *
* \cgalModels{ArrangementBasicTopologyTraits} * \cgalModels{AosBasicTopologyTraits}
* *
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>` * \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>`
@ -62,10 +62,10 @@ public:
/// \name Accessors /// \name Accessors
/// @{ /// @{
/*! obtains the DCEL (const version). */ /*! obtains the \dcel (const version). */
const Dcel& dcel() const; const Dcel& dcel() const;
/*! obtains the DCEL (non-const version). */ /*! obtains the \dcel (non-const version). */
Dcel& dcel(); Dcel& dcel();
/*! obtains the spherical face (const version). */ /*! obtains the spherical face (const version). */

View File

@ -17,14 +17,10 @@ namespace CGAL {
* \sa `Arr_closed_side_tag` * \sa `Arr_closed_side_tag`
* \sa `Arr_contracted_side_tag` * \sa `Arr_contracted_side_tag`
* \sa `Arr_identified_side_tag` * \sa `Arr_identified_side_tag`
* \sa `ArrangementBasicTraits_2` * \sa `AosBasicTraits_2`
*/ */
struct Arr_oblivious_side_tag {}; struct Arr_oblivious_side_tag {};
}
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Tags /*! \ingroup PkgArrangementOnSurface2Tags
* *
* This type tag is used to indicate that a side of the parameter space, either * This type tag is used to indicate that a side of the parameter space, either
@ -35,7 +31,7 @@ namespace CGAL {
* `Bottom_side_category`, and `Top_side_category`, nested in every geometry * `Bottom_side_category`, and `Top_side_category`, nested in every geometry
* traits class, must be convertible to the type `Arr_open_side_tag`. For * traits class, must be convertible to the type `Arr_open_side_tag`. For
* example, all categories above, nested in every model of the * example, all categories above, nested in every model of the
* `ArrangementOpenBoundaryTraits_2` concept, must be convertible to * `AosOpenBoundaryTraits_2` concept, must be convertible to
* `Arr_open_side_tag`, as curves are expected to approach all the four boundary * `Arr_open_side_tag`, as curves are expected to approach all the four boundary
* sides of the parameter space (i.e., left, right, bottom, and top). * sides of the parameter space (i.e., left, right, bottom, and top).
* *
@ -46,14 +42,10 @@ namespace CGAL {
* \sa `Arr_closed_side_tag` * \sa `Arr_closed_side_tag`
* \sa `Arr_contracted_side_tag` * \sa `Arr_contracted_side_tag`
* \sa `Arr_identified_side_tag` * \sa `Arr_identified_side_tag`
* \sa `ArrangementOpenBoundaryTraits_2` * \sa `AosOpenBoundaryTraits_2`
*/ */
struct Arr_open_side_tag : {}; struct Arr_open_side_tag : {};
}
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Tags /*! \ingroup PkgArrangementOnSurface2Tags
* *
* This type tag is used to indicate that a side of the parameter space, either * This type tag is used to indicate that a side of the parameter space, either
@ -73,14 +65,10 @@ namespace CGAL {
* \sa `Arr_open_side_tag` * \sa `Arr_open_side_tag`
* \sa `Arr_contracted_side_tag` * \sa `Arr_contracted_side_tag`
* \sa `Arr_identified_side_tag` * \sa `Arr_identified_side_tag`
* \sa `ArrangementOpenBoundaryTraits_2` * \sa `AosOpenBoundaryTraits_2`
*/ */
struct Arr_closed_side_tag {}; struct Arr_closed_side_tag {};
}
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Tags /*! \ingroup PkgArrangementOnSurface2Tags
* *
* This type tag is used to indicate that a side of the parameter space, either * This type tag is used to indicate that a side of the parameter space, either
@ -92,7 +80,7 @@ namespace CGAL {
* nested in every geometry traits class, must be convertible to the type * nested in every geometry traits class, must be convertible to the type
* `Arr_contracted_side_tag`. For example, the `Bottom_side_category` and * `Arr_contracted_side_tag`. For example, the `Bottom_side_category` and
* `Top_side_category` category types, nested in every model of the * `Top_side_category` category types, nested in every model of the
* `ArrangementSphericalBoundaryTraits_2 concept` (such as any instance of the * `AosSphericalBoundaryTraits_2 concept` (such as any instance of the
* `Arr_geodesic_arc_on_sphere_traits_2` class template) must be convertible to * `Arr_geodesic_arc_on_sphere_traits_2` class template) must be convertible to
* `Arr_contracted_side_tag` * `Arr_contracted_side_tag`
* *
@ -103,14 +91,10 @@ namespace CGAL {
* \sa `Arr_open_side_tag` * \sa `Arr_open_side_tag`
* \sa `Arr_closed_side_tag` * \sa `Arr_closed_side_tag`
* \sa `Arr_identified_side_tag` * \sa `Arr_identified_side_tag`
* \sa `ArrangementOpenBoundaryTraits_2` * \sa `AosOpenBoundaryTraits_2`
*/ */
struct Arr_contracted_side_tag {}; struct Arr_contracted_side_tag {};
}
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Tags /*! \ingroup PkgArrangementOnSurface2Tags
* *
* This type tag is used to indicate that a side of the parameter space, either * This type tag is used to indicate that a side of the parameter space, either
@ -122,7 +106,7 @@ namespace CGAL {
* nested in every geometry traits class, must be convertible to the type * nested in every geometry traits class, must be convertible to the type
* `Arr_identified_side_tag`. For example, the `Left_side_category` and * `Arr_identified_side_tag`. For example, the `Left_side_category` and
* `Right_side_category` category types, nested in every model of the * `Right_side_category` category types, nested in every model of the
* `ArrangementSphericalBoundaryTraits_2 concept` (such as any instance of the * `AosSphericalBoundaryTraits_2 concept` (such as any instance of the
* `Arr_geodesic_arc_on_sphere_traits_2` class template) must be convertible to * `Arr_geodesic_arc_on_sphere_traits_2` class template) must be convertible to
* `Arr_identified_side_tag` * `Arr_identified_side_tag`
* *
@ -133,7 +117,7 @@ namespace CGAL {
* \sa `Arr_open_side_tag` * \sa `Arr_open_side_tag`
* \sa `Arr_closed_side_tag` * \sa `Arr_closed_side_tag`
* \sa `Arr_contracted_side_tag` * \sa `Arr_contracted_side_tag`
* \sa `ArrangementOpenBoundaryTraits_2` * \sa `AosOpenBoundaryTraits_2`
*/ */
struct Arr_identified_side_tag {}; struct Arr_identified_side_tag {};

View File

@ -1,66 +1,69 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2PointLocation
\ingroup PkgArrangementOnSurface2PointLocation *
* \anchor arr_reftrap_pl
\anchor arr_reftrap_pl *
* The `Arr_trapezoid_ric_point_location` class implements the incremental
The `Arr_trapezoid_ric_point_location` class implements the incremental randomized algorithm * randomized algorithm introduced by Mulmuley \cgalCite{m-fppa-90} as presented
introduced by Mulmuley \cgalCite{m-fppa-90} as presented by * by Seidel \cgalCite{s-sfira-91} (see also [\cgalCite{bkos-cgaa-00} Chapter
Seidel \cgalCite{s-sfira-91} (see also [\cgalCite{bkos-cgaa-00} Chapter 6). * 6). It subdivides each arrangement face to pseudo-trapezoidal cells, each of
It subdivides each arrangement face to pseudo-trapezoidal cells, each * constant complexity, and constructs and maintains a linear-size search
of constant complexity, and constructs and maintains a linear-size search * structure on top of these cells, such that each query can be answered in
structure on top of these cells, such that each query can be answered * \cgalBigO{\log n} time, where \f$n\f$ is the complexity of the arrangement.
in \cgalBigO{\log n} time, where \f$ n\f$ is the complexity of the arrangement. *
* Constructing the search structures takes \cgalBigO{n \log n} expected time
Constructing the search structures takes \cgalBigO{n \log n} expected time * and may require a small number of rebuilds
and may require a small number of rebuilds \cgalCite{hkh-iiplgtds-12}. Therefore * \cgalCite{hkh-iiplgtds-12}. Therefore attaching a trapezoidal point-location
attaching a trapezoidal point-location object to an existing arrangement * object to an existing arrangement may incur some overhead in running
may incur some overhead in running times. In addition, the point-location * times. In addition, the point-location object needs to keep its auxiliary
object needs to keep its auxiliary data structures up-to-date as the * data structures up-to-date as the arrangement goes through structural
arrangement goes through structural changes. It is therefore recommended * changes. It is therefore recommended to use this point-location strategy for
to use this point-location strategy for static arrangements (or arrangement * static arrangements (or arrangement that do not alter frequently), and when
that do not alter frequently), and when the number of issued queries * the number of issued queries is relatively large.
is relatively large. *
* This strategy supports arbitrary subdivisions, including unbounded ones.
This strategy supports arbitrary subdivisions, including unbounded ones. *
* \cgalModels{AosPointLocation_2,AosVerticalRayShoot_2}
\cgalModels{ArrangementPointLocation_2,ArrangementVerticalRayShoot_2} *
* \sa `AosPointLocation_2`
\sa `ArrangementPointLocation_2` * \sa `AosVerticalRayShoot_2`
\sa `ArrangementVerticalRayShoot_2` * \sa `CGAL::Arr_point_location_result<Arrangement>`
\sa `CGAL::Arr_point_location_result<Arrangement>`
*/ */
template< typename Arrangement > template <typename Arrangement>
class Arr_trapezoid_ric_point_location { class Arr_trapezoid_ric_point_location {
public: public:
/// \name Creation
/// @{
/// \name Creation /*! If `with_guarantees` is set to true, the construction performs rebuilds in
/// @{ * order to guarantee a resulting structure with linear size and logarithmic
* query time. Otherwise the structure has expected linear size and expected
* logarithmic query time.
*/
Arr_trapezoid_ric_point_location(bool with_guarantees = true);
/*! /*! constructs a point location search structure for the given arrangement.
If with_guarantees is set to true, the construction performs rebuilds in order to guarantee a resulting structure with linear size and logarithmic query time. Otherwise the structure has expected linear size and expected logarithmic query time. * If with_guarantees is set to true, the construction performs rebuilds in
*/ * order to guarantee a resulting structure with linear size and logarithmic
Arr_trapezoid_ric_point_location (bool with_guarantees = true); * query time. Otherwise the structure has expected linear size and expected
* logarithmic query time.
*/
Arr_trapezoid_ric_point_location(const Arrangement& arr,
bool with_guarantees = true);
/*! /// @}
Constructs a point location search structure for the given arrangement. If with_guarantees is set to true, the construction performs rebuilds in order to guarantee a resulting structure with linear size and logarithmic query time. Otherwise the structure has expected linear size and expected logarithmic query time.
*/
Arr_trapezoid_ric_point_location (const Arrangement& arr, bool with_guarantees = true);
/// @} /// \name Modifiers
/// @{
/// \name Modifiers /*! If with_guarantees is set to true, the structure will guarantee linear
/// @{ * size and logarithmic query time, that is, this function may cause a
* reconstruction of the data structure.
/*! */
If with_guarantees is set to true, the structure will guarantee linear size and logarithmic query time, that is, this function may cause a reconstruction of the data structure. void with_guarantees(bool with_guarantees);
*/
void with_guarantees (bool with_guarantees);
/// @}
/// @}
}; /* end Arr_trapezoid_ric_point_location */ }; /* end Arr_trapezoid_ric_point_location */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -14,13 +14,12 @@ namespace CGAL {
* (especially when the number of modifications applied to the arrangement is * (especially when the number of modifications applied to the arrangement is
* high) and provided only for educational purposes. * high) and provided only for educational purposes.
* *
* \cgalModels{ArrangementPointLocation_2,ArrangementVerticalRayShoot_2} * \cgalModels{AosPointLocation_2,AosVerticalRayShoot_2}
* *
* \sa `ArrangementPointLocation_2` * \sa `AosPointLocation_2`
* \sa `ArrangementVerticalRayShoot_2` * \sa `AosVerticalRayShoot_2`
* \sa `CGAL::Arr_point_location_result<Arrangement>` * \sa `CGAL::Arr_point_location_result<Arrangement>`
*/ */
template <typename Arrangement_> template <typename Arrangement_>
class Arr_triangulation_point_location : public Arrangement_::Observer {} class Arr_triangulation_point_location : public Arrangement_::Observer {}

View File

@ -10,24 +10,24 @@ namespace CGAL {
* The `Arr_unb_planar_topology_traits_2` template has two parameters: * The `Arr_unb_planar_topology_traits_2` template has two parameters:
* <UL> * <UL>
* <LI>The `GeometryTraits_2` template-parameter should be substituted by * <LI>The `GeometryTraits_2` template-parameter should be substituted by
* a model of the `ArrangementBasicTraits_2` concept. The traits * a model of the `AosBasicTraits_2` concept. The traits
* class defines the types of \f$x\f$-monotone curves and two-dimensional * class defines the types of \f$x\f$-monotone curves and two-dimensional
* points, namely `ArrangementBasicTraits_2::X_monotone_curve_2` and * points, namely `AosBasicTraits_2::X_monotone_curve_2` and
* `ArrangementBasicTraits_2::Point_2`, * `AosBasicTraits_2::Point_2`,
* respectively, and supports basic geometric predicates on them. * respectively, and supports basic geometric predicates on them.
* <LI>The `Dcel` template-parameter should be substituted by * <LI>The `Dcel` template-parameter should be substituted by
* a class that is a model of the `ArrangementDcel` concept. The * a class that is a model of the `AosDcel` concept. The
* value of this parameter is by default * value of this parameter is by default
* `Arr_default_dcel<Traits>`. * `Arr_default_dcel<Traits>`.
* </UL> * </UL>
* *
* \cgalModels{ArrangementBasicTopologyTraits} * \cgalModels{AosBasicTopologyTraits}
* *
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>` * \sa `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>`
*/ */
template <typename GeometryTraits_2, template <typename GeometryTraits_2,
typename Dcel = Arr_default_dcel<GeometryTraits_2> > typename Dcel = Arr_default_dcel<GeometryTraits_2>>
class Arr_unb_planar_topology_traits_2 { class Arr_unb_planar_topology_traits_2 {
public: public:
/// \name Types /// \name Types
@ -62,10 +62,10 @@ public:
/// \name Accessors /// \name Accessors
/// @{ /// @{
/*! obtains the DCEL (const version). */ /*! obtains the \dcel (const version). */
const Dcel& dcel() const; const Dcel& dcel() const;
/*! obtains the DCEL (non-const version). */ /*! obtains the \dcel (non-const version). */
Dcel& dcel(); Dcel& dcel();
/*! obtains the unbounded face (const version). */ /*! obtains the unbounded face (const version). */

View File

@ -1,69 +1,64 @@
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Ref /*! \ingroup PkgArrangementOnSurface2Ref
* *
* `Arr_vertex_index_map` maintains a mapping of vertex handles of an attached * `Arr_vertex_index_map` maintains a mapping of vertex handles of an attached
* arrangement object to indices (of type `unsigned int`). This class template * arrangement object to indices (of type `unsigned int`). This class template
* is a model of the concept `ReadablePropertyMap`. A mapping between vertex * is a model of the concept `ReadablePropertyMap`. A mapping between vertex
* handles and indices enables convenient usage of property-map classes supplied * handles and indices enables convenient usage of property-map classes supplied
* by `boost`. For example, the property-map class templates * by `boost`. For example, the property-map class templates
* `boost::vector_property_map`, which is based on `std::vector`, and * `boost::vector_property_map`, which is based on `std::vector`, and
* `boost::iterator_property_map`, which can be used to implement a property map * `boost::iterator_property_map`, which can be used to implement a property map
* based on a native \CC array, require the user to supply a mapping such as * based on a native \CC array, require the user to supply a mapping such as
* `Arr_vertex_index_map`. * `Arr_vertex_index_map`.
* *
* As new vertices might be inserted into the attached arrangement, and * As new vertices might be inserted into the attached arrangement, and
* existing vertices might be removed, the notification mechanism is used * existing vertices might be removed, the notification mechanism is used
* to dynamically maintain the mapping of vertex handles to indices. * to dynamically maintain the mapping of vertex handles to indices.
* *
* \cgalModels{DefaultConstructible,CopyConstructible,Assignable,ReadablePropertyMap} * \cgalModels{DefaultConstructible,CopyConstructible,Assignable,ReadablePropertyMap}
* *
* \sa `Arr_face_index_map<Arrangement>` * \sa `Arr_face_index_map<Arrangement>`
*/
template <typename Arrangement_>
class Arr_vertex_index_map: public Arrangement_::Observer {
public:
/// \name Types
/// @{
/// the type of the attached arrangement.
typedef Arrangement_ Arrangement_2;
typedef typename Arrangement_2::Base_aos Base_aos;
typedef boost::readable_property_map_tag category;
typedef unsigned int value_type;
typedef unsigned int reference;
typedef Vertex_handle key_type;
/// The vertex handle type.
typedef typename Base_aos::Vertex_handle Vertex_handle;
/// The type of mapping of vertices to indices.
typedef Unique_hash_map<Vertex_handle, value_type> Index_map;
/// @}
/// \name Creation
/// @{
/*! constructs a map that is unattached to any arrangement instance.
*/ */
Arr_vertex_index_map();
template< typename Arrangement_> /*! constructs a map and attaches it to the given arrangement `arr`.
class Arr_vertex_index_map: public Arrangement_::Observer { */
public: Arr_vertex_index_map(Base_aos& arr);
/// \name Types /// @}
/// @{ }; /* end Arr_accessor */
/*! the type of the attached arrangement.
*/
typedef Arrangement_ Arrangement_2;
typedef typename Arrangement_2::Base_aos Base_aos;
typedef boost::readable_property_map_tag category;
typedef unsigned int value_type;
typedef unsigned int reference;
typedef Vertex_handle key_type;
/*! The vertex handle type.
*/
typedef typename Base_aos::Vertex_handle Vertex_handle;
/*! The type of mapping of vertices to indices.
*/
typedef Unique_hash_map<Vertex_handle, value_type> Index_map;
/// @}
/// \name Creation
/// @{
/*! constructs a map that is unattached to any arrangement instance.
*/
Arr_vertex_index_map();
/*! constructs a map and attaches it to the given arrangement `arr`.
*/
Arr_vertex_index_map(Base_aos& arr);
/// @}
}; /* end Arr_accessor */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -1,38 +1,31 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2PointLocation
\ingroup PkgArrangementOnSurface2PointLocation *
* \anchor arr_refwalk_pl
*
* The `Arr_walk_along_line_point_location` class implements a very simple
* point-location (and vertical ray-shooting) strategy that improves the naive
* one. The algorithm considers an imaginary vertical ray emanating from the
* query point, and simulates a walk along the zone of this ray, starting from
* the unbounded face until reaching the query point. In dense arrangements
* this walk can considerably reduce the number of traversed arrangement edges,
* with respect to the na&iuml;ve algorithm.
*
* The walk-along-a-line point-location object (just like the na&iuml;ve one)
* does not use any auxiliary data structures. Thus, attaching it to an existing
* arrangement takes constant time, and any ongoing updates to this arrangement
* do not affect the point-location object. It is therefore recommended to use
* the "walk" point-location strategy for arrangements that are constantly
* changing, especially if the number of issued queries is not large.
*
* \cgalModels{AosPointLocation_2,AosVerticalRayShoot_2}
*
* \sa `AosPointLocation_2`
* \sa `AosVerticalRayShoot_2`
* \sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template <typename Arrangement>
class Arr_walk_along_line_point_location {};
\anchor arr_refwalk_pl
The `Arr_walk_along_line_point_location` class implements a very simple point-location (and
vertical ray-shooting) strategy that improves the naive one.
The algorithm considers an imaginary vertical ray emanating from the
query point, and simulates a walk along the zone of this ray, starting
from the unbounded face until reaching the query point.
In dense arrangements this walk can considerably reduce the number
of traversed arrangement edges, with respect to the na&iuml;ve
algorithm.
The walk-along-a-line point-location object (just like the na&iuml;ve one)
does not use any auxiliary data structures. Thus, attaching it to an
existing arrangement takes constant time, and any ongoing updates to
this arrangement do not affect the point-location object.
It is therefore recommended to use the "walk" point-location strategy
for arrangements that are constantly changing, especially if the number
of issued queries is not large.
\cgalModels{ArrangementPointLocation_2,ArrangementVerticalRayShoot_2}
\sa `ArrangementPointLocation_2`
\sa `ArrangementVerticalRayShoot_2`
\sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template< typename Arrangement >
class Arr_walk_along_line_point_location {
public:
}; /* end Arr_walk_along_line_point_location */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -5,7 +5,7 @@ namespace CGAL {
* \anchor arr_refarr * \anchor arr_refarr
* *
* An object `arr` of the class `Arrangement_2` represents the planar * An object `arr` of the class `Arrangement_2` represents the planar
* subdivision induced by a set of \f$ x\f$-monotone curves and isolated points * subdivision induced by a set of \f$x\f$-monotone curves and isolated points
* into maximally connected cells. The arrangement is represented as a * into maximally connected cells. The arrangement is represented as a
* doubly-connected edge-list (\dcel) such that each \dcel vertex is associated * doubly-connected edge-list (\dcel) such that each \dcel vertex is associated
* with a point of the plane and each edge is associated with an \f$ * with a point of the plane and each edge is associated with an \f$
@ -16,13 +16,13 @@ namespace CGAL {
* The `Arrangement_2` template has two parameters: * The `Arrangement_2` template has two parameters:
* <UL> * <UL>
* <LI>The `Traits` template-parameter should be instantiated with * <LI>The `Traits` template-parameter should be instantiated with
* a model of the `ArrangementBasicTraits_2` concept. The traits * a model of the `AosBasicTraits_2` concept. The traits
* class defines the types of \f$ x\f$-monotone curves and two-dimensional * class defines the types of \f$x\f$-monotone curves and two-dimensional
* points, namely `ArrangementBasicTraits_2::X_monotone_curve_2` and * points, namely `AosBasicTraits_2::X_monotone_curve_2` and
* `ArrangementBasicTraits_2::Point_2`, * `AosBasicTraits_2::Point_2`,
* respectively, and supports basic geometric predicates on them. * respectively, and supports basic geometric predicates on them.
* <LI>The `Dcel` template-parameter should be instantiated with * <LI>The `Dcel` template-parameter should be instantiated with
* a class that is a model of the `ArrangementDcel` concept. The * a class that is a model of the `AosDcel` concept. The
* value of this parameter is by default * value of this parameter is by default
* `Arr_default_dcel<Traits>`. * `Arr_default_dcel<Traits>`.
* </UL> * </UL>
@ -30,9 +30,9 @@ namespace CGAL {
* The available traits classes and \dcel classes are * The available traits classes and \dcel classes are
* described below. * described below.
* *
* \sa `ArrangementDcel` * \sa `AosDcel`
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `ArrangementBasicTraits_2` * \sa `AosBasicTraits_2`
* \sa `CGAL::overlay()` * \sa `CGAL::overlay()`
* \sa `CGAL::is_valid()` * \sa `CGAL::is_valid()`
* *
@ -156,41 +156,42 @@ public:
/// @} /// @}
}; /* end Arrangement_2 */ }; /* end Arrangement_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Insert /*! \ingroup PkgArrangementOnSurface2Insert
* The function `%insert` inserts one or more curves or \f$ x\f$-monotone curves * The function `%insert` inserts one or more curves or \f$x\f$-monotone curves
* into a given arrangement, where no restrictions are imposed on the inserted * into a given arrangement, where no restrictions are imposed on the inserted
* curves. If an inserted curve is not \f$ x\f$-monotone curve, it is subdivided * curves. If an inserted curve is not \f$x\f$-monotone curve, it is subdivided
* into \f$ x\f$-monotone subcurves (and perhaps isolated points), which are * into \f$x\f$-monotone subcurves (and perhaps isolated points), which are
* inserted into the arrangement. * inserted into the arrangement.
* *
* \cgalHeading{Requirements} * \cgalHeading{Requirements}
* *
* <UL> * <UL>
* <LI>If the curve is \f$ x\f$-monotone curve then The instantiated * <LI>If the curve is \f$x\f$-monotone curve then The instantiated
* `Traits` class must model the `ArrangementXMonotoneTraits_2` * `Traits` class must model the `AosXMonotoneTraits_2`
* concept. In case that the curve is not \f$ x\f$-monotone then the * concept. In case that the curve is not \f$x\f$-monotone then the
* instantiated `Traits` class must model the * instantiated `Traits` class must model the
* `ArrangementTraits_2` concept. That is, it should define the * `ArrtTraits_2` concept. That is, it should define the
* `Curve_2` type, and support its subdivision into \f$ x\f$-monotone * `Curve_2` type, and support its subdivision into \f$x\f$-monotone
* subcurves (and perhaps isolated points). * subcurves (and perhaps isolated points).
* <LI>The point-location object `pl`, must model the * <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
/// @{ /// @{
/*! Inserts the given curve `c` into the arrangement `arr`. /*! Inserts the given curve `c` into the arrangement `arr`.
* `c` is subdivided into \f$ x\f$-monotone subcurves (and perhaps isolated * `c` is subdivided into \f$x\f$-monotone subcurves (and perhaps isolated
* points). Each subcurve is in turn inserted into the arrangement by locating * points). Each subcurve is in turn inserted into the arrangement by locating
* its left endpoint and computing its zone until reaching the right endpoint. * its left endpoint and computing its zone until reaching the right endpoint.
* *
* The given point-location object `pl` is used to locate the left * The given point-location object `pl` is used to locate the left
* endpoints of the \f$ x\f$-monotone curves. By default, the function uses the * endpoints of the \f$x\f$-monotone curves. By default, the function uses the
* "walk along line" point-location strategy - namely an instance of * "walk along line" point-location strategy - namely an instance of
* the class `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`. * the class `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`.
* *
@ -200,7 +201,7 @@ template <typename Traits, typename Dcel, typename Curve, typename PointLocation
void insert(Arrangement_2<Traits,Dcel>& arr, const Curve& c, void insert(Arrangement_2<Traits,Dcel>& arr, const Curve& c,
const PointLocation& pl = walk_pl); const PointLocation& pl = walk_pl);
/*! Inserts the<I>\f$ x\f$-monotone (only)</I> curve `xc` into the arrangement /*! Inserts the<I>\f$x\f$-monotone (only)</I> curve `xc` into the arrangement
* `arr`. The object `obj`, which wraps a `Vertex_const_handle`, a * `arr`. The object `obj`, which wraps a `Vertex_const_handle`, a
* `Halfedge_const_handle`, or a `Face_const_handle`, represents the location of * `Halfedge_const_handle`, or a `Face_const_handle`, represents the location of
* `xc`'s left endpoint in the arrangement. The zone of `xc` is computed * `xc`'s left endpoint in the arrangement. The zone of `xc` is computed
@ -213,7 +214,7 @@ void insert(Arrangement_2<Traits, Dcel>& arr,
const typename Traits::X_monotone_curve_2& xc, const typename Traits::X_monotone_curve_2& xc,
typename Arr_point_location_result<Arrangement_2<Traits, Dcel> >::type obj); typename Arr_point_location_result<Arrangement_2<Traits, Dcel> >::type obj);
/*! Aggregately inserts the curves or \f$ x\f$-monotone curves in the range /*! Aggregately inserts the curves or \f$x\f$-monotone curves in the range
* `[first,last)` into the arrangement `arr` using the sweep-line framework. * `[first,last)` into the arrangement `arr` using the sweep-line framework.
* \param arr the target arrangement. * \param arr the target arrangement.
* \param first the iterator to the first element in the range of curves. * \param first the iterator to the first element in the range of curves.
@ -227,7 +228,7 @@ void insert(Arrangement_2<Traits, Dcel>& arr,
/*! \ingroup PkgArrangementOnSurface2Funcs /*! \ingroup PkgArrangementOnSurface2Funcs
* *
* Inserts a given \f$ x\f$-monotone curve into a given arrangement, where the * Inserts a given \f$x\f$-monotone curve into a given arrangement, where the
* interior of the given curve is disjoint from all existing arrangement * interior of the given curve is disjoint from all existing arrangement
* vertices and edges. Under this assumption, it is possible to locate the * vertices and edges. Under this assumption, it is possible to locate the
* endpoints of the given curve in the arrangement, and use one of the * endpoints of the given curve in the arrangement, and use one of the
@ -247,9 +248,9 @@ void insert(Arrangement_2<Traits, Dcel>& arr,
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the restricted * <LI>The instantiated `Traits` class must model the restricted
* `ArrangementBasicTraits_2` concept, as no intersections are computed. * `AosBasicTraits_2` concept, as no intersections are computed.
* <LI>The point-location object `pl` must model the * <LI>The point-location object `pl` must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
template <typename Traits, typename Dcel,typename PointLocation> template <typename Traits, typename Dcel,typename PointLocation>
@ -260,7 +261,7 @@ insert_non_intersecting_curve(Arrangement_2<Traits,Dcel>& arr,
/*! \ingroup PkgArrangementOnSurface2Funcs /*! \ingroup PkgArrangementOnSurface2Funcs
* *
* Inserts a set of \f$ x\f$-monotone curves in a given range into a given * Inserts a set of \f$x\f$-monotone curves in a given range into a given
* arrangement. The insertion is performed in an aggregated manner, using the * arrangement. The insertion is performed in an aggregated manner, using the
* sweep-line algorithm. The input curves should be pairwise disjoint in their * sweep-line algorithm. The input curves should be pairwise disjoint in their
* interior and pairwise interior-disjoint from all existing arrangement * interior and pairwise interior-disjoint from all existing arrangement
@ -270,7 +271,7 @@ insert_non_intersecting_curve(Arrangement_2<Traits,Dcel>& arr,
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementBasicTraits_2` concept, as no intersections are computed. * `AosBasicTraits_2` concept, as no intersections are computed.
* <LI>`InputIterator::value_type` must be `Traits::X_monotone_curve_2` * <LI>`InputIterator::value_type` must be `Traits::X_monotone_curve_2`
* </UL> * </UL>
*/ */
@ -296,14 +297,14 @@ void insert_non_intersecting_curves(Arrangement_2<Traits,Dcel>& arr,
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementXMonotoneTraits_2` concept. Not all expressions listed * `AosXMonotoneTraits_2` concept. Not all expressions listed
* by this concept are required. In fact the traits class must model the * by this concept are required. In fact the traits class must model the
* `ArrangementBasicTraits_2` concept, and support the splitting functionality. * `AosBasicTraits_2` concept, and support the splitting functionality.
* <LI>The point-location object `pl`, must model the * <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
template<typename Traits, typename Dcel, typename PointLocation> template <typename Traits, typename Dcel, typename PointLocation>
typename Arrangement_2<Traits,Dcel>::Vertex_handle typename Arrangement_2<Traits,Dcel>::Vertex_handle
insert_point(Arrangement_2<Traits,Dcel>& arr, insert_point(Arrangement_2<Traits,Dcel>& arr,
const typename Traits::Point_2& p, const typename Traits::Point_2& p,
@ -315,7 +316,7 @@ insert_point(Arrangement_2<Traits,Dcel>& arr,
* *
* Invokes the member function `arr.is_valid()` to verify the topological * Invokes the member function `arr.is_valid()` to verify the topological
* correctness of the arrangement. Then it performs additional validity * correctness of the arrangement. Then it performs additional validity
* tests. It checks that all \f$ x\f$-monotone curves associated with * tests. It checks that all \f$x\f$-monotone curves associated with
* arrangement edges are pairwise disjoint in their interior. Then it makes sure * arrangement edges are pairwise disjoint in their interior. Then it makes sure
* that all holes and all isolated vertices are located within the proper * that all holes and all isolated vertices are located within the proper
* arrangement faces. Note that the test carried out by this function may take a * arrangement faces. Note that the test carried out by this function may take a
@ -327,7 +328,7 @@ insert_point(Arrangement_2<Traits,Dcel>& arr,
* The instantiated traits class must model the concept * The instantiated traits class must model the concept
* `ArranagmentXMonotoneTraits_2`. * `ArranagmentXMonotoneTraits_2`.
*/ */
template<typename Traits, typename Dcel> template <typename Traits, typename Dcel>
bool is_valid(const Arrangement_2<Traits, Dcel>& arr); bool is_valid(const Arrangement_2<Traits, Dcel>& arr);
/*! \ingroup PkgArrangementOnSurface2Funcs /*! \ingroup PkgArrangementOnSurface2Funcs
@ -337,8 +338,8 @@ bool is_valid(const Arrangement_2<Traits, Dcel>& arr);
* its endpoints become isolated, they are removed as well. The call * its endpoints become isolated, they are removed as well. The call
* `remove_edge(arr, e)` is equivalent to the call `arr.remove_edge (e, true, * `remove_edge(arr, e)` is equivalent to the call `arr.remove_edge (e, true,
* true)`. However, this free function requires that `Traits` be a model of the * true)`. However, this free function requires that `Traits` be a model of the
* refined concept `ArrangementXMonotoneTraits_2`, which requires merge * refined concept `AosXMonotoneTraits_2`, which requires merge
* operations on \f$ x\f$-monotone curves. If one of the end-vertices of the * operations on \f$x\f$-monotone curves. If one of the end-vertices of the
* given edge becomes redundant after the edge is removed (see `remove_vertex()` * given edge becomes redundant after the edge is removed (see `remove_vertex()`
* for the definition of a redundant vertex), it is removed, and its incident * for the definition of a redundant vertex), it is removed, and its incident
* edges are merged. If the edge-removal operation causes two faces to merge, * edges are merged. If the edge-removal operation causes two faces to merge,
@ -349,7 +350,7 @@ bool is_valid(const Arrangement_2<Traits, Dcel>& arr);
* *
* <UL> * <UL>
* <LI>The instantiated traits class must model the concept * <LI>The instantiated traits class must model the concept
* `ArrangementXMonotoneTraits_2`. * `AosXMonotoneTraits_2`.
* </UL> * </UL>
*/ */
template <typename Traits, typename Dcel> template <typename Traits, typename Dcel>
@ -362,17 +363,17 @@ remove_edge(Arrangement_2<Traits,Dcel>& arr,
* Attempts to removed a given vertex from a given arrangement. The vertex can * Attempts to removed a given vertex from a given arrangement. The vertex can
* be removed if it is either an isolated vertex, (and has no incident edge,) or * be removed if it is either an isolated vertex, (and has no incident edge,) or
* if it is a <I>redundant</I> vertex. That is, it has exactly two incident * if it is a <I>redundant</I> vertex. That is, it has exactly two incident
* edges, whose associated curves can be merged to form a single \f$ * edges, whose associated curves can be merged to form a single \f$x\f$-monotone
* x\f$-monotone curve. The function returns a boolean value that indicates * curve. The function returns a boolean value that indicates
* whether it succeeded removing the vertex from the arrangement. * whether it succeeded removing the vertex from the arrangement.
* *
* \cgalHeading{Requirements} * \cgalHeading{Requirements}
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementXMonotoneTraits_2` concept. Not all expressions listed * `AosXMonotoneTraits_2` concept. Not all expressions listed
* by this concept are required. In fact the traits class must model the * by this concept are required. In fact the traits class must model the
* `ArrangementBasicTraits_2` concept and support the merging functionality. * `AosBasicTraits_2` concept and support the merging functionality.
* </UL> * </UL>
*/ */
template <typename Traits, typename Dcel> template <typename Traits, typename Dcel>

View File

@ -5,11 +5,11 @@ namespace CGAL {
* \anchor arr_refaos * \anchor arr_refaos
* *
* An object `aos` of the class `Arrangement_on_surface_2` represents the * An object `aos` of the class `Arrangement_on_surface_2` represents the
* subdivision induced by a set of \f$ x\f$-monotone curves and isolated points * subdivision induced by a set of \f$x\f$-monotone curves and isolated points
* into maximally connected cells. The arrangement is represented as a * into maximally connected cells. The arrangement is represented as a
* doubly-connected edge-list (<span class="textsc">Dcel</span>) such that each * doubly-connected edge-list (<span class="textsc">Dcel</span>) such that each
* <span class="textsc">Dcel</span> vertex is associated with a point of the * <span class="textsc">Dcel</span> vertex is associated with a point of the
* plane and each edge is associated with an \f$ x\f$-monotone curve whose * plane and each edge is associated with an \f$x\f$-monotone curve whose
* interior is disjoint from all other edges and vertices. Recall that an * interior is disjoint from all other edges and vertices. Recall that an
* arrangement edge is always comprised of a pair of twin <span * arrangement edge is always comprised of a pair of twin <span
* class="textsc">Dcel</span> halfedges. * class="textsc">Dcel</span> halfedges.
@ -18,21 +18,21 @@ namespace CGAL {
* <UL> * <UL>
* <LI>The `GeometryTraits` template-parameter should be substituted by * <LI>The `GeometryTraits` template-parameter should be substituted by
* a model of a geometry traits. The minimal requirements are defined by the * a model of a geometry traits. The minimal requirements are defined by the
* `ArrangementBasicTraits_2` concept. A model of this concept defines * `AosBasicTraits_2` concept. A model of this concept defines
* the types of \f$ x\f$-monotone curves and two-dimensional points, namely * the types of \f$x\f$-monotone curves and two-dimensional points, namely
* `ArrangementBasicTraits_2::X_monotone_curve_2` and * `AosBasicTraits_2::X_monotone_curve_2` and
* `ArrangementBasicTraits_2::Point_2`, respectively, and supports basic * `AosBasicTraits_2::Point_2`, respectively, and supports basic
* geometric predicates on them. * geometric predicates on them.
* <LI>The `TopologyTraits` template-parameter should be substituted by a * <LI>The `TopologyTraits` template-parameter should be substituted by a
* class that is a model of the `ArrangementTopologyTraits` concept. * class that is a model of the `AosTopologyTraits` concept.
* </UL> * </UL>
* *
* The available traits classes and <span class="textsc">Dcel</span> classes are * The available traits classes and <span class="textsc">Dcel</span> classes are
* described below. * described below.
* \sa `ArrangementDcel` * \sa `AosDcel`
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `ArrangementBasicTraits_2` * \sa `AosBasicTraits_2`
* \sa `CGAL::overlay()` * \sa `CGAL::overlay()`
* Insertion Functions * Insertion Functions
@ -62,10 +62,10 @@ public:
/// \name Types /// \name Types
/// @{ /// @{
/*! the geometry traits class in use. */ /// the geometry traits class in use.
typedef GeometryTraits Geometry_traits_2; typedef GeometryTraits Geometry_traits_2;
/*! the topology traits class in use. */ /// the topology traits class in use.
typedef TopologyTraits Topology_traits; typedef TopologyTraits Topology_traits;
/*! a private type used as an abbreviation of the /*! a private type used as an abbreviation of the
@ -78,18 +78,18 @@ public:
*/ */
typedef typename Topology_traits::Dcel Dcel; typedef typename Topology_traits::Dcel Dcel;
/*! the point type, as defined by the traits class. */ /// the point type, as defined by the traits class.
typedef typename Geometry_traits_2::Point_2 Point_2; typedef typename Geometry_traits_2::Point_2 Point_2;
/*! the \f$ x\f$-monotone curve type, as defined by the traits class. */ /// the \f$x\f$-monotone curve type, as defined by the traits class.
typedef typename Geometry_traits_2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Geometry_traits_2::X_monotone_curve_2 X_monotone_curve_2;
/*! the size type (equivalent to `size_t`). */ /// the size type (equivalent to `std::size_t`).
typedef typename Dcel::Size Size; typedef typename Dcel::Size Size;
/*! \ingroup PkgArrangementOnSurface2DCEL /*! \ingroup PkgArrangementOnSurface2DCEL
* An object \f$ v\f$ of the class `Vertex` represents an arrangement vertex, * An object \f$v\f$ of the class `Vertex` represents an arrangement vertex,
* that is a \f$ 0\f$-dimensional cell, associated with a point on the * that is a \f$0\f$-dimensional cell, associated with a point on the
* ambient surface. * ambient surface.
*/ */
class Vertex : public typename Dcel::Vertex { class Vertex : public typename Dcel::Vertex {
@ -137,14 +137,14 @@ public:
*/ */
const typename Traits::Point_2& point() const; const typename Traits::Point_2& point() const;
/*! obtains the placement of the \f$ x\f$-coordinate in the parameter space, /*! obtains the placement of the \f$x\f$-coordinate in the parameter space,
* that is, either the left boundary-side, the interior, or the right * that is, either the left boundary-side, the interior, or the right
* boundary-side. If the vertex lies on an identified vertical side, the * boundary-side. If the vertex lies on an identified vertical side, the
* return value is non-deterministic. * return value is non-deterministic.
*/ */
Arr_parameter_space parameter_space_in_x() const; Arr_parameter_space parameter_space_in_x() const;
/*! obtains the placement of the \f$ y\f$-coordinate in the parameter space, /*! obtains the placement of the \f$y\f$-coordinate in the parameter space,
* that is, either the bottom boundary-side, the interior, or the top * that is, either the bottom boundary-side, the interior, or the top
* boundary-side. If the vertex lies on an identified horizontal side, the * boundary-side. If the vertex lies on an identified horizontal side, the
* return value is non-deterministic. * return value is non-deterministic.
@ -152,17 +152,16 @@ public:
Arr_parameter_space parameter_space_in_y() const; Arr_parameter_space parameter_space_in_y() const;
/// @} /// @}
}; /* end Vertex */ }; /* end Vertex */
/*! \ingroup PkgArrangementOnSurface2DCEL /*! \ingroup PkgArrangementOnSurface2DCEL
* An object \f$ e\f$ of the class `Halfedge` represents a halfedge in the * An object \f$e\f$ of the class `Halfedge` represents a halfedge in the
* arrangement. A halfedge is directed from its <I>source</I> vertex * arrangement. A halfedge is directed from its <I>source</I> vertex
* to its <I>target</I> vertex, and has an <I>incident face</I> lying to * to its <I>target</I> vertex, and has an <I>incident face</I> lying to
* its left. Each halfedge has a <I>twin</I> halfedge directed in the * its left. Each halfedge has a <I>twin</I> halfedge directed in the
* opposite direction, where the pair of twin halfedges form together * opposite direction, where the pair of twin halfedges form together
* an arrangement edge, that is, a \f$ 1\f$-dimensional cell, associated * an arrangement edge, that is, a \f$1\f$-dimensional cell, associated
* with planar \f$ x\f$-monotone curve. * with planar \f$x\f$-monotone curve.
* *
* Halfedges are stored in doubly-connected lists and form chains. These * Halfedges are stored in doubly-connected lists and form chains. These
* chains define the inner and outer boundaries of connected components. * chains define the inner and outer boundaries of connected components.
@ -221,7 +220,7 @@ public:
*/ */
Ccb_halfedge_circulator ccb(); Ccb_halfedge_circulator ccb();
/*! obtains the \f$ x\f$-monotone curve associated with `e`. /*! obtains the \f$x\f$-monotone curve associated with `e`.
* \pre `e` is not a fictitious halfedge. * \pre `e` is not a fictitious halfedge.
*/ */
const typename Traits::X_monotone_curve_2& curve() const; const typename Traits::X_monotone_curve_2& curve() const;
@ -372,7 +371,7 @@ public:
/// Mutable /// Mutable
/// @{ /// @{
/*! a handle to an arrangement vertex. */ /// a handle to an arrangement vertex.
typedef unspecified_type Vertex_handle; typedef unspecified_type Vertex_handle;
/*! a handle to a halfedge. /*! a handle to a halfedge.
@ -380,7 +379,7 @@ public:
*/ */
typedef unspecified_type Halfedge_handle; typedef unspecified_type Halfedge_handle;
/*! a handle to an arrangement face. */ /// a handle to an arrangement face.
typedef unspecified_type Face_handle; typedef unspecified_type Face_handle;
/*! a bidirectional iterator over the /*! a bidirectional iterator over the
@ -458,7 +457,7 @@ public:
*/ */
typedef unspecified_type Halfedge_const_handle; typedef unspecified_type Halfedge_const_handle;
/*! a handle to an arrangement face. */ /// a handle to an arrangement face.
typedef unspecified_type Face_const_handle; typedef unspecified_type Face_const_handle;
/*! a bidirectional iterator over the /*! a bidirectional iterator over the
@ -791,7 +790,7 @@ public:
* \pre `c` must not be an unbounded curve. * \pre `c` must not be an unbounded curve.
* \pre `v1` and `v2` are associated with `c`'s endpoints. * \pre `v1` and `v2` are associated with `c`'s endpoints.
* \pre If `v1` and `v2` are already connected by an edge, this edge * \pre If `v1` and `v2` are already connected by an edge, this edge
* represents an \f$ x\f$-monotone curve that is interior-disjoint from `c`). * represents an \f$x\f$-monotone curve that is interior-disjoint from `c`).
*/ */
Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c, Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c,
Vertex_handle v1, Vertex_handle v1,
@ -878,12 +877,17 @@ public:
* fictitious halfedge that should contain the vertex at infinity that * fictitious halfedge that should contain the vertex at infinity that
* corresponds to the unbounded left end of `c`. The function returns a * corresponds to the unbounded left end of `c`. The function returns a
* handle for one of the new halfedges directed (lexicographically) from right * handle for one of the new halfedges directed (lexicographically) from right
* to left. \pre The interior of `c` is disjoint from all existing * to left.
* arrangement vertices and edges. `c` must have a bounded right endpoint and *
* an unbounded left end. \pre `pred->target()` is associated with the right * \pre The interior of `c` is disjoint from all existing arrangement vertices
* endpoint of `c`, and `c` should be inserted after `pred` in a clockwise * and edges. `c` must have a bounded right endpoint and an unbounded left
* order around this vertex. \pre `fict_pred` is a fictitious halfedge that * end.
* contains the unbounded left end of `c`. *
* \pre `pred->target()` is associated with the right endpoint of `c`, and `c`
* should be inserted after `pred` in a clockwise order around this vertex.
*
* \pre `fict_pred` is a fictitious halfedge that contains the unbounded left
* end of `c`.
*/ */
Halfedge_handle insert_from_right_vertex(const X_monotone_curve_2& c, Halfedge_handle insert_from_right_vertex(const X_monotone_curve_2& c,
Halfedge_handle pred, Halfedge_handle pred,
@ -899,7 +903,7 @@ public:
* vertices and edges. * vertices and edges.
* \pre `pred1->target()` and `v2` are associated with `c`'s endpoints. * \pre `pred1->target()` and `v2` are associated with `c`'s endpoints.
* \pre If `pred1->target` and `v2` are already connected by an edge, this * \pre If `pred1->target` and `v2` are already connected by an edge, this
* edge represents an \f$ x\f$-monotone curve that is interior-disjoint from * edge represents an \f$x\f$-monotone curve that is interior-disjoint from
* `c`). * `c`).
*/ */
Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c, Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c,
@ -918,7 +922,7 @@ public:
* \pre `pred1->target()` and `pred2->target()` are associated with `c`'s * \pre `pred1->target()` and `pred2->target()` are associated with `c`'s
* endpoints. * endpoints.
* \pre If `pred1->target` and `pred2->target()` are already connected by an * \pre If `pred1->target` and `pred2->target()` are already connected by an
* edge, this edge represents an \f$ x\f$-monotone curve that is * edge, this edge represents an \f$x\f$-monotone curve that is
* interior-disjoint from `c`). * interior-disjoint from `c`).
*/ */
Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c, Halfedge_handle insert_at_vertices(const X_monotone_curve_2& c,
@ -943,7 +947,7 @@ public:
*/ */
Face_handle remove_isolated_vertex(Vertex_handle v); Face_handle remove_isolated_vertex(Vertex_handle v);
/*! sets `c` to be the \f$ x\f$-monotone curve associated with the edge `e`. /*! sets `c` to be the \f$x\f$-monotone curve associated with the edge `e`.
* The function obtains a handle for the modified edge (same as `e`). * The function obtains a handle for the modified edge (same as `e`).
* \pre `c` is geometrically equivalent to the curve currently associated * \pre `c` is geometrically equivalent to the curve currently associated
* with `e`. * with `e`.
@ -967,12 +971,14 @@ public:
/*! merges the edges represented by `e1` and `e2` into /*! merges the edges represented by `e1` and `e2` into
* a single edge, associated with the given merged curve `c`. Denote `e1`'s * a single edge, associated with the given merged curve `c`. Denote `e1`'s
* end-vertices as \f$ u_1\f$ and \f$ v\f$, while `e2`'s end-vertices are * end-vertices as \f$u_1\f$ and \f$v\f$, while `e2`'s end-vertices are
* denoted \f$ u_2\f$ and \f$ v\f$. The function removes the common vertex \f$ * denoted \f$u_2\f$ and \f$v\f$. The function removes the common vertex
* v\f$ returns a handle for one of the merged halfedges, directed from \f$ * \f$v\f$ returns a handle for one of the merged halfedges, directed from
* u_1\f$ to \f$ u_2\f$. * \f$u_1\f$ to \f$u_2\f$.
*
* \pre `e1` and `e2` share a common end-vertex, such that the two other * \pre `e1` and `e2` share a common end-vertex, such that the two other
* end-vertices of the two edges are associated with `c`'s endpoints. * end-vertices of the two edges are associated with `c`'s endpoints.
* \pre `e1` and `e2` have the same direction.
*/ */
Halfedge_handle merge_edge(Halfedge_handle e1, Halfedge_handle merge_edge(Halfedge_handle e1,
Halfedge_handle e2, Halfedge_handle e2,
@ -985,7 +991,7 @@ public:
* whether they should be left as isolated vertices in the arrangement. * whether they should be left as isolated vertices in the arrangement.
* If the operation causes two faces to merge, the merged face is returned. * If the operation causes two faces to merge, the merged face is returned.
* Otherwise, the face to which the edge was incident is returned. * Otherwise, the face to which the edge was incident is returned.
*/ */
Face_handle remove_edge(Halfedge_handle e, Face_handle remove_edge(Halfedge_handle e,
bool remove_source = true, bool remove_source = true,
bool remove_target = true); bool remove_target = true);
@ -1007,43 +1013,43 @@ public:
bool is_valid() const; bool is_valid() const;
/// @} /// @}
}; /* end Arrangement_on_surface_2 */ }; /* end Arrangement_on_surface_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */
namespace CGAL { namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Insert /*! \ingroup PkgArrangementOnSurface2Insert
* The function `%insert` inserts one or more curves or \f$ x\f$-monotone * The function `%insert` inserts one or more curves or \f$x\f$-monotone
* curves into a given arrangement, where no restrictions are imposed on the * curves into a given arrangement, where no restrictions are imposed on the
* inserted curves. If an inserted curve is not \f$ x\f$-monotone curve, it is * inserted curves. If an inserted curve is not \f$x\f$-monotone curve, it is
* subdivided into \f$ x\f$-monotone subcurves (and perhaps isolated points), * subdivided into \f$x\f$-monotone subcurves (and perhaps isolated points),
* which are inserted into the arrangement. * which are inserted into the arrangement.
* *
* \cgalHeading{Requirements} * \cgalHeading{Requirements}
* *
* <UL> * <UL>
* <LI>If the curve is \f$ x\f$-monotone curve then The instantiated * <LI>If the curve is \f$x\f$-monotone curve then The instantiated
* `Traits` class must model the `ArrangementXMonotoneTraits_2` * `Traits` class must model the `AosXMonotoneTraits_2`
* concept. In case that the curve is not \f$ x\f$-monotone then the * concept. In case that the curve is not \f$x\f$-monotone then the
* instantiated `Traits` class must model the * instantiated `Traits` class must model the
* `ArrangementTraits_2` concept. That is, it should define the * `AosTraits_2` concept. That is, it should define the
* `Curve_2` type, and support its subdivision into \f$ x\f$-monotone * `Curve_2` type, and support its subdivision into \f$x\f$-monotone
* subcurves (and perhaps isolated points). * subcurves (and perhaps isolated points).
* <LI>The point-location object `pl`, must model the * <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
/// @{ /// @{
/*! Inserts the given curve `c` into the arrangement `arr`. `c` is subdivided /*! Inserts the given curve `c` into the arrangement `arr`. `c` is subdivided
* into \f$ x\f$-monotone subcurves (and perhaps isolated points). Each subcurve * into \f$x\f$-monotone subcurves (and perhaps isolated points). Each subcurve
* is in turn inserted into the arrangement by locating its left endpoint and * is in turn inserted into the arrangement by locating its left endpoint and
* computing its zone until reaching the right endpoint. * computing its zone until reaching the right endpoint.
* *
* The given point-location object `pl` is used to locate the left endpoints of * The given point-location object `pl` is used to locate the left endpoints of
* the \f$ x\f$-monotone curves. By default, the function uses the "walk along * the \f$x\f$-monotone curves. By default, the function uses the "walk along
* line" point-location strategy - namely an instance of the class * line" point-location strategy - namely an instance of the class
* `Arr_walk_along_line_point_location<Arrangement_on_surface_2<GeometryTraits, TopologyTraits> >`. * `Arr_walk_along_line_point_location<Arrangement_on_surface_2<GeometryTraits, TopologyTraits> >`.
* *
@ -1069,7 +1075,7 @@ void insert(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
typename Arr_point_location_result<Arrangement_on_surface_2<GeometryTraits, TopologyTraits> >::type obj); typename Arr_point_location_result<Arrangement_on_surface_2<GeometryTraits, TopologyTraits> >::type obj);
/*! Aggregately inserts the curves or \f$ x\f$-monotone curves in the range /*! Aggregately inserts the curves or \f$x\f$-monotone curves in the range
* `[first,last)` into the arrangement `arr` using the sweep-line framework. * `[first,last)` into the arrangement `arr` using the sweep-line framework.
* \param arr the target arrangement. * \param arr the target arrangement.
* \param first the iterator to the first element in the range of curves. * \param first the iterator to the first element in the range of curves.
@ -1089,7 +1095,7 @@ void insert(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
* arrangement's edges or vertices. * arrangement's edges or vertices.
* *
* If the give curve is not an \f$x\f$-monotone curve then the function * If the give curve is not an \f$x\f$-monotone curve then the function
* subdivides the given curve into \f$ x\f$-monotone subcurves and isolated * subdivides the given curve into \f$x\f$-monotone subcurves and isolated
* vertices . Each subcurve is in turn checked for intersection. The function * vertices . Each subcurve is in turn checked for intersection. The function
* uses the zone algorithm to check if the curve intersects the * uses the zone algorithm to check if the curve intersects the
* arrangement. First, the curve's left endpoint is located. Then, its zone is * arrangement. First, the curve's left endpoint is located. Then, its zone is
@ -1103,7 +1109,7 @@ void insert(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
* `Arr_walk_along_line_point_location<Arrangement_on_surface_2<GeometryTraits, * `Arr_walk_along_line_point_location<Arrangement_on_surface_2<GeometryTraits,
* TopologyTraits> >`. * TopologyTraits> >`.
* *
* Checks if the given curve or \f$ x\f$-monotone curve `c` intersects * Checks if the given curve or \f$x\f$-monotone curve `c` intersects
* edges or vertices of the existing arrangement `arr`. * edges or vertices of the existing arrangement `arr`.
* *
* \pre If provided, `pl` must be attached to the given arrangement `arr`. * \pre If provided, `pl` must be attached to the given arrangement `arr`.
@ -1111,14 +1117,14 @@ void insert(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
* \cgalHeading{Requirements} * \cgalHeading{Requirements}
* *
* <UL> * <UL>
* <LI>If `c` is \f$ x\f$-monotone then the instantiated `GeometryTraits` * <LI>If `c` is \f$x\f$-monotone then the instantiated `GeometryTraits`
* class must model the `ArrangementXMonotoneTraits_2` concept. If * class must model the `AosXMonotoneTraits_2` concept. If
* `c` is a curve then the instantiated `GeometryTraits` class must * `c` is a curve then the instantiated `GeometryTraits` class must
* model the `ArrangementTraits_2` concept. That is, it should * model the `AosTraits_2` concept. That is, it should
* define the `Curve_2` type, and support its subdivision into * define the `Curve_2` type, and support its subdivision into
* \f$ x\f$-monotone subcurves (and perhaps isolated points). * \f$x\f$-monotone subcurves (and perhaps isolated points).
* <LI>The point-location object `pl`, must model the * <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
template <typename GeometryTraits, typename TopologyTraits, typename Curve, template <typename GeometryTraits, typename TopologyTraits, typename Curve,
@ -1128,7 +1134,7 @@ bool do_intersect(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
/*! \ingroup PkgArrangementOnSurface2Funcs /*! \ingroup PkgArrangementOnSurface2Funcs
* *
* Inserts a given \f$ x\f$-monotone curve into a given arrangement, where the * Inserts a given \f$x\f$-monotone curve into a given arrangement, where the
* given curve and the existing arrangement edges (more precisely, the curves * given curve and the existing arrangement edges (more precisely, the curves
* geometric mappings of the edges) must be pairwise disjoint in their * geometric mappings of the edges) must be pairwise disjoint in their
* interiors, and the interior of the input curve must not contain existing * interiors, and the interior of the input curve must not contain existing
@ -1152,9 +1158,9 @@ bool do_intersect(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the restricted * <LI>The instantiated `Traits` class must model the restricted
* `ArrangementBasicTraits_2` concept, as no intersections are computed. * `AosBasicTraits_2` concept, as no intersections are computed.
* <LI>The point-location object `pl` must model the * <LI>The point-location object `pl` must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
template <typename GeometryTraits, typename TopologyTraits, template <typename GeometryTraits, typename TopologyTraits,
@ -1167,7 +1173,7 @@ insert_non_intersecting_curve
/*! \ingroup PkgArrangementOnSurface2Funcs /*! \ingroup PkgArrangementOnSurface2Funcs
* *
* Inserts a set of \f$ x\f$-monotone curves in a given range into a given * Inserts a set of \f$x\f$-monotone curves in a given range into a given
* arrangement. The insertion is performed in an aggregated manner using the * arrangement. The insertion is performed in an aggregated manner using the
* sweep-line algorithm. The input curves and the existing arrangement edges * sweep-line algorithm. The input curves and the existing arrangement edges
* (more precisely, the curves geometric mappings of the edges) must be pairwise * (more precisely, the curves geometric mappings of the edges) must be pairwise
@ -1180,7 +1186,7 @@ insert_non_intersecting_curve
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementBasicTraits_2` concept, as no intersections are computed. * `AosBasicTraits_2` concept, as no intersections are computed.
* <LI>`InputIterator::value_type` must be `Traits::X_monotone_curve_2` * <LI>`InputIterator::value_type` must be `Traits::X_monotone_curve_2`
* </UL> * </UL>
*/ */
@ -1209,12 +1215,12 @@ void insert_non_intersecting_curves
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementXMonotoneTraits_2` concept. Not all expressions listed * `AosXMonotoneTraits_2` concept. Not all expressions listed
* by this concept are required. In fact the traits class must model the * by this concept are required. In fact the traits class must model the
* `ArrangementBasicTraits_2` concept, and support the splitting * `AosBasicTraits_2` concept, and support the splitting
* functionality. * functionality.
* <LI>The point-location object `pl`, must model the * <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* </UL> * </UL>
*/ */
template <typename GeometryTraits, typename TopologyTraits, template <typename GeometryTraits, typename TopologyTraits,
@ -1230,7 +1236,7 @@ insert_point(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
* *
* Invokes the member function `arr.is_valid()` to verify the topological * Invokes the member function `arr.is_valid()` to verify the topological
* correctness of the arrangement. Then it performs additional validity * correctness of the arrangement. Then it performs additional validity
* tests. It checks that all \f$ x\f$-monotone curves associated with * tests. It checks that all \f$x\f$-monotone curves associated with
* arrangement edges are pairwise disjoint in their interior. Then it makes sure * arrangement edges are pairwise disjoint in their interior. Then it makes sure
* that all holes and all isolated vertices are located within the proper * that all holes and all isolated vertices are located within the proper
* arrangement faces. Note that the test carried out by this function may take a * arrangement faces. Note that the test carried out by this function may take a
@ -1253,8 +1259,8 @@ bool is_valid
* its endpoints become isolated, they are removed as well. The call * its endpoints become isolated, they are removed as well. The call
* `remove_edge(arr, e)` is equivalent to the call `arr.remove_edge (e, true, * `remove_edge(arr, e)` is equivalent to the call `arr.remove_edge (e, true,
* true)`. However, this free function requires that `Traits` be a model of the * true)`. However, this free function requires that `Traits` be a model of the
* refined concept `ArrangementXMonotoneTraits_2`, which requires merge * refined concept `AosXMonotoneTraits_2`, which requires merge
* operations on \f$ x\f$-monotone curves. If one of the end-vertices of the * operations on \f$x\f$-monotone curves. If one of the end-vertices of the
* given edge becomes redundant after the edge is removed (see `remove_vertex()` * given edge becomes redundant after the edge is removed (see `remove_vertex()`
* for the definition of a redundant vertex), it is removed, and its incident * for the definition of a redundant vertex), it is removed, and its incident
* edges are merged. If the edge-removal operation causes two faces to merge, * edges are merged. If the edge-removal operation causes two faces to merge,
@ -1265,10 +1271,10 @@ bool is_valid
* *
* <UL> * <UL>
* <LI>The instantiated traits class must model the concept * <LI>The instantiated traits class must model the concept
* `ArrangementXMonotoneTraits_2`. * `AosXMonotoneTraits_2`.
* </UL> * </UL>
*/ */
template<typename GeometryTraits, typename TopologyTraits> template <typename GeometryTraits, typename TopologyTraits>
typename Arrangement_on_surface_2<GeometryTraits, TopologyTraits>::Face_handle typename Arrangement_on_surface_2<GeometryTraits, TopologyTraits>::Face_handle
remove_edge remove_edge
(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr, (Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
@ -1287,9 +1293,9 @@ remove_edge
* *
* <UL> * <UL>
* <LI>The instantiated `Traits` class must model the * <LI>The instantiated `Traits` class must model the
* `ArrangementXMonotoneTraits_2` concept. Not all expressions listed * `AosXMonotoneTraits_2` concept. Not all expressions listed
* by this concept are required. In fact the traits class must model the * by this concept are required. In fact the traits class must model the
* `ArrangementBasicTraits_2` concept and support the merging * `AosBasicTraits_2` concept and support the merging
* functionality. * functionality.
* </UL> * </UL>
*/ */
@ -1323,9 +1329,9 @@ bool remove_vertex
* *
* \pre If provided, `pl` must be attached to the given arrangement `arr`. * \pre If provided, `pl` must be attached to the given arrangement `arr`.
* \pre The instantiated `GeometryTraits` class must model the * \pre The instantiated `GeometryTraits` class must model the
* `ArrangementXMonotoneTraits_2` concept. * `AosXMonotoneTraits_2` concept.
* \pre The point-location object `pl`, must model the * \pre The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept. * `AosPointLocation_2` concept.
* \pre Dereferencing `oi` must yield a polymorphic object of type * \pre Dereferencing `oi` must yield a polymorphic object of type
* `std::variant<Arrangement_on_surface_2::Vertex_handle, Arrangement_on_surface_2::Halfedge_handle, Arrangement_on_surface_2::Face_handle>`. * `std::variant<Arrangement_on_surface_2::Vertex_handle, Arrangement_on_surface_2::Halfedge_handle, Arrangement_on_surface_2::Face_handle>`.
* *

View File

@ -5,18 +5,18 @@ namespace CGAL {
* \anchor arr_refaos_with_hist * \anchor arr_refaos_with_hist
* *
* An object `arr` of the class `Arrangement_on_surface_with_history_2` * An object `arr` of the class `Arrangement_on_surface_with_history_2`
* represents the planar subdivision induced by a set of input curves \f$ \cal * represents the planar subdivision induced by a set of input curves
* C\f$. The arrangement is represented as a doubly-connected edge-list (<span * \f$\cal C\f$. The arrangement is represented as a doubly-connected edge-list
* class="textsc">Dcel</span>). As is the case for the * (<span class="textsc">Dcel</span>). As is the case for the
* `Arrangement_2<Traits,Dcel>`, each <span class="textsc">Dcel</span> vertex is * `Arrangement_2<Traits,Dcel>`, each <span class="textsc">Dcel</span> vertex is
* associated with a point and each edge is associated with an \f$ x\f$-monotone * associated with a point and each edge is associated with an \f$x\f$-monotone
* curve whose interior is disjoint from all other edges and vertices. Each such * curve whose interior is disjoint from all other edges and vertices. Each such
* \f$ x\f$-monotone curve is a subcurve of some \f$ C \in \cal C\f$ - or may * \f$x\f$-monotone curve is a subcurve of some \f$C \in \cal C\f$ - or may
* represent an overlap among several curves in \f$ \cal C\f$. * represent an overlap among several curves in \f$\cal C\f$.
* *
* The `Arrangement_on_surface_with_history_2` class-template extends the * The `Arrangement_on_surface_with_history_2` class-template extends the
* `Arrangement_2` class-template by keeping an additional container of input * `Arrangement_2` class-template by keeping an additional container of input
* curves representing \f$ \cal C\f$, and by maintaining a cross-mapping between * curves representing \f$\cal C\f$, and by maintaining a cross-mapping between
* these curves and the arrangement edges they induce. This way it is possible * these curves and the arrangement edges they induce. This way it is possible
* to determine the inducing curve(s) of each arrangement edge. This mapping * to determine the inducing curve(s) of each arrangement edge. This mapping
* also allows the traversal of input curves, and the traversal of edges induced * also allows the traversal of input curves, and the traversal of edges induced
@ -26,33 +26,32 @@ namespace CGAL {
* *
* <UL> * <UL>
* <LI>The `GeometryTraits` template-parameter should be substituted by a * <LI>The `GeometryTraits` template-parameter should be substituted by a
* model of the `ArrangementTraits_2` concept. The traits class defines the * model of the `AosTraits_2` concept. The traits class defines the
* `Curve_2` type, which represents an input curve. It also defines the types * `Curve_2` type, which represents an input curve. It also defines the types
* of \f$ x\f$-monotone curves and two-dimensional points, namely * of \f$x\f$-monotone curves and two-dimensional points, namely
* `ArrangementTraits_2::X_monotone_curve_2` and * `AosTraits_2::X_monotone_curve_2` and
* `ArrangementTraits_2::Point_2`, respectively, and supports basic * `AosTraits_2::Point_2`, respectively, and supports basic
* geometric predicates on them. * geometric predicates on them.
* <LI>The `TopologyTraits` template-parameter should be substituted by a * <LI>The `TopologyTraits` template-parameter should be substituted by a
* class that is a model of the `ArrangementTopologyTraits` concept. * class that is a model of the `AosTopologyTraits` concept.
* </UL> * </UL>
* *
* \sa `Arrangement_with_history_2<GeometryTraits,Dcel>` * \sa `Arrangement_with_history_2<GeometryTraits,Dcel>`
* \sa `Arrangement_on_surface_2<GeometryTraits,TopologyTraits>` * \sa `Arrangement_on_surface_2<GeometryTraits,TopologyTraits>`
* \sa `ArrangementTraits_2` * \sa `AosTraits_2`
* \sa `ArrangementTopologyTraits` * \sa `AosTopologyTraits`
*/ */
template <typename GeometryTraits, typename TopologyTraits> template <typename GeometryTraits, typename TopologyTraits>
class Arrangement_on_surface_with_history_2 : class Arrangement_on_surface_with_history_2 :
public Arrangement_on_surface_2<GeometryTraits, TopologyTraits> public Arrangement_on_surface_2<GeometryTraits, TopologyTraits> {
{
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! the geometry traits class in use. /// the geometry traits class in use.
typedef GeometryTraits Geometry_traits_2; typedef GeometryTraits Geometry_traits_2;
//! the topology traits class in use. /// the topology traits class in use.
typedef TopologyTraits Topology_traits; typedef TopologyTraits Topology_traits;
/*! a private type used as an abbreviation of the /*! a private type used as an abbreviation of the
@ -61,16 +60,16 @@ public:
typedef Arrangement_on_surface_with_history_2<Geometry_traits_2, typedef Arrangement_on_surface_with_history_2<Geometry_traits_2,
TopologyTraits> Self; TopologyTraits> Self;
//! the <span class="textsc">Dcel</span> representation of the arrangement. /// the <span class="textsc">Dcel</span> representation of the arrangement.
typedef typename Topology_traits::Dcel Dcel; typedef typename Topology_traits::Dcel Dcel;
//! the point type, as defined by the traits class. /// the point type, as defined by the traits class.
typedef typename Geometry_traits_2::Point_2 Point_2; typedef typename Geometry_traits_2::Point_2 Point_2;
//! the \f$ x\f$-monotone curve type, as defined by the traits class. /// the \f$x\f$-monotone curve type, as defined by the traits class.
typedef typename Geometry_traits_2::X_monotone_curve_2 X_monotone_curve_2; typedef typename Geometry_traits_2::X_monotone_curve_2 X_monotone_curve_2;
//! the curve type, as defined by the traits class. /// the curve type, as defined by the traits class.
typedef typename Geometry_traits_2::Curve_2 Curve_2; typedef typename Geometry_traits_2::Curve_2 Curve_2;
/// @} /// @}
@ -82,7 +81,7 @@ public:
*/ */
/// @{ /// @{
//! a handle for an input curve. /// a handle for an input curve.
typedef unspecified_type Curve_handle; typedef unspecified_type Curve_handle;
/*! a bidirectional iterator over the curves that induce the arrangement. /*! a bidirectional iterator over the curves that induce the arrangement.
@ -123,13 +122,13 @@ public:
/// \name Assignment Methods /// \name Assignment Methods
/// @{ /// @{
//! assignment operator. /// assignment operator.
Self& operator=(other); Self& operator=(other);
//! assigns the contents of another arrangement. /// assigns the contents of another arrangement.
void assign(const Self& other); void assign(const Self& other);
//! clears the arrangement. /// clears the arrangement.
void clear (); void clear ();
/// @} /// @}
@ -140,31 +139,31 @@ public:
/// @{ /// @{
//! returns the number of input curves that induce the arrangement. /// returns the number of input curves that induce the arrangement.
Size number_of_curves() const; Size number_of_curves() const;
//! returns the begin-iterator of the curves inducing the arrangement. /// returns the begin-iterator of the curves inducing the arrangement.
Curve_iterator curves_begin(); Curve_iterator curves_begin();
//! returns the past-the-end iterator of the curves inducing the arrangement. //! returns the past-the-end iterator of the curves inducing the arrangement.
Curve_iterator curves_end(); Curve_iterator curves_end();
//! returns the number of arrangement edges induced by the curve `ch`. /// returns the number of arrangement edges induced by the curve `ch`.
Size number_of_induced_edges(Curve_handle ch) const; Size number_of_induced_edges(Curve_handle ch) const;
//! returns the begin-iterator of the edges induced by the curve `ch`. /// returns the begin-iterator of the edges induced by the curve `ch`.
Induced_edge_iterator induced_edges_begin(Curve_handle ch) const; Induced_edge_iterator induced_edges_begin(Curve_handle ch) const;
//! returns the past-the-end iterator of the edges induced by the curve `ch`. /// returns the past-the-end iterator of the edges induced by the curve `ch`.
Induced_edge_iterator induced_edges_end(Curve_handle ch) const; Induced_edge_iterator induced_edges_end(Curve_handle ch) const;
//! returns the number of input curves that originate the edge `e`. /// returns the number of input curves that originate the edge `e`.
Size number_of_originating_curves(Halfedge_handle e) const; Size number_of_originating_curves(Halfedge_handle e) const;
//! returns the begin-iterator of the curves originating the edge `e`. /// returns the begin-iterator of the curves originating the edge `e`.
Originating_curve_iterator originating_curves_begin(Halfedge_handle e) const; Originating_curve_iterator originating_curves_begin(Halfedge_handle e) const;
//! returns the past-the-end iterator of the curves originating the edge `e`. /// returns the past-the-end iterator of the curves originating the edge `e`.
Originating_curve_iterator originating_curves_end(Halfedge_handle e) const; Originating_curve_iterator originating_curves_end(Halfedge_handle e) const;
/// @} /// @}
@ -192,9 +191,9 @@ public:
/*! merges the edges represented by `e1` and `e2` into a single edge. The /*! merges the edges represented by `e1` and `e2` into a single edge. The
* function returns a handle for one of the merged halfedges. * function returns a handle for one of the merged halfedges.
* *
* \pre `e1` and `e2` share a common end-vertex, of degree \f$ 2\f$, and the * \pre `e1` and `e2` share a common end-vertex, of degree \f$2\f$, and the
* \f$ x\f$-monotone curves associated with `e1` and `e2` are mergeable * \f$x\f$-monotone curves associated with `e1` and `e2` are mergeable
* into a single \f$ x\f$-monotone curves. * into a single \f$x\f$-monotone curves.
*/ */
Halfedge_handle merge_edge(Halfedge_handle e1, Halfedge_handle e2); Halfedge_handle merge_edge(Halfedge_handle e1, Halfedge_handle e2);
@ -210,7 +209,6 @@ public:
bool remove_target = true); bool remove_target = true);
/// @} /// @}
}; /* end Arrangement_on_surface_with_history_2 */ }; /* end Arrangement_on_surface_with_history_2 */
/*! \ingroup PkgArrangementOnSurface2Insert /*! \ingroup PkgArrangementOnSurface2Insert
@ -222,14 +220,14 @@ public:
* computing its zone until reaching the right endpoint. * computing its zone until reaching the right endpoint.
* *
* The given point-location object `pl` is used to locate the left endpoints of * The given point-location object `pl` is used to locate the left endpoints of
* the \f$ x\f$-monotone curves. By default, the function uses the "walk along * the \f$x\f$-monotone curves. By default, the function uses the "walk along
* line" point-location strategy - namely an instance of the class * line" point-location strategy - namely an instance of the class
* `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`. * `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`.
* *
* \pre If provided, `pl` is attached to the given arrangement `arr`. * \pre If provided, `pl` is attached to the given arrangement `arr`.
*/ */
template<typename GeometryTraits, typename TopologyTraits, template <typename GeometryTraits, typename TopologyTraits,
typename PointLocation> typename PointLocation>
typename Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>::Curve_handle typename Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>::Curve_handle
insert insert
(Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>& arr, (Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>& arr,
@ -261,7 +259,6 @@ Size remove_curve
(Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>& arr, (Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>& arr,
typename Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>::Curve_handle ch); typename Arrangement_on_surface_with_history_2<GeometryTraits, TopologyTraits>::Curve_handle ch);
/*! \addtogroup PkgArrangementOnSurface2Overlay /*! \addtogroup PkgArrangementOnSurface2Overlay
* *
* Computes the overlay of two arrangements with history `arr1` and `arr2`, and * Computes the overlay of two arrangements with history `arr1` and `arr2`, and
@ -281,17 +278,16 @@ void overlay
Arrangement_on_surface_with_history_2<GeometryTraits, ResTopologyTraits>& res, Arrangement_on_surface_with_history_2<GeometryTraits, ResTopologyTraits>& res,
OverlayTraits& ovl_tr); OverlayTraits& ovl_tr);
/*! \addtogroup PkgArrangementOnSurface2Overlay /*! \addtogroup PkgArrangementOnSurface2Overlay
* *
* Computes the (simple) overlay of two arrangements with history `arr1` and * Computes the (simple) overlay of two arrangements with history `arr1` and
*`arr2`, and sets the output arrangement with history `res` to represent the * `arr2`, and sets the output arrangement with history `res` to represent the
*overlaid arrangement. The function also constructs a consolidated set of * overlaid arrangement. The function also constructs a consolidated set of
*curves that induce `res`. It employs the default overlay-traits, which * curves that induce `res`. It employs the default overlay-traits, which
*practically does nothing. * practically does nothing.
* *
* \pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" * \pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay"
*is not supported). * is not supported).
*/ */
template <typename GeometryTraits, typename TopologyTraits1, template <typename GeometryTraits, typename TopologyTraits1,
typename TopologyTraits2, typename ResTopologyTraits> typename TopologyTraits2, typename ResTopologyTraits>

View File

@ -5,17 +5,17 @@ namespace CGAL {
* \anchor arr_refarr_with_hist * \anchor arr_refarr_with_hist
* *
* An object `arr` of the class `Arrangement_with_history_2` represents the * An object `arr` of the class `Arrangement_with_history_2` represents the
* planar subdivision induced by a set of input curves \f$ \cal C\f$. The * planar subdivision induced by a set of input curves \f$\cal C\f$. The
* arrangement is represented as a doubly-connected edge-list (\dcel). As is * arrangement is represented as a doubly-connected edge-list (\dcel). As is
* the case for the `Arrangement_2<Traits,Dcel>`, each \dcel vertex is * the case for the `Arrangement_2<Traits,Dcel>`, each \dcel vertex is
* associated with a point and each edge is associated with an \f$ x\f$-monotone * associated with a point and each edge is associated with an \f$x\f$-monotone
* curve whose interior is disjoint from all other curves and points. Each such * curve whose interior is disjoint from all other curves and points. Each such
* \f$ x\f$-monotone curve is a subcurve of some \f$ C \in \cal C\f$, or may * \f$x\f$-monotone curve is a subcurve of some \f$C \in \cal C\f$, or may
* represent an overlap among several curves in \f$ \cal C\f$. * represent an overlap among several curves in \f$\cal C\f$.
* *
* The `Arrangement_with_history_2` class-template extends the `Arrangement_2` * The `Arrangement_with_history_2` class-template extends the `Arrangement_2`
* class-template by keeping an additional container of input curves * class-template by keeping an additional container of input curves
* representing \f$ \cal C\f$, and by maintaining a cross-mapping between these * representing \f$\cal C\f$, and by maintaining a cross-mapping between these
* curves and the arrangement edges they induce. This way it is possible to * curves and the arrangement edges they induce. This way it is possible to
* determine the inducing curve(s) of each arrangement edge. This mapping also * determine the inducing curve(s) of each arrangement edge. This mapping also
* allows the traversal of input curves, and the traversal of edges induced by * allows the traversal of input curves, and the traversal of edges induced by
@ -24,39 +24,39 @@ namespace CGAL {
* The `Arrangement_with_history_2` template has two parameters: * The `Arrangement_with_history_2` template has two parameters:
* <UL> * <UL>
* <LI>The `Traits` template-parameter should be substituted by a model of * <LI>The `Traits` template-parameter should be substituted by a model of
* the `ArrangementTraits_2` concept. The traits class defines the `Curve_2` * the `AosTraits_2` concept. The traits class defines the `Curve_2`
* type, which represents an input curve. It also defines the types of \f$ * type, which represents an input curve. It also defines the types of \f$
* x\f$-monotone curves and two-dimensional points, namely * x\f$-monotone curves and two-dimensional points, namely
* `ArrangementTraits_2::X_monotone_curve_2` and `ArrangementTraits_2::Point_2`, * `AosTraits_2::X_monotone_curve_2` and `AosTraits_2::Point_2`,
* respectively, and supports basic geometric predicates on them. * respectively, and supports basic geometric predicates on them.
* <LI>The `Dcel` template-parameter should be substituted by a class that is * <LI>The `Dcel` template-parameter should be substituted by a class that is
* a model of the `ArrangementDcelWithRebind` concept. The value of this * a model of the `AosDcelWithRebind` concept. The value of this
* parameter is by default `Arr_default_dcel<Traits>`. * parameter is by default `Arr_default_dcel<Traits>`.
* </UL> * </UL>
* *
* \sa `ArrangementDcel` * \sa `AosDcel`
* \sa `Arr_default_dcel<Traits>` * \sa `Arr_default_dcel<Traits>`
* \sa `ArrangementTraits_2` * \sa `AosTraits_2`
* \sa `Arrangement_2<Traits,Dcel>` * \sa `Arrangement_2<Traits,Dcel>`
* \sa `insertion functions` * \sa `insertion functions`
* \sa `removal functions` * \sa `removal functions`
* \sa `overlaying arrangements` * \sa `overlaying arrangements`
*/ */
template <typename Traits, typename Dcel> template <typename Traits, typename Dcel>
class Arrangement_with_history_2 : public Arrangement_on_surface_with_history_2<Traits, typename Default_planar_topology<Traits, Dcel>::Traits> { class Arrangement_with_history_2 :
public Arrangement_on_surface_with_history_2<Traits, typename Default_planar_topology<Traits, Dcel>::Traits> {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! the geometry traits class. /// the geometry traits class.
typedef Traits Geometry_traits; typedef Traits Geometry_traits;
//! The topology traits. /// The topology traits.
typedef typename Default_planar_topology<Geometry_traits, Dcel>::Traits typedef typename Default_planar_topology<Geometry_traits, Dcel>::Traits
Topology_traits; Topology_traits;
//! The base arrangement on surface type. /// The base arrangement on surface type.
typedef Arrangement_on_surface_with_history_2<Geometry_traits, Topology_traits> typedef Arrangement_on_surface_with_history_2<Geometry_traits, Topology_traits>
Base; Base;
@ -129,13 +129,13 @@ public:
* computing its zone until reaching the right endpoint. * computing its zone until reaching the right endpoint.
* *
* The given point-location object `pl` is used to locate the left endpoints of * The given point-location object `pl` is used to locate the left endpoints of
* the \f$ x\f$-monotone curves. By default, the function uses the "walk along * the \f$x\f$-monotone curves. By default, the function uses the "walk along
* line" point-location strategy - namely an instance of the class * line" point-location strategy - namely an instance of the class
* `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`. * `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`.
* *
* \pre If provided, `pl` is attached to the given arrangement `arr`. * \pre If provided, `pl` is attached to the given arrangement `arr`.
*/ */
template<typename Traits, typename Dcel, typename PointLocation> template <typename Traits, typename Dcel, typename PointLocation>
typename Arrangement_with_history_2<Traits, Dcel>::Curve_handle typename Arrangement_with_history_2<Traits, Dcel>::Curve_handle
insert(Arrangement_with_history_2<Traits, Dcel>& arr, insert(Arrangement_with_history_2<Traits, Dcel>& arr,
const typename Traits::Curve_2& c, const typename Traits::Curve_2& c,
@ -161,7 +161,6 @@ template <typename Traits, typename Dcel>
Size remove_curve(Arrangement_with_history_2<Traits,Dcel>& arr, Size remove_curve(Arrangement_with_history_2<Traits,Dcel>& arr,
typename Arrangement_with_history_2<Traits,Dcel>::Curve_handle ch); typename Arrangement_with_history_2<Traits,Dcel>::Curve_handle ch);
/*! \addtogroup PkgArrangementOnSurface2Overlay /*! \addtogroup PkgArrangementOnSurface2Overlay
* Computes the overlay of two arrangements with history `arr1` and `arr2`, and * Computes the overlay of two arrangements with history `arr1` and `arr2`, and
* sets the output arrangement with history `res` to represent the overlaid * sets the output arrangement with history `res` to represent the overlaid
@ -170,14 +169,13 @@ Size remove_curve(Arrangement_with_history_2<Traits,Dcel>& arr,
* *
* \pre `res` does not refer to either `arr1` or `arr2`. * \pre `res` does not refer to either `arr1` or `arr2`.
*/ */
template<typename Traits, typename Dcel1, typename Dcel2, template <typename Traits, typename Dcel1, typename Dcel2,
typename ResDcel, typename OverlayTraits> typename ResDcel, typename OverlayTraits>
void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1, void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1,
const Arrangement_with_history_2<Traits,Dcel2>& arr2, const Arrangement_with_history_2<Traits,Dcel2>& arr2,
Arrangement_with_history_2<Traits,ResDcel>& res, Arrangement_with_history_2<Traits,ResDcel>& res,
OverlayTraits& ovl_tr); OverlayTraits& ovl_tr);
/*! \addtogroup PkgArrangementOnSurface2Overlay /*! \addtogroup PkgArrangementOnSurface2Overlay
* *
* Computes the (simple) overlay of two arrangements with history `arr1` and * Computes the (simple) overlay of two arrangements with history `arr1` and
@ -189,8 +187,7 @@ void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1,
* \pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" * \pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay"
* is not supported). * is not supported).
*/ */
template<typename Traits, typename Dcel1, typename Dcel2, template <typename Traits, typename Dcel1, typename Dcel2, typename ResDcel>
typename ResDcel>
void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1, void overlay(const Arrangement_with_history_2<Traits,Dcel1>& arr1,
const Arrangement_with_history_2<Traits,Dcel2>& arr2, const Arrangement_with_history_2<Traits,Dcel2>& arr2,
Arrangement_with_history_2<Traits,ResDcel>& res); Arrangement_with_history_2<Traits,ResDcel>& res);

View File

@ -12,16 +12,16 @@ public:
/// \name Types /// \name Types
/// @{ /// @{
//! The integer number type. /// The integer number type.
typedef CORE::BigInt Integer; typedef CORE::BigInt Integer;
//! The rational number type. /// The rational number type.
typedef CORE::BigRat Rational; typedef CORE::BigRat Rational;
//! The polynomial type. /// The polynomial type.
typedef CORE::Polynomial<Integer> Polynomial; typedef CORE::Polynomial<Integer> Polynomial;
//! The algebraic number type. /// The algebraic number type.
typedef CORE::Expr Algebraic; typedef CORE::Expr Algebraic;
/// @} /// @}

View File

@ -2,100 +2,89 @@ namespace CGAL {
namespace IO { namespace IO {
/*! /*! \defgroup PkgArrangementOnSurface2Read CGAL::IO::read()
\defgroup PkgArrangementOnSurface2Read CGAL::IO::read() * \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* Reads a given arrangement from a given input stream
* using a specific input format.
*
* \cgalHeading{Requirements}
*
* <UL>
* <LI>The instantiated `Formatter` class must model the
* `AosInputFormatter` concept.
* <LI>The instantiated `WithHistoryFormatter` class must model the
* `AosWithHistoryInputFormatter` concept.
* </UL>
*
* \sa `PkgArrangementOnSurface2Write`
* \sa `PkgArrangementOnSurface2op_left_shift`
* \sa `PkgArrangementOnSurface2op_right_shift`
*/
Reads a given arrangement from a given input stream
using a specific input format.
\cgalHeading{Requirements}
<UL>
<LI>The instantiated `Formatter` class must model the
`ArrangementInputFormatter` concept.
<LI>The instantiated `WithHistoryFormatter` class must model the
`ArrangementWithHistoryInputFormatter` concept.
</UL>
\sa `PkgArrangementOnSurface2Write`
\sa `PkgArrangementOnSurface2op_left_shift`
\sa `PkgArrangementOnSurface2op_right_shift`
*/
/// @{ /// @{
/*! /*! Reads the arrangement object `arr` from the given input stream `is`
Reads the arrangement object `arr` from the given input stream `is` * using a specific input format defined by \"formatter\".
using a specific input format defined by \"formatter\". */
*/ template <typename Traits, typename Dcel, typename Formatter>
template<typename Traits, typename Dcel, typename Formatter> std::istream& read(Arrangement_2<Traits,Dcel>& arr,
std::istream& read (Arrangement_2<Traits,Dcel>& arr, std::istream& is, Formatter& formatter);
std::istream& is,
Formatter& formatter);
/// @} /// @}
/*! /*! \defgroup PkgArrangementOnSurface2Write CGAL::IO::write()
\defgroup PkgArrangementOnSurface2Write CGAL::IO::write() * \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* Writes a given arrangement into a given output stream
* using a specific output format.
*
* \cgalHeading{Requirements}
*
* <UL>
* <LI>The instantiated `Formatter` class must model the
* `AosOutputFormatter` concept.
* <LI>The instantiated `WithHistoryFormatter` class must model the
* `AosWithHistoryOutputFormatter` concept.
* </UL>
*
* \sa `PkgArrangementOnSurface2Read`
* \sa `PkgArrangementOnSurface2op_left_shift`
* \sa `PkgArrangementOnSurface2op_right_shift`
*/
Writes a given arrangement into a given output stream
using a specific output format.
\cgalHeading{Requirements}
<UL>
<LI>The instantiated `Formatter` class must model the
`ArrangementOutputFormatter` concept.
<LI>The instantiated `WithHistoryFormatter` class must model the
`ArrangementWithHistoryOutputFormatter` concept.
</UL>
\sa `PkgArrangementOnSurface2Read`
\sa `PkgArrangementOnSurface2op_left_shift`
\sa `PkgArrangementOnSurface2op_right_shift`
*/
/// @{ /// @{
/*! /*! Writes the arrangement object `arr` into the given output stream
Writes the arrangement object `arr` into the given output stream * `os` using a specific output format defined by `formatter`.
`os` using a specific output format defined by `formatter`. */
*/ template <typename Traits, typename Dcel, typename Formatter>
template<typename Traits, typename Dcel, typename Formatter> std::ostream& write(const Arrangement_2<Traits,Dcel>& arr,
std::ostream& write (const Arrangement_2<Traits,Dcel>& arr, std::ostream& os, Formatter& formatter);
std::ostream& os,
Formatter& formatter);
/// @} /// @}
} // namespace IO } // namespace IO
/*! /*! \ingroup PkgArrangementOnSurface2op_left_shift
\ingroup PkgArrangementOnSurface2op_left_shift * Inserts the arrangement object `arr` into the output stream
Inserts the arrangement object `arr` into the output stream * `os` using the output format defined by the
`os` using the output format defined by the * `Arr_text_formatter` class. Only the basic geometric and
`Arr_text_formatter` class. Only the basic geometric and * topological features of the arrangement are inserted. Auxiliary data
topological features of the arrangement are inserted. Auxiliary data * that may be attached to the \dcel features is ignored.
that may be attached to the \dcel features is ignored. */
*/ template <typename Traits, typename Dcel>
template<typename Traits, typename Dcel> std::ostream& operator<<(std::ostream& os,
std::ostream& operator<< (std::ostream& os, const Arrangement_2<Traits, Dcel>& arr);
const Arrangement_2<Traits,Dcel>& arr);
/*! /*! \ingroup PkgArrangementOnSurface2op_right_shift
\ingroup PkgArrangementOnSurface2op_right_shift * Extracts an arrangement from a given input stream using the input
Extracts an arrangement from a given input stream using the input * format defined by the `Arr_text_formatter` class - that is, only the
format defined by the `Arr_text_formatter` class - that is, only the * basic geometric and topological features of the arrangement are read
basic geometric and topological features of the arrangement are read * and no auxiliary data is attached to the Dcel features.
and no auxiliary data is attached to the Dcel features. */
*/ template <typename Traits, typename Dcel>
template<class Traits, class Dcel> std::istream& operator>>(std::istream& is, Arrangement_2<Traits, Dcel>& arr);
std::istream& operator>>(std::istream& is, Arrangement_2<Traits,Dcel>& arr);
} /* end namespace CGAL::IO*/ } /* end namespace CGAL::IO*/

View File

@ -1,93 +1,83 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* `Arr_extended_dcel_text_formatter` defines the format of an arrangement in an
* input or output stream (typically a file stream), thus enabling reading and
* writing an `Arrangement` instance using a simple text format. The
* `Arrangement` class should be instantiated with a \dcel class which in turn
* instantiates the `Arr_extended_dcel` template with the `VertexData`,
* `HalfedgeData` and `FaceData` types. The formatter supports reading and
* writing the data objects attached to the arrangement vertices, halfedges and
* faces.
*
* The `Arr_extended_dcel_text_formatter` class assumes that the nested
* `Point_2` and the `Curve_2` types defined by the `Arrangement`
* template-parameter, as well as the `VertexData`, `HalfedgeData` and
* `FaceData` types, can all be written to an input stream using the `<<`
* operator and read from an input stream using the `>>` operator.
*
* \cgalModels{AosInputFormatter,AosOutputFormatter}
*
* \sa `PkgArrangementOnSurface2Read`
* \sa `PkgArrangementOnSurface2Write`
* \sa `Arr_extended_dcel<Traits,VData,HData,FData,V,H,F>`
*/
template <typename Arrangement>
class Arr_extended_dcel_text_formatter {};
`Arr_extended_dcel_text_formatter` defines the format of an arrangement in an input or output stream
(typically a file stream), thus enabling reading and writing an `Arrangement`
instance using a simple text format. The `Arrangement` class should be
instantiated with a \dcel class which in turn instantiates the
`Arr_extended_dcel` template with the `VertexData`, `HalfedgeData` and
`FaceData` types.
The formatter supports reading and writing the data objects attached to the
arrangement vertices, halfedges and faces.
The `Arr_extended_dcel_text_formatter` class assumes that the nested `Point_2` and the `Curve_2` types
defined by the `Arrangement` template-parameter, as well as the `VertexData`,
`HalfedgeData` and `FaceData` types, can all be written to an input stream using
the `<<` operator and read from an input stream using the `>>` operator.
\cgalModels{ArrangementInputFormatter,ArrangementOutputFormatter}
\sa `PkgArrangementOnSurface2Read`
\sa `PkgArrangementOnSurface2Write`
\sa `Arr_extended_dcel<Traits,VData,HData,FData,V,H,F>`
*/
template< typename Arrangement >
class Arr_extended_dcel_text_formatter {
public:
}; /* end Arr_extended_dcel_text_formatter */
} /* end namespace CGAL */ } /* end namespace CGAL */
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* `Arr_face_extended_text_formatter` defines the format of an arrangement in an
* input or output stream (typically a file stream), thus enabling reading and
* writing an `Arrangement` instance using a simple text format. The
* `Arrangement` class should be instantiated with a \dcel class which in turn
* instantiates the `Arr_face_extended_dcel` template with a `FaceData` type.
* The formatter supports reading and writing the data objects attached to the
* arrangement faces as well.
*
* The `Arr_face_extended_text_formatter` class assumes that the nested
* `Point_2` and the `Curve_2` types defined by the `Arrangement`
* template-parameter and that the `FaceData` type can all be written to an
* input stream using the `<<` operator and read from an input stream using the
* `>>` operator.
*
* \cgalModels{AosInputFormatter,AosOutputFormatter}
*
* \sa `PkgArrangementOnSurface2Read`
* \sa `PkgArrangementOnSurface2Write`
* \sa `Arr_face_extended_dcel<Traits,FData,V,H,F>`
*/
template <typename Arrangement>
class Arr_face_extended_text_formatter {};
`Arr_face_extended_text_formatter` defines the format of an arrangement in an input or output stream
(typically a file stream), thus enabling reading and writing an `Arrangement`
instance using a simple text format. The `Arrangement` class should be
instantiated with a \dcel class which in turn instantiates the
`Arr_face_extended_dcel` template with a `FaceData` type.
The formatter supports reading and writing the data objects attached to the
arrangement faces as well.
The `Arr_face_extended_text_formatter` class assumes that the nested `Point_2` and the `Curve_2` types
defined by the `Arrangement` template-parameter and that the `FaceData` type
can all be written to an input stream using the `<<` operator and read from an input stream using the `>>` operator.
\cgalModels{ArrangementInputFormatter,ArrangementOutputFormatter}
\sa `PkgArrangementOnSurface2Read`
\sa `PkgArrangementOnSurface2Write`
\sa `Arr_face_extended_dcel<Traits,FData,V,H,F>`
*/
template< typename Arrangement >
class Arr_face_extended_text_formatter {
public:
}; /* end Arr_face_extended_text_formatter */
} /* end namespace CGAL */ } /* end namespace CGAL */
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* `Arr_text_formatter` defines the format of an arrangement in an input or
* output stream (typically a file stream), thus enabling reading and writing an
* `Arrangement` instance using a simple text format. The arrangement is assumed
* to store no auxiliary data with its \dcel records (and if there are such
* records they will not be written or read by the formatter).
*
* The `Arr_text_formatter` class assumes that the nested `Point_2` and the
* `Curve_2` types defined by the `Arrangement` template-parameter can both be
* written to an input stream using the `<<` operator and read from an input
* stream using the `>>` operator.
*
* \cgalModels{AosInputFormatter,AosOutputFormatter}
*
* \sa `PkgArrangementOnSurface2Read`
* \sa `PkgArrangementOnSurface2Write`
*/
template <typename Arrangement>
class Arr_text_formatter {};
`Arr_text_formatter` defines the format of an arrangement in an input or output stream
(typically a file stream), thus enabling reading and writing an `Arrangement`
instance using a simple text format. The arrangement is assumed to store no auxiliary
data with its \dcel records (and if there are such records they will not be written
or read by the formatter).
The `Arr_text_formatter` class assumes that the nested `Point_2` and the `Curve_2` types
defined by the `Arrangement` template-parameter can both be written to an input
stream using the `<<` operator and read from an input stream using the `>>`
operator.
\cgalModels{ArrangementInputFormatter,ArrangementOutputFormatter}
\sa `PkgArrangementOnSurface2Read`
\sa `PkgArrangementOnSurface2Write`
*/
template< typename Arrangement >
class Arr_text_formatter {
public:
}; /* end Arr_text_formatter */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -2,51 +2,46 @@ namespace CGAL {
namespace IO { namespace IO {
/*! /*! \ingroup PkgArrangementOnSurface2Read
\ingroup PkgArrangementOnSurface2Read *
* reads the arrangement-with-history object `arr` from the given
Reads the arrangement-with-history object `arr` from the given * input stream `is` using a specific input format defined by
input stream `is` using a specific input format defined by * \"formatter\".
\"formatter\". */
template <typename Traits, typename Dcel,
*/
template<typename Traits, typename Dcel,
typename WithHistoryFormatter> typename WithHistoryFormatter>
std::istream& read (Arrangement_with_history_2<Traits,Dcel>& arr, std::istream& read(Arrangement_with_history_2<Traits,Dcel>& arr,
std::istream& is, std::istream& is, WithHistoryFormatter& formatter);
WithHistoryFormatter& formatter);
/*! /*! \ingroup PkgArrangementOnSurface2Write
\ingroup PkgArrangementOnSurface2Write * writes the arrangement-with-history object `arr` into the given
Writes the arrangement-with-history object `arr` into the given * output stream `os` using a specific output format defined by
output stream `os` using a specific output format defined by * `formatter`.
`formatter`. */
*/ template <typename Traits, typename Dcel,
template<typename Traits, typename Dcel,
typename WithHistoryFormatter> typename WithHistoryFormatter>
std::ostream& write (const Arrangement_with_history_2<Traits,Dcel>& arr, std::ostream& write(const Arrangement_with_history_2<Traits,Dcel>& arr,
std::ostream& os, std::ostream& os, WithHistoryFormatter& formatter);
WithHistoryFormatter& formatter);
} // namespace IO } // namespace IO
/*! /*! \ingroup PkgArrangementOnSurface2op_left_shift
\ingroup PkgArrangementOnSurface2op_left_shift * inserts the arrangement-with-history object `arr` into the output
Inserts the arrangement-with-history object `arr` into the output * stream `os` using the output format defined by the
stream `os` using the output format defined by the * `Arr_with_history_text_formatter` class. Only the basic geometric
`Arr_with_history_text_formatter` class. Only the basic geometric * and topological features of the arrangement are inserted. Auxiliary
and topological features of the arrangement are inserted. Auxiliary * data that may be attached to the \dcel features is ignored.
data that may be attached to the \dcel features is ignored. */
*/ template <typename Traits, typename Dcel>
template<typename Traits, typename Dcel> std::ostream& operator<<(std::ostream& os,
std::ostream& operator<< (std::ostream& os, const Arrangement_with_history_2<Traits,Dcel>& arr);
const Arrangement_with_history_2<Traits,Dcel>& arr);
/*! \ingroup PkgArrangementOnSurface2op_right_shift
* extracts an arrangement-with-history from a given input stream using
* the default input format.
*/
template <typename Traits, typename Dcel>
std::istream& operator>>(std::istream& is,
Arrangement_with_history_2<Traits,Dcel>& arr);
/*!
\ingroup PkgArrangementOnSurface2op_right_shift
Extracts an arrangement-with-history from a given input stream using
the default input format.
*/
template<class Traits, class Dcel>
std::istream& operator>>(std::istream& is, Arrangement_with_history_2<Traits,Dcel>& arr);
} }

View File

@ -1,29 +1,24 @@
namespace CGAL { namespace CGAL {
/*! /*! \ingroup PkgArrangementOnSurface2IO
\ingroup PkgArrangementOnSurface2IO *
* `Arr_with_history_text_formatter` defines the format of an arrangement in an
* input or output stream (typically a file stream), thus enabling reading and
* writing an arrangement-with-history instance using a simple text format.
*
* The `ArrFormatter` parameter servers as a base class for
* `Arr_with_history_text_formatter` and must be a model of the
* `AosInputFormatter` and the `AosOutputFormatter` concepts. It is used to read
* or write the base arrangement, while the derived class is responsible for
* reading and writing the set of curves inducing the arrangement and
* maintaining the relations between these curves and the edges they induce.
*
* \cgalModels{AosWithHistoryInputFormatter,AosWithHistoryOutputFormatter}
*
* \sa `PkgArrangementOnSurface2Read`
* \sa `PkgArrangementOnSurface2Write`
*/
template <typename ArrFormatter>
class Arr_with_history_text_formatter {};
`Arr_with_history_text_formatter` defines the format of an arrangement in an input or output stream
(typically a file stream), thus enabling reading and writing an
arrangement-with-history instance using a simple text format.
The `ArrFormatter` parameter servers as a base class for
`Arr_with_history_text_formatter` and must be a model of the `ArrangementInputFormatter`
and the `ArrangementOutputFormatter` concepts. It is used to read or write
the base arrangement, while the derived class is responsible for reading and
writing the set of curves inducing the arrangement and maintaining the
relations between these curves and the edges they induce.
\cgalModels{ArrangementWithHistoryInputFormatter,ArrangementWithHistoryOutputFormatter}
\sa `PkgArrangementOnSurface2Read`
\sa `PkgArrangementOnSurface2Write`
*/
template< typename ArrFormatter >
class Arr_with_history_text_formatter {
public:
}; /* end Arr_with_history_text_formatter */
} /* end namespace CGAL */ } /* end namespace CGAL */

View File

@ -25,51 +25,63 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Draw /*! \ingroup PkgArrangementOnSurface2Draw
opens a new window and draws `arr`, an instance of the `CGAL::Arrangement_2` class template. Parameters of the drawing are taken from the optional graphics scene options parameter. * The function opens a new window and draws `arr`, an instance of the
* `CGAL::Arrangement_2` class template. Parameters of the drawing are taken
A call to this function blocks the execution of the program until the drawing window is closed. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. * from the optional graphics scene options parameter.
Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. *
* A call to this function blocks the execution of the program until the drawing
* window is closed. This function requires `CGAL_Qt6`, and is only available if
\tparam GeometryTraits_2 a geometry traits type, a model of a 2D arrangement traits concept. At this point it must be an instance of either `CGAL::Arr_segment_traits_2` or `CGAL::Arr_conic_traits_2`. * the macro `CGAL_USE_BASIC_VIEWER` is defined. Linking with the cmake target
\tparam Dcel the \dcel type, a model of the `ArrangementDcel` concept. * `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition
\tparam GSOptions a model of `GraphicsSceneOptions` concept. * `CGAL_USE_BASIC_VIEWER`.
*
\param arr the 2D arrangement to draw. * \tparam GeometryTraits_2 a geometry traits type, a model of a 2D arrangement
\param gso the graphics scene options parameter. * traits concept. At this point it must be an instance of either
* `CGAL::Arr_segment_traits_2` or `CGAL::Arr_conic_traits_2`.
\sa `ArrangementDcel` * \tparam Dcel the \dcel type, a model of the `AosDcel` concept.
\sa `ArrangementTraits_2` * \tparam GSOptions a model of `GraphicsSceneOptions` concept.
*/ *
* \param arr the 2D arrangement to draw.
* \param gso the graphics scene options parameter.
*
* \sa `AosDcel`
* \sa `AosTraits_2`
*/
template <typename GeometryTraits_2, typename Dcel, typename GSOptions> template <typename GeometryTraits_2, typename Dcel, typename GSOptions>
void draw(const Arrangement_2<GeometryTraits_2, Dcel>& arr, const GSOptions& gso); void draw(const Arrangement_2<GeometryTraits_2, Dcel>& arr,
const GSOptions& gso);
/*! \ingroup PkgArrangementOnSurface2Draw /*! \ingroup PkgArrangementOnSurface2Draw
*
A shortcut to `CGAL::draw(arr, Graphics_scene_options{})`. * A shortcut to `CGAL::draw(arr, Graphics_scene_options{})`.
*/ */
template <typename GeometryTraits_2, typename Dcel> template <typename GeometryTraits_2, typename Dcel>
void draw(const Arrangement_2<GeometryTraits_2, Dcel>& arr); void draw(const Arrangement_2<GeometryTraits_2, Dcel>& arr);
/*! \ingroup PkgArrangementOnSurface2Draw /*! \ingroup PkgArrangementOnSurface2Draw
*
adds the vertices, edges and faces of `arr` into the given graphic scene `gs`. Parameters of the cells are taken from the optional graphics scene options parameter `gso`. Note that `gs` is not cleared before being filled (to enable to draw several data structures in the same basic viewer). * adds the vertices, edges and faces of `arr` into the given graphic scene
* `gs`. Parameters of the cells are taken from the optional graphics scene
\tparam GeometryTraits_2 a geometry traits type, a model of a 2D arrangement traits concept. At this point it must be an instance of either `CGAL::Arr_segment_traits_2` or `CGAL::Arr_conic_traits_2`. * options parameter `gso`. Note that `gs` is not cleared before being filled
\tparam Dcel the \dcel type, a model of the `ArrangementDcel` concept. * (to enable to draw several data structures in the same basic viewer).
\tparam GSOptions a model of `GraphicsSceneOptions` concept. *
* \tparam GeometryTraits_2 a geometry traits type, a model of a 2D arrangement
\param arr the 2D arrangement to draw. * traits concept. At this point it must be an instance of either
\param gs the graphic scene to fill. * `CGAL::Arr_segment_traits_2` or `CGAL::Arr_conic_traits_2`.
\param gso the graphics scene options parameter. * \tparam Dcel the \dcel type, a model of the `AosDcel` concept.
* \tparam GSOptions a model of `GraphicsSceneOptions` concept.
*
* \param arr the 2D arrangement to draw.
* \param gs the graphic scene to fill.
* \param gso the graphics scene options parameter.
*/ */
template <typename GeometryTraits_2, typename Dcel, typename GSOptions> template <typename GeometryTraits_2, typename Dcel, typename GSOptions>
void add_to_graphics_scene(const Arrangement_2<GeometryTraits_2, Dcel>& arr, void add_to_graphics_scene(const Arrangement_2<GeometryTraits_2, Dcel>& arr,
CGAL::Graphics_scene& gs, const GSOptions& gso); CGAL::Graphics_scene& gs, const GSOptions& gso);
/*! \ingroup PkgArrangementOnSurface2Draw /*! \ingroup PkgArrangementOnSurface2Draw
* A shortcut to `CGAL::add_to_graphics_scene(arr, gs,
A shortcut to `CGAL::add_to_graphics_scene(arr, gs, Graphics_scene_options{})`. * Graphics_scene_options{})`.
*/ */
template <typename GeometryTraits_2, typename Dcel> template <typename GeometryTraits_2, typename Dcel>
void add_to_graphics_scene(const Arrangement_2<GeometryTraits_2, Dcel>& arr, void add_to_graphics_scene(const Arrangement_2<GeometryTraits_2, Dcel>& arr,

View File

@ -0,0 +1,50 @@
/*! \ingroup PkgArrangementOnSurface2ConceptsTraits
* \cgalConcept
*
* The concept `AosApproximatePointTraits_2` refines the basic traits concept
* `AosBasicTraits_2`. A model of this concept is able to approximate a point.
*
* \cgalRefines{AosBasicTraits_2}
*
* \cgalHasModelsBegin
* \cgalHasModels{CGAL::Arr_circle_segment_traits_2<Kernel>}
* \cgalHasModels{CGAL::Arr_conic_traits_2<RatKernel,AlgKernel,NtTraits>}
* \cgalHasModels{CGAL::Arr_geodesic_arc_on_sphere_traits_2}
* \cgalHasModels{CGAL::Arr_linear_traits_2<Kernel>}
* \cgalHasModels{CGAL::Arr_non_caching_segment_traits_2<Kernel>}
* \cgalHasModels{CGAL::Arr_segment_traits_2<Kernel>}
* \cgalHasModels{CGAL::Arr_polycurve_traits_2<GeometryTraits_2>}
* \cgalHasModels{CGAL::Arr_polyline_traits_2<SegmentTraits_2>}
* \cgalHasModels{CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>}
* \cgalHasModelsEnd
*
* \sa `AosConstructXMonotoneCurveTraits_2`
* \sa `AosXMonotoneTraits_2`
* \sa `AosTraits_2`
*/
class AosApproximatePointTraits_2 {
public:
/// \name Types
/// @{
//! the number type used to approximate point coordinates, e.g., double.
typedef unspecified_type Approximate_number_type;
/// @}
/// \name Functor Types
/// @{
/// models the concept `AosTraits::Approximate_2`.
typedef unspecified_type Approximate_2;
/// @}
/// \name Accessing Functor Objects
/// @{
///
Approximate_2 approximate_2_object() const;
/// @}
}

View File

@ -0,0 +1,47 @@
/*! \ingroup PkgArrangementOnSurface2ConceptsTraits
* \cgalConcept
*
* The concept `AosApproximateTraits_2` refines the concept
* `AosApproximatePointTraits_2`. A model of this concept is able to
* approximate a point and a curve (in addition to the ability to approximate the
* coordinates of a point).
*
* \cgalRefines{AosApproximatePointTraits_2}
*
* \cgalHasModelsBegin
* \cgalHasModels{CGAL::Arr_circle_segment_traits_2<Kernel>}
* \cgalHasModels{CGAL::Arr_conic_traits_2<RatKernel,AlgKernel,NtTraits>}
* \cgalHasModels{CGAL::Arr_geodesic_arc_on_sphere_traits_2}
* \cgalHasModels{CGAL::Arr_polyline_traits_2<SegmentTraits_2>}
* \cgalHasModels{CGAL::Arr_segment_traits_2<Kernel>}
* \cgalHasModelsEnd
*
* \sa `AosApproximatePointTraits_2`
* \sa `draw()`
*/
class AosApproximateTraits_2 {
public:
/// \name Types
/// @{
//! the approximate point.
typedef unspecified_type Approximate_point_2;
/// @}
/// \name Functor Types
/// @{
/// models the concept `AosTraits::Approximate_2`.
typedef unspecified_type Approximate_2;
/// @}
/// \name Accessing Functor Objects
/// @{
///
Approximate_2 approximate_2_object() const;
/// @}
}

View File

@ -1,7 +1,7 @@
/*! \ingroup PkgArrangementOnSurface2ConceptsTopologyTraits /*! \ingroup PkgArrangementOnSurface2ConceptsTopologyTraits
* \cgalConcept * \cgalConcept
* *
* The concept `ArrangementBasicTopologyTraits` defines the minimal * The concept `AosBasicTopologyTraits` defines the minimal
* functionality needed for a model of a topology traits, which can substitutes * functionality needed for a model of a topology traits, which can substitutes
* the `TopolTraits` template parameters when the class template * the `TopolTraits` template parameters when the class template
* `Arrangement_on_surface_2<GeomTraits, TopolTraits>` is instantiated. In * `Arrangement_on_surface_2<GeomTraits, TopolTraits>` is instantiated. In
@ -13,19 +13,18 @@
* \cgalHasModels{CGAL::Arr_spherical_topology_traits_2<GeometryTraits_2, Dcel>} * \cgalHasModels{CGAL::Arr_spherical_topology_traits_2<GeometryTraits_2, Dcel>}
* \cgalHasModelsEnd * \cgalHasModelsEnd
*/ */
class AosBasicTopologyTraits {
class ArrangementBasicTopologyTraits {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
//! models the concept `ArrTraits::Point_2`. /// models the concept `AosTraits::Point_2`.
typedef unspecified_type Point_2; typedef unspecified_type Point_2;
//! models the concept `ArrTraits::XMonotoneCurve_2`. /// models the concept `AosTraits::XMonotoneCurve_2`.
typedef unspecified_type X_monotone_curve_2; typedef unspecified_type X_monotone_curve_2;
//! models the concept `ArrangementDcel`. /// models the concept `AosDcel`.
typedef unspecified_type Dcel; typedef unspecified_type Dcel;
/// @} /// @}
@ -38,10 +37,10 @@ public:
/// \name Access Functions /// \name Access Functions
/// @{ /// @{
/*! obtains the DCEL (const version). */ /*! obtains the \dcel (const version). */
const Dcel& dcel() const; const Dcel& dcel() const;
/*! obtains the DCEL (non-const version). */ /*! obtains the \dcel (non-const version). */
Dcel& dcel(); Dcel& dcel();
/// @} /// @}
@ -49,5 +48,4 @@ public:
/// \name Modifiers /// \name Modifiers
/// @{ /// @{
/// @} /// @}
}; };

View File

@ -1,23 +1,23 @@
/*! \ingroup PkgArrangementOnSurface2ConceptsTraits /*! \ingroup PkgArrangementOnSurface2ConceptsTraits
* \cgalConcept * \cgalConcept
* *
* The concept `ArrangementBasicTraits_2` defines the minimal set of geometric * The concept `AosBasicTraits_2` defines the minimal set of geometric
* predicates needed for the construction and maintenance of objects of the * predicates needed for the construction and maintenance of objects of the
* class `Arrangement_2`, as well as performing simple queries (such as * class `Arrangement_2`, as well as performing simple queries (such as
* point-location queries) on such arrangements. * point-location queries) on such arrangements.
* *
* A model of this concept must define nested `Point_2` and `X_monotone_curve_2` * A model of this concept must define nested `Point_2` and `X_monotone_curve_2`
* types, which represent planar points and continuous \f$ x\f$-monotone curves * types, which represent planar points and continuous \f$x\f$-monotone curves
* (a vertical segment is also considered to be <I>weakly</I> \f$ * (a vertical segment is also considered to be <I>weakly</I> \f$
* x\f$-monotone), respectively. The \f$ x\f$-monotone curves are assumed to be * x\f$-monotone), respectively. The \f$x\f$-monotone curves are assumed to be
* pairwise disjoint in their interiors, so they do not intersect except at * pairwise disjoint in their interiors, so they do not intersect except at
* their endpoints. * their endpoints.
* *
* The `X_monotone_curve_2` curves of an arrangement are confined to an * The `X_monotone_curve_2` curves of an arrangement are confined to an
* iso-rectangular area called the parameter space. The iso-rectangule can be * iso-rectangular area called the parameter space. The iso-rectangule can be
* unbounded, open, or closed. The set of predicates provided by a model the * unbounded, open, or closed. The set of predicates provided by a model the
* concept `ArrangementBasicTraits_2` is sufficient for constructing * concept `AosBasicTraits_2` is sufficient for constructing
* arrangements of \f$ x\f$-monotone curves that do not reach or approach the * arrangements of \f$x\f$-monotone curves that do not reach or approach the
* boundary of the parameter space. The nature of the input curves, whether they * boundary of the parameter space. The nature of the input curves, whether they
* are expected to reach or approach the left, right, bottom, or top side of the * are expected to reach or approach the left, right, bottom, or top side of the
* boundary of the parameter space, are conveyed through the definition of four * boundary of the parameter space, are conveyed through the definition of four
@ -45,19 +45,15 @@
* \cgalHasModels{CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>} * \cgalHasModels{CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>}
* \cgalHasModelsEnd * \cgalHasModelsEnd
*/ */
class AosBasicTraits_2 {
class ArrangementBasicTraits_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! models the concept `ArrTraits::Point_2`. /// models the concept `AosTraits::Point_2`.
*/
typedef unspecified_type Point_2; typedef unspecified_type Point_2;
/*! models the concept `ArrTraits::XMonotoneCurve_2`. /// models the concept `AosTraits::XMonotoneCurve_2`.
*/
typedef unspecified_type X_monotone_curve_2; typedef unspecified_type X_monotone_curve_2;
/// @} /// @}
@ -65,24 +61,19 @@ public:
/// \name Categories /// \name Categories
/// @{ /// @{
/*! indicates whether the nested functor `Compare_at_x_left_2` is provided. /// indicates whether the nested functor `Compare_at_x_left_2` is provided.
*/
typedef unspecified_type Has_left_category; typedef unspecified_type Has_left_category;
/*! Must be convertible to `CGAL::Arr_oblivious_side_tag`. /// Must be convertible to `CGAL::Arr_oblivious_side_tag`.
*/
typedef unspecified_type Left_side_category; typedef unspecified_type Left_side_category;
/*! Must be convertible to `CGAL::Arr_oblivious_side_tag`. /// Must be convertible to `CGAL::Arr_oblivious_side_tag`.
*/
typedef unspecified_type Bottom_side_category; typedef unspecified_type Bottom_side_category;
/*! Must be convertible to `CGAL::Arr_oblivious_side_tag`. /// Must be convertible to `CGAL::Arr_oblivious_side_tag`.
*/
typedef unspecified_type Top_side_category; typedef unspecified_type Top_side_category;
/*!Must be convertible to `CGAL::Arr_oblivious_side_tag`. /// Must be convertible to `CGAL::Arr_oblivious_side_tag`.
*/
typedef unspecified_type Right_side_category; typedef unspecified_type Right_side_category;
/// @} /// @}
@ -90,40 +81,35 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/*! models the concept `ArrTraits::CompareX_2`. /// models the concept `AosTraits::CompareX_2`.
*/
typedef unspecified_type Compare_x_2; typedef unspecified_type Compare_x_2;
/*! models the concept `ArrTraits::CompareXy_2`. /// models the concept `AosTraits::CompareXy_2`.
*/
typedef unspecified_type Compare_xy_2; typedef unspecified_type Compare_xy_2;
/*! models the concept `ArrTraits::ConstructMinVertex_2`. /// models the concept `AosTraits::ConstructMinVertex_2`.
*/typedef unspecified_type Construct_min_vertex_2; typedef unspecified_type Construct_min_vertex_2;
/*! models the concept `ArrTraits::ConstructMaxVertex_2`. /// models the concept `AosTraits::ConstructMaxVertex_2`.
*/
typedef unspecified_type Construct_max_vertex_2; typedef unspecified_type Construct_max_vertex_2;
/*! models the concept `ArrTraits::IsVertical_2`. /*! models the concept `AosTraits::IsVertical_2`.
*/ */
typedef unspecified_type Is_vertical_2; typedef unspecified_type Is_vertical_2;
/*! models the concept `ArrTraits::CompareYAtX_2`. /*! models the concept `AosTraits::CompareYAtX_2`.
*/ */
typedef unspecified_type Compare_y_at_x_2; typedef unspecified_type Compare_y_at_x_2;
/*! models the concept `ArrTraits::CompareYAtXLeft_2`. Required only if the /*! models the concept `AosTraits::CompareYAtXLeft_2`. Required only if the
* `Has_left_category` category is convertible to `Tag_true`. * `Has_left_category` category is convertible to `Tag_true`.
*/ */
typedef unspecified_type Compare_y_at_x_left_2; typedef unspecified_type Compare_y_at_x_left_2;
/*! models the concept `ArrTraits::CompareYAtXRight_2`. /// models the concept `AosTraits::CompareYAtXRight_2`.
*/
typedef unspecified_type Compare_y_at_x_right_2; typedef unspecified_type Compare_y_at_x_right_2;
/*! models the concept `ArrTraits::Equal_2`. /// models the concept `AosTraits::Equal_2`.
*/
typedef unspecified_type Equal_2; typedef unspecified_type Equal_2;
/// @} /// @}
@ -131,33 +117,32 @@ public:
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{
//! ///
Compare_x_2 compare_x_2_object() const; Compare_x_2 compare_x_2_object() const;
//! ///
Compare_xy_2 compare_xy_2_object() const; Compare_xy_2 compare_xy_2_object() const;
//! ///
Construct_min_vertex_2 construct_min_vertex_2_object() const; Construct_min_vertex_2 construct_min_vertex_2_object() const;
//! ///
Construct_max_vertex_2 construct_max_vertex_2_object() const; Construct_max_vertex_2 construct_max_vertex_2_object() const;
//! ///
Is_vertical_2 is_vertical_2_object() const; Is_vertical_2 is_vertical_2_object() const;
//! ///
Compare_y_at_x_2 compare_y_at_x_2_object() const; Compare_y_at_x_2 compare_y_at_x_2_object() const;
//! ///
Compare_y_at_x_left_2 compare_y_at_x_left_2_object() const; Compare_y_at_x_left_2 compare_y_at_x_left_2_object() const;
//! ///
Compare_y_at_x_right_2 compare_y_at_x_right_2_object() const; Compare_y_at_x_right_2 compare_y_at_x_right_2_object() const;
//! ///
Equal_2 equal_2_object() const; Equal_2 equal_2_object() const;
/// @} /// @}
}; /* end AosBasicTraits_2 */
}; /* end ArrangementBasicTraits_2 */

View File

@ -1,8 +1,7 @@
/*! /*! \ingroup PkgArrangementOnSurface2ConceptsTraits
* \ingroup PkgArrangementOnSurface2ConceptsTraits
* \cgalConcept * \cgalConcept
* *
* `ArrangementBottomSideTraits_2` is an abstract concept. It generalizes all * `AosBottomSideTraits_2` is an abstract concept. It generalizes all
* concepts that handle curves that either reach or approach the bottom boundary * concepts that handle curves that either reach or approach the bottom boundary
* side of the parameter space. (An "abstract" concept is a concept that is * side of the parameter space. (An "abstract" concept is a concept that is
* useless on its own.) Only a combination of this concept and additional * useless on its own.) Only a combination of this concept and additional
@ -10,14 +9,13 @@
* boundary sides (that is, left, right, and top) are purposeful, and can have * boundary sides (that is, left, right, and top) are purposeful, and can have
* models. * models.
* *
* \cgalRefines{ArrangementHorizontalSideTraits_2} * \cgalRefines{AosHorizontalSideTraits_2}
* *
* \sa `ArrangementLeftSideTraits_2`, * \sa `AosLeftSideTraits_2`
* `ArrangementRightSideTraits_2`, and * \sa `AosRightSideTraits_2`
* `ArrangementTopSideTraits_2` * \sa `AosTopSideTraits_2`
*/ */
class AosBottomSideTraits_2 {
class ArrangementBottomSideTraits_2 {
public: public:
/// \name Categories /// \name Categories
/// @{ /// @{
@ -29,6 +27,7 @@ public:
/// \name Functor Types /// \name Functor Types
/// @{ /// @{
/// @}
/// \name Accessing Functor Objects /// \name Accessing Functor Objects
/// @{ /// @{

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