mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface
This commit is contained in:
commit
691fd789f9
|
|
@ -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
|
||||||
|
...
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
# Use an official Fedora as a parent image for the build stage
|
||||||
|
FROM fedora:latest AS sources_deps
|
||||||
|
|
||||||
|
# Set environment variables to non-interactive
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN dnf update -y && dnf install -y \
|
||||||
|
wget \
|
||||||
|
make \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
patch \
|
||||||
|
cmake \
|
||||||
|
bison \
|
||||||
|
flex \
|
||||||
|
unzip \
|
||||||
|
python3 \
|
||||||
|
&& dnf clean all
|
||||||
|
|
||||||
|
# Copy the patch file to the build context
|
||||||
|
COPY cgal-NO_ADDITIONAL_DETAILS.patch .
|
||||||
|
|
||||||
|
FROM sources_deps AS build
|
||||||
|
|
||||||
|
# Build and install Doxygen from sources
|
||||||
|
ARG DOXYGEN_VERSION=1.9.6
|
||||||
|
ARG MAKEFLAGS=-j$(nproc)
|
||||||
|
RUN if [ -n "$DEBUG"];then set -x && make --version && ls -lZ /tmp && id; fi \
|
||||||
|
&& DOXYGEN_VERSION_UNDERSCORE=$(echo ${DOXYGEN_VERSION} | sed 's/\./_/g') \
|
||||||
|
&& wget https://github.com/doxygen/doxygen/archive/refs/tags/Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
|
||||||
|
&& unzip Release_${DOXYGEN_VERSION_UNDERSCORE}.zip \
|
||||||
|
&& cd doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} \
|
||||||
|
&& patch -p1 < ../cgal-NO_ADDITIONAL_DETAILS.patch \
|
||||||
|
&& mkdir build \
|
||||||
|
&& cd build \
|
||||||
|
&& cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .. \
|
||||||
|
&& cmake --build . \
|
||||||
|
&& cmake --install . \
|
||||||
|
&& mkdir -p /usr/local/share/doc/doxygen && cp ../LICENSE /usr/local/share/doc/doxygen/LICENSE.TXT \
|
||||||
|
&& cd ../.. \
|
||||||
|
&& rm -rf doxygen-Release_${DOXYGEN_VERSION_UNDERSCORE} Release_${DOXYGEN_VERSION_UNDERSCORE}.zip
|
||||||
|
|
||||||
|
# Use a smaller base image for the final stage
|
||||||
|
FROM fedora:latest
|
||||||
|
|
||||||
|
# Install necessary runtime dependencies
|
||||||
|
RUN set -x \
|
||||||
|
&& dnf update -y && dnf install -y graphviz 'perl(Getopt::Std)' tex-bibtex cmake python3-lxml python3-pyquery \
|
||||||
|
&& dnf clean all
|
||||||
|
|
||||||
|
# Copy Doxygen from the build stage
|
||||||
|
COPY --from=build /usr/local/bin/doxygen /usr/local/bin
|
||||||
|
COPY --from=build /usr/local/share/doc/doxygen/LICENSE.TXT /usr/local/share/doc/doxygen/LICENSE.TXT
|
||||||
|
RUN doxygen --version
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
SHELL := /bin/bash
|
||||||
|
DOXYGEN_VERSIONS := 1.12.0 1.11.0 1.10.0 1.9.8 1.9.7 1.9.6
|
||||||
|
|
||||||
|
.PHONY: all build-% push-% build push
|
||||||
|
|
||||||
|
all: build
|
||||||
|
@echo "Use `$(MAKE) push` to push the images to the registry."
|
||||||
|
|
||||||
|
build-%:
|
||||||
|
@echo "MAKEFLAGS: $(MAKEFLAGS)"
|
||||||
|
@echo "Building Doxygen version $*..."
|
||||||
|
if [ "$$(getenforce || true)" == "Enforcing" ]; then Z=:z; else Z=; fi; \
|
||||||
|
F="$(MAKEFLAGS)"; F=$${F##*fifo:}; F=$${F%% *}; \
|
||||||
|
if [ -p "$$F" ]; then echo "The GNU make FIFO file exists:"; ls -l $$F; VOLUME_ARGS="-v $$F:$$F$$Z"; echo -- $$VOLUME_ARGS; fi; \
|
||||||
|
podman build --build-arg DOXYGEN_VERSION=$* --build-arg "MAKEFLAGS=$(MAKEFLAGS)" $$VOLUME_ARGS -t cgal/doxygen:$* .
|
||||||
|
|
||||||
|
push-%: build-%
|
||||||
|
@echo "Pushing cgal/doxygen:$*..."
|
||||||
|
podman push cgal/doxygen:$*
|
||||||
|
|
||||||
|
build: $(foreach version,$(DOXYGEN_VERSIONS),build-$(version))
|
||||||
|
|
||||||
|
push: $(foreach version,$(DOXYGEN_VERSIONS),push-$(version))
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
diff --git a/src/config.xml b/src/config.xml
|
||||||
|
index 13910958a6..31f1354e44 100644
|
||||||
|
--- a/src/config.xml
|
||||||
|
+++ b/src/config.xml
|
||||||
|
@@ -893,6 +893,18 @@ Go to the <a href="commands.html">next</a> section or return to the
|
||||||
|
\note This will also disable the warnings about undocumented members
|
||||||
|
that are normally produced when \ref cfg_warnings "WARNINGS" is
|
||||||
|
set to \c YES.
|
||||||
|
+]]>
|
||||||
|
+ </docs>
|
||||||
|
+ </option>
|
||||||
|
+ </group>
|
||||||
|
+ <group name='Build' docs='Build related configuration options'>
|
||||||
|
+ <option type='bool' id='NO_ADDITIONAL_DETAILS' defval='0'>
|
||||||
|
+ <docs>
|
||||||
|
+<![CDATA[
|
||||||
|
+ When the \c EXTRACT_ALL tag is set to \c YES and a member or class
|
||||||
|
+ as no documentation, no detailed section will be produced if
|
||||||
|
+ the \c NO_ADDITIONAL_DETAILS tag is set to \c YES.
|
||||||
|
+ This tag has no effect if the \c EXTRACT_ALL tag is set to \c NO.
|
||||||
|
]]>
|
||||||
|
</docs>
|
||||||
|
</option>
|
||||||
|
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
|
||||||
|
index 08d9bf24c5..ab04e994c5 100644
|
||||||
|
--- a/src/memberdef.cpp
|
||||||
|
+++ b/src/memberdef.cpp
|
||||||
|
@@ -2501,6 +2501,7 @@ bool MemberDefImpl::hasDetailedDescription() const
|
||||||
|
if (!m_hasDetailedDescriptionCached)
|
||||||
|
{
|
||||||
|
bool extractAll = Config_getBool(EXTRACT_ALL);
|
||||||
|
+ bool xAllNoDetailedSec = Config_getBool(NO_ADDITIONAL_DETAILS);
|
||||||
|
bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
|
||||||
|
bool repeatBrief = Config_getBool(REPEAT_BRIEF);
|
||||||
|
bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
|
||||||
|
@@ -2512,7 +2513,7 @@ bool MemberDefImpl::hasDetailedDescription() const
|
||||||
|
// the member has detailed documentation because the user added some comments
|
||||||
|
bool docFilter =
|
||||||
|
// extract all is enabled
|
||||||
|
- extractAll ||
|
||||||
|
+ (extractAll && !xAllNoDetailedSec) ||
|
||||||
|
// has detailed docs
|
||||||
|
!documentation().isEmpty() ||
|
||||||
|
// has inbody docs
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"name": "CGAL Doxygen Dev Container, version 1.12.0, with CGAL patch",
|
||||||
|
"image": "docker.io/cgal/doxygen:1.12.0",
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/git:1.3.2": {}
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-vscode.cmake-tools",
|
||||||
|
"bbenoist.Doxygen",
|
||||||
|
"ms-vscode.cpptools"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
[distrobox-doxygen-1.12.0]
|
||||||
|
image=cgal/doxygen:1.12.0
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.12.0
|
||||||
|
|
||||||
|
[distrobox-doxygen-1.11.0]
|
||||||
|
image=cgal/doxygen:1.11.0
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.11.0
|
||||||
|
|
||||||
|
[distrobox-doxygen-1.10.0]
|
||||||
|
image=cgal/doxygen:1.10.0
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.10.0
|
||||||
|
|
||||||
|
[distrobox-doxygen-1.9.8]
|
||||||
|
image=cgal/doxygen:1.9.8
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.9.8
|
||||||
|
|
||||||
|
[distrobox-doxygen-1.9.7]
|
||||||
|
image=cgal/doxygen:1.9.7
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.9.7
|
||||||
|
|
||||||
|
[distrobox-doxygen-1.9.6]
|
||||||
|
image=cgal/doxygen:1.9.6
|
||||||
|
exported_bins="/usr/local/bin/doxygen /usr/bin/perl /usr/bin/cmake /usr/bin/python3"
|
||||||
|
exported_bins_path=$HOME/.local/bin-doxygen-1.9.6
|
||||||
|
|
@ -44,11 +44,9 @@ Documentation/Doxyfile text eol=lf
|
||||||
Documentation/pkglist_filter text eol=lf
|
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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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*
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"default": true,
|
||||||
|
"line-length": false,
|
||||||
|
"no-duplicate-heading": {
|
||||||
|
"siblings_only": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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}")
|
|
||||||
endif()
|
|
||||||
if (NOT nlohmann_json_FOUND)
|
|
||||||
set(MISSING_DEPS "JSON for Modern C++ 3.9+ (know as nlohmann_json), ${MISSING_DEPS}")
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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ézier curves. A planar <I>Bé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ézier curves. A planar <I>Bé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é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é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ézier traits class is used
|
||||||
|
* to represent a Bé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ézier traits class is used
|
/*! constructs a Bézier curve as defined by the given range of
|
||||||
to represent a Bé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é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é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é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ézier traits class is used
|
/// \name Access Functions
|
||||||
to represent: (i) an endpoint of a Bé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ézier traits is
|
||||||
returns the approximated coordinates of `p`.
|
* used to represent \f$x\f$-monotone subcurves of Bézier curves. The
|
||||||
*/
|
* subcurve is defined by a supporting Bé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é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ézier traits is
|
class Trim_2 {
|
||||||
used to represent \f$ x\f$-monotone subcurves of Bézier curves. The subcurve is
|
public:
|
||||||
defined by a supporting Bé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é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 */
|
||||||
|
|
|
||||||
|
|
@ -18,75 +18,74 @@ 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
|
||||||
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
/*! notifies the arrangement observer that a global change is going to take
|
|
||||||
* place (for the usage of the global functions that operate on arrangements).
|
* place (for the usage of the global functions that operate on arrangements).
|
||||||
*/
|
*/
|
||||||
void notify_before_global_change();
|
void notify_before_global_change();
|
||||||
|
|
||||||
/*! notifies the arrangement observer that a global change has taken place (for
|
/*! notifies the arrangement observer that a global change has taken place
|
||||||
* the usage of the global functions that operate on arrangements).
|
* (for the usage of the global functions that operate on arrangements).
|
||||||
*/
|
*/
|
||||||
void notify_after_global_change();
|
void notify_after_global_change();
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \name Arrangement Predicates
|
/// \name Arrangement Predicates
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! locates a place for the curve `c` around the vertex `v` and returns a
|
/*! 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 whose target is `v`, where c should be inserted between this
|
||||||
* halfedge and the next halfedge around `v` in a clockwise order.
|
* halfedge and the next halfedge around `v` in a clockwise order.
|
||||||
*/
|
*/
|
||||||
Halfedge_handle
|
Halfedge_handle
|
||||||
locate_around_vertex(Vertex_handle v, const X_monotone_curve_2& c) const;
|
locate_around_vertex(Vertex_handle v, const X_monotone_curve_2& c) const;
|
||||||
|
|
||||||
/*! counts the number of edges along the path from `e1` to `e2`. In case the
|
/*! 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
|
* two halfedges do not belong to the same connected component, the function
|
||||||
* returns (-1).
|
* returns (-1).
|
||||||
*/
|
*/
|
||||||
int halfedge_distance(Halfedge_const_handle e1, Halfedge_const_handle e2) const;
|
int halfedge_distance(Halfedge_const_handle e1,
|
||||||
|
Halfedge_const_handle e2) const;
|
||||||
|
|
||||||
/*! determines whether a new halfedge we are about to create, which is to be
|
/*! determines whether a new halfedge we are about to create, which is to be
|
||||||
* associated with the curve `c` and directed from `pred1->target()` to
|
* 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
|
* `pred2->target()`, lies on the inner CCB of the new face that will be
|
||||||
* created, introducing this new edge.
|
* created, introducing this new edge.
|
||||||
|
|
@ -94,46 +93,48 @@ int halfedge_distance(Halfedge_const_handle e1, Halfedge_const_handle e2) const;
|
||||||
* \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 `pred1` and `pred2` belong to the same connected component, such that a
|
* \pre `pred1` and `pred2` belong to the same connected component, such that
|
||||||
* new face is created by connecting `pred1->target()` and `pred2->target()`.
|
* a new face is created by connecting `pred1->target()` and
|
||||||
*/
|
* `pred2->target()`.
|
||||||
bool is_inside_new_face(Halfedge_handle pred1,
|
*/
|
||||||
Halfedge_handle pred2,
|
bool is_inside_new_face(Halfedge_handle pred1,
|
||||||
const X_monotone_curve_2& c) const;
|
Halfedge_handle pred2,
|
||||||
|
const X_monotone_curve_2& c) const;
|
||||||
|
|
||||||
/*! determines whether a given point lies within the region bounded by a
|
/*! determines whether a given point lies within the region bounded by a
|
||||||
* boundary of the connected component that `he` belongs to. Note that if the
|
* boundary of the connected component that `he` belongs to. Note that if the
|
||||||
* function returns `true`, then `p` is contained within `he->face()` (but not
|
* 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
|
* on its boundary), or inside one of the inner CCBs of this face, or it may
|
||||||
* coincide with an isolated vertex in this face.
|
* coincide with an isolated vertex in this face.
|
||||||
*/
|
*/
|
||||||
bool point_is_in(const Point_2& p, 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. */
|
/*! determines whether `he` lies on the outer boundary of its incident face.
|
||||||
bool is_on_outer_boundary(Halfedge_const_handle he) const;
|
*/
|
||||||
|
bool is_on_outer_boundary(Halfedge_const_handle he) const;
|
||||||
|
|
||||||
/*! determines whether `he` lies on the inner boundary of its incident face
|
/*! determines whether `he` lies on the inner boundary of its incident face
|
||||||
* (that is, whether it lies on the boundary of one of the inner CCBs of this
|
* (that is, whether it lies on the boundary of one of the inner CCBs of this
|
||||||
* face).
|
* face).
|
||||||
*/
|
*/
|
||||||
bool is_on_inner_boundary(Halfedge_const_handle he) const;
|
bool is_on_inner_boundary(Halfedge_const_handle he) const;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \name Arrangement Modifiers
|
/// \name Arrangement Modifiers
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! creates a new vertex an associates it with the point `p`.
|
/*! creates a new vertex an associates it with the point `p`.
|
||||||
*
|
*
|
||||||
* \pre There is no existing vertex already associated with `p`.
|
* \pre There is no existing vertex already associated with `p`.
|
||||||
*/
|
*/
|
||||||
Vertex_handle create_vertex(const Point_2& 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,62 +161,62 @@ 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`).
|
||||||
*
|
*
|
||||||
|
|
@ -224,57 +225,58 @@ void relocate_isolated_vertices_in_new_face(Halfedge_handle he);
|
||||||
* \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
|
* \pre The interior of `c` is disjoint from all existing arrangement vertices
|
||||||
* and edges.
|
* 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 */
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
|
@ -166,50 +164,52 @@ public:
|
||||||
* \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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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). */
|
||||||
|
|
|
||||||
|
|
@ -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,7 +110,7 @@ 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,35 +201,33 @@ 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
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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,28 +75,25 @@ 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;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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>`
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 };
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,246 +1,208 @@
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
/*!
|
/*! \ingroup PkgArrangementOnSurface2DCEL
|
||||||
\ingroup PkgArrangementOnSurface2DCEL
|
*
|
||||||
|
* The `Arr_extended_dcel` class-template extends the topological-features of
|
||||||
The `Arr_extended_dcel` class-template extends the topological-features of the \dcel
|
* the \dcel namely the vertex, halfedge, and face types. While it is possible
|
||||||
namely the vertex, halfedge, and face types. While it is possible to maintain
|
* to maintain extra (non-geometric) data with the curves or points of the
|
||||||
extra (non-geometric) data with the curves or points of the arrangement by
|
* arrangement by extending their types respectively, it is also possible to
|
||||||
extending their types respectively, it is also possible to extend the vertex,
|
* extend the vertex, halfedge, or face types of the \dcel through
|
||||||
halfedge, or face types of the \dcel through inheritance. As the technique to
|
* inheritance. As the technique to extend these types is somewhat cumbersome
|
||||||
extend these types is somewhat cumbersome and difficult for inexperienced
|
* and difficult for inexperienced users, the `Arr_extended_dcel` class-template
|
||||||
users, the `Arr_extended_dcel` class-template provides a convenient way to do that.
|
* provides a convenient way to do that. Each one of the three features is
|
||||||
Each one of the three features is extended with a corresponding data type
|
* extended with a corresponding data type provided as parameters. This class
|
||||||
provided as parameters. This class template is also parameterized with a
|
* template is also parameterized with a traits class used to extract default
|
||||||
traits class used to extract default values for the vertex, halfedge, and face
|
* values for the vertex, halfedge, and face base classes, which are the
|
||||||
base classes, which are the remaining three template parameters respectively.
|
* remaining three template parameters respectively. The default values follow:
|
||||||
The default values follow:
|
*
|
||||||
|
* <TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TABLE><TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
*
|
||||||
|
* `V` =
|
||||||
`V` =
|
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
* `Arr_vertex_base<typename Traits::Point_2>`
|
||||||
`Arr_vertex_base<typename Traits::Point_2>`
|
* <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
* `H` =
|
||||||
`H` =
|
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
* `Arr_halfedge_base<typename Traits::X_monotone_curve_2>`
|
||||||
`Arr_halfedge_base<typename Traits::X_monotone_curve_2>`
|
* <TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TR><TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
* `F` =
|
||||||
`F` =
|
* <TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
||||||
<TD ALIGN=LEFT VALIGN=TOP NOWRAP>
|
* `Arr_face_base`
|
||||||
`Arr_face_base`
|
*
|
||||||
|
* </TABLE>
|
||||||
</TABLE>
|
*
|
||||||
|
* \cgalModels{AosDcelWithRebind}
|
||||||
\cgalModels{ArrangementDcelWithRebind}
|
*
|
||||||
|
* \sa `Arr_dcel_base<V,H,F>`
|
||||||
\sa `Arr_dcel_base<V,H,F>`
|
*/
|
||||||
|
template <typename Traits, typename VData, typename HData, typename FData,
|
||||||
*/
|
typename V, typename H, typename 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>,
|
||||||
class Arr_extended_dcel
|
|
||||||
: public Arr_dcel_base<Arr_extended_vertex<V, VData>,
|
|
||||||
Arr_extended_halfedge<H, HData>,
|
Arr_extended_halfedge<H, HData>,
|
||||||
Arr_extended_face<F, FData> >
|
Arr_extended_face<F, FData>>
|
||||||
{
|
{};
|
||||||
|
|
||||||
}; /* end Arr_extended_dcel */
|
/*! \ingroup PkgArrangementOnSurface2DCEL
|
||||||
} /* end namespace CGAL */
|
*
|
||||||
|
* The `Arr_extended_face` class-template extends the face topological-features
|
||||||
namespace CGAL {
|
* of the \dcel. It is parameterized by a face base-type `FaceBase` and a data
|
||||||
|
* type `FData` used to extend the face base-type.
|
||||||
/*!
|
*
|
||||||
\ingroup PkgArrangementOnSurface2DCEL
|
* \cgalModels{AosDcelFace}
|
||||||
|
*
|
||||||
The `Arr_extended_face` class-template extends the face topological-features of the
|
* \sa `Arr_dcel_base<V,H,F>`
|
||||||
\dcel. It is parameterized by a face base-type `FaceBase` and a data type
|
*/
|
||||||
`FData` used to extend the face base-type.
|
template <typename FaceBase, typename FData>
|
||||||
|
|
||||||
\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 */
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
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
|
||||||
|
|
@ -20,17 +20,15 @@ namespace CGAL {
|
||||||
*
|
*
|
||||||
* \sa `Arr_vertex_index_map<Arrangement>`
|
* \sa `Arr_vertex_index_map<Arrangement>`
|
||||||
*/
|
*/
|
||||||
|
template <typename Arrangement_>
|
||||||
template <typename Arrangement_>
|
class Arr_face_index_map: public Arrangement_::Observer {
|
||||||
class Arr_face_index_map: public Arrangement_::Observer {
|
public:
|
||||||
public:
|
|
||||||
|
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! the type of the attached arrangement.
|
/// the type of the attached arrangement.
|
||||||
*/
|
|
||||||
typedef Arrangement_ Arrangement_2;
|
typedef Arrangement_ Arrangement_2;
|
||||||
|
|
||||||
typedef typename Arrangement_2::Base_aos Base_aos;
|
typedef typename Arrangement_2::Base_aos Base_aos;
|
||||||
|
|
||||||
typedef boost::readable_property_map_tag category;
|
typedef boost::readable_property_map_tag category;
|
||||||
|
|
@ -41,12 +39,10 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef Face_handle key_type;
|
typedef Face_handle key_type;
|
||||||
|
|
||||||
/*! The face handle type.
|
/// The face handle type.
|
||||||
*/
|
|
||||||
typedef typename Base_aos::Face_handle Face_handle;
|
typedef typename Base_aos::Face_handle Face_handle;
|
||||||
|
|
||||||
/*! The type of mapping of faces to indices.
|
/// The type of mapping of faces to indices.
|
||||||
*/
|
|
||||||
typedef Unique_hash_map<Face_handle, value_type> Index_map;
|
typedef Unique_hash_map<Face_handle, value_type> Index_map;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
@ -63,7 +59,6 @@ namespace CGAL {
|
||||||
Arr_face_index_map(Base_aos& arr);
|
Arr_face_index_map(Base_aos& arr);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
}; /* end Arr_accessor */
|
||||||
}; /* end Arr_accessor */
|
|
||||||
|
|
||||||
} /* end namespace CGAL */
|
} /* end namespace CGAL */
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
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
|
||||||
|
|
@ -39,12 +39,11 @@ namespace CGAL {
|
||||||
* 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>
|
||||||
template <typename Kernel, typename X, typename Y>
|
class Arr_geodesic_arc_on_sphere_traits_2 {
|
||||||
class Arr_geodesic_arc_on_sphere_traits_2 {
|
public:
|
||||||
public:
|
|
||||||
/*! The `Point_2` class nested within the traits is used to represent a
|
/*! 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
|
* point on a sphere centered at the origin. The point is in fact a
|
||||||
* not-necessarily normalized 3D direction extended with information that
|
* not-necessarily normalized 3D direction extended with information that
|
||||||
|
|
@ -135,6 +134,7 @@ namespace CGAL {
|
||||||
* \param[in] is_full is the arc a full great circle?
|
* \param[in] is_full is the arc a full great circle?
|
||||||
* \param[in] is_degenerate is the arc degenerate (single point)?
|
* \param[in] is_degenerate is the arc degenerate (single point)?
|
||||||
* \param[in] is_empty is the arc empty?
|
* \param[in] is_empty is the arc empty?
|
||||||
|
*
|
||||||
* \pre Both endpoints lie on the given plane.
|
* \pre Both endpoints lie on the given plane.
|
||||||
*/
|
*/
|
||||||
X_monotone_curve_2(const Point_2& source,
|
X_monotone_curve_2(const Point_2& source,
|
||||||
|
|
@ -146,19 +146,21 @@ namespace CGAL {
|
||||||
bool is_degenerate = false,
|
bool is_degenerate = false,
|
||||||
bool is_empty = false);
|
bool is_empty = false);
|
||||||
|
|
||||||
/*! construct an \f$x\f$-monotone geodesic arc.
|
/*! constructs an \f$x\f$-monotone geodesic arc.
|
||||||
* \param[in] normal the normal of the plane containing the arc.
|
* \param[in] normal the normal of the plane containing the arc.
|
||||||
* \param[in] source the source-point direction.
|
* \param[in] source the source-point direction.
|
||||||
* \param[in] target the target-point direction.
|
* \param[in] target the target-point direction.
|
||||||
|
*
|
||||||
* \pre Both endpoints lie on the given plane.
|
* \pre Both endpoints lie on the given plane.
|
||||||
*/
|
*/
|
||||||
X_monotone_curve_2(const Point_2& source,
|
X_monotone_curve_2(const Point_2& source,
|
||||||
const Point_2& target,
|
const Point_2& target,
|
||||||
const Direction_3& normal);
|
const Direction_3& normal);
|
||||||
|
|
||||||
/*! construct a full great-circle.
|
/*! constructs a full great-circle.
|
||||||
* \param[in] point the endpoint of the full great-circle.
|
* \param[in] point the endpoint of the full great-circle.
|
||||||
* \param[in] normal the normal of the plane containing the arc.
|
* \param[in] normal the normal of the plane containing the arc.
|
||||||
|
*
|
||||||
* \pre the point lies on the given plane.
|
* \pre the point lies on the given plane.
|
||||||
* \pre the point pre-image lies on the identified left and right sides
|
* \pre the point pre-image lies on the identified left and right sides
|
||||||
* of the boundary of the parameter space.
|
* of the boundary of the parameter space.
|
||||||
|
|
@ -234,12 +236,11 @@ namespace CGAL {
|
||||||
*/
|
*/
|
||||||
const Point_2& right() const;
|
const Point_2& right() const;
|
||||||
|
|
||||||
/*! determines whether the arc is vertical.
|
/*! Determines whether the arc is vertical.
|
||||||
*/
|
*/
|
||||||
bool is_vertical() const;
|
bool is_vertical() const;
|
||||||
|
|
||||||
/*! determines whether the arc is directed lexicographically from left to
|
/*! determines whether the arc is directed lexicographically from left to right.
|
||||||
* right.
|
|
||||||
*/
|
*/
|
||||||
bool is_directed_right() const;
|
bool is_directed_right() const;
|
||||||
|
|
||||||
|
|
@ -283,7 +284,6 @@ namespace CGAL {
|
||||||
*
|
*
|
||||||
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableTernaryFunction}
|
* \cgalModels{Assignable,CopyConstructible,AdaptableUnaryFunction,AdaptableTernaryFunction}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
*/
|
*/
|
||||||
class Construct_point_2 {
|
class Construct_point_2 {
|
||||||
|
|
@ -335,14 +335,14 @@ namespace CGAL {
|
||||||
/*! constructs the minor geodesic arc from two endpoints. The minor arc
|
/*! constructs the minor geodesic arc from two endpoints. The minor arc
|
||||||
* is the one with the smaller angle among the two geodesic arcs with
|
* is the one with the smaller angle among the two geodesic arcs with
|
||||||
* the given endpoints.
|
* the given endpoints.
|
||||||
* 1. Find out whether the arc is x-monotone.
|
* 1. Find out whether the arc is \f$x\f$-monotone.
|
||||||
* 2. If it is x-monotone,
|
* 2. If it is \f$x\f$-monotone,
|
||||||
* 2.1 Find out whether it is vertical, and
|
* 2.1 Find out whether it is vertical, and
|
||||||
* 2.2 whether the target is larger than the source (directed right).
|
* 2.2 whether the target is larger than the source (directed right).
|
||||||
*
|
*
|
||||||
* An arc is vertical, iff
|
* An arc is vertical, iff
|
||||||
* 1. one of its endpoint direction pierces a pole, or
|
* 1. one of its endpoint direction pierces a pole, or
|
||||||
* 2. the projections of the endpoint directions onto the xy-plane coincide.
|
* 2. the projections of the endpoint directions onto the \f$xy\f$-plane coincide.
|
||||||
* \param[in] p the first endpoint.
|
* \param[in] p the first endpoint.
|
||||||
* \param[in] q the second endpoint.
|
* \param[in] q the second endpoint.
|
||||||
* \pre p and q must not coincide.
|
* \pre p and q must not coincide.
|
||||||
|
|
@ -404,14 +404,14 @@ namespace CGAL {
|
||||||
/*! constructs the minor geodesic arc from two endpoints. The minor arc
|
/*! constructs the minor geodesic arc from two endpoints. The minor arc
|
||||||
* is the one with the smaller angle among the two geodesic arcs with
|
* is the one with the smaller angle among the two geodesic arcs with
|
||||||
* the given endpoints.
|
* the given endpoints.
|
||||||
* 1. Find out whether the arc is x-monotone.
|
* 1. Find out whether the arc is \f$x\f$-monotone.
|
||||||
* 2. If it is x-monotone,
|
* 2. If it is \f$x\f$-monotone,
|
||||||
* 1. Find out whether it is vertical, and
|
* 1. Find out whether it is vertical, and
|
||||||
* 2. whether the target is larger than the source (directed right).
|
* 2. whether the target is larger than the source (directed right).
|
||||||
*
|
*
|
||||||
* An arc is vertical, iff
|
* An arc is vertical, iff
|
||||||
* 1. one of its endpoint direction pierces a pole, or
|
* 1. one of its endpoint direction pierces a pole, or
|
||||||
* 2. the projections of the endpoint directions onto the xy-plane coincide.
|
* 2. the projections of the endpoint directions onto the \f$xy\f$-plane coincide.
|
||||||
*
|
*
|
||||||
* \param[in] p the first endpoint.
|
* \param[in] p the first endpoint.
|
||||||
* \param[in] q the second endpoint.
|
* \param[in] q the second endpoint.
|
||||||
|
|
@ -428,6 +428,7 @@ namespace CGAL {
|
||||||
* \param[in] p the first endpoint.
|
* \param[in] p the first endpoint.
|
||||||
* \param[in] q the second endpoint.
|
* \param[in] q the second endpoint.
|
||||||
* \param[in] normal the normal to the oriented plane containing the arc.
|
* \param[in] normal the normal to the oriented plane containing the arc.
|
||||||
|
*
|
||||||
* \pre Both endpoints lie on the given oriented plane.
|
* \pre Both endpoints lie on the given oriented plane.
|
||||||
*/
|
*/
|
||||||
Curve_2 operator()(const Point_2& p, const Point_2& q,
|
Curve_2 operator()(const Point_2& p, const Point_2& q,
|
||||||
|
|
@ -446,6 +447,6 @@ namespace CGAL {
|
||||||
/*! returns an instance of `Construct_curve_2`.
|
/*! returns an instance of `Construct_curve_2`.
|
||||||
*/
|
*/
|
||||||
Construct_curve_2 construct_curve_2_object() const;
|
Construct_curve_2 construct_curve_2_object() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* end namespace CGAL */
|
} /* end namespace CGAL */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
\details
|
* Computes the overlay of two input arrangement
|
||||||
Computes the overlay of two input arrangement
|
* objects, and returns the overlaid arrangement. All three arrangements
|
||||||
objects, and returns the overlaid arrangement. All three arrangements
|
* can be instantiated with different geometric traits classes and different
|
||||||
can be instantiated with different geometric traits classes and different
|
* \dcel classes (encapsulated in the various topology-traits classes).
|
||||||
\dcel classes (encapsulated in the various topology-traits classes).
|
* The geometry traits of the resulting arrangement is used to construct the
|
||||||
The geometry traits of the resulting arrangement is used to construct the
|
* resulting arrangement. This means that all the types (e.g.,
|
||||||
resulting arrangement. This means that all the types (e.g.,
|
* `Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
|
||||||
`Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
|
* of both input arrangements have to be convertible to the types in the
|
||||||
of both input arrangements have to be convertible to the types in the
|
* resulting arrangement. A given overlay-traits object is used to properly
|
||||||
resulting arrangement. A given overlay-traits object is used to properly
|
* construct the overlaid \dcel that represents the resulting arrangement.
|
||||||
construct the overlaid \dcel that represents the resulting arrangement.
|
*
|
||||||
|
* \pre `res` does not refer to either `arr1` or `arr2` (that is,
|
||||||
\pre `res` does not refer to either `arr1` or `arr2` (that is, "self overlay" is not supported).
|
* "self overlay" is not supported).
|
||||||
|
*
|
||||||
\pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
|
* \pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
|
||||||
concept, which is able to construct records of the `ResDcel` class on
|
* concept, which is able to construct records of the `ResDcel` class on
|
||||||
the basis of the `Dcel1` and `Dcel2` records that induce them.
|
* the basis of the `Dcel1` and `Dcel2` records that induce them.
|
||||||
|
*
|
||||||
\sa `OverlayTraits`
|
* \sa `OverlayTraits`
|
||||||
*/
|
*/
|
||||||
template <class GeomTraitsA, class GeomTraitsB,
|
template <typename GeomTraitsA, typename GeomTraitsB,
|
||||||
class GeomTraitsRes, class TopTraitsA,
|
typename GeomTraitsRes, typename TopTraitsA,
|
||||||
class TopTraitsB, class TopTraitsRes,
|
typename TopTraitsB, typename TopTraitsRes,
|
||||||
class OverlayTraits>
|
typename OverlayTraits>
|
||||||
void overlay (const Arrangement_2<GeomTraitsA, TopTraitsA>& arr1,
|
void overlay(const Arrangement_2<GeomTraitsA, TopTraitsA>& arr1,
|
||||||
const Arrangement_2<GeomTraitsB, TopTraitsB>& arr2,
|
const Arrangement_2<GeomTraitsB, TopTraitsB>& arr2,
|
||||||
Arrangement_2<GeomTraitsRes, TopTraitsRes>& arr_res,
|
Arrangement_2<GeomTraitsRes, TopTraitsRes>& arr_res,
|
||||||
OverlayTraits& ovl_tr);
|
OverlayTraits& ovl_tr);
|
||||||
|
|
||||||
/*!
|
/*! \ingroup PkgArrangementOnSurface2Funcs
|
||||||
\ingroup PkgArrangementOnSurface2Funcs
|
* \brief
|
||||||
\brief Computes the overlay of two arrangements with history `arr1` and
|
* Computes the overlay of two arrangements with history `arr1` and
|
||||||
`arr2`, and sets the output arrangement with history `res` to
|
* `arr2`, and sets the output arrangement with history `res` to
|
||||||
represent the overlaid arrangement. The function also constructs a
|
* represent the overlaid arrangement. The function also constructs a
|
||||||
consolidated set of curves that induce `res`.
|
* consolidated set of curves that induce `res`.
|
||||||
|
*
|
||||||
\details
|
* \details
|
||||||
Computes the overlay of two input arrangement
|
* Computes the overlay of two input arrangement
|
||||||
objects, and returns the overlaid arrangement. All three arrangements
|
* objects, and returns the overlaid arrangement. All three arrangements
|
||||||
can be instantiated with different geometric traits classes and different
|
* can be instantiated with different geometric traits classes and different
|
||||||
\dcel classes (encapsulated in the various topology-traits classes).
|
* \dcel classes (encapsulated in the various topology-traits classes).
|
||||||
The geometry traits of the resulting arrangement is used to construct the
|
* The geometry traits of the resulting arrangement is used to construct the
|
||||||
resulting arrangement. This means that all the types (e.g.,
|
* resulting arrangement. This means that all the types (e.g.,
|
||||||
`Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
|
* `Traits::Point_2`, `Traits::Curve_2`, and `Traits::Point_2`)
|
||||||
of both input arrangements have to be convertible to the types in the
|
* of both input arrangements have to be convertible to the types in the
|
||||||
resulting arrangement. A given overlay-traits object is used to properly
|
* resulting arrangement. A given overlay-traits object is used to properly
|
||||||
construct the overlaid \dcel that represents the resulting arrangement.
|
* 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 `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
|
* \pre The overlay-traits object `ovl_tr` must model the `OverlayTraits`
|
||||||
the basis of the `Dcel1` and `Dcel2` records that induce them.
|
* 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`
|
*
|
||||||
|
* \sa `OverlayTraits`
|
||||||
*/
|
*/
|
||||||
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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} /* end namespace CGAL */
|
} /* end namespace CGAL */
|
||||||
|
|
|
||||||
|
|
@ -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>`
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
/*! \ingroup PkgArrangementOnSurface2TraitsClasses
|
|
||||||
|
/*! \ingroup PkgArrangementOnSurface2TraitsClasses
|
||||||
*
|
*
|
||||||
* Note: The `SubcurveTraits_2` can comprise of Line_segments, Conic_arcs,
|
* Note: The `SubcurveTraits_2` can comprise of Line_segments, Conic_arcs,
|
||||||
* Circular_arc, Bezier_curves, or Linear_curves. A portion or a part
|
* Circular_arc, Bezier_curves, or Linear_curves. A portion or a part
|
||||||
|
|
@ -10,8 +11,8 @@ namespace CGAL {
|
||||||
* or line segments. We call such a compound curve a polycurve. A polycurve
|
* or line segments. We call such a compound curve a polycurve. A polycurve
|
||||||
* is a chain of subcurves, where each two neighboring subcurves in the chain
|
* is a chain of subcurves, where each two neighboring subcurves in the chain
|
||||||
* share a common endpoint; that is, the polycurve is continuous. Furthermore,
|
* share a common endpoint; that is, the polycurve is continuous. Furthermore,
|
||||||
* the target of the \f$i\f$th segment of a polycurve has to coincide with
|
* the target of the \f$i\f$-th segment of a polycurve has to coincide with
|
||||||
* the source of the \f$i+1\f$st segment; that is, the polycurve has to be
|
* the source of the \f$i+1\f$-st segment; that is, the polycurve has to be
|
||||||
* \a well-oriented. Note that it is possible to construct general polycurves
|
* \a well-oriented. Note that it is possible to construct general polycurves
|
||||||
* that are neither continuous nor well-oriented, as it is impossible to
|
* that are neither continuous nor well-oriented, as it is impossible to
|
||||||
* enforce this precondition (using the set of predicates required by the
|
* enforce this precondition (using the set of predicates required by the
|
||||||
|
|
@ -23,13 +24,13 @@ namespace CGAL {
|
||||||
* The type substituting the template parameter `SubcurveTraits_2` when
|
* The type substituting the template parameter `SubcurveTraits_2` when
|
||||||
* the template Arr_polycurve_traits_2 is instantiated must be a model
|
* the template Arr_polycurve_traits_2 is instantiated must be a model
|
||||||
* of the concepts
|
* of the concepts
|
||||||
* - `ArrangementTraits_2` and
|
* - `AosTraits_2` and
|
||||||
* - `ArrangementDirectionalXMonotoneTraits_2`.
|
* - `AosDirectionalXMonotoneTraits_2`.
|
||||||
*
|
*
|
||||||
* If, in addition, the SubcurveTraits_2 models the concept
|
* If, in addition, the SubcurveTraits_2 models the concept
|
||||||
* `ArrangementApproximateTraits_2` then `Arr_polycurve_traits_2` models this
|
* `AosApproximatePointTraits_2` then `Arr_polycurve_traits_2` models this
|
||||||
* concept as well. The same holds for the concept
|
* concept as well. The same holds for the concept
|
||||||
* `ArrangementOpenBoundaryTraits_2`. If no type is provided, then
|
* `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,
|
||||||
|
|
@ -45,11 +46,11 @@ namespace CGAL {
|
||||||
*
|
*
|
||||||
* The number type used by the injected subcurve traits should support exact
|
* The number type used by the injected subcurve 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 polycurve that comprises \f$n > 0\f$ subcurves has \f$ n+1 \f$ subcurve
|
* A polycurve that comprises \f$n > 0\f$ subcurves has \f$n+1\f$ subcurve
|
||||||
* end-points, and they are represented as objects of type
|
* end-points, and they are represented as objects of type
|
||||||
* `SubcurveTraits_2::Point_2`. Since the notion of a \a vertex is reserved to
|
* `SubcurveTraits_2::Point_2`. Since the notion of a \a vertex is reserved to
|
||||||
* 0-dimensional elements of an arrangement, we use, in this context, the
|
* 0-dimensional elements of an arrangement, we use, in this context, the
|
||||||
|
|
@ -65,16 +66,14 @@ namespace CGAL {
|
||||||
* earlier) any object of the `X_monotone_curve_2` type nested in
|
* earlier) any object of the `X_monotone_curve_2` type nested in
|
||||||
* `Arr_polycurve_traits_2` which in that version was called
|
* `Arr_polycurve_traits_2` which in that version was called
|
||||||
* `Arr_polyline_tratis_2` maintained a direction invariant; namely, its
|
* `Arr_polyline_tratis_2` maintained a direction invariant; namely, its
|
||||||
* vertices were ordered in an \a ascending lexicographical \f$(xy)\f$-order.
|
* vertices were ordered in an \a ascending lexicographical \f$xy\f$-order.
|
||||||
* This restriction is no longer imposed and `X_monotone_curve_2` can be now
|
* This restriction is no longer imposed and `X_monotone_curve_2` can be now
|
||||||
* directed either from right-to-left \a or left-to-right. If you wish to
|
* directed either from right-to-left \a or left-to-right. If you wish to
|
||||||
* maintain a left-to-right orientations of the \f$x\f$-monotone polycurve,
|
* maintain a left-to-right orientations of the \f$x\f$-monotone polycurve,
|
||||||
* set the macro `CGAL_ALWAYS_LEFT_TO_RIGHT` to 1 before any \cgal header is
|
* set the macro `CGAL_ALWAYS_LEFT_TO_RIGHT` to 1 before any \cgal header is
|
||||||
* included.
|
* included.
|
||||||
*
|
*
|
||||||
* \cgalModels{ArrangementTraits_2,ArrangementDirectionalXMonotoneTraits_2,
|
* \cgalModels{AosTraits_2,AosDirectionalXMonotoneTraits_2,AosApproximatePointTraits_2 (if the type that substitutes the template parameter `SubcurveTraits_2` models the concept as well)}
|
||||||
* ArrangementApproximateTraits_2 (if the type that substitutes
|
|
||||||
* the template parameter `SubcurveTraits_2` models the concept as well)}
|
|
||||||
*
|
*
|
||||||
* \sa `Arr_algebraic_segment_traits_2<Coefficient>`
|
* \sa `Arr_algebraic_segment_traits_2<Coefficient>`
|
||||||
* \sa `Arr_Bezier_curve_traits_2<RatKernel, AlgKernel, NtTraits>`
|
* \sa `Arr_Bezier_curve_traits_2<RatKernel, AlgKernel, NtTraits>`
|
||||||
|
|
@ -86,24 +85,21 @@ namespace CGAL {
|
||||||
* \sa `Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
* \sa `Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
|
||||||
* \sa `CGAL_ALWAYS_LEFT_TO_RIGHT`
|
* \sa `CGAL_ALWAYS_LEFT_TO_RIGHT`
|
||||||
*/
|
*/
|
||||||
|
template <typename SubcurveTraits_2>
|
||||||
template <typename SubcurveTraits_2>
|
class Arr_polycurve_traits_2 {
|
||||||
class Arr_polycurve_traits_2 {
|
public:
|
||||||
public:
|
|
||||||
|
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*!
|
///
|
||||||
*/
|
|
||||||
// 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 SubcurveTraits_2::Point_2 Point_2;
|
typedef SubcurveTraits_2::Point_2 Point_2;
|
||||||
|
|
||||||
/*!
|
///
|
||||||
*/
|
|
||||||
typedef SubcurveTraits_2::Curve_2 Subcurve_2;
|
typedef SubcurveTraits_2::Curve_2 Subcurve_2;
|
||||||
|
|
||||||
|
///
|
||||||
typedef SubcurveTraits_2::X_monotone_curve_2 X_monotone_subcurve_2;
|
typedef SubcurveTraits_2::X_monotone_curve_2 X_monotone_subcurve_2;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/*! Construction functor of a general (not necessarily \f$x\f$-monotone)
|
/*! Construction functor of a general (not necessarily \f$x\f$-monotone)
|
||||||
|
|
@ -122,6 +118,7 @@ namespace CGAL {
|
||||||
|
|
||||||
/*! obtains a polycurve that comprises of one given subcurve.
|
/*! obtains a polycurve that comprises of one given subcurve.
|
||||||
* \param subcurve input subcurve.
|
* \param subcurve input subcurve.
|
||||||
|
*
|
||||||
* \pre `subcurve` is not degenerated (not tested).
|
* \pre `subcurve` is not degenerated (not tested).
|
||||||
* \return A polycurve with one subcurve, namely `subcurve`.
|
* \return A polycurve with one subcurve, namely `subcurve`.
|
||||||
*/
|
*/
|
||||||
|
|
@ -130,12 +127,10 @@ namespace CGAL {
|
||||||
/*! constructs a well-oriented polycurve from a range of either
|
/*! constructs a well-oriented polycurve from a range of either
|
||||||
* `SubcurveTraits_2::Point_2` or `SubcurveTraits_2::Curve_2`.
|
* `SubcurveTraits_2::Point_2` or `SubcurveTraits_2::Curve_2`.
|
||||||
*
|
*
|
||||||
* \param begin iterator pointing to the first element in the
|
* \param begin iterator pointing to the first element in the range.
|
||||||
* 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.
|
* \pre The given range form a continuous and well-oriented polycurve (not tested).
|
||||||
* \pre The given range form a continuous and well-oriented polycurve
|
|
||||||
* (not tested).
|
|
||||||
* \pre Contains no degenerated subcurves (not tested)
|
* \pre Contains no degenerated subcurves (not tested)
|
||||||
* \return A polycurve using the corresponding construction implementation.
|
* \return A polycurve using the corresponding construction implementation.
|
||||||
*/
|
*/
|
||||||
|
|
@ -170,22 +165,23 @@ namespace CGAL {
|
||||||
/// \name Operations
|
/// \name Operations
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! appends a subcurve `subcurve` to an existing polycurve `cv` at the
|
/*! appends a subcurve `subcurve` to an existing polycurve `cv` at the back.
|
||||||
* back. If `cv` is empty, `subcurve` will be its first subcurve.
|
* If `cv` is empty, `subcurve` will be its first subcurve.
|
||||||
* \param cv a polycurve. Note, `cv` is (not necessarily) \f$x\f$-monotone.
|
* \param cv a polycurve. Note, `cv` is (not necessarily) \f$x\f$-monotone.
|
||||||
* \param subcurve a subcurve (not necessarily \f$x\f$-monotone) to be
|
* \param subcurve a subcurve (not necessarily \f$x\f$-monotone) to be
|
||||||
* appended to `cv`
|
* appended to `cv`
|
||||||
*/
|
*/
|
||||||
void operator()(Curve_2& cv, const Subcurve_2& subcurve) const;
|
void operator()(Curve_2& cv, const Subcurve_2& subcurve) const;
|
||||||
|
|
||||||
/*! appends a subcurve `subcurve` to an existing \f$x\f$-monotone
|
/*! appends a subcurve `subcurve` to an existing \f$x\f$-monotone polycurve
|
||||||
* polycurve `xcv` at the back. If `xcv` is empty, `subcurve` will be its
|
* `xcv` at the back. If `xcv` is empty, `subcurve` will be its first
|
||||||
* first subcurve.
|
* subcurve.
|
||||||
* \param xcv existing \f$x\f$-monotone polycurve
|
* \param xcv existing \f$x\f$-monotone polycurve
|
||||||
* \param subcurve the subcurve to be added
|
* \param subcurve the subcurve to be added
|
||||||
* \pre If `xcv` is not empty then `subcurve` extends `xcv` to the right
|
* \pre If `xcv` is not empty then `subcurve` extends `xcv` to the right
|
||||||
* if `xcv` is oriented right-to-left. Otherwise, `subcurve` extends
|
* if `xcv` is oriented right-to-left. Otherwise, `subcurve` extends
|
||||||
* `xcv` to the left.
|
* `xcv` to the left.
|
||||||
|
*
|
||||||
* \pre `subcurve` is not degenerated.
|
* \pre `subcurve` is not degenerated.
|
||||||
* \pre `xcv` and `subcurve` should have the same orientation
|
* \pre `xcv` and `subcurve` should have the same orientation
|
||||||
*/
|
*/
|
||||||
|
|
@ -210,11 +206,12 @@ namespace CGAL {
|
||||||
*/
|
*/
|
||||||
void operator()(Curve_2& cv, const Subcurve_2& subcurve) const;
|
void operator()(Curve_2& cv, const Subcurve_2& subcurve) const;
|
||||||
|
|
||||||
/*! appends a subcurve `subcurve` to an existing \f$x\f$-monotone
|
/*! appends a subcurve `subcurve` to an existing \f$x\f$-monotone polycurve
|
||||||
* polycurve `xcv` at the front. If `xcv` is empty, `subcurve` will be its
|
* `xcv` at the front. If `xcv` is empty, `subcurve` will be its first
|
||||||
* first subcurve.
|
* subcurve.
|
||||||
* \param xcv existing \f$x\f$-monotone polycurve
|
* \param xcv existing \f$x\f$-monotone polycurve
|
||||||
* \param subcurve the subcurve to be added
|
* \param subcurve the subcurve to be added
|
||||||
|
*
|
||||||
* \pre If `xcv` is not empty then `subcurve` extends `xcv` to the left if
|
* \pre If `xcv` is not empty then `subcurve` extends `xcv` to the left if
|
||||||
* `xcv` is oriented right-to-left. Otherwise, `subcurve` extends
|
* `xcv` is oriented right-to-left. Otherwise, `subcurve` extends
|
||||||
* `xcv` to the right.
|
* `xcv` to the right.
|
||||||
|
|
@ -231,7 +228,7 @@ namespace CGAL {
|
||||||
public:
|
public:
|
||||||
/*! obtains a trimmed version of the polycurve with src and tgt as end
|
/*! obtains a trimmed version of the polycurve with src and tgt as end
|
||||||
* vertices.
|
* vertices.
|
||||||
* Src and tgt will be swapped if they do not conform to the direction of
|
* `src` and `tgt` will be swapped if they do not conform to the direction of
|
||||||
* the polycurve.
|
* the polycurve.
|
||||||
*/
|
*/
|
||||||
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
|
X_monotone_curve_2 operator()(const X_monotone_curve_2& xcv,
|
||||||
|
|
@ -254,7 +251,8 @@ namespace CGAL {
|
||||||
*
|
*
|
||||||
* \pre if `cv` is not empty, then it must be continuous and well-oriented.
|
* \pre if `cv` is not empty, then it must be continuous and well-oriented.
|
||||||
* \pre Dereferencing `oi` must yield a polymorphic object of type
|
* \pre Dereferencing `oi` must yield a polymorphic object of type
|
||||||
* `std::variant<`\link Arr_polycurve_traits_2::Point_2 `Point_2` \endlink, `X_monotone_curve_2>`.
|
* `std::variant<`\link Arr_polycurve_traits_2::Point_2 `Point_2` \endlink,
|
||||||
|
* `X_monotone_curve_2>`.
|
||||||
*/
|
*/
|
||||||
template <typename OutputIterator>
|
template <typename OutputIterator>
|
||||||
OutputIterator operator()(const Curve_2& cv, OutputIterator oi) const;
|
OutputIterator operator()(const Curve_2& cv, OutputIterator oi) const;
|
||||||
|
|
@ -281,8 +279,6 @@ namespace CGAL {
|
||||||
*/
|
*/
|
||||||
template <typename SubcurveType_2, typename PointType_2>
|
template <typename SubcurveType_2, typename PointType_2>
|
||||||
class Curve_2 {
|
class Curve_2 {
|
||||||
public:
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
|
@ -324,7 +320,7 @@ namespace CGAL {
|
||||||
/// \name Creation
|
/// \name Creation
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! constructs Default; constructs an empty polycurve.
|
/*! constructs default; constructs an empty polycurve.
|
||||||
*/
|
*/
|
||||||
Curve_2();
|
Curve_2();
|
||||||
|
|
||||||
|
|
@ -359,8 +355,8 @@ namespace CGAL {
|
||||||
|
|
||||||
/*! \deprecated
|
/*! \deprecated
|
||||||
* obtains the number of subcurve end-points that comprise the polycurve.
|
* obtains the number of subcurve end-points that comprise the polycurve.
|
||||||
* Note that for a bounded polycurve, if there are \f$ n\f$ points in the
|
* Note that for a bounded polycurve, if there are \f$n\f$ points in the
|
||||||
* polycurve, it comprises \f$ (n - 1)\f$ subcurves.
|
* polycurve, it comprises \f$(n - 1)\f$ subcurves.
|
||||||
* Currently, only bounded polycurves are supported.
|
* Currently, only bounded polycurves are supported.
|
||||||
*/
|
*/
|
||||||
unsigned_int points() const;
|
unsigned_int points() const;
|
||||||
|
|
@ -385,7 +381,7 @@ namespace CGAL {
|
||||||
Subcurve_const_iterator end_subcurves() const;
|
Subcurve_const_iterator end_subcurves() const;
|
||||||
|
|
||||||
/*! \deprecated
|
/*! \deprecated
|
||||||
* Obtain an iterator pointing at the target point of the polycurve.
|
* obtains an iterator pointing at the target point of the polycurve.
|
||||||
*/
|
*/
|
||||||
const_iterator rbegin() const;
|
const_iterator rbegin() const;
|
||||||
|
|
||||||
|
|
@ -413,7 +409,8 @@ namespace CGAL {
|
||||||
*/
|
*/
|
||||||
size_type number_of_subcurves() const;
|
size_type number_of_subcurves() const;
|
||||||
|
|
||||||
/*! obtains the \f$ k\f$th subcurve of the polycurve.
|
/*! obtains the \f$k\f$-th subcurve of the polycurve.
|
||||||
|
*
|
||||||
* \pre \f$k\f$ is not greater than or equal to \f$n-1\f$, where
|
* \pre \f$k\f$ is not greater than or equal to \f$n-1\f$, where
|
||||||
* \f$n\f$ is the number of subcurves.
|
* \f$n\f$ is the number of subcurves.
|
||||||
*/
|
*/
|
||||||
|
|
@ -434,6 +431,7 @@ namespace CGAL {
|
||||||
* that the `Push_back_2` functor does. Thus, it is
|
* that the `Push_back_2` functor does. Thus, it is
|
||||||
* recommended to use the latter.
|
* recommended to use the latter.
|
||||||
* \param subcurve The new subcurve to be appended to the polycurve.
|
* \param subcurve The new subcurve to be appended to the polycurve.
|
||||||
|
*
|
||||||
* \pre If the polycurve is not empty, the source of `subcurve` must
|
* \pre If the polycurve is not empty, the source of `subcurve` must
|
||||||
* coincide with the target point of the last subcurve in the
|
* coincide with the target point of the last subcurve in the
|
||||||
* polycurve.
|
* polycurve.
|
||||||
|
|
@ -445,6 +443,7 @@ namespace CGAL {
|
||||||
* corresponding functor which is provided in the traits
|
* corresponding functor which is provided in the traits
|
||||||
* class.
|
* class.
|
||||||
* \param subcurve The new subcurve to be appended to the polycurve.
|
* \param subcurve The new subcurve to be appended to the polycurve.
|
||||||
|
*
|
||||||
* \pre If the polycurve is not empty, the target of `subcurve` must
|
* \pre If the polycurve is not empty, the target of `subcurve` must
|
||||||
* coincide with the source point of the first subcurve in the
|
* coincide with the source point of the first subcurve in the
|
||||||
* polycurve.
|
* polycurve.
|
||||||
|
|
@ -465,29 +464,26 @@ namespace CGAL {
|
||||||
|
|
||||||
}; /* end Arr_polycurve_traits_2::Curve_2 */
|
}; /* end Arr_polycurve_traits_2::Curve_2 */
|
||||||
|
|
||||||
/*! The `X_monotone_curve_2` class nested within the polycurve
|
/*! The `X_monotone_curve_2` class nested within the polycurve traits is
|
||||||
* traits is used to represent \f$ x\f$-monotone piecewise linear subcurves.
|
* used to represent \f$x\f$-monotone piecewise linear subcurves.
|
||||||
*
|
*
|
||||||
* It inherits from the `Curve_2` type. `X_monotone_curve_2` can be
|
* It inherits from the `Curve_2` type. `X_monotone_curve_2` can be
|
||||||
* constructed just like `Curve_2`. However, there is precondition
|
* constructed just like `Curve_2`. However, there is precondition (which is
|
||||||
* (which is not tested) that the input defines an \f$
|
* not tested) that the input defines an \f$x\f$-monotone
|
||||||
* x\f$-monotone polycurve. Furthermore, in contrast to the general
|
* polycurve. Furthermore, in contrast to the general `Curve_2` type, in this
|
||||||
* `Curve_2` type, in this case, the subcurves that an
|
* case, the subcurves that an `X_monotone_curve_2` comprises have to be
|
||||||
* `X_monotone_curve_2` comprises have to be instances of the type
|
* instances of the type `SubcurveTraits_2::X_monotone_curve_2`. Note that the
|
||||||
* `SubcurveTraits_2::X_monotone_curve_2`. Note that the \f$
|
* \f$x\f$-monotonicity ensures that an \f$x\f$-monotone polycurve is not
|
||||||
* x\f$-monotonicity ensures that an \f$ x\f$-monotone polycurve
|
* self-intersecting. (A self-intersecting polycurve is subdivided into
|
||||||
* is not self-intersecting. (A self-intersecting polycurve is
|
* several interior-disjoint \f$x\f$-monotone subcurves).
|
||||||
* subdivided into several interior-disjoint \f$x\f$-monotone subcurves).
|
|
||||||
*
|
*
|
||||||
* The defined \f$ x\f$-monotone polycurve can be directed either from
|
* The defined \f$x\f$-monotone polycurve can be directed either from
|
||||||
* right-to-left (and in turn its vertices are stored in an ascending
|
* right-to-left (and in turn its vertices are stored in an ascending
|
||||||
* lexicographical \f$ xy\f$-order) or left-to-right (and in this case the
|
* lexicographical \f$xy\f$-order) or left-to-right (and in this case the
|
||||||
* vertices are stored in a descending lexicographical \f$ xy\f$-order).
|
* vertices are stored in a descending lexicographical \f$xy\f$-order).
|
||||||
*/
|
*/
|
||||||
template <typename SubcurveType_2, typename PointType_2>
|
template <typename SubcurveType_2, typename PointType_2>
|
||||||
class X_monotone_curve_2 {
|
class X_monotone_curve_2 {};
|
||||||
|
|
||||||
}; /* end Arr_polycurve_traits_2::X_monotone_curve_2 */
|
|
||||||
|
|
||||||
/// \name Accessing Functor Objects
|
/// \name Accessing Functor Objects
|
||||||
/// @{
|
/// @{
|
||||||
|
|
@ -517,7 +513,6 @@ namespace CGAL {
|
||||||
Make_x_monotone_2 make_x_monotone_2_object() const;
|
Make_x_monotone_2 make_x_monotone_2_object() const;
|
||||||
|
|
||||||
/// @} /* End Accessing Functor Objects */
|
/// @} /* End Accessing Functor Objects */
|
||||||
|
}; /* end Arr_polycurve_traits_2 */
|
||||||
}; /* end Arr_polycurve_traits_2 */
|
|
||||||
|
|
||||||
} /* end namespace CGAL */
|
} /* end namespace CGAL */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
@ -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 çurve is continuous, namely whether it does not
|
/*! returns whether ç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 çurve's left end is
|
/*! returns whether the \f$x\f$-coordinate of ç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 çurve's right end is
|
/*! returns whether the \f$x\f$-coordinate of ç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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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). */
|
||||||
|
|
|
||||||
|
|
@ -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 {};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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). */
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
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
|
||||||
|
|
@ -20,17 +20,15 @@ namespace CGAL {
|
||||||
*
|
*
|
||||||
* \sa `Arr_face_index_map<Arrangement>`
|
* \sa `Arr_face_index_map<Arrangement>`
|
||||||
*/
|
*/
|
||||||
|
template <typename Arrangement_>
|
||||||
template< typename Arrangement_>
|
class Arr_vertex_index_map: public Arrangement_::Observer {
|
||||||
class Arr_vertex_index_map: public Arrangement_::Observer {
|
public:
|
||||||
public:
|
|
||||||
|
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*! the type of the attached arrangement.
|
/// the type of the attached arrangement.
|
||||||
*/
|
|
||||||
typedef Arrangement_ Arrangement_2;
|
typedef Arrangement_ Arrangement_2;
|
||||||
|
|
||||||
typedef typename Arrangement_2::Base_aos Base_aos;
|
typedef typename Arrangement_2::Base_aos Base_aos;
|
||||||
|
|
||||||
typedef boost::readable_property_map_tag category;
|
typedef boost::readable_property_map_tag category;
|
||||||
|
|
@ -41,12 +39,10 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef Vertex_handle key_type;
|
typedef Vertex_handle key_type;
|
||||||
|
|
||||||
/*! The vertex handle type.
|
/// The vertex handle type.
|
||||||
*/
|
|
||||||
typedef typename Base_aos::Vertex_handle Vertex_handle;
|
typedef typename Base_aos::Vertex_handle Vertex_handle;
|
||||||
|
|
||||||
/*! The type of mapping of vertices to indices.
|
/// The type of mapping of vertices to indices.
|
||||||
*/
|
|
||||||
typedef Unique_hash_map<Vertex_handle, value_type> Index_map;
|
typedef Unique_hash_map<Vertex_handle, value_type> Index_map;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
@ -63,7 +59,6 @@ namespace CGAL {
|
||||||
Arr_vertex_index_map(Base_aos& arr);
|
Arr_vertex_index_map(Base_aos& arr);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
}; /* end Arr_accessor */
|
||||||
}; /* end Arr_accessor */
|
|
||||||
|
|
||||||
} /* end namespace CGAL */
|
} /* end namespace CGAL */
|
||||||
|
|
|
||||||
|
|
@ -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ïve algorithm.
|
||||||
|
*
|
||||||
|
* The walk-along-a-line point-location object (just like the naï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ïve
|
|
||||||
algorithm.
|
|
||||||
|
|
||||||
The walk-along-a-line point-location object (just like the naï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 */
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
@ -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>`.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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,13 +220,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 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
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
|
||||||
|
|
@ -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*/
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
\ingroup PkgArrangementOnSurface2op_right_shift
|
* extracts an arrangement-with-history from a given input stream using
|
||||||
Extracts an arrangement-with-history from a given input stream using
|
* the default input format.
|
||||||
the default input format.
|
*/
|
||||||
*/
|
template <typename Traits, typename Dcel>
|
||||||
template<class Traits, class Dcel>
|
std::istream& operator>>(std::istream& is,
|
||||||
std::istream& operator>>(std::istream& is, Arrangement_with_history_2<Traits,Dcel>& arr);
|
Arrangement_with_history_2<Traits,Dcel>& arr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
/// @{
|
/// @{
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
@ -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 */
|
|
||||||
|
|
@ -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
Loading…
Reference in New Issue