mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/master' into Heat_method_3-mollify-oboes
# Conflicts: # Heat_method_3/test/Heat_method_3/CMakeLists.txt
This commit is contained in:
commit
1448c6525a
|
|
@ -3,7 +3,7 @@ sudo add-apt-repository ppa:mikhailnov/pulseeffects -y
|
|||
sudo apt-get update
|
||||
sudo apt-get install -y libmpfr-dev \
|
||||
libeigen3-dev qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev \
|
||||
libqt5svg5-dev qttools5-dev qttools5-dev-tools libboost1.72-dev
|
||||
libqt5svg5-dev qttools5-dev qttools5-dev-tools libboost1.72-dev zsh
|
||||
#update cmake to 3.18.4
|
||||
sudo apt purge --auto-remove cmake
|
||||
cd /tmp
|
||||
|
|
|
|||
|
|
@ -49,8 +49,9 @@ jobs:
|
|||
if: steps.get_round.outputs.result != 'stop'
|
||||
run: |
|
||||
set -x
|
||||
sudo apt-get install -y graphviz ssh bibtex2html
|
||||
sudo pip install lxml pyquery
|
||||
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
|
||||
sudo pip install lxml
|
||||
sudo pip install 'pyquery==1.4.1' # it seems to be the last py2 compatible version
|
||||
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen/build_1_8_13/bin/doxygen
|
||||
sudo mv doxygen_exe /usr/bin/doxygen
|
||||
sudo chmod +x /usr/bin/doxygen
|
||||
|
|
@ -91,7 +92,7 @@ jobs:
|
|||
egrep -v " ${PR_NUMBER}\." index.html > tmp.html || true
|
||||
echo "<li><a href=https://cgal.github.io/${PR_NUMBER}/$ROUND/Manual/index.html>Manual for PR ${PR_NUMBER} ($ROUND).</a></li>" >> ./tmp.html
|
||||
mv tmp.html index.html
|
||||
git add ${PR_NUMBER}/$ROUND && git commit -q --amend -m "base commit" && git push -q -f -u origin master
|
||||
git add ${PR_NUMBER}/$ROUND index.html && git commit -q --amend -m "base commit" && git push -q -f -u origin master
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
name: CMake Test Merge Branch
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2.0.0
|
||||
- name: install dependencies
|
||||
run: |
|
||||
.github/install.sh
|
||||
set -x
|
||||
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
|
||||
sudo pip install lxml
|
||||
sudo pip install 'pyquery==1.4.1' # it seems to be the last py2 compatible version
|
||||
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen/build_1_8_13/bin/doxygen
|
||||
sudo mv doxygen_exe /usr/bin/doxygen
|
||||
sudo chmod +x /usr/bin/doxygen
|
||||
git config --global user.email "maxime.gimeno@geometryfactory.com"
|
||||
git config --global user.name "Maxime Gimeno"
|
||||
|
||||
- name: Run checks
|
||||
run: |
|
||||
zsh Scripts/developer_scripts/test_merge_of_branch HEAD
|
||||
#test dependencies
|
||||
bash Scripts/developer_scripts/cgal_check_dependencies.sh --check_headers /usr/bin/doxygen
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ jobs:
|
|||
git rm -r ${PR_NUMBER}
|
||||
fi
|
||||
#git diff exits with 1 if there is a diff
|
||||
if !git diff --quiet; then
|
||||
if ! git diff --quiet; then
|
||||
git commit -a --amend -m"base commit" && git push -f -u origin master
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: Test Polyhedron Demo
|
||||
|
||||
on: [pull_request]
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
batch_1:
|
||||
|
|
|
|||
80
.travis.yml
80
.travis.yml
|
|
@ -1,80 +0,0 @@
|
|||
language: cpp
|
||||
dist: bionic
|
||||
sudo: required
|
||||
git:
|
||||
depth: 3
|
||||
env:
|
||||
matrix:
|
||||
- PACKAGE='CHECK'
|
||||
- PACKAGE='AABB_tree Advancing_front_surface_reconstruction Algebraic_foundations '
|
||||
- PACKAGE='Algebraic_kernel_d Algebraic_kernel_for_circles Algebraic_kernel_for_spheres '
|
||||
- PACKAGE='Alpha_shapes_2 Alpha_shapes_3 Apollonius_graph_2 '
|
||||
- PACKAGE='Arithmetic_kernel Arrangement_on_surface_2 BGL '
|
||||
- PACKAGE='Barycentric_coordinates_2 Boolean_set_operations_2 Bounding_volumes '
|
||||
- PACKAGE='Box_intersection_d CGAL_Core CGAL_ImageIO '
|
||||
- PACKAGE='CGAL_ipelets Cartesian_kernel Circular_kernel_2 '
|
||||
- PACKAGE='Circular_kernel_3 Circulator Classification '
|
||||
- PACKAGE='Combinatorial_map Cone_spanners_2 Convex_decomposition_3 '
|
||||
- PACKAGE='Convex_hull_2 Convex_hull_3 Convex_hull_d '
|
||||
- PACKAGE='Distance_2 Distance_3 Envelope_2 '
|
||||
- PACKAGE='Envelope_3 Filtered_kernel Generalized_map '
|
||||
- PACKAGE='Generator Geomview GraphicsView '
|
||||
- PACKAGE='HalfedgeDS Hash_map Heat_method_3 '
|
||||
- PACKAGE='Homogeneous_kernel Hyperbolic_triangulation_2 Inscribed_areas '
|
||||
- PACKAGE='Installation Interpolation Intersections_2 '
|
||||
- PACKAGE='Intersections_3 Interval_skip_list Interval_support '
|
||||
- PACKAGE='Inventor Jet_fitting_3 Kernel_23 '
|
||||
- PACKAGE='Kernel_d LEDA Linear_cell_complex '
|
||||
- PACKAGE='MacOSX Maintenance Matrix_search '
|
||||
- PACKAGE='Mesh_2 Mesh_3 Mesher_level '
|
||||
- PACKAGE='Minkowski_sum_2 Minkowski_sum_3 Modifier '
|
||||
- PACKAGE='Modular_arithmetic Nef_2 Nef_3 '
|
||||
- PACKAGE='Nef_S2 NewKernel_d Number_types '
|
||||
- PACKAGE='OpenNL Optimal_bounding_box Optimal_transportation_reconstruction_2 '
|
||||
- PACKAGE='Optimisation_basic Partition_2 Periodic_2_triangulation_2 '
|
||||
- PACKAGE='Periodic_3_mesh_3 Periodic_3_triangulation_3 Periodic_4_hyperbolic_triangulation_2 '
|
||||
- PACKAGE='Point_set_2 Point_set_3 Point_set_processing_3 '
|
||||
- PACKAGE='Poisson_surface_reconstruction_3 Polygon Polygon_mesh_processing '
|
||||
- PACKAGE='Polygonal_surface_reconstruction Polyhedron Polyhedron_IO '
|
||||
- PACKAGE='Polyline_simplification_2 Polynomial Polytope_distance_d '
|
||||
- PACKAGE='Principal_component_analysis Principal_component_analysis_LGPL Profiling_tools '
|
||||
- PACKAGE='Property_map QP_solver Random_numbers '
|
||||
- PACKAGE='Ridges_3 STL_Extension Scale_space_reconstruction_3 '
|
||||
- PACKAGE='Scripts SearchStructures Segment_Delaunay_graph_2 '
|
||||
- PACKAGE='Segment_Delaunay_graph_Linf_2 Set_movable_separability_2 Shape_detection '
|
||||
- PACKAGE='Skin_surface_3 Snap_rounding_2 Solver_interface '
|
||||
- PACKAGE='Spatial_searching Spatial_sorting Straight_skeleton_2 '
|
||||
- PACKAGE='Stream_lines_2 Stream_support Subdivision_method_3 '
|
||||
- PACKAGE='Surface_mesh Surface_mesh_approximation Surface_mesh_deformation '
|
||||
- PACKAGE='Surface_mesh_parameterization Surface_mesh_segmentation Surface_mesh_shortest_path '
|
||||
- PACKAGE='Surface_mesh_simplification Surface_mesh_skeletonization Surface_mesh_topology '
|
||||
- PACKAGE='Surface_mesher Surface_sweep_2 TDS_2 '
|
||||
- PACKAGE='TDS_3 Testsuite Tetrahedral_remeshing '
|
||||
- PACKAGE='Three Triangulation Triangulation_2 '
|
||||
- PACKAGE='Triangulation_3 Union_find Visibility_2 '
|
||||
- PACKAGE='Voronoi_diagram_2 wininst '
|
||||
compiler: clang
|
||||
install:
|
||||
- echo "$PWD"
|
||||
- if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ] && [ "$PACKAGE" != CHECK ]; then DO_IGNORE=FALSE; for ARG in $(echo "$PACKAGE");do if [ "$ARG" = "Maintenance" ]; then continue; fi; . $PWD/.travis/test_package.sh "$PWD" "$ARG"; echo "DO_IGNORE is $DO_IGNORE"; if [ "$DO_IGNORE" = "FALSE" ]; then break; fi; done; if [ "$DO_IGNORE" = "TRUE" ]; then travis_terminate 0; fi;fi
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' bash .travis/install.sh
|
||||
- export CXX=clang++-10 CC=clang-10;
|
||||
before_script:
|
||||
- wget -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen_exe
|
||||
- sudo mv doxygen_exe /usr/bin/doxygen
|
||||
- sudo chmod +x /usr/bin/doxygen
|
||||
- mkdir -p build
|
||||
- cd build
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' cmake -DCMAKE_CXX_FLAGS="-std=c++1y" -DCGAL_HEADER_ONLY=ON -DCMAKE_CXX_FLAGS_RELEASE=-DCGAL_NDEBUG -DWITH_examples=ON -DWITH_demos=ON -DWITH_tests=ON ..
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' make
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' sudo make install &>/dev/null
|
||||
- cd ..
|
||||
script:
|
||||
- cd ./.travis
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' bash ./build_package.sh $PACKAGE
|
||||
notifications:
|
||||
email:
|
||||
on_success: change
|
||||
# default: always
|
||||
on_failure: always
|
||||
# default: always
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
[ -n "$CGAL_DEBUG_TRAVIS" ] && set -x
|
||||
|
||||
CXX_FLAGS="-DCGAL_NDEBUG -ftemplate-backtrace-limit=0"
|
||||
|
||||
function mytime {
|
||||
/usr/bin/time -f "Spend time of %C: %E (real)" "$@"
|
||||
}
|
||||
old_IFS=$IFS
|
||||
IFS=$' '
|
||||
ROOT="$PWD/.."
|
||||
for ARG in $(echo "$@")
|
||||
do
|
||||
#skip package maintenance
|
||||
if [ "$ARG" = "Maintenance" ]; then
|
||||
continue
|
||||
fi
|
||||
cd $ROOT
|
||||
|
||||
#install openmesh only if necessary
|
||||
if [ "$ARG" = "CHECK" ] || [ "$ARG" = BGL ] || [ "$ARG" = Convex_hull_3 ] ||\
|
||||
[ "$ARG" = Polygon_mesh_processing ] || [ "$ARG" = Property_map ] ||\
|
||||
[ "$ARG" = Surface_mesh_deformation ] || [ "$ARG" = Surface_mesh_shortest_path ] ||\
|
||||
[ "$ARG" = Surface_mesh_simplification ]; then
|
||||
mytime sudo bash .travis/install_openmesh.sh
|
||||
fi
|
||||
|
||||
|
||||
if [ "$ARG" = "CHECK" ]
|
||||
then
|
||||
cd .travis
|
||||
mytime ./generate_travis.sh --check
|
||||
cd ..
|
||||
IFS=$old_IFS
|
||||
mytime zsh $ROOT/Scripts/developer_scripts/test_merge_of_branch HEAD
|
||||
#test dependencies
|
||||
cd $ROOT
|
||||
mytime bash Scripts/developer_scripts/cgal_check_dependencies.sh --check_headers /usr/bin/doxygen
|
||||
|
||||
cd .travis
|
||||
#parse current matrix and check that no package has been forgotten
|
||||
|
||||
IFS=$'\n'
|
||||
COPY=0
|
||||
MATRIX=()
|
||||
for LINE in $(cat "$PWD/packages.txt")
|
||||
do
|
||||
MATRIX+="$LINE "
|
||||
done
|
||||
|
||||
PACKAGES=()
|
||||
cd ..
|
||||
for f in *
|
||||
do
|
||||
if [ -d "$f/package_info/$f" ]
|
||||
then
|
||||
PACKAGES+="$f "
|
||||
fi
|
||||
done
|
||||
|
||||
DIFFERENCE=$(echo ${MATRIX[@]} ${PACKAGES[@]} | tr ' ' '\n' | sort | uniq -u)
|
||||
IFS=$' '
|
||||
if [ "${DIFFERENCE[0]}" != "" ]
|
||||
then
|
||||
echo "The matrix and the actual package list differ : ."
|
||||
echo ${DIFFERENCE[*]}
|
||||
echo "You should run generate_travis.sh."
|
||||
exit 1
|
||||
fi
|
||||
echo "Matrix is up to date."
|
||||
#check if non standard cgal installation works
|
||||
cd $ROOT
|
||||
mkdir build_test
|
||||
cd build_test
|
||||
mytime cmake -DCMAKE_INSTALL_PREFIX=install/ -DCGAL_BUILD_THREE_DOC=TRUE ..
|
||||
mytime make install
|
||||
# test install with minimal downstream example
|
||||
mkdir installtest
|
||||
cd installtest
|
||||
touch main.cpp
|
||||
mkdir build
|
||||
echo 'project(Example)' >> CMakeLists.txt
|
||||
echo 'set(PROJECT_SRCS ${PROJECT_SOURCE_DIR}/main.cpp)' >> CMakeLists.txt
|
||||
echo 'find_package(CGAL REQUIRED)' >> CMakeLists.txt
|
||||
echo 'add_executable(${PROJECT_NAME} ${PROJECT_SRCS})' >> CMakeLists.txt
|
||||
echo 'target_link_libraries(${PROJECT_NAME} CGAL::CGAL)' >> CMakeLists.txt
|
||||
echo '#include "CGAL/remove_outliers.h"' >> main.cpp
|
||||
cd build
|
||||
mytime cmake -DCMAKE_INSTALL_PREFIX=../../install -DCGAL_BUILD_THREE_DOC=TRUE ..
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$ARG" = "Installation" ]
|
||||
then
|
||||
mkdir build_dir
|
||||
cd build_dir
|
||||
cmake -DWITH_tests=ON -DBUILD_TESTING=ON ..
|
||||
ctest -j2 -L CGAL_cmake_testsuite --output-on-failure
|
||||
cd ..
|
||||
rm -rf ./build_dir
|
||||
#==-- configure all CGAL with -DWITH_examples=ON -DWITH_demos=ON -DWITH_tests=ON, and then launch CTest on a few labels. --==
|
||||
mkdir config_dir
|
||||
cd config_dir
|
||||
cmake -DWITH_examples=ON -DWITH_demos=ON -DWITH_tests=ON -DBUILD_TESTING=ON ..
|
||||
ctest -j2 -L AABB_tree --output-on-failure
|
||||
cd ..
|
||||
rm -rf ./config_dir
|
||||
exit 0
|
||||
fi
|
||||
|
||||
IFS=$old_IFS
|
||||
|
||||
if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ]; then
|
||||
DO_IGNORE=FALSE
|
||||
. $ROOT/.travis/test_package.sh "$ROOT" "$ARG"
|
||||
echo "DO_IGNORE is $DO_IGNORE"
|
||||
if [ "$DO_IGNORE" = "TRUE" ]; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
IFS=$' '
|
||||
mkdir -p build-travis
|
||||
cd build-travis
|
||||
WITHDEMOS=ON
|
||||
if [ "$ARG" = "Polyhedron" ]; then
|
||||
WITHDEMOS=OFF
|
||||
fi
|
||||
EXTRA_CXX_FLAGS=
|
||||
case "$CC" in
|
||||
clang*)
|
||||
EXTRA_CXX_FLAGS="-Werror=inconsistent-missing-override"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
mytime cmake -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${EXTRA_CXX_FLAGS}" -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS:BOOL=ON -DBUILD_TESTING=ON -DWITH_tests=ON -DWITH_examples=ON -DWITH_demos=$WITHDEMOS ..
|
||||
mytime ctest -j2 -L $ARG'([_][A-Z]|$)' -E execution___of__ --output-on-failure
|
||||
done
|
||||
IFS=$old_IFS
|
||||
# Local Variables:
|
||||
# tab-width: 2
|
||||
# sh-basic-offset: 2
|
||||
# End:
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
CHECK=
|
||||
case $1 in
|
||||
--check) CHECK=y;;
|
||||
esac
|
||||
|
||||
set -e
|
||||
cd ../
|
||||
|
||||
if [ -f "$PWD/.travis/packages.txt" ]
|
||||
then
|
||||
rm "$PWD/.travis/packages.txt"
|
||||
fi
|
||||
|
||||
#find all the packages
|
||||
PACKAGES=()
|
||||
INDEX=0
|
||||
i=0
|
||||
for f in *
|
||||
do
|
||||
if [ -d "$f/package_info/$f" ]
|
||||
then
|
||||
echo "$f" >> ./tmp.txt
|
||||
fi
|
||||
done
|
||||
LC_ALL=C sort ./tmp.txt > ./.travis/packages.txt
|
||||
rm ./tmp.txt
|
||||
while read p; do
|
||||
PACKAGES[$INDEX]+="$p "
|
||||
i=$[i+1]
|
||||
if [ $i = 3 ]
|
||||
then
|
||||
i=0
|
||||
INDEX=$[INDEX+1]
|
||||
fi
|
||||
done <./.travis/packages.txt
|
||||
if [ -f ".travis.yml" ]
|
||||
then
|
||||
#copy the current .travis.yml for later check
|
||||
mv ./.travis.yml ./.travis.old
|
||||
fi
|
||||
#writes the first part of the file
|
||||
old_IFS=$IFS
|
||||
IFS=$'\n'
|
||||
for LINE in $(cat "$PWD/.travis/template.txt")
|
||||
do
|
||||
if [ "$LINE" != " matrix:" ]
|
||||
then
|
||||
echo "$LINE" >> .travis.yml
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo " matrix:" >> .travis.yml
|
||||
#writes the matrix
|
||||
echo " - PACKAGE='CHECK'" >> .travis.yml
|
||||
for package in ${PACKAGES[@]}
|
||||
do
|
||||
echo " - PACKAGE='$package'" >> .travis.yml
|
||||
done
|
||||
|
||||
#writes the end of the file
|
||||
COPY=0
|
||||
for LINE in $(cat "$PWD/.travis/template.txt")
|
||||
do
|
||||
if [ "$LINE" = "compiler: clang" ]
|
||||
then
|
||||
COPY=1
|
||||
fi
|
||||
if [ $COPY = 1 ]
|
||||
then
|
||||
echo "$LINE" >> .travis.yml
|
||||
fi
|
||||
done
|
||||
IFS=$' '
|
||||
#check if there are differences between the files
|
||||
if ! cmp -s ./.travis.yml ./.travis.old;
|
||||
then
|
||||
echo ".travis.yml has changed : "
|
||||
diff ./.travis.yml ./.travis.old
|
||||
if [ -n "$CHECK" ]; then
|
||||
echo "You should modify the file .travis/template.txt"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
#erase old travis
|
||||
rm ./.travis.old
|
||||
IFS=$old_IFS
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 2
|
||||
# sh-basic-offset: 2
|
||||
# End:
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
[ -n "$CGAL_DEBUG_TRAVIS" ] && set -x
|
||||
DONE=0
|
||||
sudo add-apt-repository ppa:mikhailnov/pulseeffects -y
|
||||
sudo apt-get update
|
||||
|
||||
while [ $DONE = 0 ]
|
||||
do
|
||||
DONE=1 && sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install clang-10 zsh \
|
||||
flex bison cmake graphviz libgmp-dev libmpfr-dev libmpfi-dev zlib1g-dev libeigen3-dev \
|
||||
qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev libqt5svg5-dev qttools5-dev qttools5-dev-tools qml-module-qtgraphicaleffects libopencv-dev mesa-common-dev libmetis-dev libglu1-mesa-dev \
|
||||
libboost1.72-dev || DONE=0 && sudo apt-get update
|
||||
done
|
||||
exit 0
|
||||
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
mkdir -p openmesh
|
||||
cd openmesh
|
||||
wget -O openmesh.tar.gz https://www.openmesh.org/media/Releases/6.3/OpenMesh-6.3.tar.gz
|
||||
tar xf openmesh.tar.gz --strip-components=1
|
||||
sed -i '94i #include <sys/time.h>' src/OpenMesh/Tools/Utils/conio.cc
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DBUILD_APPS=FALSE ..
|
||||
make -j2
|
||||
sudo make -j2 install &>/dev/null
|
||||
|
||||
#clean up
|
||||
cd ../..
|
||||
rm -rf ./openmesh
|
||||
|
|
@ -1,140 +0,0 @@
|
|||
AABB_tree
|
||||
Advancing_front_surface_reconstruction
|
||||
Algebraic_foundations
|
||||
Algebraic_kernel_d
|
||||
Algebraic_kernel_for_circles
|
||||
Algebraic_kernel_for_spheres
|
||||
Alpha_shapes_2
|
||||
Alpha_shapes_3
|
||||
Apollonius_graph_2
|
||||
Arithmetic_kernel
|
||||
Arrangement_on_surface_2
|
||||
BGL
|
||||
Barycentric_coordinates_2
|
||||
Boolean_set_operations_2
|
||||
Bounding_volumes
|
||||
Box_intersection_d
|
||||
CGAL_Core
|
||||
CGAL_ImageIO
|
||||
CGAL_ipelets
|
||||
Cartesian_kernel
|
||||
Circular_kernel_2
|
||||
Circular_kernel_3
|
||||
Circulator
|
||||
Classification
|
||||
Combinatorial_map
|
||||
Cone_spanners_2
|
||||
Convex_decomposition_3
|
||||
Convex_hull_2
|
||||
Convex_hull_3
|
||||
Convex_hull_d
|
||||
Distance_2
|
||||
Distance_3
|
||||
Envelope_2
|
||||
Envelope_3
|
||||
Filtered_kernel
|
||||
Generalized_map
|
||||
Generator
|
||||
Geomview
|
||||
GraphicsView
|
||||
HalfedgeDS
|
||||
Hash_map
|
||||
Heat_method_3
|
||||
Homogeneous_kernel
|
||||
Hyperbolic_triangulation_2
|
||||
Inscribed_areas
|
||||
Installation
|
||||
Interpolation
|
||||
Intersections_2
|
||||
Intersections_3
|
||||
Interval_skip_list
|
||||
Interval_support
|
||||
Inventor
|
||||
Jet_fitting_3
|
||||
Kernel_23
|
||||
Kernel_d
|
||||
LEDA
|
||||
Linear_cell_complex
|
||||
MacOSX
|
||||
Maintenance
|
||||
Matrix_search
|
||||
Mesh_2
|
||||
Mesh_3
|
||||
Mesher_level
|
||||
Minkowski_sum_2
|
||||
Minkowski_sum_3
|
||||
Modifier
|
||||
Modular_arithmetic
|
||||
Nef_2
|
||||
Nef_3
|
||||
Nef_S2
|
||||
NewKernel_d
|
||||
Number_types
|
||||
OpenNL
|
||||
Optimal_bounding_box
|
||||
Optimal_transportation_reconstruction_2
|
||||
Optimisation_basic
|
||||
Partition_2
|
||||
Periodic_2_triangulation_2
|
||||
Periodic_3_mesh_3
|
||||
Periodic_3_triangulation_3
|
||||
Periodic_4_hyperbolic_triangulation_2
|
||||
Point_set_2
|
||||
Point_set_3
|
||||
Point_set_processing_3
|
||||
Poisson_surface_reconstruction_3
|
||||
Polygon
|
||||
Polygon_mesh_processing
|
||||
Polygonal_surface_reconstruction
|
||||
Polyhedron
|
||||
Polyhedron_IO
|
||||
Polyline_simplification_2
|
||||
Polynomial
|
||||
Polytope_distance_d
|
||||
Principal_component_analysis
|
||||
Principal_component_analysis_LGPL
|
||||
Profiling_tools
|
||||
Property_map
|
||||
QP_solver
|
||||
Random_numbers
|
||||
Ridges_3
|
||||
STL_Extension
|
||||
Scale_space_reconstruction_3
|
||||
Scripts
|
||||
SearchStructures
|
||||
Segment_Delaunay_graph_2
|
||||
Segment_Delaunay_graph_Linf_2
|
||||
Set_movable_separability_2
|
||||
Shape_detection
|
||||
Skin_surface_3
|
||||
Snap_rounding_2
|
||||
Solver_interface
|
||||
Spatial_searching
|
||||
Spatial_sorting
|
||||
Straight_skeleton_2
|
||||
Stream_lines_2
|
||||
Stream_support
|
||||
Subdivision_method_3
|
||||
Surface_mesh
|
||||
Surface_mesh_approximation
|
||||
Surface_mesh_deformation
|
||||
Surface_mesh_parameterization
|
||||
Surface_mesh_segmentation
|
||||
Surface_mesh_shortest_path
|
||||
Surface_mesh_simplification
|
||||
Surface_mesh_skeletonization
|
||||
Surface_mesh_topology
|
||||
Surface_mesher
|
||||
Surface_sweep_2
|
||||
TDS_2
|
||||
TDS_3
|
||||
Testsuite
|
||||
Tetrahedral_remeshing
|
||||
Three
|
||||
Triangulation
|
||||
Triangulation_2
|
||||
Triangulation_3
|
||||
Union_find
|
||||
Visibility_2
|
||||
Voronoi_diagram_2
|
||||
wininst
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
language: cpp
|
||||
dist: bionic
|
||||
sudo: required
|
||||
git:
|
||||
depth: 3
|
||||
env:
|
||||
matrix:
|
||||
PACKAGES_MATRIX
|
||||
|
||||
compiler: clang
|
||||
install:
|
||||
- echo "$PWD"
|
||||
- if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ] && [ "$PACKAGE" != CHECK ]; then DO_IGNORE=FALSE; for ARG in $(echo "$PACKAGE");do if [ "$ARG" = "Maintenance" ]; then continue; fi; . $PWD/.travis/test_package.sh "$PWD" "$ARG"; echo "DO_IGNORE is $DO_IGNORE"; if [ "$DO_IGNORE" = "FALSE" ]; then break; fi; done; if [ "$DO_IGNORE" = "TRUE" ]; then travis_terminate 0; fi;fi
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' bash .travis/install.sh
|
||||
- export CXX=clang++-10 CC=clang-10;
|
||||
before_script:
|
||||
- wget -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen_exe
|
||||
- sudo mv doxygen_exe /usr/bin/doxygen
|
||||
- sudo chmod +x /usr/bin/doxygen
|
||||
- mkdir -p build
|
||||
- cd build
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' cmake -DCMAKE_CXX_FLAGS="-std=c++1y" -DCGAL_HEADER_ONLY=ON -DCMAKE_CXX_FLAGS_RELEASE=-DCGAL_NDEBUG -DWITH_examples=ON -DWITH_demos=ON -DWITH_tests=ON ..
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' make
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' sudo make install &>/dev/null
|
||||
- cd ..
|
||||
script:
|
||||
- cd ./.travis
|
||||
- /usr/bin/time -f 'Spend time of %C -- %E (real)' bash ./build_package.sh $PACKAGE
|
||||
notifications:
|
||||
email:
|
||||
on_success: change
|
||||
# default: always
|
||||
on_failure: always
|
||||
# default: always
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
#Will cd $1 and test package named $2
|
||||
#to find out if it or one of its dependencies has changed in the current branch
|
||||
|
||||
DO_IGNORE=FALSE
|
||||
cd $1
|
||||
|
||||
if [ ! -d "$2" ]; then
|
||||
echo "$2 : MISSING PACKAGE. Ignoring."
|
||||
DO_IGNORE=TRUE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
if [ ! -f "$2/package_info/$2/dependencies" ];then
|
||||
echo "No dependencies found for $2"
|
||||
bash Scripts/developer_scripts/cgal_check_dependencies.sh --check_headers /usr/bin/doxygen
|
||||
exit 1
|
||||
fi
|
||||
LIST_OF_FILES=$(git diff --name-only origin/master... |cut -d/ -f1 |uniq |sort)
|
||||
LIST_OF_DEPS=$(cat "$2/package_info/$2/dependencies")
|
||||
echo "$LIST_OF_DEPS"
|
||||
for flie in $LIST_OF_DEPS
|
||||
do
|
||||
[[ $LIST_OF_FILES =~ (^|[[:space:]])$flie($|[[:space:]]) ]] && return
|
||||
done
|
||||
echo "Package ignored because none of its dependencies has been modified."
|
||||
DO_IGNORE=TRUE
|
||||
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
|
||||
#define FAR #error named reserved in windows.h
|
||||
#define far #error named reserved in windows.h
|
||||
|
||||
#define Polyline #error named reserved in windows.h
|
||||
#define Polygon #error named reserved in windows.h
|
||||
|
|
@ -19,18 +19,16 @@
|
|||
#include <QApplication>
|
||||
#include <CGAL/Qt/resources.h>
|
||||
#include <QMimeData>
|
||||
|
||||
#include <CGAL/Qt/init_ogl_context.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
||||
CGAL::Qt::init_ogl_context(4,3);
|
||||
QApplication app(argc, argv);
|
||||
app.setOrganizationDomain("inria.fr");
|
||||
app.setOrganizationName("INRIA");
|
||||
app.setApplicationName("AABB tree demo");
|
||||
//for windows
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
|
||||
app.setAttribute(Qt::AA_UseDesktopOpenGL);
|
||||
#endif
|
||||
|
||||
// Import resources from libCGALQt (Qt5).
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ include_directories(BEFORE ./ ./include)
|
|||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
|
||||
|
||||
# Find Qt5 itself
|
||||
find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Gui Svg)
|
||||
find_package(Qt5 QUIET COMPONENTS Script OpenGL Gui Svg)
|
||||
|
||||
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
#${CGAL_Qt5_MOC_FILES}
|
||||
)
|
||||
# Link with Qt libraries
|
||||
target_link_libraries(AABB_demo PRIVATE Qt5::OpenGL Qt5::Gui Qt5::Xml
|
||||
target_link_libraries(AABB_demo PRIVATE Qt5::OpenGL Qt5::Gui
|
||||
CGAL::CGAL CGAL::CGAL_Qt5)
|
||||
|
||||
add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo)
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
// saves some pointers from ui, for latter use.
|
||||
m_pViewer = ui->viewer;
|
||||
|
||||
// does not save the state of the viewer
|
||||
m_pViewer->setStateFileName(QString());
|
||||
|
||||
// accepts drop events
|
||||
setAcceptDrops(true);
|
||||
|
|
@ -45,6 +43,7 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
m_pViewer->makeCurrent();
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,8 +91,8 @@ void Scene::compile_shaders()
|
|||
//Vertex source code
|
||||
const char vertex_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"attribute highp vec4 vertex;\n"
|
||||
"#version 150 \n"
|
||||
"in highp vec4 vertex;\n"
|
||||
"uniform highp mat4 mvp_matrix;\n"
|
||||
"uniform highp mat4 f_matrix;\n"
|
||||
"void main(void)\n"
|
||||
|
|
@ -103,10 +103,11 @@ void Scene::compile_shaders()
|
|||
//Vertex source code
|
||||
const char fragment_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"#version 150 \n"
|
||||
"uniform highp vec4 color; \n"
|
||||
"out highp vec4 out_color; \n"
|
||||
"void main(void) { \n"
|
||||
"gl_FragColor = color; \n"
|
||||
"out_color = color; \n"
|
||||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
|
|
@ -139,12 +140,12 @@ void Scene::compile_shaders()
|
|||
//Vertex source code
|
||||
const char tex_vertex_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"attribute highp vec4 vertex;\n"
|
||||
"attribute highp vec2 tex_coord; \n"
|
||||
"#version 150 \n"
|
||||
"in highp vec4 vertex;\n"
|
||||
"in highp vec2 tex_coord; \n"
|
||||
"uniform highp mat4 mvp_matrix;\n"
|
||||
"uniform highp mat4 f_matrix;\n"
|
||||
"varying highp vec2 texc;\n"
|
||||
"out highp vec2 texc;\n"
|
||||
"void main(void)\n"
|
||||
"{\n"
|
||||
" gl_Position = mvp_matrix * f_matrix * vertex;\n"
|
||||
|
|
@ -154,11 +155,12 @@ void Scene::compile_shaders()
|
|||
//Vertex source code
|
||||
const char tex_fragment_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"uniform sampler2D texture;\n"
|
||||
"varying highp vec2 texc;\n"
|
||||
"#version 150 \n"
|
||||
"uniform sampler2D s_texture;\n"
|
||||
"in highp vec2 texc;\n"
|
||||
"out highp vec4 out_color; \n"
|
||||
"void main(void) { \n"
|
||||
"gl_FragColor = texture2D(texture, texc.st);\n"
|
||||
"out_color = vec4(texture(s_texture, texc));\n"
|
||||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
|
|
@ -1319,12 +1321,8 @@ void Scene::deactivate_cutting_plane()
|
|||
}
|
||||
void Scene::initGL()
|
||||
{
|
||||
gl = new QOpenGLFunctions_2_1();
|
||||
if(!gl->initializeOpenGLFunctions())
|
||||
{
|
||||
qFatal("ERROR : OpenGL Functions not initialized. Check your OpenGL Verison (should be >=3.3)");
|
||||
exit(1);
|
||||
}
|
||||
gl = new QOpenGLFunctions();
|
||||
gl->initializeOpenGLFunctions();
|
||||
|
||||
gl->glGenTextures(1, &textureId);
|
||||
compile_shaders();
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public:
|
|||
|
||||
private:
|
||||
// member data
|
||||
QOpenGLFunctions_2_1 *gl;
|
||||
QOpenGLFunctions *gl;
|
||||
Bbox m_bbox;
|
||||
Polyhedron *m_pPolyhedron;
|
||||
std::list<Point> m_points;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
\cgalCRPSection{Primitives}
|
||||
- `CGAL::AABB_triangle_primitive<GeomTraits, Iterator, CacheDatum>`
|
||||
- `CGAL::AABB_segment_primitive<GeomTraits, Iterator, CacheDatum>`
|
||||
- `CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMapPolyhedron,ExternalPropertyMaps,CacheDatum>`
|
||||
- `CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMap,ExternalPropertyMaps,CacheDatum>`
|
||||
- `CGAL::AABB_halfedge_graph_segment_primitive<HalfedgeGraph,Vpm,OneHalfedgeGraphPerTree,CacheDatum>`
|
||||
- `CGAL::AABB_face_graph_triangle_primitive<FaceGraph,Vpm,OneFaceGraphPerTree,CacheDatum>`
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
||||
#include <CGAL/AABB_tree.h>
|
||||
#include <CGAL/AABB_traits.h>
|
||||
#include <CGAL/Polyhedron_3.h>
|
||||
|
|
@ -9,6 +7,9 @@
|
|||
#include <CGAL/AABB_face_graph_triangle_primitive.h>
|
||||
#include <CGAL/Timer.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
|
||||
typedef K::FT FT;
|
||||
typedef K::Point_3 Point_3;
|
||||
|
|
@ -26,8 +27,12 @@ void triangle_mesh(const char* fname)
|
|||
typedef CGAL::AABB_tree<Traits> Tree;
|
||||
|
||||
TriangleMesh tmesh;
|
||||
std::ifstream in(fname);
|
||||
in >> tmesh;
|
||||
if(!CGAL::read_polygon_mesh(fname, tmesh) || CGAL::is_triangle_mesh(tmesh))
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
Timer t;
|
||||
t.start();
|
||||
Tree tree(faces(tmesh).first, faces(tmesh).second, tmesh);
|
||||
|
|
@ -36,7 +41,6 @@ void triangle_mesh(const char* fname)
|
|||
std::cout << "Closest point to ORIGIN:" << tree.closest_point(CGAL::ORIGIN) << std::endl;
|
||||
}
|
||||
|
||||
|
||||
Bbox_3 bbox(boost::graph_traits<Surface_mesh>::face_descriptor fd,
|
||||
const Surface_mesh& p)
|
||||
{
|
||||
|
|
@ -47,7 +51,6 @@ Bbox_3 bbox(boost::graph_traits<Surface_mesh>::face_descriptor fd,
|
|||
return res;
|
||||
}
|
||||
|
||||
|
||||
void surface_mesh_cache_bbox(const char* fname)
|
||||
{
|
||||
typedef boost::graph_traits<Surface_mesh>::face_descriptor face_descriptor;
|
||||
|
|
@ -64,9 +67,9 @@ void surface_mesh_cache_bbox(const char* fname)
|
|||
t.start();
|
||||
Bbox_pmap bb = tmesh.add_property_map<face_descriptor,Bbox_3>("f:bbox",Bbox_3()).first;
|
||||
|
||||
for(face_descriptor fd : faces(tmesh)){
|
||||
for(face_descriptor fd : faces(tmesh))
|
||||
put(bb, fd, bbox(fd,tmesh));
|
||||
}
|
||||
|
||||
Traits traits(bb);
|
||||
Tree tree(traits);
|
||||
tree.insert(faces(tmesh).first, faces(tmesh).second, tmesh);
|
||||
|
|
@ -77,7 +80,6 @@ void surface_mesh_cache_bbox(const char* fname)
|
|||
std::cout << "Closest point to ORIGIN:" << tree.closest_point(CGAL::ORIGIN) << std::endl;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
std::cout << "Polyhedron_3" << std::endl;
|
||||
|
|
|
|||
|
|
@ -1,14 +1,15 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <CGAL/Simple_cartesian.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/AABB_tree.h>
|
||||
#include <CGAL/AABB_traits.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/AABB_face_graph_triangle_primitive.h>
|
||||
#include <CGAL/Polygon_mesh_processing/compute_normal.h>
|
||||
#include <CGAL/Polygon_mesh_processing/orientation.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
typedef CGAL::Simple_cartesian<double> K;
|
||||
typedef K::FT FT;
|
||||
typedef K::Point_3 Point;
|
||||
|
|
@ -24,8 +25,8 @@ typedef CGAL::AABB_traits<K, Primitive> Traits;
|
|||
typedef CGAL::AABB_tree<Traits> Tree;
|
||||
typedef boost::optional<Tree::Intersection_and_primitive_id<Ray>::Type> Ray_intersection;
|
||||
|
||||
|
||||
struct Skip {
|
||||
struct Skip
|
||||
{
|
||||
face_descriptor fd;
|
||||
|
||||
Skip(const face_descriptor fd)
|
||||
|
|
@ -44,14 +45,20 @@ struct Skip {
|
|||
int main(int argc, char* argv[])
|
||||
{
|
||||
const char* filename = (argc > 1) ? argv[1] : "data/tetrahedron.off";
|
||||
std::ifstream input(filename);
|
||||
|
||||
Mesh mesh;
|
||||
input >> mesh;
|
||||
if(!CGAL::read_polygon_mesh(filename, mesh))
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
Tree tree(faces(mesh).first, faces(mesh).second, mesh);
|
||||
|
||||
double d = CGAL::Polygon_mesh_processing::is_outward_oriented(mesh)?-1:1;
|
||||
|
||||
for(face_descriptor fd : faces(mesh)){
|
||||
for(face_descriptor fd : faces(mesh))
|
||||
{
|
||||
halfedge_descriptor hd = halfedge(fd,mesh);
|
||||
Point p = CGAL::centroid(mesh.point(source(hd,mesh)),
|
||||
mesh.point(target(hd,mesh)),
|
||||
|
|
@ -61,13 +68,16 @@ int main(int argc, char* argv[])
|
|||
Ray ray(p,d * v);
|
||||
Skip skip(fd);
|
||||
Ray_intersection intersection = tree.first_intersection(ray, skip);
|
||||
if(intersection){
|
||||
if(intersection)
|
||||
{
|
||||
if(boost::get<Point>(&(intersection->first))){
|
||||
const Point* p = boost::get<Point>(&(intersection->first) );
|
||||
std::cout << *p << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cerr << "done" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ class AABB_face_graph_triangle_primitive
|
|||
}
|
||||
|
||||
public:
|
||||
#ifdef DOXYGEN_RUNNING
|
||||
#ifdef DOXYGEN_RUNNING
|
||||
/// \name Types
|
||||
/// @{
|
||||
/*!
|
||||
|
|
@ -122,18 +122,32 @@ public:
|
|||
If `OneFaceGraphPerTree` is CGAL::Tag_true, constructs a `Shared_data` object from a reference to the polyhedon `graph`.
|
||||
*/
|
||||
static unspecified_type construct_shared_data( FaceGraph& graph );
|
||||
#else
|
||||
#else
|
||||
typedef typename Base::Id Id;
|
||||
#endif
|
||||
#endif
|
||||
typedef typename boost::graph_traits<FaceGraph>::face_descriptor face_descriptor;
|
||||
|
||||
// constructors
|
||||
|
||||
#ifdef DOXYGEN_RUNNING
|
||||
/*!
|
||||
constructs a primitive.
|
||||
|
||||
\tparam Iterator an input iterator with `Id` as value type.
|
||||
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `get(vertex_point, graph)`.
|
||||
*/
|
||||
template <class Iterator>
|
||||
AABB_face_graph_triangle_primitive(Iterator it, const FaceGraph& graph, VertexPointPMap vppm);
|
||||
|
||||
/*!
|
||||
constructs a primitive.
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `get(vertex_point, graph)`.
|
||||
*/
|
||||
AABB_face_graph_triangle_primitive(face_descriptor fd, const FaceGraph& graph, VertexPointPMap vppm);
|
||||
#else
|
||||
template <class Iterator>
|
||||
AABB_face_graph_triangle_primitive(Iterator it, const FaceGraph& graph, VertexPointPMap_ vppm)
|
||||
: Base( Id_(make_id(*it, graph, OneFaceGraphPerTree())),
|
||||
|
|
@ -141,18 +155,12 @@ public:
|
|||
Point_property_map(const_cast<FaceGraph*>(&graph),vppm) )
|
||||
{}
|
||||
|
||||
/*!
|
||||
constructs a primitive.
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `get(vertex_point, graph)`.
|
||||
*/
|
||||
AABB_face_graph_triangle_primitive(face_descriptor fd, const FaceGraph& graph, VertexPointPMap_ vppm)
|
||||
: Base( Id_(make_id(fd, graph, OneFaceGraphPerTree())),
|
||||
Triangle_property_map(const_cast<FaceGraph*>(&graph),vppm),
|
||||
Point_property_map(const_cast<FaceGraph*>(&graph),vppm) )
|
||||
{}
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
template <class Iterator>
|
||||
AABB_face_graph_triangle_primitive(Iterator it, const FaceGraph& graph)
|
||||
: Base( Id_(make_id(*it, graph, OneFaceGraphPerTree())),
|
||||
|
|
|
|||
|
|
@ -140,14 +140,27 @@ public:
|
|||
#endif
|
||||
typedef typename boost::graph_traits<HalfedgeGraph>::edge_descriptor edge_descriptor;
|
||||
|
||||
#ifdef DOXYGEN_RUNNING
|
||||
/*!
|
||||
constructs a primitive.
|
||||
|
||||
\tparam Iterator is an input iterator with `Id` as value type.
|
||||
|
||||
This \ref AABB_tree/AABB_halfedge_graph_edge_example.cpp "example" gives a way to call this constructor
|
||||
using the insert-by-range method of the class `AABB_tree<Traits>`.
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `boost::get(vertex_point, graph)`.
|
||||
*/
|
||||
template <class Iterator>
|
||||
AABB_halfedge_graph_segment_primitive(Iterator it, const HalfedgeGraph& graph, VertexPointPMap vppm);
|
||||
|
||||
/*!
|
||||
constructs a primitive.
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `boost::get(vertex_point, graph)`.
|
||||
*/
|
||||
AABB_halfedge_graph_segment_primitive(edge_descriptor ed, const HalfedgeGraph& graph, VertexPointPMap vppm);
|
||||
#else
|
||||
template <class Iterator>
|
||||
AABB_halfedge_graph_segment_primitive(Iterator it, const HalfedgeGraph& graph, VertexPointPMap_ vppm)
|
||||
: Base( Id_(make_id(*it, graph, OneHalfedgeGraphPerTree())),
|
||||
|
|
@ -155,18 +168,12 @@ public:
|
|||
Point_property_map(const_cast<HalfedgeGraph*>(&graph), vppm) )
|
||||
{}
|
||||
|
||||
/*!
|
||||
constructs a primitive.
|
||||
If `VertexPointPMap` is the default of the class, an additional constructor
|
||||
is available with `vppm` set to `boost::get(vertex_point, graph)`.
|
||||
*/
|
||||
AABB_halfedge_graph_segment_primitive(edge_descriptor ed, const HalfedgeGraph& graph, VertexPointPMap_ vppm)
|
||||
: Base( Id_(make_id(ed, graph, OneHalfedgeGraphPerTree())),
|
||||
Segment_property_map(const_cast<HalfedgeGraph*>(&graph), vppm),
|
||||
Point_property_map(const_cast<HalfedgeGraph*>(&graph), vppm) )
|
||||
{}
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
template <class Iterator>
|
||||
AABB_halfedge_graph_segment_primitive(Iterator it, const HalfedgeGraph& graph)
|
||||
: Base( Id_(make_id(*it, graph, OneHalfedgeGraphPerTree())),
|
||||
|
|
@ -177,7 +184,7 @@ public:
|
|||
: Base( Id_(make_id(ed, graph, OneHalfedgeGraphPerTree())),
|
||||
Segment_property_map(const_cast<HalfedgeGraph*>(&graph)),
|
||||
Point_property_map(const_cast<HalfedgeGraph*>(&graph)) ){}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/// \internal
|
||||
typedef internal::Cstr_shared_data<HalfedgeGraph, Base, Segment_property_map, Point_property_map, OneHalfedgeGraphPerTree> Cstr_shared_data;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
#include <CGAL/internal/AABB_tree/Primitive_helper.h>
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
/// \file AABB_traits.h
|
||||
|
||||
|
|
@ -274,13 +273,13 @@ public:
|
|||
switch(Traits::longest_axis(bbox))
|
||||
{
|
||||
case AT::CGAL_AXIS_X: // sort along x
|
||||
std::nth_element(first, middle, beyond, boost::bind(Traits::less_x,_1,_2,m_traits));
|
||||
std::nth_element(first, middle, beyond, [this](const Primitive& p1, const Primitive& p2){ return Traits::less_x(p1, p2, this->m_traits); });
|
||||
break;
|
||||
case AT::CGAL_AXIS_Y: // sort along y
|
||||
std::nth_element(first, middle, beyond, boost::bind(Traits::less_y,_1,_2,m_traits));
|
||||
std::nth_element(first, middle, beyond, [this](const Primitive& p1, const Primitive& p2){ return Traits::less_y(p1, p2, this->m_traits); });
|
||||
break;
|
||||
case AT::CGAL_AXIS_Z: // sort along z
|
||||
std::nth_element(first, middle, beyond, boost::bind(Traits::less_z,_1,_2,m_traits));
|
||||
std::nth_element(first, middle, beyond, [this](const Primitive& p1, const Primitive& p2){ return Traits::less_z(p1, p2, this->m_traits); });
|
||||
break;
|
||||
default:
|
||||
CGAL_error();
|
||||
|
|
@ -429,6 +428,11 @@ public:
|
|||
Closest_point closest_point_object() const {return Closest_point(*this);}
|
||||
Compare_distance compare_distance_object() const {return Compare_distance();}
|
||||
|
||||
typedef enum { CGAL_AXIS_X = 0,
|
||||
CGAL_AXIS_Y = 1,
|
||||
CGAL_AXIS_Z = 2} Axis;
|
||||
|
||||
static Axis longest_axis(const Bounding_box& bbox);
|
||||
|
||||
private:
|
||||
/**
|
||||
|
|
@ -447,13 +451,6 @@ private:
|
|||
return internal::Primitive_helper<AT>::get_datum(pr,*this).bbox();
|
||||
}
|
||||
|
||||
|
||||
typedef enum { CGAL_AXIS_X = 0,
|
||||
CGAL_AXIS_Y = 1,
|
||||
CGAL_AXIS_Z = 2} Axis;
|
||||
|
||||
static Axis longest_axis(const Bounding_box& bbox);
|
||||
|
||||
/// Comparison functions
|
||||
static bool less_x(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive, BboxMap>& traits)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ namespace CGAL {
|
|||
Self& operator=(const Self&) = delete;
|
||||
|
||||
/**
|
||||
* @brief Builds the datastructure from a sequence of primitives.
|
||||
* @brief Builds the data structure from a sequence of primitives.
|
||||
* @param first iterator over first primitive to insert
|
||||
* @param beyond past-the-end iterator
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,159 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAdvancingFrontSurfaceReconstructionRef
|
||||
\cgalConcept
|
||||
|
||||
The concept `AdvancingFrontSurfaceReconstructionTraits_3` describes the requirements
|
||||
for the the geometric traits of the class `CGAL::Delaunay_triangulation_3`
|
||||
used in the class `CGAL::Advancing_front_surface_reconstruction`.
|
||||
It defines the geometric objects (points, segments...) forming the triangulation
|
||||
together with a few geometric predicates and constructions on these objects.
|
||||
|
||||
\cgalRefines `DelaunayTriangulationTraits_3`
|
||||
|
||||
\cgalHasModel All models of `Kernel`.
|
||||
*/
|
||||
class AdvancingFrontSurfaceReconstructionTraits_3
|
||||
{
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The coordinate type.
|
||||
*/
|
||||
typedef unspecified_type FT;
|
||||
|
||||
/*!
|
||||
The vector type.
|
||||
*/
|
||||
typedef unspecified_type Vector_3;
|
||||
|
||||
/*!
|
||||
The sphere type.
|
||||
*/
|
||||
typedef unspecified_type Sphere_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`Vector_3 operator()(Point_3 p, Point_3 q)`,
|
||||
|
||||
which constructs the vector `q-p`.
|
||||
*/
|
||||
typedef unspecified_type Construct_vector_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`Vector_3 operator()(Vector_3 v, Vector_3 w)`,
|
||||
|
||||
which returns the cross product of `v` and `w`.
|
||||
*/
|
||||
typedef unspecified_type Construct_cross_product_vector_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`FT operator()(Vector_3 v, Vector_3 w)`,
|
||||
|
||||
which returns the scalar (inner) product of `v` and `w`.
|
||||
*/
|
||||
typedef unspecified_type Compute_scalar_product_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`Sphere_3 operator()(Point_3 p, Point_3 q, Point_3 r)`,
|
||||
|
||||
which constructs a sphere initialized to the smallest sphere which passes
|
||||
through the points `p`, `q`, and `r`.
|
||||
*/
|
||||
typedef unspecified_type Construct_sphere_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`Point_3 operator()(Sphere_3 s)`,
|
||||
|
||||
which returns the center of the sphere `s`.
|
||||
*/
|
||||
typedef unspecified_type Construct_center_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operators
|
||||
|
||||
`FT operator()(Point_3 p, Point_3 q, Point_3 r, Point_3 s)`,
|
||||
|
||||
which returns the squared radius of the sphere passing through `p`, `q` and `r`,
|
||||
and whose center is in the plane defined by these three points.
|
||||
|
||||
and
|
||||
|
||||
`FT operator()(Point_3 p, Point_3 q, Point_3 r, Point_3 s)`,
|
||||
|
||||
which returns the squared radius of the sphere passing through `p`, `q`, `r`, and `s`.
|
||||
|
||||
and
|
||||
|
||||
`FT operator()(Sphere_3 s)`,
|
||||
|
||||
which returns the squared radius of the sphere `s`.
|
||||
*/
|
||||
typedef unspecified_type Compute_squared_radius_3;
|
||||
|
||||
/*!
|
||||
A constructor object that must provide the function operator
|
||||
|
||||
`FT operator()(Point_3 p, Point_3 q)`,
|
||||
|
||||
which returns the squared distance between the points `p` and `q`.
|
||||
*/
|
||||
typedef unspecified_type Compute_squared_distance_3;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// The following functions give access to the predicate and construction objects:
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
gives access to the `Construct_vector_3` construction.
|
||||
*/
|
||||
Construct_vector_3 construct_vector_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Construct_cross_product_vector_3` construction.
|
||||
*/
|
||||
Construct_cross_product_vector_3 construct_cross_product_vector_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Compute_scalar_product_3` construction.
|
||||
*/
|
||||
Compute_scalar_product_3 compute_scalar_product_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Construct_sphere_3` construction.
|
||||
*/
|
||||
Construct_sphere_3 construct_sphere_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Construct_center_3` construction.
|
||||
*/
|
||||
Construct_center_3 construct_center_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Compute_squared_radius_3` construction.
|
||||
*/
|
||||
Compute_squared_radius_3 compute_squared_radius_3_object();
|
||||
|
||||
/*!
|
||||
gives access to the `Compute_squared_distance_3` construction.
|
||||
*/
|
||||
Compute_squared_distance_3 compute_squared_distance_3_object();
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end AdvancingFrontSurfaceReconstructionTraits_3 */
|
||||
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
/// \defgroup PkgAdvancingFrontSurfaceReconstructionRef Advancing Front Surface Reconstruction Reference
|
||||
|
||||
/// \defgroup PkgAdvancingFrontSurfaceReconstructionRefConcepts Concepts
|
||||
/// \ingroup PkgAdvancingFrontSurfaceReconstructionRef
|
||||
|
||||
/*!
|
||||
\addtogroup PkgAdvancingFrontSurfaceReconstructionRef
|
||||
|
||||
|
|
@ -25,6 +28,10 @@ of topological singularities. }
|
|||
|
||||
\cgalClassifedRefPages
|
||||
|
||||
\cgalCRPSection{Concepts}
|
||||
|
||||
- `AdvancingFrontSurfaceReconstructionTraits_3`
|
||||
|
||||
\cgalCRPSection{Classes}
|
||||
|
||||
- `CGAL::Advancing_front_surface_reconstruction`
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ Algebraic_foundations
|
|||
Circulator
|
||||
Stream_support
|
||||
TDS_2
|
||||
TDS_3
|
||||
Triangulation_2
|
||||
Triangulation_3
|
||||
Number_types
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#include <CGAL/Delaunay_triangulation_3.h>
|
||||
#include <CGAL/Triangulation_vertex_base_with_info_3.h>
|
||||
#include <CGAL/Advancing_front_surface_reconstruction.h>
|
||||
#include <CGAL/IO/read_xyz_points.h>
|
||||
#include <CGAL/IO/read_points.h>
|
||||
#include <CGAL/disable_warnings.h>
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
|
@ -113,11 +113,8 @@ int main (int argc, char* argv[])
|
|||
|
||||
const char* fname = (argc>1) ? argv[1] : "data/cube.pwn";
|
||||
// Loading point set from a file.
|
||||
std::ifstream stream(fname);
|
||||
|
||||
if (!stream ||
|
||||
!CGAL::read_xyz_points(stream,
|
||||
std::back_inserter(points),
|
||||
if (!CGAL::read_points(fname, std::back_inserter(points),
|
||||
CGAL::parameters::point_map(Point_map()).
|
||||
normal_map(Normal_map())))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -175,23 +175,42 @@ namespace CGAL {
|
|||
store handles to the vertices and faces of the 3D triangulation, which enables the user to explore the
|
||||
2D as well as 3D neighborhood of vertices and facets of the surface.
|
||||
|
||||
\tparam Dt must be a `Delaunay_triangulation_3` with
|
||||
`Advancing_front_surface_reconstruction_vertex_base_3` and `Advancing_front_surface_reconstruction_cell_base_3` blended into the vertex and cell type.
|
||||
The default uses the `Exact_predicates_inexact_constructions_kernel` as geometric traits class.
|
||||
\tparam Dt must be a `Delaunay_triangulation_3` whose `Traits` template parameter must be a model of
|
||||
`AdvancingFrontSurfaceReconstructionTraits_3` and whose `Tds` template parameter must be
|
||||
a model of `TriangulationDataStructure_3` with `Advancing_front_surface_reconstruction_vertex_base_3` and
|
||||
`Advancing_front_surface_reconstruction_cell_base_3` blended into the vertex and cell type, respectively.
|
||||
The default value is:
|
||||
\code
|
||||
CGAL::Delaunay_triangulation_3<CGAL::Exact_predicates_inexact_constructions_kernel,
|
||||
CGAL::Triangulation_data_structure_3<
|
||||
CGAL::Advancing_front_surface_reconstruction_vertex_base_3<
|
||||
CGAL::Exact_predicates_inexact_constructions_kernel>,
|
||||
CGAL::Advancing_front_surface_reconstruction_cell_base_3<
|
||||
CGAL::Exact_predicates_inexact_constructions_kernel> > >`
|
||||
\endcode
|
||||
|
||||
\tparam P must be a functor with `double operator()(AdvancingFront,Cell_handle,int)` returning the
|
||||
priority of the facet `(Cell_handle,int)`. This functor enables the user to choose how candidate
|
||||
triangles are prioritized. If a facet should not appear in the output,
|
||||
\tparam P must be a functor offering
|
||||
\code
|
||||
FT operator()(Advancing_front_surface_reconstruction,Cell_handle,int)
|
||||
\endcode
|
||||
returning the priority of the facet `(Cell_handle,int)`. This functor enables the user
|
||||
to choose how candidate triangles are prioritized. If a facet should not appear in the output,
|
||||
`infinity()` must be returned. It defaults to a functor that returns the
|
||||
`smallest_radius_delaunay_sphere()`.
|
||||
|
||||
*/
|
||||
template <
|
||||
class Dt = Default,
|
||||
template <class Dt = Default,
|
||||
class P = Default>
|
||||
class Advancing_front_surface_reconstruction {
|
||||
|
||||
typedef typename Default::Get<Dt,Delaunay_triangulation_3<Exact_predicates_inexact_constructions_kernel, Triangulation_data_structure_3<Advancing_front_surface_reconstruction_vertex_base_3<Exact_predicates_inexact_constructions_kernel>, Advancing_front_surface_reconstruction_cell_base_3<Exact_predicates_inexact_constructions_kernel> > > >::type Triangulation;
|
||||
class Advancing_front_surface_reconstruction
|
||||
{
|
||||
typedef typename Default::Get<Dt,
|
||||
Delaunay_triangulation_3<
|
||||
Exact_predicates_inexact_constructions_kernel,
|
||||
Triangulation_data_structure_3<
|
||||
Advancing_front_surface_reconstruction_vertex_base_3<
|
||||
Exact_predicates_inexact_constructions_kernel>,
|
||||
Advancing_front_surface_reconstruction_cell_base_3<
|
||||
Exact_predicates_inexact_constructions_kernel> > > >::type Triangulation;
|
||||
typedef typename Default::Get<P,AFSR::Default_priority>::type Priority;
|
||||
public:
|
||||
|
||||
|
|
@ -202,9 +221,9 @@ namespace CGAL {
|
|||
/*!
|
||||
The type of the 2D triangulation data structure describing the reconstructed surface, being a model of `TriangulationDataStructure_2`.
|
||||
- The type `Triangulation_data_structure_2::Vertex` is model of the concept `TriangulationDataStructure_2::Vertex` and has additionally the
|
||||
method `vertex_3()` that returns a `#Vertex_handle` to the associated 3D vertex.
|
||||
method `vertex_3()` that returns a `Vertex_handle` to the associated 3D vertex.
|
||||
- The type `Triangulation_data_structure_2::Face` is model of the concept `TriangulationDataStructure_2::Face` and has additionally the
|
||||
method `facet()` that returns the associated `#Facet`, and a method `bool is_on_surface()`
|
||||
method `facet()` that returns the associated `Facet`, and a method `bool is_on_surface()`
|
||||
for testing if a face is part of the reconstructed surface or a face incident to a boundary edge.
|
||||
|
||||
In case the surface has boundaries, the 2D surface has one vertex which is associated to the infinite
|
||||
|
|
@ -213,15 +232,20 @@ namespace CGAL {
|
|||
typedef unspecified_type Triangulation_data_structure_2;
|
||||
|
||||
/*!
|
||||
The type of the 3D triangulation.
|
||||
The type of the 3D Delaunay triangulation (the first template parameter).
|
||||
*/
|
||||
typedef unspecified_type Triangulation_3;
|
||||
|
||||
/*!
|
||||
The type of the facet priority functor.
|
||||
The type of the facet priority functor (the second template parameter).
|
||||
*/
|
||||
typedef unspecified_type Priority;
|
||||
|
||||
/*!
|
||||
The number type.
|
||||
*/
|
||||
typedef typename Triangulation_3::Geom_traits::FT FT;
|
||||
|
||||
/*!
|
||||
The point type.
|
||||
*/
|
||||
|
|
@ -245,21 +269,21 @@ namespace CGAL {
|
|||
/*!
|
||||
A bidirectional iterator range which enables to enumerate all points that were removed
|
||||
from the 3D Delaunay triangulation during the surface reconstruction. The value type
|
||||
of the iterator is `#Point`.
|
||||
of the iterator is `Point`.
|
||||
*/
|
||||
typedef unspecified_type Outlier_range;
|
||||
|
||||
/*!
|
||||
A bidirectional iterator range which enables to visit all vertices on a boundary.
|
||||
The value type of the iterator is `Vertex_handle`.
|
||||
*/
|
||||
typedef unspecified_type Vertex_on_boundary_range;
|
||||
|
||||
/*!
|
||||
A bidirectional iterator range which enables to visit all boundaries.
|
||||
The value type of the iterator is `Vertex_on_boundary_range`.
|
||||
*/
|
||||
typedef unspecified_type Boundary_range;
|
||||
|
||||
/*!
|
||||
A bidirectional iterator range which enables to visit all vertices on a boundary.
|
||||
The value type of the iterator is `#Vertex_handle`
|
||||
*/
|
||||
typedef unspecified_type Vertex_on_boundary_range;
|
||||
/// @}
|
||||
#endif
|
||||
|
||||
|
|
@ -268,6 +292,7 @@ namespace CGAL {
|
|||
typedef Advancing_front_surface_reconstruction<Dt,P> Extract;
|
||||
typedef typename Triangulation_3::Geom_traits Geom_traits;
|
||||
|
||||
typedef typename Kernel::FT FT;
|
||||
typedef typename Kernel::FT coord_type;
|
||||
|
||||
typedef typename Kernel::Point_3 Point;
|
||||
|
|
@ -377,7 +402,23 @@ namespace CGAL {
|
|||
std::list<Next_border_elt> nbe_pool;
|
||||
std::list<Intern_successors_type> ist_pool;
|
||||
|
||||
public:
|
||||
Vector construct_vector(const Point& p, const Point& q) const
|
||||
{
|
||||
return T.geom_traits().construct_vector_3_object()(p, q);
|
||||
}
|
||||
|
||||
Vector construct_cross_product(const Vector& v, const Vector& w) const
|
||||
{
|
||||
return T.geom_traits().construct_cross_product_vector_3_object()(v, w);
|
||||
}
|
||||
|
||||
FT compute_scalar_product(const Vector& v, const Vector& w) const
|
||||
{
|
||||
return T.geom_traits().compute_scalar_product_3_object()(v, w);
|
||||
}
|
||||
|
||||
private:
|
||||
Intern_successors_type* new_border()
|
||||
{
|
||||
nbe_pool.resize(nbe_pool.size()+1);
|
||||
|
|
@ -679,12 +720,14 @@ namespace CGAL {
|
|||
++it;
|
||||
}while(collinear(p,q,it->point()));
|
||||
const Point& r = it->point();
|
||||
Vector u = q-r;
|
||||
Vector v = q-p;
|
||||
Vector w = r-p;
|
||||
Vector vw = cross_product(v,w);
|
||||
double len = (std::max)(u*u,(std::max)(v*v,w*w));
|
||||
Point s = p + 10* len * (vw/(vw*vw));
|
||||
Vector u = construct_vector(r, q);
|
||||
Vector v = construct_vector(p, q);
|
||||
Vector w = construct_vector(p, r);
|
||||
Vector vw = construct_cross_product(v,w);
|
||||
double len = (std::max)(compute_scalar_product(u,u),
|
||||
(std::max)(compute_scalar_product(v,v),
|
||||
compute_scalar_product(w,w)));
|
||||
Point s = p + 10 * len * (vw/compute_scalar_product(vw,vw));
|
||||
added_vertex = T.insert(s);
|
||||
}
|
||||
}
|
||||
|
|
@ -736,9 +779,9 @@ namespace CGAL {
|
|||
|
||||
\param radius_ratio_bound candidates incident to surface triangles which are not in the beta-wedge
|
||||
are discarded, if the ratio of their radius and the radius of the surface triangle is larger than `radius_ratio_bound`.
|
||||
Described in Section \ref AFSR_Boundaries
|
||||
Described in Section \ref AFSR_Boundaries.
|
||||
\param beta half the angle of the wedge in which only the radius of triangles counts for the plausibility of candidates.
|
||||
Described in Section \ref AFSR_Selection
|
||||
Described in Section \ref AFSR_Selection.
|
||||
|
||||
*/
|
||||
void run(double radius_ratio_bound=5, double beta= 0.52)
|
||||
|
|
@ -1186,7 +1229,7 @@ namespace CGAL {
|
|||
\param index index of the facet in `c`
|
||||
|
||||
*/
|
||||
coord_type
|
||||
FT
|
||||
smallest_radius_delaunay_sphere(const Cell_handle& c,
|
||||
const int& index) const
|
||||
{
|
||||
|
|
@ -1249,16 +1292,16 @@ namespace CGAL {
|
|||
const Point& pp2 = cc->vertex(i2)->point();
|
||||
const Point& pp3 = cc->vertex(i3)->point();
|
||||
|
||||
Sphere facet_sphere(pp1, pp2, pp3);
|
||||
if (squared_distance(facet_sphere.center(), pp0) <
|
||||
facet_sphere.squared_radius())
|
||||
Sphere facet_sphere = T.geom_traits().construct_sphere_3_object()(pp1, pp2, pp3);
|
||||
if (squared_distance(T.geom_traits().construct_center_3_object()(facet_sphere), pp0) <
|
||||
T.geom_traits().compute_squared_radius_3_object()(facet_sphere))
|
||||
{
|
||||
#ifdef AFSR_LAZY
|
||||
value = lazy_squared_radius(cc);
|
||||
#else
|
||||
// qualified with CGAL, to avoid a compilation error with clang
|
||||
if(volume(pp0, pp1, pp2, pp3) != 0){
|
||||
value = CGAL::squared_radius(pp0, pp1, pp2, pp3);
|
||||
value = T.geom_traits().compute_squared_radius_3_object()(pp0, pp1, pp2, pp3);
|
||||
} else {
|
||||
typedef Exact_predicates_exact_constructions_kernel EK;
|
||||
Cartesian_converter<Kernel, EK> to_exact;
|
||||
|
|
@ -1280,26 +1323,30 @@ namespace CGAL {
|
|||
cc = lazy_circumcenter(c);
|
||||
cn = lazy_circumcenter(n);
|
||||
#else
|
||||
cc = CGAL::circumcenter(cp0, cp1, cp2, cp3);
|
||||
cn = CGAL::circumcenter(np0, np1, np2, np3);
|
||||
cc = T.geom_traits().construct_circumcenter_3_object()(cp0, cp1, cp2, cp3);
|
||||
cn = T.geom_traits().construct_circumcenter_3_object()(np0, np1, np2, np3);
|
||||
#endif
|
||||
// computation of the distance of cp1 to the dual segment cc, cn...
|
||||
Vector V(cc - cn), Vc(cc - cp1), Vn(cp1 - cn);
|
||||
coord_type ac(V * Vc), an(V * Vn), norm_V(V * V);
|
||||
Vector V = construct_vector(cn, cc),
|
||||
Vc = construct_vector(cp1, cc),
|
||||
Vn = construct_vector(cn, cp1);
|
||||
coord_type ac = compute_scalar_product(V, Vc),
|
||||
an = compute_scalar_product(V, Vn),
|
||||
norm_V = compute_scalar_product(V, V);
|
||||
if ((ac > 0) && (an > 0))
|
||||
{
|
||||
value = (Vc*Vc) - ac*ac/norm_V;
|
||||
value = compute_scalar_product(Vc, Vc) - ac*ac/norm_V;
|
||||
if ((value < 0)||(norm_V > inv_eps_2)){
|
||||
// qualified with CGAL, to avoid a compilation error with clang
|
||||
value = CGAL::squared_radius(cp1, cp2, cp3);
|
||||
value = T.geom_traits().compute_squared_radius_3_object()(cp1, cp2, cp3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ac <= 0)
|
||||
value = squared_distance(cc, cp1);
|
||||
value = T.geom_traits().compute_squared_distance_3_object()(cc, cp1);
|
||||
else // (an <= 0)
|
||||
value = squared_distance(cn, cp1);
|
||||
value = T.geom_traits().compute_squared_distance_3_object()(cn, cp1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1314,7 +1361,7 @@ namespace CGAL {
|
|||
|
||||
returns the infinite floating value that prevents a facet to be used.
|
||||
*/
|
||||
coord_type infinity() const { return std::numeric_limits<coord_type>::infinity(); }
|
||||
FT infinity() const { return std::numeric_limits<FT>::infinity(); }
|
||||
/// @}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
|
@ -1341,9 +1388,9 @@ namespace CGAL {
|
|||
const Point& p2 = c->vertex(i2)->point();
|
||||
const Point& pc = c->vertex(i3)->point();
|
||||
|
||||
Vector P2P1 = p1-p2, P2Pn, PnP1;
|
||||
Vector P2P1 = construct_vector(p2, p1), P2Pn, PnP1;
|
||||
|
||||
Vector v2, v1 = cross_product(pc-p2, P2P1);
|
||||
Vector v2, v1 = construct_cross_product(construct_vector(p2, pc), P2P1);
|
||||
|
||||
coord_type norm, norm1 = v1*v1;
|
||||
coord_type norm12 = P2P1*P2P1;
|
||||
|
|
@ -1375,12 +1422,12 @@ namespace CGAL {
|
|||
{
|
||||
const Point& pn = neigh->vertex(n_i3)->point();
|
||||
|
||||
P2Pn = pn-p2;
|
||||
v2 = cross_product(P2P1,P2Pn);
|
||||
P2Pn = construct_vector(p2, pn);
|
||||
v2 = construct_cross_product(P2P1,P2Pn);
|
||||
|
||||
//pas necessaire de normer pour un bon echantillon:
|
||||
// on peut alors tester v1*v2 >= 0
|
||||
norm = sqrt(norm1 * (v2*v2));
|
||||
norm = sqrt(norm1 * compute_scalar_product(v2,v2));
|
||||
pscal = v1*v2;
|
||||
// check if the triangle will produce a sliver on the surface
|
||||
bool sliver_facet = (pscal <= COS_ALPHA_SLIVER*norm);
|
||||
|
|
@ -1394,10 +1441,9 @@ namespace CGAL {
|
|||
// We skip triangles having an internal angle along e
|
||||
// whose cosinus is smaller than -DELTA
|
||||
// that is the angle is larger than arcos(-DELTA)
|
||||
border_facet = !((P2P1*P2Pn >=
|
||||
-DELTA*sqrt(norm12*(P2Pn*P2Pn)))&&
|
||||
(P2P1*PnP1 >=
|
||||
-DELTA*sqrt(norm12*(PnP1*PnP1))));
|
||||
border_facet =
|
||||
!((P2P1*P2Pn >= -DELTA*sqrt(norm12*compute_scalar_product(P2Pn,P2Pn))) &&
|
||||
(P2P1*PnP1 >= -DELTA*sqrt(norm12*compute_scalar_product(PnP1,PnP1))));
|
||||
// \todo investigate why we simply do not skip this triangle
|
||||
// but continue looking for a better candidate
|
||||
// if (!border_facet){
|
||||
|
|
@ -1569,9 +1615,11 @@ namespace CGAL {
|
|||
int n_i3 = (6 - n_ind - n_i1 - n_i2);
|
||||
|
||||
const Point& pn = neigh->vertex(n_i3)->point();
|
||||
Vector v1 = cross_product(pc-p2,p1-p2),
|
||||
v2 = cross_product(p1-p2,pn-p2);
|
||||
coord_type norm = sqrt((v1*v1)*(v2*v2));
|
||||
Vector v1 = construct_cross_product(construct_vector(p2, pc),
|
||||
construct_vector(p2, p1)),
|
||||
v2 = construct_cross_product(construct_vector(p2, p1),
|
||||
construct_vector(p2, pn));
|
||||
coord_type norm = sqrt(compute_scalar_product(v1, v1) * compute_scalar_product(v2, v2));
|
||||
|
||||
if (v1*v2 > COS_BETA*norm)
|
||||
return 1; // label bonne pliure sinon:
|
||||
|
|
@ -2487,9 +2535,9 @@ namespace CGAL {
|
|||
\param out output iterator
|
||||
\param radius_ratio_bound candidates incident to surface triangles which are not in the beta-wedge
|
||||
are discarded, if the ratio of their radius and the radius of the surface triangle is larger than `radius_ratio_bound`.
|
||||
Described in Section \ref AFSR_Boundaries
|
||||
Described in Section \ref AFSR_Boundaries.
|
||||
\param beta half the angle of the wedge in which only the radius of triangles counts for the plausibility of candidates.
|
||||
Described in Section \ref AFSR_Selection
|
||||
Described in Section \ref AFSR_Selection.
|
||||
|
||||
*/
|
||||
template <typename PointInputIterator, typename IndicesOutputIterator>
|
||||
|
|
@ -2533,7 +2581,7 @@ namespace CGAL {
|
|||
be convertible to `Exact_predicates_inexact_constructions_kernel::Point_3` with the `Cartesian_converter`.
|
||||
\tparam IndicesOutputIterator must be an output iterator to which
|
||||
`std::array<std::size_t, 3>` can be assigned.
|
||||
\tparam Priority must be a functor with `double operator()(AdvancingFront,Cell_handle,int)` returning the
|
||||
\tparam Priority must be a functor with `double operator()(Advancing_front_surface_reconstruction,Cell_handle,int)` returning the
|
||||
priority of the facet `(Cell_handle,int)`.
|
||||
|
||||
\param b iterator on the first point of the sequence
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ Modular_arithmetic
|
|||
Number_types
|
||||
Polygon
|
||||
Polyhedron
|
||||
Polyhedron_IO
|
||||
Profiling_tools
|
||||
Property_map
|
||||
Random_numbers
|
||||
STL_Extension
|
||||
Spatial_sorting
|
||||
Stream_support
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace CGAL {
|
|||
\ingroup PkgAlgebraicFoundationsRef
|
||||
|
||||
The template function `compare()` compares the first argument with respect to
|
||||
the second, i.e.\ it returns `CGAL::LARGER` if \f$ x\f$ is larger then \f$ y\f$.
|
||||
the second, i.e.\ it returns `CGAL::LARGER` if \f$ x\f$ is larger than \f$ y\f$.
|
||||
|
||||
In case the argument types `NT1` and `NT2` differ,
|
||||
`compare` is performed with the semantic of the type determined via
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
|
||||
/*! \file CGAL/Algebraic_extension_traits.h
|
||||
* \brief Defines traits class CGAL::Algebraic_extension_traits.
|
||||
* \brief defines traits class CGAL::Algebraic_extension_traits.
|
||||
*/
|
||||
|
||||
#ifndef CGAL_ALGEBRAIC_NUMBER_TRAITS_H
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
// =============================================================================
|
||||
|
||||
/*! \file NiX/Coercion_traits.h
|
||||
* \brief Defines class NiX::Coercion_traits.
|
||||
* \brief defines class NiX::Coercion_traits.
|
||||
*
|
||||
* Provides the general definition of the \c Coercion_traits<A,B> class, with
|
||||
* specializations for the builtin number types.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
// they may be wrong now.
|
||||
|
||||
/*! \file NiX/Fraction_traits.h
|
||||
\brief Defines class NiX::Fraction_traits.
|
||||
\brief defines class NiX::Fraction_traits.
|
||||
|
||||
Provides dependent types and function objects for all the functions
|
||||
beyond operators with specializations of the \c Fraction_traits<NT>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace CGAL {
|
|||
class Parens_as_product_tag {};
|
||||
|
||||
/*! \ingroup NiX_io_parens
|
||||
* \brief Decides whether this number requires parentheses
|
||||
* \brief decides whether this number requires parentheses
|
||||
* in case it appears within a produkt.
|
||||
*/
|
||||
template <class NT>
|
||||
|
|
@ -36,7 +36,7 @@ struct Needs_parens_as_product{
|
|||
};
|
||||
|
||||
/*! \ingroup NiX_io_parens
|
||||
* \brief Decides whether this number requires parentheses
|
||||
* \brief decides whether this number requires parentheses
|
||||
* in case it appears within a produkt.
|
||||
*/
|
||||
template <class NT>
|
||||
|
|
|
|||
|
|
@ -302,13 +302,13 @@ to_interval( const Real_embeddable& x) {
|
|||
}
|
||||
|
||||
template <typename NT>
|
||||
NT approximate_sqrt(const NT& nt, CGAL::Field_tag)
|
||||
NT approximate_sqrt(const NT& nt, CGAL::Null_functor)
|
||||
{
|
||||
return NT(sqrt(CGAL::to_double(nt)));
|
||||
}
|
||||
|
||||
template <typename NT>
|
||||
NT approximate_sqrt(const NT& nt, CGAL::Field_with_sqrt_tag)
|
||||
template <typename NT, typename Sqrt>
|
||||
NT approximate_sqrt(const NT& nt, Sqrt sqrt)
|
||||
{
|
||||
return sqrt(nt);
|
||||
}
|
||||
|
|
@ -316,9 +316,12 @@ NT approximate_sqrt(const NT& nt, CGAL::Field_with_sqrt_tag)
|
|||
template <typename NT>
|
||||
NT approximate_sqrt(const NT& nt)
|
||||
{
|
||||
// the initial version of this function was using Algebraic_category
|
||||
// for the dispatch but some ring type (like Gmpz) provides a Sqrt
|
||||
// functor even if not being Field_with_sqrt.
|
||||
typedef CGAL::Algebraic_structure_traits<NT> AST;
|
||||
typedef typename AST::Algebraic_category Algebraic_category;
|
||||
return approximate_sqrt(nt, Algebraic_category());
|
||||
typedef typename AST::Sqrt Sqrt;
|
||||
return approximate_sqrt(nt, Sqrt());
|
||||
}
|
||||
|
||||
CGAL_NTS_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -5,23 +5,15 @@ find_package(CGAL REQUIRED COMPONENTS Core)
|
|||
|
||||
find_package(MPFI QUIET)
|
||||
|
||||
if(MPFI_FOUND)
|
||||
|
||||
if(MPFI_FOUND AND NOT CGAL_DISABLE_GMP)
|
||||
include(${CGAL_USE_FILE})
|
||||
include(${MPFI_USE_FILE})
|
||||
include(CGAL_VersionUtils)
|
||||
|
||||
create_single_source_cgal_program("Compare_1.cpp")
|
||||
create_single_source_cgal_program("Construct_algebraic_real_1.cpp")
|
||||
create_single_source_cgal_program("Isolate_1.cpp")
|
||||
create_single_source_cgal_program("Sign_at_1.cpp")
|
||||
create_single_source_cgal_program("Solve_1.cpp")
|
||||
|
||||
else()
|
||||
|
||||
message(
|
||||
STATUS
|
||||
"This program requires the CGAL library and MPFI, and will not be compiled."
|
||||
)
|
||||
|
||||
message(STATUS "This program requires the CGAL, CGAL_Core and MPFI libraries, and will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -180,13 +180,13 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
/*! \brief Refines the isolating interval. */
|
||||
/*! \brief refines the isolating interval. */
|
||||
void refine() const{ this->ptr()->refine(); }
|
||||
|
||||
/*! \brief Bisects the isolating interval. */
|
||||
void bisect() const{ this->ptr()->bisect(); }
|
||||
|
||||
/*! \brief Refines the isolating interval until \a m is outside
|
||||
/*! \brief refines the isolating interval until \a m is outside
|
||||
* the \c closed interval
|
||||
*/
|
||||
template < class NTX >
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* \brief Gives an opportunity to process the nodes after
|
||||
* \brief gives an opportunity to process the nodes after
|
||||
* the subdivision steps are finished
|
||||
*
|
||||
* This method must be specialised by derived classes, but can
|
||||
|
|
@ -386,7 +386,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
/*! \brief Returns whether the \c i th root is definitely a simple root
|
||||
/*! \brief returns whether the \c i th root is definitely a simple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
* Must be specialised by derived class
|
||||
|
|
@ -396,7 +396,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/*! \brief Returns whether the \c i th root is definitely a multiple root
|
||||
/*! \brief returns whether the \c i th root is definitely a multiple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
* Must be specialised by derived class
|
||||
|
|
@ -1040,7 +1040,7 @@ public:
|
|||
}
|
||||
|
||||
|
||||
/*! \brief Returns whether the \c i th root is definitely a simple root
|
||||
/*! \brief returns whether the \c i th root is definitely a simple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
*/
|
||||
|
|
@ -1048,7 +1048,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/*! \brief Returns whether the \c i th root is definitely
|
||||
/*! \brief returns whether the \c i th root is definitely
|
||||
* a multiple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
|
|
@ -1372,7 +1372,7 @@ public:
|
|||
bool is_exact_root(int) const { return false; }
|
||||
|
||||
/*!
|
||||
* \brief Returns true if the <tt>i</tt>th root is known to be a simple
|
||||
* \brief returns true if the <tt>i</tt>th root is known to be a simple
|
||||
* root of the curve.
|
||||
*/
|
||||
bool is_certainly_simple_root(int i) const {
|
||||
|
|
@ -1381,7 +1381,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns true if the <tt>i</tt>th root is known to be a multiple
|
||||
* \brief returns true if the <tt>i</tt>th root is known to be a multiple
|
||||
* root of the curve.
|
||||
*/
|
||||
bool is_certainly_multiple_root(int i) const {
|
||||
|
|
@ -1391,7 +1391,7 @@ public:
|
|||
|
||||
|
||||
/*!
|
||||
* \brief Returns the multiplicity of the root if know, otherwise -1
|
||||
* \brief returns the multiplicity of the root if know, otherwise -1
|
||||
*/
|
||||
int multiplicity_of_root(int i) const {
|
||||
CGAL_assertion(is_isolated());
|
||||
|
|
@ -1407,7 +1407,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns the isolator of the polynomial f(1/x + q), if known
|
||||
* \brief returns the isolator of the polynomial f(1/x + q), if known
|
||||
*/
|
||||
Self inverse_transform_isolator() const {
|
||||
return this->ptr()->inverse_transform_isolator();
|
||||
|
|
|
|||
|
|
@ -707,13 +707,13 @@ public:
|
|||
this->ptr()->node_list_.erase(n);
|
||||
}
|
||||
|
||||
/*! \brief Replace traits class
|
||||
/*! \brief replaces traits class
|
||||
*/
|
||||
void set_traits(TRAITS& traits) {
|
||||
this->ptr()->b_from_p_.set_traits(traits);
|
||||
}
|
||||
|
||||
/*! \brief Returns a copy of this with its own representation
|
||||
/*! \brief returns a copy of this with its own representation
|
||||
*/
|
||||
Self make_unique() const {
|
||||
Self tmp = *this;
|
||||
|
|
|
|||
|
|
@ -1079,7 +1079,7 @@ public:
|
|||
this->ptr()->node_list_.erase(n);
|
||||
}
|
||||
|
||||
/*! \brief Replace traits class
|
||||
/*! \brief replaces traits class
|
||||
*/
|
||||
void set_traits(TRAITS& traits) {
|
||||
|
||||
|
|
@ -1090,7 +1090,7 @@ public:
|
|||
|
||||
}
|
||||
|
||||
/*! \brief Returns a copy of this with its own representation
|
||||
/*! \brief returns a copy of this with its own representation
|
||||
*/
|
||||
Self make_unique() const {
|
||||
Self tmp = *this;
|
||||
|
|
|
|||
|
|
@ -512,7 +512,7 @@ public:
|
|||
private:
|
||||
|
||||
/*
|
||||
* \brief Sets all status lines at events and of intervals
|
||||
* \brief sets all status lines at events and of intervals
|
||||
*
|
||||
* Writes the status lines of events and interval into the object.
|
||||
* The value type of both \c InputIterator1 and \c InputIterator2
|
||||
|
|
@ -571,7 +571,7 @@ private:
|
|||
|
||||
public:
|
||||
|
||||
/*! \brief Returns whether the curve has a valid defining polynomial
|
||||
/*! \brief returns whether the curve has a valid defining polynomial
|
||||
*/
|
||||
bool has_defining_polynomial() const {
|
||||
return bool(this->ptr()->f);
|
||||
|
|
@ -579,7 +579,7 @@ public:
|
|||
|
||||
public:
|
||||
|
||||
/*! \brief Sets the defining polynomial.
|
||||
/*! \brief sets the defining polynomial.
|
||||
*
|
||||
* \pre The object has no defining polynomial yet.
|
||||
*/
|
||||
|
|
@ -595,7 +595,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns whether the curve is y-regular
|
||||
* \brief returns whether the curve is y-regular
|
||||
*
|
||||
* A curve is called y-regular if the leading coefficient of its defining
|
||||
* polynomial wrt y is a constant, i.e., contains no x
|
||||
|
|
@ -646,7 +646,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the number of event lines of the curve
|
||||
* \brief returns the number of event lines of the curve
|
||||
*
|
||||
* Algebraically, the number of real roots of the discriminant of
|
||||
* the curve's defining equation is returned.
|
||||
|
|
@ -664,7 +664,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns whether the given x-coordinate is critical for the curve
|
||||
* \brief returns whether the given x-coordinate is critical for the curve
|
||||
* and which event or interval index the x-coordinate belongs to.
|
||||
*
|
||||
* \param is_event is set to \c true if the curve has an event
|
||||
|
|
@ -734,7 +734,7 @@ public:
|
|||
private:
|
||||
|
||||
/*
|
||||
* \brief Returns a status line for an exact value \c alpha that
|
||||
* \brief returns a status line for an exact value \c alpha that
|
||||
* is not an event of the curve
|
||||
*
|
||||
* This function controls the internal cache that stores already created
|
||||
|
|
@ -1167,7 +1167,7 @@ private:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the status line for the interval
|
||||
* \brief returns the status line for the interval
|
||||
* preceeding the <tt>i</tt>th event
|
||||
*
|
||||
* Returns a status line for a reference x-coordinate of the <tt>i</tt>th
|
||||
|
|
@ -1235,7 +1235,7 @@ public:
|
|||
private:
|
||||
|
||||
/*
|
||||
* \brief Creates an intermediate line at position \c ar.
|
||||
* \brief creates an intermediate line at position \c ar.
|
||||
*
|
||||
* It is required that none of the following situations occurs at position
|
||||
* <tt>ar</tt>: singularity, vertical tangent line, vertical asymptote.\n
|
||||
|
|
@ -1279,7 +1279,7 @@ private:
|
|||
private:
|
||||
|
||||
/*
|
||||
* \brief Returns an Event_line_builder instance
|
||||
* \brief returns an Event_line_builder instance
|
||||
*
|
||||
* Note: So far, a new instance is created each time the function is called
|
||||
*/
|
||||
|
|
@ -1444,7 +1444,7 @@ private:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the <tt>i</tt>th Sturm-Habicht polynomial
|
||||
* \brief returns the <tt>i</tt>th Sturm-Habicht polynomial
|
||||
* of the primitive part of the defining polynomial
|
||||
*/
|
||||
Polynomial_2 sturm_habicht_of_primitive(size_type i) const
|
||||
|
|
@ -1458,7 +1458,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the <tt>i</tt>th principal Sturm-Habicht coefficient
|
||||
* \brief returns the <tt>i</tt>th principal Sturm-Habicht coefficient
|
||||
* of the primitive part of the defining polynomial
|
||||
*/
|
||||
Polynomial_1 principal_sturm_habicht_of_primitive(size_type i) const
|
||||
|
|
@ -1477,7 +1477,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the <tt>i</tt>th coprincipal Sturm-Habicht coefficient
|
||||
* \brief returns the <tt>i</tt>th coprincipal Sturm-Habicht coefficient
|
||||
* of the primitive part of the defining polynomial
|
||||
*
|
||||
* The coprincipal Sturm-Habicht coefficient is the coefficient
|
||||
|
|
@ -1498,7 +1498,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns an iterator to the principal Sturm-Habicht coefficients,
|
||||
* \brief returns an iterator to the principal Sturm-Habicht coefficients,
|
||||
* starting with the <tt>0</tt>th one (the resultant)
|
||||
*/
|
||||
Principal_sturm_habicht_iterator principal_sturm_habicht_begin() const {
|
||||
|
|
@ -1930,7 +1930,7 @@ private:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns a \c Curve_analysis_2 object for a sheared curve.
|
||||
* \brief returns a \c Curve_analysis_2 object for a sheared curve.
|
||||
*
|
||||
* The shear factor is given by the integer \c s.
|
||||
* This functions only shears the primitive part of the defining equation.
|
||||
|
|
@ -2007,7 +2007,7 @@ public:
|
|||
*
|
||||
* For each status line at an event and each status line that represents
|
||||
* an interval, all y-coordinates are approximated such that their
|
||||
* isolating interval has absolute size smaller then \c precision.
|
||||
* isolating interval has absolute size smaller than \c precision.
|
||||
*/
|
||||
void refine_all(Bound precision) {
|
||||
|
||||
|
|
@ -2082,7 +2082,7 @@ public:
|
|||
public:
|
||||
|
||||
/*!
|
||||
* \brief Returns the limit an infinite arc converges to
|
||||
* \brief returns the limit an infinite arc converges to
|
||||
*
|
||||
* \pre <tt>loc==CGAL::LEFT_BOUNDARY ||
|
||||
* loc==CGAL::RIGHT_BOUNDARY</tt>
|
||||
|
|
@ -2399,7 +2399,7 @@ private:
|
|||
}; // class Algebraic_curve_2_2
|
||||
|
||||
|
||||
//! \brief Prints the objects.
|
||||
//! \brief prints the objects.
|
||||
template<typename AlgebraicKernelWithAnalysis_2,
|
||||
typename Rep_>
|
||||
std::ostream& operator<< (
|
||||
|
|
@ -2507,7 +2507,7 @@ std::ostream& operator<< (
|
|||
return out;
|
||||
}
|
||||
|
||||
//! \brief Reads the objects from stream
|
||||
//! \brief reads the objects from stream
|
||||
template<typename AlgebraicKernelWithAnalysis_2,
|
||||
typename Rep_>
|
||||
std::istream& operator>> (
|
||||
|
|
|
|||
|
|
@ -611,7 +611,7 @@ public:
|
|||
public:
|
||||
|
||||
/*
|
||||
* \brief Returns the indices of the <tt>i</tt>th event value
|
||||
* \brief returns the indices of the <tt>i</tt>th event value
|
||||
*
|
||||
* Returns a Event_indices <tt>(fg,ffy,ggy)</tt> such that
|
||||
* the <tt>i</tt>th event root is the <tt>fg</tt>th root of the
|
||||
|
|
@ -963,7 +963,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns the number of event slices
|
||||
* \brief returns the number of event slices
|
||||
*
|
||||
* Precisely, this is the number of points which are either root of
|
||||
* the resultant of the two curves, or root of discriminant of one
|
||||
|
|
@ -1171,7 +1171,7 @@ private:
|
|||
Integer s) const;
|
||||
|
||||
/*
|
||||
* \brief Reduces the number of possible intersections
|
||||
* \brief reduces the number of possible intersections
|
||||
*
|
||||
* At the position given by the event lins \c e1 and \c e2 and the slice
|
||||
* info object \c slice, the points on the event lines are further refined
|
||||
|
|
@ -1197,7 +1197,7 @@ private:
|
|||
|
||||
}; // end of Curve_pair_analysis_2
|
||||
|
||||
//! \brief Prints the objects.
|
||||
//! \brief prints the objects.
|
||||
template<typename AlgebraicKernelWithAnalysis_2>
|
||||
std::ostream& operator<<
|
||||
(std::ostream& out,
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
// they may be wrong now.
|
||||
|
||||
/*! \file NiX/Descartes.h
|
||||
\brief Defines class NiX::Descartes.
|
||||
\brief defines class NiX::Descartes.
|
||||
|
||||
Isolate real roots of polynomials.
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public:
|
|||
|
||||
|
||||
/*!
|
||||
* \brief Creates an event line at position \c alpha for the specified
|
||||
* \brief creates an event line at position \c alpha for the specified
|
||||
* curve.
|
||||
*
|
||||
* Additionally, the \c id of the event line to be created has to be
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ set_union_with_source(InputIterator1 first_begin,
|
|||
}
|
||||
|
||||
/*
|
||||
* \brief Removes the leading term of the polynomial \c f as long as it
|
||||
* \brief removes the leading term of the polynomial \c f as long as it
|
||||
* vanishes at \c alpha
|
||||
*
|
||||
*/
|
||||
|
|
@ -169,7 +169,7 @@ template<typename AlgebraicKernel_1> typename AlgebraicKernel_1::Bound
|
|||
|
||||
|
||||
/*!
|
||||
* \brief Produces intermediate rational values for a list of
|
||||
* \brief produces intermediate rational values for a list of
|
||||
* algebraic reals.
|
||||
*
|
||||
* For a list of Algebraic real values with \c n elements, a list with
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace CGAL {
|
|||
|
||||
namespace internal {
|
||||
|
||||
/*! \brief Tries to find a SIMPLE rational q with a<q<b.
|
||||
/*! \brief tries to find a SIMPLE rational q with a<q<b.
|
||||
*
|
||||
* In this context, simple means that the denominator of <tt>q</tt>
|
||||
* is a power of two, and is not too big. There is no guarantee to find
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace internal {
|
|||
} // namespace internal
|
||||
|
||||
/*!
|
||||
* \brief Represents different strategies how to handle
|
||||
* \brief represents different strategies how to handle
|
||||
* degenerate cases during the analysis
|
||||
*
|
||||
* Currently, there are two possible strategies implemented. See the
|
||||
|
|
|
|||
|
|
@ -34,32 +34,36 @@ include(${CGAL_USE_FILE})
|
|||
# ##########################################################
|
||||
|
||||
create_single_source_cgal_program("cyclic.cpp")
|
||||
create_single_source_cgal_program("Algebraic_curve_kernel_2.cpp")
|
||||
create_single_source_cgal_program("algebraic_curve_kernel_2_tools.cpp")
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_1_LEDA.cpp")
|
||||
create_single_source_cgal_program("Descartes.cpp")
|
||||
if(NOT CGAL_DISABLE_GMP)
|
||||
create_single_source_cgal_program("Algebraic_curve_kernel_2.cpp")
|
||||
create_single_source_cgal_program("algebraic_curve_kernel_2_tools.cpp")
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_1_LEDA.cpp")
|
||||
|
||||
create_single_source_cgal_program(
|
||||
create_single_source_cgal_program(
|
||||
"Algebraic_kernel_d_1_CORE_Integer_rational.cpp")
|
||||
create_single_source_cgal_program(
|
||||
create_single_source_cgal_program(
|
||||
"Algebraic_kernel_d_1_CORE_SqrtII_rational.cpp")
|
||||
create_single_source_cgal_program(
|
||||
create_single_source_cgal_program(
|
||||
"Algebraic_kernel_d_1_CORE_SqrtRI_rational.cpp")
|
||||
create_single_source_cgal_program(
|
||||
create_single_source_cgal_program(
|
||||
"Algebraic_kernel_d_1_CORE_SqrtRR_rational.cpp")
|
||||
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_1_GMP.cpp")
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_2.cpp")
|
||||
create_single_source_cgal_program("Algebraic_real_d_1.cpp")
|
||||
create_single_source_cgal_program("Bitstream_descartes.cpp")
|
||||
create_single_source_cgal_program("Curve_analysis_2.cpp")
|
||||
create_single_source_cgal_program("Curve_pair_analysis_2.cpp")
|
||||
create_single_source_cgal_program("Descartes.cpp")
|
||||
create_single_source_cgal_program("Real_embeddable_traits_extension.cpp")
|
||||
if(RS_FOUND)
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_1_GMP.cpp")
|
||||
create_single_source_cgal_program("Algebraic_kernel_d_2.cpp")
|
||||
create_single_source_cgal_program("Algebraic_real_d_1.cpp")
|
||||
create_single_source_cgal_program("Bitstream_descartes.cpp")
|
||||
create_single_source_cgal_program("Curve_analysis_2.cpp")
|
||||
create_single_source_cgal_program("Curve_pair_analysis_2.cpp")
|
||||
create_single_source_cgal_program("Real_embeddable_traits_extension.cpp")
|
||||
if(RS_FOUND)
|
||||
create_single_source_cgal_program("Algebraic_kernel_rs_gmpq_d_1.cpp")
|
||||
create_single_source_cgal_program("Algebraic_kernel_rs_gmpz_d_1.cpp")
|
||||
else()
|
||||
else()
|
||||
message(
|
||||
STATUS
|
||||
"NOTICE: Some tests require the RS library, and will not be compiled.")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "NOTICE: Some tests require the CGAL_Core library, and will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -30,19 +30,19 @@ namespace CGAL {
|
|||
template <typename RT>
|
||||
Comparison_result
|
||||
compare_x(const CGAL::Root_for_spheres_2_3<RT>& r1, const CGAL::Root_for_spheres_2_3<RT>& r2){
|
||||
return compare(r1.x(), r2.x());
|
||||
return CGAL::compare(r1.x(), r2.x());
|
||||
}
|
||||
|
||||
template <typename RT>
|
||||
Comparison_result
|
||||
compare_y(const CGAL::Root_for_spheres_2_3<RT>& r1, const CGAL::Root_for_spheres_2_3<RT>& r2){
|
||||
return compare(r1.y(), r2.y());
|
||||
return CGAL::compare(r1.y(), r2.y());
|
||||
}
|
||||
|
||||
template <typename RT>
|
||||
Comparison_result
|
||||
compare_z(const CGAL::Root_for_spheres_2_3<RT>& r1, const CGAL::Root_for_spheres_2_3<RT>& r2){
|
||||
return compare(r1.z(), r2.z());
|
||||
return CGAL::compare(r1.z(), r2.z());
|
||||
}
|
||||
|
||||
template <typename RT>
|
||||
|
|
|
|||
|
|
@ -134,9 +134,8 @@ All \cgal kernels are models of both concepts.
|
|||
|
||||
The triangulation data structure of the triangulation
|
||||
has to be a model of the concept `TriangulationDataStructure_2`,
|
||||
and it must be parameterized with
|
||||
vertex and face classes which are models of the concepts
|
||||
`AlphaShapeVertex_2` and `AlphaShapeFace_2`.
|
||||
whose vertex and face classes are models of the concepts
|
||||
`AlphaShapeVertex_2` and `AlphaShapeFace_2`, respectively.
|
||||
The classes `Alpha_shape_vertex_base_2<Gt, Vb>` and `Alpha_shape_face_base_2<Gt, Fb>`
|
||||
are models of these concepts and can be used for all type of alpha shapes,
|
||||
provided that the template parameters `Vb` and `Fb` are appropriately chosen,
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgAlphaShapes2Ref
|
||||
|
||||
\deprecated The class is deprecated since \cgal 4.10, as the weighted point and the function
|
||||
objects for weighted points are part of the concept `Kernel`. The class is kept for backward
|
||||
compatibility.
|
||||
|
||||
The class `Weighted_alpha_shape_euclidean_traits_2` was the default model for the concept
|
||||
`AlphaShapeTraits_2` for the regular version of Alpha Shapes.
|
||||
|
||||
\tparam K must be a model of `Kernel`.
|
||||
|
||||
\cgalModels `AlphaShapeTraits_2`
|
||||
|
||||
*/
|
||||
template< typename K >
|
||||
class Weighted_alpha_shape_euclidean_traits_2
|
||||
: public K
|
||||
{
|
||||
public:
|
||||
|
||||
}; /* end Weighted_alpha_shape_euclidean_traits_2 */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -45,7 +45,7 @@ typedef unspecified_type FT;
|
|||
/*!
|
||||
A default constructor.
|
||||
*/
|
||||
AlphaShapeTraits_2();
|
||||
WeightedAlphaShapeTraits_2();
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,12 +70,12 @@ finite number of different \f$ \alpha\f$-shapes and corresponding
|
|||
|
||||
\cgalCRPSection{Concepts}
|
||||
- `AlphaShapeTraits_2`
|
||||
- `WeightedAlphaShapeTraits_2`
|
||||
- `AlphaShapeFace_2`
|
||||
- `AlphaShapeVertex_2`
|
||||
|
||||
\cgalCRPSection{Classes}
|
||||
- `CGAL::Alpha_shape_2<Dt>`
|
||||
- `CGAL::Weighted_alpha_shape_euclidean_traits_2<K>`
|
||||
- `CGAL::Alpha_shape_vertex_base_2<AlphaShapeTraits_2>`
|
||||
- `CGAL::Alpha_shape_face_base_2<AlphaShapeTraits_2, TriangulationFaceBase_2>`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright (c) 1997 INRIA Sophia-Antipolis (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
//
|
||||
// Author(s) : Tran Kai Frank DA <Frank.Da@sophia.inria.fr>
|
||||
// Andreas Fabri <Andreas.Fabri@geometryfactory.com>
|
||||
|
||||
#ifndef CGAL_ALPHA_SHAPE_EUCLIDEAN_TRAITS_H
|
||||
#define CGAL_ALPHA_SHAPE_EUCLIDEAN_TRAITS_H
|
||||
|
||||
#include <CGAL/license/Alpha_shapes_2.h>
|
||||
|
||||
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
template < class R >
|
||||
class Alpha_shape_euclidean_traits_2 : public R
|
||||
{};
|
||||
|
||||
} //namespace CGAL
|
||||
|
||||
#endif
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
// Copyright (c) 1997 INRIA Sophia-Antipolis (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Tran Kai Frank DA <Frank.Da@sophia.inria.fr>
|
||||
// Andreas Fabri <Andreas.Fabri@geometryfactory.com>
|
||||
|
||||
#ifndef CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_2_H
|
||||
#define CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_2_H
|
||||
|
||||
#include <CGAL/license/Alpha_shapes_2.h>
|
||||
|
||||
#define CGAL_DEPRECATED_HEADER "<CGAL/Weighted_alpha_shape_euclidean_traits_2.h>"
|
||||
#define CGAL_DEPRECATED_MESSAGE_DETAILS \
|
||||
"The kernel K can be used directly as traits since weighted points and "\
|
||||
"the associated function objects are now part of the concept Kernel."
|
||||
#include <CGAL/internal/deprecation_warning.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
template< class K_ >
|
||||
class Weighted_alpha_shape_euclidean_traits_2
|
||||
: public K_
|
||||
{
|
||||
public:
|
||||
Weighted_alpha_shape_euclidean_traits_2() { }
|
||||
Weighted_alpha_shape_euclidean_traits_2(const K_& k) : K_(k) { }
|
||||
};
|
||||
|
||||
} // namespace CGAL
|
||||
|
||||
#endif // CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_2_H
|
||||
|
|
@ -12,14 +12,6 @@ when alpha is given as an int.
|
|||
Alpha_shape_3(Dt& dt, bool swap=true, NT alpha = 0, Mode m = REGULARIZED)
|
||||
The triangulation is swapped if swap=true and copied otherwise.
|
||||
|
||||
- suppress the traits classes Alpha_shape_euclidean_traits_3.h
|
||||
and Weighted_alpha_shape_euclidean_traits_3.h
|
||||
their purpose was to rename the Compute_squared_radius_3 constructor.
|
||||
The same can be achieved in class Alpha_shapes_3 using the Weighted_tag
|
||||
of the triangulation
|
||||
|
||||
- same as previous for Alpha_shapes_2
|
||||
|
||||
- test the taking into account of paramater alpha in functions
|
||||
get_alpha_shape_edges
|
||||
get_alpha_shape_facets
|
||||
|
|
|
|||
|
|
@ -5,18 +5,16 @@
|
|||
|
||||
|
||||
#include <CGAL/Qt/resources.h>
|
||||
#include <CGAL/Qt/init_ogl_context.h>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
QApplication application(argc,argv);
|
||||
CGAL::Qt::init_ogl_context(4,3);
|
||||
|
||||
QApplication application(argc,argv);
|
||||
application.setOrganizationDomain("geometryfactory.com");
|
||||
application.setOrganizationName("GeometryFactory");
|
||||
application.setApplicationName("Alpha Shape Reconstruction");
|
||||
//for Windows
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
|
||||
application.setAttribute(Qt::AA_UseDesktopOpenGL);
|
||||
#endif
|
||||
|
||||
// Import resources from libCGALQt (Qt5).
|
||||
// See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ endif()
|
|||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
|
||||
|
||||
find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Svg)
|
||||
find_package(Qt5 QUIET COMPONENTS Script OpenGL Svg)
|
||||
|
||||
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
|
||||
|
|
|
|||
|
|
@ -29,14 +29,14 @@ void Viewer::compile_shaders()
|
|||
//Vertex source code
|
||||
const char vertex_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"attribute highp vec4 vertex;\n"
|
||||
"attribute highp vec3 normal;\n"
|
||||
"#version 150 \n"
|
||||
"in highp vec4 vertex;\n"
|
||||
"in highp vec3 normal;\n"
|
||||
|
||||
"uniform highp mat4 mvp_matrix;\n"
|
||||
"uniform highp mat4 mv_matrix; \n"
|
||||
"varying highp vec4 fP; \n"
|
||||
"varying highp vec3 fN; \n"
|
||||
"out highp vec4 fP; \n"
|
||||
"out highp vec3 fN; \n"
|
||||
"void main(void)\n"
|
||||
"{\n"
|
||||
" fP = mv_matrix * vertex; \n"
|
||||
|
|
@ -47,15 +47,16 @@ void Viewer::compile_shaders()
|
|||
//Fragment source code
|
||||
const char fragment_source[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"varying highp vec4 fP; \n"
|
||||
"varying highp vec3 fN; \n"
|
||||
"#version 150 \n"
|
||||
"in highp vec4 fP; \n"
|
||||
"in highp vec3 fN; \n"
|
||||
"uniform highp vec4 color; \n"
|
||||
"uniform highp vec4 light_pos; \n"
|
||||
"uniform highp vec4 light_diff; \n"
|
||||
"uniform highp vec4 light_spec; \n"
|
||||
"uniform highp vec4 light_amb; \n"
|
||||
"uniform float spec_power ; \n"
|
||||
"out highp vec4 out_color; \n"
|
||||
|
||||
"void main(void) { \n"
|
||||
|
||||
|
|
@ -70,7 +71,7 @@ void Viewer::compile_shaders()
|
|||
" highp vec4 diffuse = abs(dot(N,L)) * light_diff * color; \n"
|
||||
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
|
||||
|
||||
"gl_FragColor = light_amb*color + diffuse + specular ; \n"
|
||||
"out_color = light_amb*color + diffuse + specular ; \n"
|
||||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
|
|
@ -105,8 +106,8 @@ rendering_program.bind();
|
|||
//Vertex source code
|
||||
const char vertex_source_points[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"attribute highp vec4 vertex;\n"
|
||||
"#version 150 \n"
|
||||
"in highp vec4 vertex;\n"
|
||||
|
||||
"uniform highp mat4 mvp_matrix;\n"
|
||||
"uniform highp float point_size;\n"
|
||||
|
|
@ -119,11 +120,12 @@ const char vertex_source_points[] =
|
|||
//Vertex source code
|
||||
const char fragment_source_points[] =
|
||||
{
|
||||
"#version 120 \n"
|
||||
"#version 150 \n"
|
||||
"uniform highp vec4 color; \n"
|
||||
"out highp vec4 out_color; \n"
|
||||
|
||||
"void main(void) { \n"
|
||||
"gl_FragColor = color; \n"
|
||||
"out_color = color; \n"
|
||||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public:
|
|||
Viewer(QWidget* parent);
|
||||
~Viewer()
|
||||
{
|
||||
makeCurrent();
|
||||
buffers[0].destroy();
|
||||
buffers[1].destroy();
|
||||
buffers[2].destroy();
|
||||
|
|
|
|||
|
|
@ -192,6 +192,10 @@ the vertices, edges, facets and cells of the different types
|
|||
(`EXTERIOR`, `SINGULAR`, `REGULAR` or
|
||||
`INTERIOR`).
|
||||
|
||||
\subsection AlphaShape3DIO Input/Output
|
||||
It is possible to export a 3D alpha shape to a `std::ostream` or to a `Geomview_stream`
|
||||
using the `operator<<`, see the documentation of the class `Alpha_shape_3` for more information.
|
||||
|
||||
\section AlphaShape3D_ConceptAndModels Concepts and Models
|
||||
|
||||
We currently do not specify concepts for the underlying triangulation
|
||||
|
|
@ -215,8 +219,8 @@ in the non-weighted case and `WeightedAlphaShapeTraits_3` in the weighted case.
|
|||
All \cgal kernels are models of both concepts.
|
||||
|
||||
The triangulation data structure of the triangulation
|
||||
has to be a model of the concept `TriangulationDataStructure_3`,
|
||||
and it must be parameterized with vertex and cell classes, which are model of the concepts
|
||||
has to be a model of the concept `TriangulationDataStructure_3`
|
||||
whose vertex and cell classes are model of the concepts
|
||||
`AlphaShapeVertex_3` and `AlphaShapeCell_3`.
|
||||
The classes `Alpha_shape_vertex_base_3<Gt>` and `Alpha_shape_cell_base_3<Gt>`
|
||||
are models of these concepts and can be used for all type of alpha shapes,
|
||||
|
|
@ -230,8 +234,8 @@ the traits class are described in the concepts `FixedAlphaShapeTraits_3`
|
|||
in the non-weighted case and `FixedWeightedAlphaShapeTraits_3` in the weighted case.
|
||||
All \cgal kernels are models of both concepts.
|
||||
The triangulation data structure of the triangulation
|
||||
has to be a model of the concept `TriangulationDataStructure_3`,
|
||||
and it must be parameterized with vertex and cell classes, which are model of the concepts
|
||||
has to be a model of the concept `TriangulationDataStructure_3`
|
||||
whose vertex and cell classes are model of the concepts
|
||||
`FixedAlphaShapeVertex_3` and `FixedAlphaShapeCell_3`.
|
||||
The package provides models `Fixed_alpha_shape_vertex_base_3<Gt>`
|
||||
and `Fixed_alpha_shape_cell_base_3<Gt>`, respectively.
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
// Copyright (c) 1997 INRIA Sophia-Antipolis (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
//
|
||||
// Author(s) : Tran Kai Frank DA <Frank.Da@sophia.inria.fr>
|
||||
|
||||
#ifndef CGAL_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
#define CGAL_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
|
||||
#include <CGAL/license/Alpha_shapes_3.h>
|
||||
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
template <class K>
|
||||
class Alpha_shape_euclidean_traits_3 : public K {};
|
||||
|
||||
|
||||
} //namespace CGAL
|
||||
|
||||
#endif //CGAL_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
|
|
@ -5,21 +5,23 @@
|
|||
// Max-Planck-Institute Saarbruecken (Germany),
|
||||
// and Tel-Aviv University (Israel). All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org)
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Andreas Fabri
|
||||
|
||||
#ifndef CGAL_ALPHA_SHAPE_3_VRML_2_OSTREAM_H
|
||||
#define CGAL_ALPHA_SHAPE_3_VRML_2_OSTREAM_H
|
||||
|
||||
#include <CGAL/basic.h>
|
||||
#include <CGAL/IO/VRML_2_ostream.h>
|
||||
#include <CGAL/license/Alpha_shapes_3.h>
|
||||
|
||||
#include <CGAL/Alpha_shape_3.h>
|
||||
#include <CGAL/IO/VRML/VRML_2_ostream.h>
|
||||
#include <CGAL/number_utils.h>
|
||||
|
||||
#ifdef CGAL_ALPHA_SHAPE_3_H
|
||||
namespace CGAL {
|
||||
|
||||
template <class Dt >
|
||||
|
|
@ -90,6 +92,5 @@ operator<<(VRML_2_ostream& os,
|
|||
}
|
||||
|
||||
} //namespace CGAL
|
||||
#endif // CGAL_ALPHA_SHAPE_3_H
|
||||
|
||||
#endif CGAL_ALPHA_SHAPE_3_VRML_2_OSTREAM_H
|
||||
#endif // CGAL_ALPHA_SHAPE_3_VRML_2_OSTREAM_H
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
// Copyright (c) 1997 INRIA Sophia-Antipolis (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Tran Kai Frank DA <Frank.Da@sophia.inria.fr>
|
||||
|
||||
#ifndef CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
#define CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
|
||||
#include <CGAL/license/Alpha_shapes_3.h>
|
||||
|
||||
#define CGAL_DEPRECATED_HEADER "<CGAL/Weighted_alpha_shape_euclidean_traits_3.h>"
|
||||
#define CGAL_DEPRECATED_MESSAGE_DETAILS \
|
||||
"The kernel K can be used directly as traits since weighted points and "\
|
||||
"the associated function objects are now part of the concept Kernel."
|
||||
#include <CGAL/internal/deprecation_warning.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
template < class K_ >
|
||||
class Weighted_alpha_shape_euclidean_traits_3
|
||||
: public K_
|
||||
{
|
||||
public:
|
||||
Weighted_alpha_shape_euclidean_traits_3() { }
|
||||
Weighted_alpha_shape_euclidean_traits_3(const K_& k) : K_(k) { }
|
||||
};
|
||||
|
||||
} // namespace CGAL
|
||||
|
||||
#endif // CGAL_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
|
||||
|
|
@ -4,7 +4,6 @@ Arithmetic_kernel
|
|||
Cartesian_kernel
|
||||
Circulator
|
||||
Filtered_kernel
|
||||
Geomview
|
||||
Hash_map
|
||||
Homogeneous_kernel
|
||||
Installation
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ two visible circles.
|
|||
|
||||
The 2D Apollonius graph class
|
||||
`Apollonius_graph_2<ApolloniusGraphTraits_2,ApolloniusGraphDataStructure_2>`
|
||||
follows the design of the triangulation package of \cgal. It is
|
||||
follows the design of the triangulation packages of \cgal. It is
|
||||
parametrized by two arguments:
|
||||
<UL>
|
||||
<LI>the <B>geometric traits</B> class. It provides the basic
|
||||
|
|
|
|||
|
|
@ -4,14 +4,20 @@ namespace CGAL {
|
|||
/*!
|
||||
\ingroup PkgApolloniusGraph2Ref
|
||||
|
||||
The class `Apollonius_graph_2` represents the
|
||||
Apollonius graph. It supports insertions and deletions of sites.
|
||||
It is templated by two template arguments `Gt`, which
|
||||
must be a model of `ApolloniusGraphTraits_2`, and `Agds`,
|
||||
which must be a model of `ApolloniusGraphDataStructure_2`.
|
||||
The second template argument defaults to
|
||||
`CGAL::Triangulation_data_structure_2< CGAL::Apollonius_graph_vertex_base_2<Gt,true>, CGAL::Triangulation_face_base_2<Gt> >`.
|
||||
\cgalModels `DelaunayGraph_2`
|
||||
The class `Apollonius_graph_2` represents the Apollonius graph.
|
||||
It supports insertions and deletions of sites.
|
||||
|
||||
\tparam Gt is the geometric traits class and must be a model of `ApolloniusGraphTraits_2`.
|
||||
|
||||
\tparam Agds is the Apollonius graph data structure and must be a model of `ApolloniusGraphDataStructure_2`
|
||||
whose vertex and face must be models of `ApolloniusGraphVertexBase_2` and `TriangulationFaceBase_2`,
|
||||
respectively.
|
||||
It defaults to:
|
||||
\code
|
||||
CGAL::Triangulation_data_structure_2<
|
||||
CGAL::Apollonius_graph_vertex_base_2<Gt,true>,
|
||||
CGAL::Triangulation_face_base_2<Gt> >`
|
||||
\endcode
|
||||
|
||||
\cgalHeading{Traversal of the Apollonius Graph}
|
||||
|
||||
|
|
@ -40,17 +46,11 @@ ag.incident_edges(ag.infinite_vertex());
|
|||
ag.incident_edges(ag.infinite_vertex(), f);
|
||||
\endcode
|
||||
|
||||
\sa `DelaunayGraph_2`
|
||||
\sa `ApolloniusGraphTraits_2`
|
||||
\sa `ApolloniusGraphDataStructure_2`
|
||||
\sa `ApolloniusGraphVertexBase_2`
|
||||
\sa `TriangulationFaceBase_2`
|
||||
\cgalModels `DelaunayGraph_2`
|
||||
|
||||
\sa `CGAL::Apollonius_graph_traits_2<K,Method_tag>`
|
||||
\sa `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
\sa `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
\sa `CGAL::Triangulation_face_base_2<Gt>`
|
||||
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_2<Gt,Agds>`
|
||||
*/
|
||||
template< typename Gt, typename Agds >
|
||||
class Apollonius_graph_2 {
|
||||
|
|
@ -92,7 +92,7 @@ typedef Gt::Site_2 Site_2;
|
|||
|
||||
/// \name Handles And Iterators
|
||||
/// The vertices and faces of the Apollonius graph are accessed
|
||||
/// through `handles`, `iterators` and `circulators`. The iterators
|
||||
/// through `handles`, `iterators`, and `circulators`. The iterators
|
||||
/// and circulators are all bidirectional and non-mutable. The
|
||||
/// circulators and iterators are assignable to the corresponding
|
||||
/// handle types, and they are also convertible to the corresponding
|
||||
|
|
@ -261,63 +261,62 @@ operator=(const Apollonius_graph_2<Gt,Agds>& other);
|
|||
/*!
|
||||
Returns a reference to the Apollonius graph traits object.
|
||||
*/
|
||||
Geom_traits geom_traits();
|
||||
const Geom_traits& geom_traits() const;
|
||||
|
||||
/*!
|
||||
Returns a reference to the
|
||||
underlying data structure.
|
||||
*/
|
||||
Data_structure data_structure();
|
||||
const Data_structure& data_structure() const;
|
||||
|
||||
/*!
|
||||
Same as `data_structure()`. This
|
||||
method has been added in compliance with the `DelaunayGraph_2`
|
||||
concept.
|
||||
*/
|
||||
Data_structure tds();
|
||||
const Data_structure& tds() const;
|
||||
|
||||
/*!
|
||||
Returns the dimension of the Apollonius graph.
|
||||
*/
|
||||
int dimension();
|
||||
int dimension() const;
|
||||
|
||||
/*!
|
||||
Returns the number of finite vertices.
|
||||
*/
|
||||
size_type number_of_vertices();
|
||||
size_type number_of_vertices() const;
|
||||
|
||||
/*!
|
||||
Returns the number of visible sites.
|
||||
*/
|
||||
size_type number_of_visible_sites();
|
||||
size_type number_of_visible_sites() const;
|
||||
|
||||
/*!
|
||||
Returns the number of hidden sites.
|
||||
*/
|
||||
size_type number_of_hidden_sites();
|
||||
size_type number_of_hidden_sites() const;
|
||||
|
||||
/*!
|
||||
Returns the number of faces (both finite and infinite) of the
|
||||
Apollonius graph.
|
||||
*/
|
||||
size_type number_of_faces();
|
||||
size_type number_of_faces() const;
|
||||
|
||||
/*!
|
||||
Returns a face incident to the `infinite_vertex`.
|
||||
*/
|
||||
Face_handle infinite_face();
|
||||
Face_handle infinite_face() const;
|
||||
|
||||
/*!
|
||||
Returns the `infinite_vertex`.
|
||||
*/
|
||||
Vertex_handle
|
||||
infinite_vertex();
|
||||
Vertex_handle infinite_vertex() const;
|
||||
|
||||
/*!
|
||||
Returns a vertex distinct from the `infinite_vertex`.
|
||||
\pre The number of (visible) vertices in the Apollonius graph must be at least one.
|
||||
*/
|
||||
Vertex_handle finite_vertex();
|
||||
Vertex_handle finite_vertex() const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -337,63 +336,62 @@ Vertex_handle finite_vertex();
|
|||
/*!
|
||||
Starts at an arbitrary finite vertex.
|
||||
*/
|
||||
Finite_vertices_iterator finite_vertices_begin();
|
||||
Finite_vertices_iterator finite_vertices_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Finite_vertices_iterator finite_vertices_end();
|
||||
Finite_vertices_iterator finite_vertices_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary finite edge.
|
||||
*/
|
||||
Finite_edges_iterator finite_edges_begin();
|
||||
Finite_edges_iterator finite_edges_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Finite_edges_iterator finite_edges_end();
|
||||
Finite_edges_iterator finite_edges_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary finite face.
|
||||
*/
|
||||
Finite_faces_iterator finite_faces_begin();
|
||||
Finite_faces_iterator finite_faces_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Finite_faces_iterator finite_faces_end()
|
||||
const;
|
||||
Finite_faces_iterator finite_faces_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary vertex.
|
||||
*/
|
||||
All_vertices_iterator all_vertices_begin();
|
||||
All_vertices_iterator all_vertices_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
All_vertices_iterator all_vertices_end();
|
||||
All_vertices_iterator all_vertices_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary edge.
|
||||
*/
|
||||
All_edges_iterator all_edges_begin();
|
||||
All_edges_iterator all_edges_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
All_edges_iterator all_edges_end();
|
||||
All_edges_iterator all_edges_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary face.
|
||||
*/
|
||||
All_faces_iterator all_faces_begin();
|
||||
All_faces_iterator all_faces_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
All_faces_iterator all_faces_end();
|
||||
All_faces_iterator all_faces_end() const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -407,32 +405,32 @@ All_faces_iterator all_faces_end();
|
|||
/*!
|
||||
Starts at an arbitrary site.
|
||||
*/
|
||||
Sites_iterator sites_begin();
|
||||
Sites_iterator sites_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Sites_iterator sites_end();
|
||||
Sites_iterator sites_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary visible site.
|
||||
*/
|
||||
Visible_sites_iterator visible_sites_begin();
|
||||
Visible_sites_iterator visible_sites_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Visible_sites_iterator visible_sites_end();
|
||||
Visible_sites_iterator visible_sites_end() const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary hidden site.
|
||||
*/
|
||||
Hidden_sites_iterator hidden_sites_begin();
|
||||
Hidden_sites_iterator hidden_sites_begin() const;
|
||||
|
||||
/*!
|
||||
Past-the-end iterator.
|
||||
*/
|
||||
Hidden_sites_iterator hidden_sites_end();
|
||||
Hidden_sites_iterator hidden_sites_end() const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -454,39 +452,39 @@ Hidden_sites_iterator hidden_sites_end();
|
|||
Starts at an arbitrary face incident
|
||||
to `v`.
|
||||
*/
|
||||
Face_circulator incident_faces(Vertex_handle v);
|
||||
Face_circulator incident_faces(Vertex_handle v) const;
|
||||
|
||||
/*!
|
||||
Starts at face `f`.
|
||||
\pre Face `f` is incident to vertex `v`.
|
||||
*/
|
||||
Face_circulator incident_faces(Vertex_handle v, Face_handle f);
|
||||
Face_circulator incident_faces(Vertex_handle v, Face_handle f) const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary edge incident
|
||||
to `v`.
|
||||
*/
|
||||
Edge_circulator incident_edges(Vertex_handle v);
|
||||
Edge_circulator incident_edges(Vertex_handle v) const;
|
||||
|
||||
/*!
|
||||
Starts at the first edge of `f` incident to
|
||||
`v`, in counterclockwise order around `v`.
|
||||
\pre Face `f` is incident to vertex `v`.
|
||||
*/
|
||||
Edge_circulator incident_edges(Vertex_handle v, Face_handle f);
|
||||
Edge_circulator incident_edges(Vertex_handle v, Face_handle f) const;
|
||||
|
||||
/*!
|
||||
Starts at an arbitrary vertex incident
|
||||
to `v`.
|
||||
*/
|
||||
Vertex_circulator incident_vertices(Vertex_handle v);
|
||||
Vertex_circulator incident_vertices(Vertex_handle v) const;
|
||||
|
||||
/*!
|
||||
Starts at the first vertex of `f` adjacent to `v`
|
||||
in counterclockwise order around `v`.
|
||||
\pre Face `f` is incident to vertex `v`.
|
||||
*/
|
||||
Vertex_circulator incident_vertices(Vertex_handle v, Face_handle f);
|
||||
Vertex_circulator incident_vertices(Vertex_handle v, Face_handle f) const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -516,7 +514,7 @@ bool is_infinite(Face_handle f, int i) const;
|
|||
`true`, iff edge `e` is infinite.
|
||||
*/
|
||||
bool
|
||||
is_infinite(Edge e) const;
|
||||
is_infinite(const Edge& e) const;
|
||||
|
||||
/*!
|
||||
`true`, iff edge `*ec` is infinite.
|
||||
|
|
@ -544,7 +542,7 @@ site `s` in the Apollonius graph. If `s` is visible then the
|
|||
vertex handle of `s` is returned, otherwise
|
||||
`Vertex_handle(nullptr)` is returned.
|
||||
*/
|
||||
Vertex_handle insert(Site_2 s);
|
||||
Vertex_handle insert(const Site_2& s);
|
||||
|
||||
/*!
|
||||
Inserts `s` in the Apollonius graph using the site
|
||||
|
|
@ -553,8 +551,7 @@ the center of `s`. If `s` is visible then the vertex handle of
|
|||
`s` is returned, otherwise `Vertex_handle(nullptr)` is
|
||||
returned.
|
||||
*/
|
||||
Vertex_handle insert(Site_2 s, Vertex_handle
|
||||
vnear);
|
||||
Vertex_handle insert(const Site_2& s, Vertex_handle vnear);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -581,7 +578,7 @@ arbitrarily and one of the nearest neighbors of `p` is
|
|||
returned. If there are no visible sites in the Apollonius diagram
|
||||
`Vertex_handle(nullptr)` is returned.
|
||||
*/
|
||||
Vertex_handle nearest_neighbor(Point_2 p);
|
||||
Vertex_handle nearest_neighbor(const Point_2& p) const;
|
||||
|
||||
/*!
|
||||
Finds the nearest neighbor of the point
|
||||
|
|
@ -591,8 +588,7 @@ arbitrarily and one of the nearest neighbors of `p` is
|
|||
returned. If there are no visible sites in the Apollonius diagram
|
||||
`Vertex_handle(nullptr)` is returned.
|
||||
*/
|
||||
Vertex_handle nearest_neighbor(Point_2 p,
|
||||
Vertex_handle vnear);
|
||||
Vertex_handle nearest_neighbor(const Point_2& p, Vertex_handle vnear) const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -645,7 +641,7 @@ the stream `str`.
|
|||
|
||||
*/
|
||||
template< class Stream >
|
||||
Stream& draw_primal(Stream& str);
|
||||
Stream& draw_primal(Stream& str) const;
|
||||
|
||||
/*!
|
||||
Draws the dual of the
|
||||
|
|
@ -658,7 +654,7 @@ Apollonius graph, i.e., the Apollonius diagram, to the stream
|
|||
|
||||
*/
|
||||
template < class Stream >
|
||||
Stream& draw_dual(Stream& str);
|
||||
Stream& draw_dual(Stream& str) const;
|
||||
|
||||
/*!
|
||||
Draws the edge
|
||||
|
|
@ -669,7 +665,7 @@ Draws the edge
|
|||
|
||||
*/
|
||||
template< class Stream >
|
||||
Stream& draw_primal_edge(Edge e, Stream& str);
|
||||
Stream& draw_primal_edge(const Edge& e, Stream& str) const;
|
||||
|
||||
/*!
|
||||
Draws the dual of the
|
||||
|
|
@ -682,7 +678,7 @@ of the Apollonius diagram.
|
|||
|
||||
*/
|
||||
template< class Stream >
|
||||
Stream& draw_dual_edge(Edge e, Stream& str);
|
||||
Stream& draw_dual_edge(const Edge& e, Stream& str) const;
|
||||
|
||||
/*!
|
||||
Writes the current
|
||||
|
|
@ -690,7 +686,7 @@ state of the Apollonius graph to an output stream. In particular,
|
|||
all visible and hidden sites are written as well as the
|
||||
underlying combinatorial data structure.
|
||||
*/
|
||||
void file_output(std::ostream& os);
|
||||
void file_output(std::ostream& os) const;
|
||||
|
||||
/*!
|
||||
Reads the state of the
|
||||
|
|
@ -701,14 +697,12 @@ void file_input(std::istream& is);
|
|||
/*!
|
||||
Writes the current state of the Apollonius graph to an output stream.
|
||||
*/
|
||||
std::ostream& operator<<(std::ostream& os,
|
||||
Apollonius_graph_2<Gt,Agds> ag);
|
||||
std::ostream& operator<<(std::ostream& os, const Apollonius_graph_2<Gt,Agds>& ag) const;
|
||||
|
||||
/*!
|
||||
Reads the state of the Apollonius graph from an input stream.
|
||||
*/
|
||||
std::istream& operator>>(std::istream& is,
|
||||
Apollonius_graph_2<Gt,Agds> ag);
|
||||
std::istream& operator>>(std::istream& is, const Apollonius_graph_2<Gt,Agds>& ag);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -721,9 +715,9 @@ Checks the validity of the Apollonius graph. If `verbose` is
|
|||
is 0, only the data structure is validated. If `level` is 1, then
|
||||
both the data structure and the Apollonius graph are
|
||||
validated. Negative values of `level` always return true, and
|
||||
values greater then 1 are equivalent to `level` being 1.
|
||||
values greater than 1 are equivalent to `level` being 1.
|
||||
*/
|
||||
bool is_valid(bool verbose = false, int level = 1);
|
||||
bool is_valid(bool verbose = false, int level = 1) const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -737,12 +731,11 @@ void clear();
|
|||
|
||||
/*!
|
||||
The Apollonius graphs
|
||||
`other` and `ag` are swapped. `ag`.`swap(other)` should
|
||||
be preferred to `ag`` = other` or to `ag``(other)` if
|
||||
`other` and `ag` are swapped. `ag.swap(other)` should
|
||||
be preferred to `ag = other` or to `ag(other)` if
|
||||
`other` is deleted afterwards.
|
||||
*/
|
||||
void swap(Apollonius_graph_2<Gt,Agds>
|
||||
other);
|
||||
void swap(Apollonius_graph_2<Gt,Agds>& other);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,36 +19,34 @@ find the nearest neighbor of \f$ p\f$ as in the
|
|||
we use the nearest neighbor found at level \f$ i+1\f$ to find the nearest
|
||||
neighbor at level \f$ i\f$. This is a variant of the corresponding
|
||||
hierarchy for points found in \cgalCite{d-iirdt-98}.
|
||||
|
||||
The class has two template parameters which have essentially the same
|
||||
meaning as in the `Apollonius_graph_2<Gt,Agds>` class. The first
|
||||
template parameter must be a model of the
|
||||
`ApolloniusGraphTraits_2` concept.
|
||||
The second template parameter must be a model of the
|
||||
`ApolloniusGraphDataStructure_2` concept. However, the vertex base
|
||||
class that is to be used in the Apollonius graph data structure must
|
||||
be a model of the `ApolloniusGraphHierarchyVertexBase_2` concept.
|
||||
The second template parameter defaults to
|
||||
`Triangulation_data_structure_2< Apollonius_graph_hierarchy_vertex_base_2< Apollonius_graph_vertex_base_2<Gt,true> >, Triangulation_face_base_2<Gt> >`.
|
||||
meaning as in the `Apollonius_graph_2<Gt,Agds>` class.
|
||||
|
||||
\tparam Gt is the geometric traits class and must be a model of `ApolloniusGraphTraits_2`.
|
||||
|
||||
\tparam Agds is the Apollonius graph data structure and must be a model of `ApolloniusGraphDataStructure_2`
|
||||
whose vertex and face must be models of `ApolloniusGraphHierarchyVertexBase_2` and `TriangulationFaceBase_2`, respectively.
|
||||
It defaults to:
|
||||
\code
|
||||
CGAL::Triangulation_data_structure_2<
|
||||
CGAL::Apollonius_graph_hierarchy_vertex_base_2<CGAL::Apollonius_graph_vertex_base_2<Gt,true> >,
|
||||
CGAL::Triangulation_face_base_2<Gt> >
|
||||
\endcode
|
||||
|
||||
\cgalHeading{Heritage}
|
||||
|
||||
The `Apollonius_graph_hierarchy_2` class derives publicly from the
|
||||
`Apollonius_graph_2<Gt,Agds>` class. The interface is
|
||||
the same with its base class. In the sequel only the methods
|
||||
overridden are documented.
|
||||
|
||||
\cgalHeading{Types}
|
||||
|
||||
`Apollonius_graph_hierarchy_2` does not introduce other types than those introduced by
|
||||
its base class `Apollonius_graph_2<Gt,Agds>`.
|
||||
|
||||
\sa `ApolloniusGraphDataStructure_2`
|
||||
\sa `ApolloniusGraphTraits_2`
|
||||
\sa `ApolloniusGraphHierarchyVertexBase_2`
|
||||
\sa `CGAL::Apollonius_graph_2<Gt,Agds>`
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
\sa `CGAL::Apollonius_graph_traits_2<K,Method_tag>`
|
||||
\sa `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_vertex_base_2<Agvb>`
|
||||
|
||||
*/
|
||||
template< typename Gt, typename Agds >
|
||||
class Apollonius_graph_hierarchy_2 : public CGAL::Apollonius_graph_2<Gt,Agds> {
|
||||
|
|
@ -61,8 +59,7 @@ public:
|
|||
Creates an hierarchy of Apollonius graphs using `gt` as
|
||||
geometric traits.
|
||||
*/
|
||||
Apollonius_graph_hierarchy_2(Gt
|
||||
gt=Gt());
|
||||
Apollonius_graph_hierarchy_2(Gt gt=Gt());
|
||||
|
||||
/*!
|
||||
Creates an Apollonius graph hierarchy using
|
||||
|
|
@ -70,17 +67,15 @@ Creates an Apollonius graph hierarchy using
|
|||
range [`first`, `beyond`).
|
||||
*/
|
||||
template< class Input_iterator >
|
||||
Apollonius_graph_hierarchy_2<Gt,Agds>(Input_iterator
|
||||
first, Input_iterator beyond, Gt gt=Gt());
|
||||
Apollonius_graph_hierarchy_2(Input_iterator first, Input_iterator beyond, Gt gt=Gt());
|
||||
|
||||
/*!
|
||||
Copy constructor. All faces, vertices and inter-level pointers
|
||||
Copy constructor. All faces, vertices, and inter-level pointers
|
||||
are duplicated. After the construction, `agh` and `other` refer
|
||||
to two different Apollonius graph hierarchies: if
|
||||
`other` is modified, `agh` is not.
|
||||
*/
|
||||
Apollonius_graph_hierarchy_2<Gt,Agds>
|
||||
(Apollonius_graph_hierarchy_2<Gt,Agds> other);
|
||||
Apollonius_graph_hierarchy_2(const Apollonius_graph_hierarchy_2<Gt,Agds>& other);
|
||||
|
||||
/*!
|
||||
Assignment. All faces, vertices and inter-level pointers
|
||||
|
|
@ -112,7 +107,7 @@ site `s` in the Apollonius graph hierarchy. If `s`
|
|||
is visible then the vertex handle of `s` is returned, otherwise
|
||||
`Vertex_handle(nullptr)` is returned.
|
||||
*/
|
||||
Vertex_handle insert(Site_2 s);
|
||||
Vertex_handle insert(const Site_2& s);
|
||||
|
||||
/*!
|
||||
Inserts `s` in the Apollonius graph hierarchy using the
|
||||
|
|
@ -124,8 +119,7 @@ A call to this method is equivalent to `agh.insert(s);` and it has
|
|||
been added for the sake of conformity with the interface of the
|
||||
`Apollonius_graph_2<Gt,Agds>` class.
|
||||
*/
|
||||
Vertex_handle insert(Site_2 s, Vertex_handle
|
||||
vnear);
|
||||
Vertex_handle insert(const Site_2& s, Vertex_handle vnear);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -152,7 +146,7 @@ arbitrarily and one of the nearest neighbors of `p` is
|
|||
returned. If there are no visible sites in the Apollonius diagram
|
||||
`Vertex_handle(nullptr)` is returned.
|
||||
*/
|
||||
Vertex_handle nearest_neighbor(Point p);
|
||||
Vertex_handle nearest_neighbor(const Point_2& p) const;
|
||||
|
||||
/*!
|
||||
Finds the nearest neighbor of the point
|
||||
|
|
@ -163,8 +157,7 @@ A call to this method is equivalent to
|
|||
conformity with the interface of the
|
||||
`Apollonius_graph_2<Gt,Agds>` class.
|
||||
*/
|
||||
Vertex_handle nearest_neighbor(Point p,
|
||||
Vertex_handle vnear);
|
||||
Vertex_handle nearest_neighbor(const Point_2& p, Vertex_handle vnear) const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -177,7 +170,7 @@ state of the Apollonius graph hierarchy to an output stream. In particular,
|
|||
all visible and hidden sites are written as well as the
|
||||
underlying combinatorial hierarchical data structure.
|
||||
*/
|
||||
void file_output(std::ostream& os);
|
||||
void file_output(std::ostream& os) const;
|
||||
|
||||
/*!
|
||||
Reads the state of the
|
||||
|
|
@ -189,7 +182,7 @@ void file_input(std::istream& is);
|
|||
Writes the current state of the Apollonius graph hierarchy to an
|
||||
output stream.
|
||||
*/
|
||||
std::ostream& operator<<(std::ostream& os, Apollonius_graph_hierarchy_2<Gt,Agds> agh);
|
||||
std::ostream& operator<<(std::ostream& os, Apollonius_graph_hierarchy_2<Gt,Agds> agh) const;
|
||||
|
||||
/*!
|
||||
Reads the state of the Apollonius graph hierarchy from an input stream.
|
||||
|
|
@ -209,7 +202,7 @@ is validated, as well as the inter-level pointers. If `level` is
|
|||
1, then the data structure at all levels is validated, the inter-level
|
||||
pointers are validated and all levels of the Apollonius graph
|
||||
hierarchy are also validated. Negative values of `level` always
|
||||
return `true`, and values greater then 1 are equivalent to
|
||||
return `true`, and values greater than 1 are equivalent to
|
||||
`level` being 1.
|
||||
*/
|
||||
bool is_valid(bool verbose = false, int level = 1) const;
|
||||
|
|
@ -227,11 +220,10 @@ void clear();
|
|||
|
||||
/*!
|
||||
The Apollonius graph hierarchies `other` and `agh` are
|
||||
swapped. `agh`.`swap(other)` should be preferred to `agh`` =
|
||||
other` or to `agh``(other)` if `other` is deleted afterwards.
|
||||
swapped. `agh.swap(other)` should be preferred to `agh = other`
|
||||
or to `agh(other)` if `other` is deleted afterwards.
|
||||
*/
|
||||
void swap(Apollonius_graph_hierarchy_2<Gt,Agds>
|
||||
other);
|
||||
void swap(Apollonius_graph_hierarchy_2<Gt,Agds>& other);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,10 +13,9 @@ of the `ApolloniusGraphVertexBase_2` concept.
|
|||
|
||||
\cgalModels `ApolloniusGraphHierarchyVertexBase_2`
|
||||
|
||||
\sa `ApolloniusGraphVertexBase_2`
|
||||
\sa `ApolloniusGraphHierarchyVertexBase_2`
|
||||
\sa `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_2<Gt,Agds>`
|
||||
*/
|
||||
template< typename Agvb >
|
||||
class Apollonius_graph_hierarchy_vertex_base_2 : Agvb {
|
||||
|
|
@ -34,7 +33,7 @@ Apollonius_graph_hierarchy_vertex_base_2();
|
|||
Constructs a vertex associated with the site `s` and
|
||||
embedded at the center of `s`.
|
||||
*/
|
||||
Apollonius_graph_hierarchy_vertex_base_2(Site_2 s);
|
||||
Apollonius_graph_hierarchy_vertex_base_2(const Site_2& s);
|
||||
|
||||
/*!
|
||||
Constructs a vertex associated with
|
||||
|
|
@ -42,7 +41,7 @@ the site `s`, embedded at the center of `s`,
|
|||
and pointing to the face associated with the face
|
||||
handle `f`.
|
||||
*/
|
||||
Apollonius_graph_vertex_base_2(Site_2 s, Face_handle f);
|
||||
Apollonius_graph_hierarchy_vertex_base_2(const Site_2& s, Face_handle f);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,13 +22,8 @@ The way the predicates are evaluated is discussed in
|
|||
|
||||
\cgalModels `ApolloniusGraphTraits_2`
|
||||
|
||||
\sa `Kernel`
|
||||
\sa `ApolloniusGraphTraits_2`
|
||||
\sa `CGAL::Integral_domain_without_division_tag`
|
||||
\sa `CGAL::Field_with_sqrt_tag`
|
||||
\sa `CGAL::Apollonius_graph_2<Gt,Agds>`
|
||||
\sa `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
|
||||
*/
|
||||
template< typename K, typename Method_tag >
|
||||
class Apollonius_graph_traits_2 {
|
||||
|
|
@ -45,14 +40,13 @@ Apollonius_graph_traits_2<K,Method_tag>();
|
|||
/*!
|
||||
Copy constructor.
|
||||
*/
|
||||
Apollonius_graph_traits_2<K,Method_tag>(Apollonius_graph_traits_2<K,Method_tag> other);
|
||||
Apollonius_graph_traits_2<K,Method_tag>(const Apollonius_graph_traits_2<K,Method_tag>& other);
|
||||
|
||||
/*!
|
||||
Assignment operator.
|
||||
*/
|
||||
Apollonius_graph_traits_2<K,Method_tag>
|
||||
operator=(Apollonius_graph_traits_2<K,Method_tag>
|
||||
other);
|
||||
operator=(const Apollonius_graph_traits_2<K,Method_tag>& other);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,13 +19,8 @@ discarded. By default `StoreHidden` is set to `true`.
|
|||
|
||||
\cgalModels `ApolloniusGraphVertexBase_2`
|
||||
|
||||
\sa `ApolloniusGraphVertexBase_2`
|
||||
\sa `ApolloniusGraphDataStructure_2`
|
||||
\sa `ApolloniusGraphTraits_2`
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
\sa `CGAL::Apollonius_graph_traits_2<K,Method_tag>`
|
||||
\sa `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_vertex_base_2<Gt>`
|
||||
*/
|
||||
template< typename Gt, typename StoreHidden >
|
||||
class Apollonius_graph_vertex_base_2 {
|
||||
|
|
@ -37,13 +32,13 @@ public:
|
|||
/*!
|
||||
%Default constructor.
|
||||
*/
|
||||
Apollonius_graph_bertex_base_2();
|
||||
Apollonius_graph_vertex_base_2();
|
||||
|
||||
/*!
|
||||
Constructs a vertex associated with the site `s` and
|
||||
embedded at the center of `s`.
|
||||
*/
|
||||
Apollonius_graph_vertex_base_2(Site_2 s);
|
||||
Apollonius_graph_vertex_base_2(const Site_2& s);
|
||||
|
||||
/*!
|
||||
Constructs a vertex associated with
|
||||
|
|
@ -51,7 +46,7 @@ the site `s`, embedded at the center of `s`,
|
|||
and pointing to the face associated with the face
|
||||
handle `f`.
|
||||
*/
|
||||
Apollonius_graph_vertex_base_2(Site_2 s, Face_handle f);
|
||||
Apollonius_graph_vertex_base_2(const Site_2& s, Face_handle f);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,12 +22,9 @@ The I/O operators are defined for `iostream`.
|
|||
The information output in the `iostream` is: the point of the
|
||||
Apollonius site and its weight.
|
||||
|
||||
\sa `Kernel`
|
||||
\sa `ApolloniusSite_2`
|
||||
\sa `CGAL::Qt_widget`
|
||||
\sa `CGAL::Apollonius_graph_traits_2<K,Method_tag>`
|
||||
\sa `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
|
||||
*/
|
||||
template< typename K >
|
||||
class Apollonius_site_2 {
|
||||
|
|
@ -44,7 +41,7 @@ Apollonius_site_2(Point_2 p=Point_2(), Weight w= Weight(0));
|
|||
/*!
|
||||
Copy constructor.
|
||||
*/
|
||||
Apollonius_site_2(Apollonius_site_2<K> other);
|
||||
Apollonius_site_2(const Apollonius_site_2<K>& other);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -57,8 +54,7 @@ Apollonius site `s` into the stream `os`.
|
|||
\pre The insert operator must be defined for `Point_2` and `Weight`.
|
||||
\relates Apollonius_site_2
|
||||
*/
|
||||
std::ostream& operator<<(std::ostream& os,
|
||||
const Apollonius_site_2<K>& s);
|
||||
std::ostream& operator<<(std::ostream& os, const Apollonius_site_2<K>& s) const;
|
||||
|
||||
/*!
|
||||
Reads an Apollonius site from the stream `is` and assigns it
|
||||
|
|
@ -67,8 +63,7 @@ to `s`.
|
|||
\pre The extract operator must be defined for `Point_2` and `Weight`.
|
||||
\relates Apollonius_site_2
|
||||
*/
|
||||
std::istream& operator>>(std::istream& is,
|
||||
const Apollonius_site_2<K>& s);
|
||||
std::istream& operator>>(std::istream& is, const Apollonius_site_2<K>& s);
|
||||
|
||||
/*!
|
||||
Inserts the Apollonius site `s` into the `Qt_widget` stream `w`.
|
||||
|
|
@ -76,7 +71,6 @@ Inserts the Apollonius site `s` into the `Qt_widget` stream `w`.
|
|||
\pre The insert operator must be defined for `K::Circle_2`.
|
||||
\relates Apollonius_site_2
|
||||
*/
|
||||
Qt_widget& operator<<(Qt_widget& w,
|
||||
const Apollonius_site_2<K>& s);
|
||||
Qt_widget& operator<<(Qt_widget& w, const Apollonius_site_2<K>& s) const;
|
||||
|
||||
} /* end namespace CGAL */
|
||||
|
|
|
|||
|
|
@ -42,10 +42,10 @@ public:
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Inserts
|
||||
a degree two vertex and two faces adjacent to it that have two common
|
||||
edges. The edge defined by the face handle `f` and the integer
|
||||
`i` is duplicated. It returns a handle to the vertex created.
|
||||
inserts a degree two vertex and two faces adjacent to it that have two common edges.
|
||||
|
||||
The edge defined by the face handle `f` and the integer `i` is duplicated. It returns a handle
|
||||
to the vertex created.
|
||||
*/
|
||||
Vertex_handle insert_degree_2(Face_handle f, int i);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,17 +19,12 @@ next and previous level graphs.
|
|||
`ApolloniusGraphHierarchyVertexBase_2` does not introduce any
|
||||
types in addition to those of `ApolloniusGraphVertexBase_2`.
|
||||
|
||||
\cgalHasModel CGAL::Apollonius_graph_hierarchy_vertex_base_2<CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden> >
|
||||
\cgalHasModel `CGAL::Apollonius_graph_hierarchy_vertex_base_2<CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden> >`
|
||||
|
||||
\sa `ApolloniusGraphDataStructure_2`
|
||||
\sa `ApolloniusGraphVertexBase_2`
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_2<Gt,Agds>`
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
\sa `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
\sa `CGAL::Apollonius_graph_hierarchy_vertex_base_2<Agvb>`
|
||||
|
||||
*/
|
||||
|
||||
class ApolloniusGraphHierarchyVertexBase_2 {
|
||||
public:
|
||||
|
||||
|
|
@ -37,8 +32,7 @@ public:
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Default
|
||||
constructor.
|
||||
%Default constructor.
|
||||
*/
|
||||
ApolloniusGraphHierarchyVertexBase_2();
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
\ingroup PkgApolloniusGraph2Concepts
|
||||
\cgalConcept
|
||||
|
||||
\cgalRefines `TriangulationVertexBase_2`
|
||||
|
||||
The concept `ApolloniusGraphVertexBase_2` describes the
|
||||
requirements for the vertex base class of the
|
||||
`ApolloniusGraphDataStructure_2` concept. A vertex stores an
|
||||
|
|
@ -12,14 +10,14 @@ Apollonius site and provides access to one of its incident faces
|
|||
through a `Face_handle`. In addition, it maintains a container of
|
||||
sites. The container stores the hidden sites related to the vertex.
|
||||
|
||||
\cgalRefines `TriangulationVertexBase_2`
|
||||
|
||||
\cgalHasModel `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
|
||||
\sa `ApolloniusGraphDataStructure_2`
|
||||
\sa `ApolloniusGraphTraits_2`
|
||||
\sa `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
|
||||
\sa `CGAL::Apollonius_graph_2<Gt,Agds>`
|
||||
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
|
||||
*/
|
||||
|
||||
class ApolloniusGraphVertexBase_2 {
|
||||
public:
|
||||
|
||||
|
|
@ -77,7 +75,7 @@ typedef unspecified_type Hidden_sites_iterator;
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Default constructor.
|
||||
%Default constructor.
|
||||
*/
|
||||
ApolloniusGraphVertexBase_2();
|
||||
|
||||
|
|
|
|||
|
|
@ -43,18 +43,18 @@ aforementioned concepts.
|
|||
\cgalCRPSection{Concepts}
|
||||
|
||||
- `ApolloniusSite_2`
|
||||
- `ApolloniusGraphTraits_2`
|
||||
- `ApolloniusGraphDataStructure_2`
|
||||
- `ApolloniusGraphVertexBase_2`
|
||||
- `ApolloniusGraphTraits_2`
|
||||
- `ApolloniusGraphHierarchyVertexBase_2`
|
||||
|
||||
\cgalCRPSection{Classes}
|
||||
|
||||
- `CGAL::Apollonius_graph_2<Gt,Agds>`
|
||||
- `CGAL::Apollonius_site_2<K>`
|
||||
- `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
- `CGAL::Apollonius_graph_traits_2<K,Method_tag>`
|
||||
- `CGAL::Apollonius_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
|
||||
- `CGAL::Apollonius_graph_vertex_base_2<Gt,StoreHidden>`
|
||||
- `CGAL::Apollonius_graph_hierarchy_2<Gt,Agds>`
|
||||
- `CGAL::Apollonius_graph_hierarchy_vertex_base_2<Agvb>`
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
// Author(s) : Oren Salzman <orenzalz@post.tau.ac.il >
|
||||
// Michael Hemmer <Michael.Hemmer@sophia.inria.fr>
|
||||
|
||||
//TODO: somehow use the fact the the x-value is the same in all comparisons
|
||||
//TODO: somehow use the fact the x-value is the same in all comparisons
|
||||
|
||||
#ifndef CGAL_ARR_VERTICAL_SEGMENT_TRAITS
|
||||
#define CGAL_ARR_VERTICAL_SEGMENT_TRAITS
|
||||
|
|
|
|||
|
|
@ -3,9 +3,6 @@
|
|||
cmake_minimum_required(VERSION 3.1...3.15)
|
||||
project(Arrangement_on_surface_2_Demo)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
# Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning.
|
||||
cmake_policy(SET CMP0053 OLD)
|
||||
|
|
@ -23,6 +20,8 @@ if (CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
add_compile_definitions(QT_NO_KEYWORDS)
|
||||
include_directories( BEFORE ./ )
|
||||
|
||||
# Arrangement package includes
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
option(COMPILE_UTILS_INCREMENTALLY
|
||||
"Compile files in Utils directory incrementally, or compile them all as a unit. \
|
||||
Incremental compilation will be better for development and consume less \
|
||||
|
|
|
|||
|
|
@ -34,11 +34,11 @@ conveniently embedded as a planar graph, whose vertices are associated
|
|||
with curve endpoints or with isolated points, and whose edges are
|
||||
associated with subcurves. It is easy to see that
|
||||
\f$ \cal A(\cal C) = \cal A(\cal C'')\f$. This graph can be represented using a
|
||||
<I>doubly-connected edge list</I> data-structure (\sc{Dcel} for short),
|
||||
<I>doubly-connected edge list</I> data-structure (\dcel for short),
|
||||
which consists of containers of vertices, edges and faces and
|
||||
maintains the incidence relations among these objects.
|
||||
|
||||
The main idea behind the \sc{Dcel} data-structure is to represent
|
||||
The main idea behind the \dcel data-structure is to represent
|
||||
each edge using a pair of directed <I>halfedges</I>, one going from
|
||||
the \f$ xy\f$-lexicographically smaller (left) endpoint of the curve toward
|
||||
its the \f$ xy\f$-lexicographically larger (right) endpoint, and the other,
|
||||
|
|
@ -75,11 +75,11 @@ as it may have no area, or alternatively it may consist of several
|
|||
connected faces. Every face can have several holes contained in its
|
||||
interior (or no holes at all). In addition, every face may contain
|
||||
isolated vertices in its interior. See \cgalFigureRef{arr_figseg_dcel}
|
||||
for an illustration of the various \sc{Dcel} features. For more details
|
||||
on the \sc{Dcel} data structure see \cgalCite{bkos-cgaa-00} Chapter 2.
|
||||
for an illustration of the various \dcel features. For more details
|
||||
on the \dcel data structure see \cgalCite{bkos-cgaa-00} Chapter 2.
|
||||
|
||||
\cgalFigureBegin{arr_figseg_dcel,arr_segs.png}
|
||||
An arrangement of interior-disjoint line segments with some of the \sc{Dcel} records that represent it. The unbounded face \f$ f_0\f$ has a single connected component that forms a hole inside it, and this hole is comprised of several faces. The half-edge \f$ e\f$ is directed from its source vertex \f$ v_1\f$ to its target vertex \f$ v_2\f$. This edge, together with its twin \f$ e'\f$, correspond to a line segment that connects the points associated with \f$ v_1\f$ and \f$ v_2\f$ and separates the face \f$ f_1\f$ from \f$ f_2\f$. The predecessor \f$ e_{\rm prev}\f$ and successor \f$ e_{\rm next}\f$ of \f$ e\f$ are part of the chain that form the outer boundary of the face \f$ f_2\f$. The face \f$ f_1\f$ has a more complicated structure as it contains two holes in its interior: One hole consists of two adjacent faces \f$ f_3\f$ and \f$ f_4\f$, while the other hole is comprised of two edges. \f$ f_1\f$ also contains two isolated vertices \f$ u_1\f$ and \f$ u_2\f$ in its interior.
|
||||
An arrangement of interior-disjoint line segments with some of the \dcel records that represent it. The unbounded face \f$ f_0\f$ has a single connected component that forms a hole inside it, and this hole is comprised of several faces. The half-edge \f$ e\f$ is directed from its source vertex \f$ v_1\f$ to its target vertex \f$ v_2\f$. This edge, together with its twin \f$ e'\f$, correspond to a line segment that connects the points associated with \f$ v_1\f$ and \f$ v_2\f$ and separates the face \f$ f_1\f$ from \f$ f_2\f$. The predecessor \f$ e_{\rm prev}\f$ and successor \f$ e_{\rm next}\f$ of \f$ e\f$ are part of the chain that form the outer boundary of the face \f$ f_2\f$. The face \f$ f_1\f$ has a more complicated structure as it contains two holes in its interior: One hole consists of two adjacent faces \f$ f_3\f$ and \f$ f_4\f$, while the other hole is comprised of two edges. \f$ f_1\f$ also contains two isolated vertices \f$ u_1\f$ and \f$ u_2\f$ in its interior.
|
||||
\cgalFigureEnd
|
||||
|
||||
The \f$ x\f$-monotone curves of an arrangement are embedded in an
|
||||
|
|
@ -110,7 +110,7 @@ to construct arrangements of different families of curves. In
|
|||
Section \ref arr_secnotif we review the notification mechanism
|
||||
that allows external classes to keep track of the changes that an
|
||||
arrangement instance goes through. Section \ref arr_secex_dcel
|
||||
explains how to extend the \sc{Dcel} records, to store extra data
|
||||
explains how to extend the \dcel records, to store extra data
|
||||
with them, and to efficiently update this data.
|
||||
In Section \ref arr_secoverlay we introduce the fundamental
|
||||
operation of overlaying two arrangements.
|
||||
|
|
@ -127,7 +127,7 @@ the arrangement package. It is used to represent planar
|
|||
arrangements and it provides the interface needed to construct them,
|
||||
traverse them, and maintain them. An arrangement is defined by
|
||||
a geometric <I>traits</I> class that determines the family of planar
|
||||
curves that form the arrangement, and a \sc{Dcel} class, which
|
||||
curves that form the arrangement, and a \dcel class, which
|
||||
represents the <I>topological structure</I> of the planar subdivision.
|
||||
It supplies a minimal set of geometric operations (predicates and
|
||||
constructions) required to construct and maintain the arrangement
|
||||
|
|
@ -159,7 +159,7 @@ parameters of the `Arrangement_2` template:
|
|||
<LI>The `Dcel` template-parameter should be instantiated with a class
|
||||
that is a model of the `ArrangementDcel` concept. The value of this
|
||||
parameter is `Arr_default_dcel<Traits>` by default. However, in
|
||||
many applications it is necessary to extend the \sc{Dcel} features;
|
||||
many applications it is necessary to extend the \dcel features;
|
||||
see Section \ref arr_secex_dcel for further explanations and
|
||||
examples.
|
||||
</UL>
|
||||
|
|
@ -212,7 +212,7 @@ The simplest and most fundamental arrangement operations are the
|
|||
various traversal methods, which allow users to systematically go
|
||||
over the relevant features of the arrangement at hand.
|
||||
|
||||
As mentioned above, the arrangement is represented as a \sc{Dcel},
|
||||
As mentioned above, the arrangement is represented as a \dcel,
|
||||
which stores three containers of vertices, halfedges and faces. Thus,
|
||||
the `Arrangement_2` class supplies iterators for these
|
||||
containers. For example, the methods `vertices_begin()` and
|
||||
|
|
@ -486,7 +486,7 @@ for more details and examples.
|
|||
|
||||
|
||||
\cgalFigureBegin{arr_figex_1,insert.png}
|
||||
The various specialized insertion procedures. The inserted \f$ x\f$-monotone curve is drawn with a light dashed line, surrounded by two solid arrows that represent the pair of twin half-edges added to the \sc{Dcel}. Existing vertices are shown as black dots while new vertices are shown as light dots. Existing half-edges that are affected by the insertion operations are drawn as dashed arrows. (a) Inserting a curve as a new hole inside the face \f$ f\f$. (b) Inserting a curve from an existing vertex \f$ u\f$ that corresponds to one of its endpoints. (c) Inserting an \f$ x\f$-monotone curve whose endpoints are the already existing vertices \f$ u_1\f$ and \f$ u_2\f$. In our case, the new pair of half-edges close a new face \f$ f'\f$, where the hole \f$ h_1\f$, which used to belong to \f$ f\f$, now becomes an enclave in this new face.
|
||||
The various specialized insertion procedures. The inserted \f$ x\f$-monotone curve is drawn with a light dashed line, surrounded by two solid arrows that represent the pair of twin half-edges added to the \dcel. Existing vertices are shown as black dots while new vertices are shown as light dots. Existing half-edges that are affected by the insertion operations are drawn as dashed arrows. (a) Inserting a curve as a new hole inside the face \f$ f\f$. (b) Inserting a curve from an existing vertex \f$ u\f$ that corresponds to one of its endpoints. (c) Inserting an \f$ x\f$-monotone curve whose endpoints are the already existing vertices \f$ u_1\f$ and \f$ u_2\f$. In our case, the new pair of half-edges close a new face \f$ f'\f$, where the hole \f$ h_1\f$, which used to belong to \f$ f\f$, now becomes an enclave in this new face.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
|
|
@ -1349,7 +1349,7 @@ construct it from scratch. (ii) We have to insert \f$ m\f$ input curves
|
|||
to a non-empty arrangement `arr`.
|
||||
|
||||
In the first case, we sweep over the input curves, compute
|
||||
their intersection points and construct the \sc{Dcel} that represents
|
||||
their intersection points and construct the \dcel that represents
|
||||
their planar arrangement. This process is performed in
|
||||
\f$ O\left((m + k)\log m\right)\f$ time, where \f$ k\f$ is the total number
|
||||
of intersection points. The running time is asymptotically better
|
||||
|
|
@ -1567,7 +1567,7 @@ exists. This implied that collinearity indeed exists as explained above.
|
|||
\cgalAdvancedBegin
|
||||
|
||||
\cgalFigureBegin{typenormal,unb_dcel.png}
|
||||
A \sc{Dcel} representing an arrangement of four lines. Halfedges are drawn as thin arrows. The vertices \f$ v_1, \ldots, v_8\f$ lie at infinity, and are not associated with valid points. The halfedges that connect them are fictitious, and are not associated with concrete curves. The face denoted \f$ f_0\f$ (lightly shaded) is the fictitious "unbounded face" which lies outside the bounding rectangle (dashed) that bounds the actual arrangement. The four fictitious vertices \f$ v_{\rm bl}, v_{\rm tl}, v_{\rm br}\f$ and \f$ v_{\rm tr}\f$ represent the four corners of the bounding rectangle.
|
||||
A \dcel representing an arrangement of four lines. Halfedges are drawn as thin arrows. The vertices \f$ v_1, \ldots, v_8\f$ lie at infinity, and are not associated with valid points. The halfedges that connect them are fictitious, and are not associated with concrete curves. The face denoted \f$ f_0\f$ (lightly shaded) is the fictitious "unbounded face" which lies outside the bounding rectangle (dashed) that bounds the actual arrangement. The four fictitious vertices \f$ v_{\rm bl}, v_{\rm tl}, v_{\rm br}\f$ and \f$ v_{\rm tr}\f$ represent the four corners of the bounding rectangle.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
|
|
@ -1580,7 +1580,7 @@ finite curve endpoints and intersection points between curves in
|
|||
straightforward to compute the arrangement induced by this set.
|
||||
However, we would like to operate directly on the unbounded curves
|
||||
without having to preprocess them. Therefore, we use an implicit
|
||||
bounding rectangle embedded in the \sc{Dcel} structure.
|
||||
bounding rectangle embedded in the \dcel structure.
|
||||
\cgalFigureRef{arr_figunb_dcel} shows the arrangement of four lines
|
||||
that subdivide the plane into eight unbounded faces and two bounded
|
||||
ones. Notice that in this case the unbounded faces have outer
|
||||
|
|
@ -1881,7 +1881,7 @@ of the `ArrangementXMonotoneTraits_2` concept.
|
|||
\subsection Arrangement_on_surface_2SupportingUnbounded Supporting Unbounded Curves
|
||||
|
||||
An arrangement that supports unbounded \f$ x\f$-monotone curves maintains
|
||||
an implicit bounding rectangle in the \sc{Dcel} structure; see
|
||||
an implicit bounding rectangle in the \dcel structure; see
|
||||
Section \ref arr_ssecunb_rep. The unbounded ends of vertical rays,
|
||||
vertical lines, and curves with vertical asymptotes are represented
|
||||
by vertices that lie on the bottom or top sides of this bounding
|
||||
|
|
@ -2840,7 +2840,7 @@ Geometric traits-class decorators allow you to attach auxiliary
|
|||
data to curves and to points. The data is automatically manipulated
|
||||
by the decorators and distributed to the constructed geometric entities.
|
||||
Note that additional information can alternatively be maintained by extending
|
||||
the vertex, halfedge, or face types provided by the \sc{Dcel} class used
|
||||
the vertex, halfedge, or face types provided by the \dcel class used
|
||||
by the arrangement; see the details in Section \ref arr_secex_dcel.
|
||||
|
||||
The arrangement package includes a generic traits-class decorator
|
||||
|
|
@ -3065,7 +3065,7 @@ depicted in \cgalFigureRef{arr_figex_19} :
|
|||
|
||||
\cgalExample{Arrangement_on_surface_2/observer.cpp}
|
||||
|
||||
Observers are especially useful when the \sc{Dcel} records are
|
||||
Observers are especially useful when the \dcel records are
|
||||
extended and store additional data, as they help updating this
|
||||
data on-line. See Section \ref arr_secex_dcel for more details
|
||||
and examples.
|
||||
|
|
@ -3080,28 +3080,28 @@ objects and edges (halfedge pairs) are associated with
|
|||
it is possible to extend the traits-class type by using a traits-class
|
||||
decorator, as explained in Section \ref arr_ssecmeta_tr, which may
|
||||
be a sufficient solution for some applications.
|
||||
However, the \sc{Dcel} faces are not associated with any geometric object,
|
||||
However, the \dcel faces are not associated with any geometric object,
|
||||
so it is impossible to extend them using a traits-class decorator.
|
||||
Extending the \sc{Dcel} face records comes handy is such cases. As a matter
|
||||
of fact, it is possible to conveniently extend all \sc{Dcel} records
|
||||
Extending the \dcel face records comes handy is such cases. As a matter
|
||||
of fact, it is possible to conveniently extend all \dcel records
|
||||
(namely vertices, halfedges and faces), which can also be advantageous
|
||||
for some applications.
|
||||
|
||||
All examples presented so far use the default `Arr_default_dcel<Traits>`.
|
||||
This is done implicitly, as this class serves as a default parameter for
|
||||
the `Arrangement_2` template. The default \sc{Dcel} class just associates
|
||||
the `Arrangement_2` template. The default \dcel class just associates
|
||||
points with vertices and \f$ x\f$-monotone curves with halfedge, but nothing more.
|
||||
In this section we show how to use alternative \sc{Dcel} types to extend the
|
||||
desired \sc{Dcel} records.
|
||||
In this section we show how to use alternative \dcel types to extend the
|
||||
desired \dcel records.
|
||||
|
||||
\subsection arr_ssecex_dcel_face Extending the DCEL Faces
|
||||
|
||||
The `Arr_face_extended_dcel<Traits, FaceData>` class-template
|
||||
is used to associate auxiliary data field of type `FaceData` to
|
||||
each face record in the \sc{Dcel}.
|
||||
each face record in the \dcel.
|
||||
|
||||
When an `Arrangement_2` object is parameterized by this
|
||||
\sc{Dcel} class, its nested `Face` type is extended with the access function
|
||||
\dcel class, its nested `Face` type is extended with the access function
|
||||
`data()` and with the modifier `set_data()`. Using these extra
|
||||
functions it is straightforward to access and maintain the auxiliary
|
||||
face-data field.
|
||||
|
|
@ -3135,14 +3135,14 @@ segments:\cgalFootnote{For simplicity, the particular observer used must be atta
|
|||
The `Arr_extended_dcel<Traits, VertexData, HalfedgeData, FaceData>`
|
||||
class-template is used to associate auxiliary data fields of
|
||||
types `VertexData` `HalfedgeData`, and `FaceData` to
|
||||
each \sc{Dcel} vertex, halfedge, and face record types, respectively.
|
||||
each \dcel vertex, halfedge, and face record types, respectively.
|
||||
|
||||
When an `Arrangement_2` object is injected with this
|
||||
\sc{Dcel} class, each one of its nested `Vertex`, `Halfedge` and
|
||||
\dcel class, each one of its nested `Vertex`, `Halfedge` and
|
||||
`Face` classes is extended by the access function `data()`
|
||||
and by the modifier `set_data()`.
|
||||
|
||||
The next example shows how to use a \sc{Dcel} with extended vertex,
|
||||
The next example shows how to use a \dcel with extended vertex,
|
||||
halfedge, and face records. In this example each vertex is associated
|
||||
with a color, which may be blue, red, or white, depending on whether the
|
||||
vertex is isolated, represents a segment endpoint, or whether it
|
||||
|
|
@ -3161,11 +3161,11 @@ is copied to another arrangement instance:
|
|||
\cgalExample{Arrangement_on_surface_2/dcel_extension.cpp}
|
||||
|
||||
\cgalAdvancedBegin
|
||||
The various \sc{Dcel} classes presented in this section are perfectly
|
||||
The various \dcel classes presented in this section are perfectly
|
||||
sufficient for most applications based on the arrangement package.
|
||||
However, users may also use their own implementation of a \sc{Dcel} class
|
||||
However, users may also use their own implementation of a \dcel class
|
||||
to instantiate the `Arrangement_2` class-template, in case they need
|
||||
special functionality from their \sc{Dcel}. Such a class must be a model of the
|
||||
special functionality from their \dcel. Such a class must be a model of the
|
||||
concept `ArrangementDcel`, whose exact specification is listed in the
|
||||
Reference Manual.
|
||||
\cgalAdvancedEnd
|
||||
|
|
@ -3197,16 +3197,16 @@ types nested in geometry traits `Traits_R`. The same holds for all
|
|||
types nested in geometry traits `Traits_B`.
|
||||
The `ovl_traits` parameter is
|
||||
an instance of an <I>overlay traits-class</I>, which enables the creation of
|
||||
`Dcel_R` records in the overlaid arrangement from the \sc{Dcel} features
|
||||
`Dcel_R` records in the overlaid arrangement from the \dcel features
|
||||
of `arr_a` and `arr_b` that they correspond to.
|
||||
|
||||
In principle, we distinguish between three levels of overlay:
|
||||
<DL>
|
||||
<DT><B>Simple overlay:</B><DD>
|
||||
An overlay of two arrangements that store no additional data
|
||||
with their \sc{Dcel} records. That is, they are defined using the default
|
||||
\sc{Dcel} class `Arr_default_dcel`. Typically, the overlaid
|
||||
arrangement in this case stores no extra data with its \sc{Dcel} records as
|
||||
with their \dcel records. That is, they are defined using the default
|
||||
\dcel class `Arr_default_dcel`. Typically, the overlaid
|
||||
arrangement in this case stores no extra data with its \dcel records as
|
||||
well (or if it does, the additional data fields cannot be computed by
|
||||
the overlay operation), so by overlaying the two arrangement we just
|
||||
compute the arrangement of all curves that induce `arr_a` and `arr_b`.
|
||||
|
|
@ -3227,7 +3227,7 @@ the overlaid face.
|
|||
|
||||
The `Arr_face_overlay_traits` class should be used as an overlay
|
||||
traits-class for face-overlay operations. It operates on arrangement, whose
|
||||
\sc{Dcel} representation is based on the `Arr_face_extended_dcel`
|
||||
\dcel representation is based on the `Arr_face_extended_dcel`
|
||||
class-template (see Section \ref arr_ssecex_dcel_face). The face-overlay
|
||||
traits-class is parameterized by a functor that is capable of combining two
|
||||
face-data fields of types `Dcel_A::Face_data` and
|
||||
|
|
@ -3236,11 +3236,11 @@ object. The overlay traits-class uses this functor to properly construct
|
|||
the overlaid faces.
|
||||
<DT><B>Full overlay:</B><DD>
|
||||
An overlay of two arrangements that store additional data
|
||||
fields with all their \sc{Dcel} records. That is, their \sc{Dcel} classes
|
||||
fields with all their \dcel records. That is, their \dcel classes
|
||||
are instantiations of the `Arr_extended_dcel` class-template (see
|
||||
Section \ref arr_ssecex_dcel_all), where the resulting arrangement
|
||||
also extends it \sc{Dcel} records with data fields computed on the basis
|
||||
of the overlapping \sc{Dcel} features of the two input arrangements.
|
||||
also extends it \dcel records with data fields computed on the basis
|
||||
of the overlapping \dcel features of the two input arrangements.
|
||||
</DL>
|
||||
|
||||
In the following subsections we give some examples for the simple and the
|
||||
|
|
@ -3263,8 +3263,8 @@ The next program constructs two simple arrangements, as depicted in
|
|||
\subsection arr_ssecface_ovl Examples for a Face Overlay
|
||||
|
||||
The following example shows how to compute the intersection of two polygons
|
||||
using the `overlay()` function. It uses a face-extended \sc{Dcel} class
|
||||
to define our arrangement class. The \sc{Dcel} extends each face with a Boolean
|
||||
using the `overlay()` function. It uses a face-extended \dcel class
|
||||
to define our arrangement class. The \dcel extends each face with a Boolean
|
||||
flag. A polygon is represented as a <I>marked</I> arrangement face, (whose
|
||||
flag is set). The example uses a face-overlay traits class, instantiated with
|
||||
a functor that simply performs a logical <I>and</I> operations on Boolean flags.
|
||||
|
|
@ -3295,7 +3295,7 @@ when one constructs an arrangement induced by a set \f$ \cal C\f$ of arbitrary
|
|||
planar curves, she or he constructs a collection \f$ \cal C''\f$ of \f$ x\f$-monotone
|
||||
subcurves of \f$ \cal C\f$ that are pairwise disjoint in their interior, and these
|
||||
subcurves are associated with the arrangement edges (more precisely, with the
|
||||
\sc{Dcel} halfedges). Doing so, the connection between the originating input
|
||||
\dcel halfedges). Doing so, the connection between the originating input
|
||||
curves and the arrangement edges is lost. This loss might be acceptable for
|
||||
some applications. However, in many practical cases it is important to
|
||||
determine the input curves that give rise to the final subcurves.
|
||||
|
|
@ -3308,8 +3308,8 @@ used for instantiating the template should be a model of the
|
|||
`ArrangementTraits_2` concept (see Section \ref arr_sssecinsert_gen).
|
||||
That is, it should define the `Curve_2` type (and not just the
|
||||
`X_monotone_curve_2` type). The `Dcel` parameter should model the
|
||||
`ArrangementDcel` concept. Users can use the default \sc{Dcel} class or
|
||||
an extended \sc{Dcel} class according to their needs.
|
||||
`ArrangementDcel` concept. Users can use the default \dcel class or
|
||||
an extended \dcel class according to their needs.
|
||||
|
||||
\subsection arr_ssecarrwh_traverse Traversing an Arrangement with History
|
||||
|
||||
|
|
@ -3362,7 +3362,7 @@ instantiated by the same traits class. In this case, the resulting
|
|||
arrangement will store a consolidated container of input curves, and
|
||||
automatically preserve the cross-mapping between the arrangement edges
|
||||
and the consolidated curve set. Users can employ an overlay-traits class
|
||||
to maintain any type of auxiliary data stored with the \sc{Dcel} features
|
||||
to maintain any type of auxiliary data stored with the \dcel features
|
||||
(see Section \ref arr_secoverlay).
|
||||
|
||||
\subsection arr_ssecmodif_traverse Modifying an Arrangement with History
|
||||
|
|
@ -3503,7 +3503,7 @@ the arrangement features. Thus, they are ideal for arrangements
|
|||
instantiated using the `Arr_default_dcel` class.
|
||||
However, as explained in Section \ref arr_secex_dcel, one can easily
|
||||
extend the arrangement faces by using the `Arr_face_extended_dcel`
|
||||
template, or extend all \sc{Dcel} records by using the `Arr_extended_dcel`
|
||||
template, or extend all \dcel records by using the `Arr_extended_dcel`
|
||||
template. In such cases, it might be crucial that the auxiliary data fields
|
||||
are written to the file and read from there.
|
||||
|
||||
|
|
@ -3520,13 +3520,13 @@ auxiliary data that may be associated with the arrangement features.
|
|||
This is the default formatter used by the arrangement inserter and the
|
||||
arrangement extractor, as defined above.
|
||||
<LI>`Arr_face_extended_text_formatter<Arrangement>` operates on
|
||||
arrangements whose \sc{Dcel} representation is based on the
|
||||
arrangements whose \dcel representation is based on the
|
||||
`Arr_face_extended_dcel<Traits,FaceData>` class (see
|
||||
Section \ref arr_ssecex_dcel_face). It supports reading and writing
|
||||
the auxiliary data objects stored with the arrangement faces provided
|
||||
that the `FaceData` class supports an inserter and an extractor.
|
||||
<LI>`Arr_extended_dcel_text_formatter<Arrangement>` operates on
|
||||
arrangements whose \sc{Dcel} representation is based on the
|
||||
arrangements whose \dcel representation is based on the
|
||||
`Arr_extended_dcel<Traits,VertexData,HalfedgeData,FaceData>` class
|
||||
(see Section \ref arr_ssecex_dcel_all). It supports reading and writing
|
||||
the auxiliary data objects stored with the arrangement vertices, edges
|
||||
|
|
@ -3599,10 +3599,10 @@ the graph algorithms implemented in the <span class="textsc">bgl</span> to `Arra
|
|||
An instance of `Arrangement_2` is adapted to a <span class="textsc">Boost</span> graph through the
|
||||
provision of a set of free functions that operate on the arrangement features
|
||||
and conform with the relevant BGL concepts. Besides the straightforward
|
||||
adaptation, which associates a vertex with each \sc{Dcel} vertex and an edge
|
||||
with each \sc{Dcel} halfedge, the package also offer a <I>dual</I> adaptor, which
|
||||
associates a graph vertex with each \sc{Dcel} face, such that two vertices are
|
||||
connected, iff there is a \sc{Dcel} halfedge that connects the two corresponding
|
||||
adaptation, which associates a vertex with each \dcel vertex and an edge
|
||||
with each \dcel halfedge, the package also offer a <I>dual</I> adaptor, which
|
||||
associates a graph vertex with each \dcel face, such that two vertices are
|
||||
connected, iff there is a \dcel halfedge that connects the two corresponding
|
||||
faces.
|
||||
|
||||
\subsection arr_ssecbgl_primal The Primal Arrangement Representation
|
||||
|
|
@ -3706,7 +3706,7 @@ used for associating arbitrary data with the arrangement faces.
|
|||
In the following example we construct the same arrangement as in
|
||||
example `bgl_primal_adapter.cpp` (see \cgalFigureRef{arr_figex_bgl}),
|
||||
and perform breadth-first search on the graph faces, starting from the
|
||||
unbounded face. We extend the \sc{Dcel} faces
|
||||
unbounded face. We extend the \dcel faces
|
||||
with an unsigned integer, marking the discover time of the face
|
||||
using `boost` visitors and a property-map class that directly accesses
|
||||
the extended data of the faces:
|
||||
|
|
@ -3728,7 +3728,7 @@ of the general ones; e.g., `insert()`.
|
|||
|
||||
<LI>When the curves to be inserted into an arrangement are segments that
|
||||
are pairwise disjoint in their interior, it is more efficient to use
|
||||
the traits class `Arr_non_caching_segment_traits_2` rather then
|
||||
the traits class `Arr_non_caching_segment_traits_2` rather than
|
||||
the default one (`Arr_segment_traits_2`).
|
||||
|
||||
If the segments may intersect each other, the default traits class
|
||||
|
|
@ -3751,7 +3751,7 @@ arrangement. The specialized insertion functions, i.e.,
|
|||
can be used according to the available information. These functions
|
||||
hardly involve any geometric operations, if at all. They accept
|
||||
topologically related parameters, and use them to operate directly on
|
||||
the \sc{Dcel} records, thus saving algebraic operations, which are
|
||||
the \dcel records, thus saving algebraic operations, which are
|
||||
especially expensive when high-degree curves are involved.
|
||||
|
||||
A polygon, represented by a list of segments along its boundary, can
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ namespace CGAL {
|
|||
size_type number_of_subcurves() const;
|
||||
|
||||
/*! Obtain the \f$ k\f$th subcurve of the polycurve.
|
||||
* \pre \f$k\f$ is not greater then 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.
|
||||
*/
|
||||
typename SubcurveTraits_2::X_monotone_curve_2
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ typedef unspecified_type Split_2;
|
|||
/// \name
|
||||
/// \attention The two following function-object types are
|
||||
/// optional. If they are supported, the `Has_merge_category` tag
|
||||
/// should be defined as `Tag_true` (and `Tag_false` otherwise.
|
||||
/// should be defined as `Tag_true` and otherwise as `Tag_false`.
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -114,8 +114,8 @@ Split_2 split_2_object() const;
|
|||
|
||||
/// \name
|
||||
/// The two following methods are optional. If they are supported, the
|
||||
/// `Has_merge_category` tag should be defined as `Tag_true` (and
|
||||
/// `Tag_false` otherwise.
|
||||
/// `Has_merge_category` tag should be defined as `Tag_true` and otherwise
|
||||
/// as `Tag_false`.
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ int main()
|
|||
// but not for this instance
|
||||
for(size_t i = 0; i < pre_segs.size(); ++i) {
|
||||
auto* curr_p = boost::get<X_monotone_curve_2>(&pre_segs[i]);;
|
||||
CGAL_assertion(curr_p);
|
||||
CGAL_assertion(curr_p != nullptr);
|
||||
segs.push_back(*curr_p);
|
||||
}
|
||||
// Construct an ellipse with equation 2*x^2+5*y^2-7=0
|
||||
|
|
|
|||
|
|
@ -159,11 +159,11 @@ namespace CGAL {
|
|||
{ return CK_Equal_2()(a0, a1); }
|
||||
|
||||
result_type
|
||||
operator() ( const Line_arc_2 &a0, const Circular_arc_2 &a1) const
|
||||
operator() ( const Line_arc_2 &/*a0*/, const Circular_arc_2 &/*a1*/) const
|
||||
{ return false; }
|
||||
|
||||
result_type
|
||||
operator() ( const Circular_arc_2 &a0, const Line_arc_2 &a1) const
|
||||
operator() ( const Circular_arc_2 &/*a0*/, const Line_arc_2 &/*a1*/) const
|
||||
{ return false; }
|
||||
|
||||
result_type
|
||||
|
|
|
|||
|
|
@ -479,7 +479,18 @@ public:
|
|||
const Inner_ccb* inner_ccb() const
|
||||
{
|
||||
CGAL_precondition(is_on_inner_ccb());
|
||||
return (reinterpret_cast<const Inner_ccb*>(_clean_pointer(this->p_comp)));
|
||||
|
||||
const Inner_ccb* out = reinterpret_cast<const Inner_ccb*>(_clean_pointer(this->p_comp));
|
||||
if (out->is_valid())
|
||||
return out;
|
||||
|
||||
// else reduce path and get valid iccb
|
||||
const Inner_ccb* valid = out->next();
|
||||
while (!valid->is_valid())
|
||||
valid = valid->next();
|
||||
const_cast<Inner_ccb*>(out)->set_next(const_cast<Inner_ccb*>(valid));
|
||||
const_cast<Halfedge*>(this)->set_inner_ccb(valid);
|
||||
return valid;
|
||||
}
|
||||
|
||||
/*! Get an incident inner CCB (non-const version).
|
||||
|
|
@ -488,11 +499,28 @@ public:
|
|||
Inner_ccb* inner_ccb()
|
||||
{
|
||||
CGAL_precondition(is_on_inner_ccb());
|
||||
return (reinterpret_cast<Inner_ccb*>(_clean_pointer(this->p_comp)));
|
||||
|
||||
Inner_ccb* out = reinterpret_cast<Inner_ccb*>(_clean_pointer(this->p_comp));
|
||||
if (out->is_valid())
|
||||
return out;
|
||||
|
||||
// else reduce path and get valid iccb
|
||||
Inner_ccb* valid = out->next();
|
||||
while (!valid->is_valid())
|
||||
valid = valid->next();
|
||||
out->set_next(valid);
|
||||
set_inner_ccb(valid);
|
||||
return valid;
|
||||
}
|
||||
|
||||
Inner_ccb* inner_ccb_no_redirect()
|
||||
{
|
||||
CGAL_precondition(is_on_inner_ccb());
|
||||
return reinterpret_cast<Inner_ccb*>(_clean_pointer(this->p_comp));
|
||||
}
|
||||
|
||||
/*! Set the incident inner CCB. */
|
||||
void set_inner_ccb(Inner_ccb *ic)
|
||||
void set_inner_ccb(const Inner_ccb *ic)
|
||||
{
|
||||
// Set the component pointer and set its LSB.
|
||||
this->p_comp = _set_lsb(ic);
|
||||
|
|
@ -769,57 +797,111 @@ public:
|
|||
typedef typename Face::Inner_ccb_iterator Inner_ccb_iterator;
|
||||
|
||||
private:
|
||||
Face* p_f; // The face the contains the CCB in its interior.
|
||||
union
|
||||
{
|
||||
Face* f; // The face the contains the CCB in its interior.
|
||||
Arr_inner_ccb* icc; // next inner CCB in chain to valid icc
|
||||
} f_or_icc;
|
||||
Inner_ccb_iterator iter; // The inner CCB identifier.
|
||||
bool iter_is_not_singular;
|
||||
enum
|
||||
{
|
||||
ITER_IS_SINGULAR, // singular = default iterator, not initialized
|
||||
ITER_IS_NOT_SINGULAR, // not singular = iterator was assigned and is valid
|
||||
INVALID // invalid = the inner CCB is invalid and
|
||||
// only links to another inner CCB
|
||||
// in chain to valid CCB
|
||||
} status;
|
||||
|
||||
public:
|
||||
/*! Default constructor. */
|
||||
Arr_inner_ccb() : p_f(nullptr), iter_is_not_singular(false) {}
|
||||
Arr_inner_ccb() : status(ITER_IS_SINGULAR) { f_or_icc.f = nullptr; }
|
||||
|
||||
/*! Copy constructor. */
|
||||
Arr_inner_ccb(const Arr_inner_ccb& other) :
|
||||
p_f(other.p_f), iter_is_not_singular(other.iter_is_not_singular)
|
||||
{ if (other.iter_is_not_singular) iter = other.iter; }
|
||||
f_or_icc(other.f_or_icc), status(other.status)
|
||||
{ if (other.status == ITER_IS_NOT_SINGULAR) iter = other.iter; }
|
||||
|
||||
/*! Get a halfedge along the component (const version). */
|
||||
const Halfedge* halfedge() const { return (*iter); }
|
||||
const Halfedge* halfedge() const
|
||||
{
|
||||
CGAL_assertion (is_valid());
|
||||
return (*iter);
|
||||
}
|
||||
|
||||
/*! Get a halfedge along the component (non-const version). */
|
||||
Halfedge* halfedge() { return (*iter); }
|
||||
Halfedge* halfedge()
|
||||
{
|
||||
CGAL_assertion (is_valid());
|
||||
return (*iter);
|
||||
}
|
||||
|
||||
/*! Set a representative halfedge for the component. */
|
||||
void set_halfedge(Halfedge *he) { *iter = he; }
|
||||
void set_halfedge(Halfedge *he)
|
||||
{
|
||||
CGAL_assertion (is_valid());
|
||||
*iter = he;
|
||||
}
|
||||
|
||||
/*! Get the incident face (const version). */
|
||||
const Face* face() const { return (p_f); }
|
||||
const Face* face() const
|
||||
{
|
||||
CGAL_assertion (status != INVALID);
|
||||
return f_or_icc.f;
|
||||
}
|
||||
|
||||
/*! Get the incident face (non-const version). */
|
||||
Face* face() { return (p_f); }
|
||||
Face* face()
|
||||
{
|
||||
CGAL_assertion (status != INVALID);
|
||||
return f_or_icc.f;
|
||||
}
|
||||
|
||||
/*! Set the incident face. */
|
||||
void set_face(Face* f) { p_f = f; }
|
||||
void set_face(Face* f)
|
||||
{
|
||||
CGAL_assertion (status != INVALID);
|
||||
f_or_icc.f = f;
|
||||
}
|
||||
|
||||
/*! Get the iterator (const version). */
|
||||
Inner_ccb_iterator iterator() const
|
||||
{
|
||||
CGAL_assertion(iter_is_not_singular);
|
||||
CGAL_assertion(status == ITER_IS_NOT_SINGULAR);
|
||||
return (iter);
|
||||
}
|
||||
|
||||
/*! Get the iterator (non-const version). */
|
||||
Inner_ccb_iterator iterator()
|
||||
{
|
||||
CGAL_assertion(iter_is_not_singular);
|
||||
CGAL_assertion(status == ITER_IS_NOT_SINGULAR);
|
||||
return (iter);
|
||||
}
|
||||
|
||||
/*! Set the inner CCB iterator. */
|
||||
void set_iterator(Inner_ccb_iterator it)
|
||||
{
|
||||
CGAL_assertion (is_valid());
|
||||
iter = it;
|
||||
iter_is_not_singular = true;
|
||||
status = ITER_IS_NOT_SINGULAR;
|
||||
}
|
||||
|
||||
/*! Check validity */
|
||||
bool is_valid() const { return (status != INVALID); }
|
||||
|
||||
/*! Get the next CCB to primary chain. */
|
||||
Arr_inner_ccb* next() const
|
||||
{
|
||||
CGAL_assertion (status == INVALID);
|
||||
return f_or_icc.icc;
|
||||
}
|
||||
|
||||
/*! Set the next CCB to primary chain. */
|
||||
void set_next(Arr_inner_ccb* next)
|
||||
{
|
||||
status = INVALID;
|
||||
f_or_icc.icc = next;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/*! \class
|
||||
|
|
@ -943,6 +1025,7 @@ public:
|
|||
typedef typename Face_list::iterator Face_iterator;
|
||||
typedef CGAL::N_step_adaptor_derived<Halfedge_iterator, 2>
|
||||
Edge_iterator;
|
||||
typedef typename Inner_ccb_list::iterator Inner_ccb_iterator;
|
||||
|
||||
// Definitions of const iterators.
|
||||
typedef typename Vertex_list::const_iterator Vertex_const_iterator;
|
||||
|
|
@ -1019,6 +1102,9 @@ public:
|
|||
{
|
||||
return make_prevent_deref_range(edges_begin(), edges_end());
|
||||
}
|
||||
|
||||
Inner_ccb_iterator inner_ccbs_begin() { return in_ccbs.begin(); }
|
||||
Inner_ccb_iterator inner_ccbs_end() { return in_ccbs.end(); }
|
||||
//@}
|
||||
|
||||
/// \name Obtaining constant iterators.
|
||||
|
|
|
|||
|
|
@ -1068,7 +1068,7 @@ public:
|
|||
* LARGER - x(xcv1, ce) > x(xcv2, ce).
|
||||
* \pre the ce end of the arc xcv1 lies on a pole.
|
||||
* \pre the ce end of the arc xcv2 lies on a pole.
|
||||
* \pre the the $x$-coordinates of xcv1 and xcv2 at their ce end are
|
||||
* \pre the $x$-coordinates of xcv1 and xcv2 at their ce end are
|
||||
* equal (implying that the curves overlap).
|
||||
* \pre xcv1 does not coincide with the vertical identification curve.
|
||||
* \pre xcv2 does not coincide with the vertical identification curve.
|
||||
|
|
|
|||
|
|
@ -751,7 +751,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* Compare the the two points xy-lexicographically.
|
||||
* Compare the two points xy-lexicographically.
|
||||
* \param pt The other point.
|
||||
* \param cache A cache for the vertical tangency points and the
|
||||
* intersection points.
|
||||
|
|
|
|||
|
|
@ -1139,7 +1139,7 @@ public:
|
|||
* that xcv1 is vertical.
|
||||
* \pre the ce end of the line xcv2 lies on a boundary, implying
|
||||
* that xcv2 is vertical.
|
||||
* \pre the the $x$-coordinates of xcv1 and xcv2 at their ce ends are
|
||||
* \pre the $x$-coordinates of xcv1 and xcv2 at their ce ends are
|
||||
* equal, implying that the curves overlap!
|
||||
*/
|
||||
Comparison_result
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ overlay(const Arrangement_on_surface_2<GeometryTraitsA_2, TopologyTraitsA>& arr1
|
|||
typedef Arrangement_on_surface_2<Rgt2, Rtt> Arr_res;
|
||||
typedef typename Arr_res::Allocator Allocator;
|
||||
|
||||
// some type assertions (not all, but better then nothing).
|
||||
// some type assertions (not all, but better than nothing).
|
||||
#if !defined(CGAL_NO_ASSERTIONS)
|
||||
typedef typename Agt2::Point_2 A_point;
|
||||
typedef typename Bgt2::Point_2 B_point;
|
||||
|
|
|
|||
|
|
@ -1488,7 +1488,7 @@ Trapezoidal_decomposition_2<Td_traits>::insert(Halfedge_const_handle he)
|
|||
// if the edge starts at a vertex, we should not insert it into the DAG.
|
||||
// Instead, we should update all the edges incident to the vertex.
|
||||
// Otherwise, this is a new vertex, insert a node to the DAG that represents
|
||||
// the new vertex. In this case, the the edge itself is the only incident
|
||||
// the new vertex. In this case, the edge itself is the only incident
|
||||
// edge, and so it is a trivial operation.
|
||||
Td_map_item p1_item = (lt1 == POINT) ?
|
||||
update_vtx_with_new_edge(he, ce1, item1, lt1) :
|
||||
|
|
|
|||
|
|
@ -781,7 +781,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
// Check if the the left endpoint lies on the other polycurve.
|
||||
// Check if the left endpoint lies on the other polycurve.
|
||||
bool left_coincides = (left_res == EQUAL);
|
||||
bool left_overlap = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -423,7 +423,7 @@ compare_y_at_x(const Point_2& p, const Halfedge* he) const
|
|||
return m_geom_traits->compare_y_at_x_2_object()(p, he->curve());
|
||||
}
|
||||
|
||||
/*! \brief determine whether a vertex is associated with a curve end */
|
||||
/*! \brief determines whether a vertex is associated with a curve end */
|
||||
template <typename GeomTraits, typename Dcel>
|
||||
bool Arr_spherical_topology_traits_2<GeomTraits, Dcel>::
|
||||
are_equal(const Vertex* v,
|
||||
|
|
@ -812,7 +812,7 @@ _locate_around_pole(Vertex* v,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/*! \brief Return the face that lies below the given vertex, which lies
|
||||
/*! \brief returns the face that lies below the given vertex, which lies
|
||||
* on the line of discontinuity.
|
||||
*/
|
||||
template <typename GeomTraits, typename Dcel>
|
||||
|
|
|
|||
|
|
@ -669,7 +669,7 @@ public:
|
|||
/*! Operate
|
||||
* \param xcv1 the first curve
|
||||
* \param xcv2 the second curve
|
||||
* \return true if the the two curve are mergeable and false otherwise.
|
||||
* \return true if the two curve are mergeable and false otherwise.
|
||||
* Two curves are mergeable if they have the same underlying theoretical
|
||||
* curve
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2741,14 +2741,24 @@ _insert_at_vertices(DHalfedge* he_to,
|
|||
he1->set_inner_ccb(ic1);
|
||||
he2->set_inner_ccb(ic1);
|
||||
|
||||
if (m_sweep_mode)
|
||||
{
|
||||
// Inner CCB are obtained using Halfedge::inner_ccb() which
|
||||
// performs path reduction and always return valid iCCB
|
||||
CGAL_assertion(ic1->is_valid());
|
||||
CGAL_assertion(ic2->is_valid());
|
||||
ic2->set_next(ic1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make all halfedges along ic2 to point to ic1.
|
||||
DHalfedge* curr;
|
||||
|
||||
for (curr = he2->next(); curr != he1; curr = curr->next())
|
||||
curr->set_inner_ccb(ic1);
|
||||
|
||||
// Delete the redundant inner CCB.
|
||||
_dcel().delete_inner_ccb(ic2);
|
||||
}
|
||||
|
||||
// Notify the observers that we have merged the two inner CCBs.
|
||||
_notify_after_merge_inner_ccb(fh, (Halfedge_handle(he1))->ccb());
|
||||
|
|
@ -4042,7 +4052,7 @@ _defines_outer_ccb_of_new_face(const DHalfedge* he_to,
|
|||
// - No smallest has bin recorded so far, or
|
||||
// - The current target vertex and the recorded vertex are the same and
|
||||
// * The current curve is smaller than the recorded curve, or
|
||||
// - The current curve end is smaller then the recorded curve end.
|
||||
// - The current curve end is smaller than the recorded curve end.
|
||||
// smaller than its source, so we should check whether it is also smaller
|
||||
// Note that we compare the vertices lexicographically: first by the
|
||||
// indices, then by x, then by y.
|
||||
|
|
|
|||
|
|
@ -1513,7 +1513,7 @@ bool Arrangement_zone_2<Arrangement, ZoneVisitor>::_zone_in_overlap()
|
|||
// In this case m_overlap_cv has a finite right endpoint. In this case,
|
||||
// if the right vertex of m_intersect_he is associated with a finite point,
|
||||
// we check whether it is equal to cv_right_pt. Otherwise, we know that
|
||||
// m_intersect_he extends to the the right of m_overlap_cv, and there is no
|
||||
// m_intersect_he extends to the right of m_overlap_cv, and there is no
|
||||
// vertex currently associated with m_overlap_cv's right endpoint.
|
||||
if (! he_right_v->is_at_open_boundary() &&
|
||||
equal(cv_right_pt, he_right_v->point()))
|
||||
|
|
|
|||
|
|
@ -911,6 +911,14 @@ protected:
|
|||
bool m_own_traits; // inidicates whether the geometry
|
||||
// traits should be freed up.
|
||||
|
||||
bool m_sweep_mode = false;
|
||||
// sweep mode efficiently
|
||||
// merges inner CCB but
|
||||
// keeps invalid inner CCB
|
||||
// and memory overhead that
|
||||
// should be cleaned
|
||||
// afterwards
|
||||
|
||||
public:
|
||||
/// \name Constructors.
|
||||
//@{
|
||||
|
|
@ -941,6 +949,9 @@ public:
|
|||
/*! Destructor. */
|
||||
virtual ~Arrangement_on_surface_2();
|
||||
|
||||
/*! Change mode. */
|
||||
void set_sweep_mode (bool mode) { m_sweep_mode = mode; }
|
||||
|
||||
/*! Clear the arrangement. */
|
||||
virtual void clear();
|
||||
//@}
|
||||
|
|
@ -1485,7 +1496,7 @@ public:
|
|||
* \pre cv1's source and cv2's target equal the endpoints of the curve
|
||||
* currently assoicated with e (respectively), and cv1's target equals
|
||||
* cv2's target, and this is the split point (ot vice versa).
|
||||
* \return A handle for the halfedge whose source is the source of the the
|
||||
* \return A handle for the halfedge whose source is the source of the
|
||||
* original halfedge e, and whose target is the split point.
|
||||
*/
|
||||
Halfedge_handle split_edge(Halfedge_handle e,
|
||||
|
|
@ -1518,6 +1529,39 @@ public:
|
|||
|
||||
//@}
|
||||
|
||||
/*!
|
||||
* Cleans the inner CCB if sweep mode was used, by removing all
|
||||
* non-valid inner CCBs
|
||||
*/
|
||||
void clean_inner_ccbs_after_sweep()
|
||||
{
|
||||
for (DHalfedge_iter he = _dcel().halfedges_begin();
|
||||
he != _dcel().halfedges_end(); ++ he)
|
||||
{
|
||||
if (!he->is_on_inner_ccb())
|
||||
continue;
|
||||
|
||||
DInner_ccb* ic1 = he->inner_ccb_no_redirect();
|
||||
if (ic1->is_valid())
|
||||
continue;
|
||||
|
||||
// Calling Halfedge::inner_ccb() reduces the path and makes the
|
||||
// halfedge point to a correct CCB
|
||||
DInner_ccb* ic2 = he->inner_ccb();
|
||||
CGAL_USE(ic2);
|
||||
CGAL_assertion (ic2->halfedge()->is_on_inner_ccb()
|
||||
&& ic2->halfedge()->inner_ccb_no_redirect() == ic2);
|
||||
}
|
||||
|
||||
typename Dcel::Inner_ccb_iterator it = _dcel().inner_ccbs_begin();
|
||||
while (it != _dcel().inner_ccbs_end())
|
||||
{
|
||||
typename Dcel::Inner_ccb_iterator current = it ++;
|
||||
if (!current->is_valid())
|
||||
_dcel().delete_inner_ccb(&*current);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
/// \name Determining the boundary-side conditions.
|
||||
//@{
|
||||
|
|
|
|||
|
|
@ -557,7 +557,7 @@ public:
|
|||
* \param e The edge to split (one of the pair of twin halfedges).
|
||||
* \param p The split point.
|
||||
* \pre p lies in the interior of the curve associated with e.
|
||||
* \return A handle for the halfedge whose source is the source of the the
|
||||
* \return A handle for the halfedge whose source is the source of the
|
||||
* original halfedge e, and whose target is the split point.
|
||||
*/
|
||||
Halfedge_handle split_edge (Halfedge_handle e, const Point_2& p);
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
#define CGAL_CURVED_KERNEL_VIA_ANALYSIS_2_ARC_2_H
|
||||
|
||||
/*!\file include/CGAL/Curved_kernel_via_analysis_2/Arc_2.h
|
||||
*\brief Defines class \c Arc_2 that represents an arc on a curve that
|
||||
*\brief defines class \c Arc_2 that represents an arc on a curve that
|
||||
* can be analyzed.
|
||||
*/
|
||||
|
||||
|
|
@ -2695,9 +2695,9 @@ protected:
|
|||
* if arcs' x-ranges overlap; otherwise returns \c false
|
||||
*
|
||||
* \param cv2 The second arc
|
||||
* \param pt_low Output: Point indicating the lower bound of the the joint
|
||||
* \param pt_low Output: Point indicating the lower bound of the joint
|
||||
* x-range
|
||||
* \param pt_high Output: Point indicating the upper bound of the the joint
|
||||
* \param pt_high Output: Point indicating the upper bound of the joint
|
||||
* x-range
|
||||
* \return \c true, if arcs overlap, \c false otherwise
|
||||
*
|
||||
|
|
@ -3364,7 +3364,7 @@ std::ostream& operator<<(
|
|||
}
|
||||
|
||||
|
||||
//! \brief Reads the objects from stream.
|
||||
//! \brief reads the objects from stream.
|
||||
template < class CurvedKernelViaAnalysis_2, class Rep_ >
|
||||
std::istream& operator>> (
|
||||
std::istream& is,
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue