mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface
This commit is contained in:
commit
d483b3bdfd
|
|
@ -1,11 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
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 libboost-dev libinsighttoolkit4-dev zsh
|
||||
#update cmake to 3.18.4
|
||||
sudo apt-get install -y \
|
||||
libmpfr-dev \
|
||||
libtbb-dev \
|
||||
libmetis-dev \
|
||||
libssh-dev \
|
||||
libeigen3-dev \
|
||||
qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev libqt5websockets5-dev \
|
||||
libqt5svg5-dev qttools5-dev qttools5-dev-tools \
|
||||
libboost-dev libboost-serialization-dev libboost-iostreams-dev libboost-filesystem-dev libboost-filesystem-dev \
|
||||
libvtk9-dev libgdcm-tools libvtkgdcm-dev libunwind-dev \
|
||||
libinsighttoolkit5-dev \
|
||||
libceres-dev \
|
||||
libglpk-dev \
|
||||
libopencv-dev \
|
||||
zsh \
|
||||
qt6-base-dev qt6-declarative-dev libqt6svg6-dev libqt6websockets6-dev
|
||||
|
||||
#update CMake
|
||||
sudo apt purge --auto-remove cmake
|
||||
cd /tmp
|
||||
wget https://cmake.org/files/v3.18/cmake-3.18.4-Linux-x86_64.sh
|
||||
sudo sh cmake-3.18.4-Linux-x86_64.sh --skip-license --prefix=/usr/local
|
||||
rm cmake-3.18.4-Linux-x86_64.sh
|
||||
CMAKE_VER=$(curl --silent https://cmake.org/files/LatestRelease/cmake-latest-files-v1.json | jq -r .version.string)
|
||||
wget https://cmake.org/files/LatestRelease/cmake-$CMAKE_VER-linux-x86_64.sh
|
||||
sudo sh cmake-*.sh --skip-license --prefix=/usr/local
|
||||
rm cmake-*.sh
|
||||
|
|
|
|||
|
|
@ -3,11 +3,10 @@
|
|||
FACTOR=$1
|
||||
set -ex
|
||||
cd Polyhedron/demo
|
||||
LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build . -t help | egrep 'plugin$' |& cut -d\ -f2)
|
||||
/usr/local/bin/cmake -S Polyhedron -B build -DCGAL_DIR=$2
|
||||
LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build build -t help | egrep 'plugin$' |& cut -d\ -f2)
|
||||
PLUGINS_ARRAY=(${LIST_OF_PLUGINS});
|
||||
NB_OF_PLUGINS=${#PLUGINS_ARRAY[@]}
|
||||
DEL=$(($NB_OF_PLUGINS / 4))
|
||||
mkdir build
|
||||
cd build
|
||||
/usr/local/bin/cmake -DCGAL_DIR=$2 ../Polyhedron
|
||||
make -j2 ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ name: remove_labels
|
|||
on:
|
||||
pull_request_target:
|
||||
types: [synchronize]
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
remove_label:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -9,7 +10,7 @@ jobs:
|
|||
name: remove label
|
||||
steps:
|
||||
- name: removelabel
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
|
|
@ -20,7 +21,7 @@ jobs:
|
|||
name: "Tested",
|
||||
});
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ success() }}
|
||||
with:
|
||||
script: |
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: get_round
|
||||
with:
|
||||
result-encoding: string
|
||||
|
|
@ -38,7 +38,7 @@ jobs:
|
|||
}
|
||||
}
|
||||
return 'stop'
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
id: get_pr_number
|
||||
with:
|
||||
|
|
@ -47,9 +47,9 @@ jobs:
|
|||
//get pullrequest url
|
||||
const pr_number = context.payload.issue.number
|
||||
return pr_number
|
||||
|
||||
|
||||
- name: Emoji-comment
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
with:
|
||||
script: |
|
||||
|
|
@ -59,14 +59,13 @@ jobs:
|
|||
repo: context.repo.repo,
|
||||
content: 'rocket'
|
||||
})
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
name: "checkout branch"
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
ref: refs/pull/${{ steps.get_pr_number.outputs.result }}/merge
|
||||
token: ${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}
|
||||
fetch-depth: 2
|
||||
|
||||
- name: install dependencies
|
||||
|
|
@ -74,9 +73,9 @@ jobs:
|
|||
run: |
|
||||
set -x
|
||||
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
|
||||
sudo pip install lxml==4.6.3
|
||||
sudo pip install lxml
|
||||
sudo pip install pyquery
|
||||
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_8_13_patched/doxygen
|
||||
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_9_6_patched/doxygen
|
||||
sudo mv doxygen_exe /usr/bin/doxygen
|
||||
sudo chmod +x /usr/bin/doxygen
|
||||
git config --global user.email "cgal@geometryfactory.com"
|
||||
|
|
@ -137,7 +136,7 @@ jobs:
|
|||
fi
|
||||
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ success() && steps.get_round.outputs.result != 'stop' }}
|
||||
with:
|
||||
script: |
|
||||
|
|
@ -155,12 +154,13 @@ jobs:
|
|||
- name: Post error
|
||||
env:
|
||||
ERRORMSG: ${{steps.build_and_run.outputs.DoxygenError}}
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ failure() && steps.get_round.outputs.result != 'stop' }}
|
||||
with:
|
||||
script: |
|
||||
const error = process.env.ERRORMSG
|
||||
const msg = "There was an error while building the doc: \n"+error
|
||||
const job_url = `${context.serverUrl}/CGAL/cgal/actions/runs/${context.runId}`
|
||||
const msg = "There was an error while building the doc: \n```\n"+error + "\n```\n" + job_url
|
||||
github.rest.issues.createComment({
|
||||
owner: "CGAL",
|
||||
repo: "cgal",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: CMake Test Merge Branch
|
||||
|
||||
on: [push, pull_request]
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: |
|
||||
.github/install.sh
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: CMake Testsuite
|
||||
|
||||
on: [push, pull_request]
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
|
@ -11,25 +11,25 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: sudo apt-get install -y libboost-dev libboost-program-options-dev libmpfr-dev libeigen3-dev
|
||||
- name: configure all
|
||||
run: |
|
||||
set -e
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DBUILD_TESTING=ON ..
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DCGAL_ENABLE_TESTING=ON ..
|
||||
ctest -L Installation -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
cmake-testsuite-with-qt5:
|
||||
cmake-testsuite-with-qt:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: sudo bash -e .github/install.sh
|
||||
- name: configure all
|
||||
run: |
|
||||
set -e
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DBUILD_TESTING=ON ..
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DCGAL_ENABLE_TESTING=ON ..
|
||||
ctest -L Installation -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ name: Documentation Removal
|
|||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [closed, removed]
|
||||
types: [closed, removed, workflow_dispatch]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -14,7 +14,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: delete directory
|
||||
run: |
|
||||
set -x
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: Test Polyhedron Demo
|
||||
|
||||
on: [push, pull_request]
|
||||
on: [push, pull_request,workflow_dispatch]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
|
@ -9,7 +9,7 @@ jobs:
|
|||
batch_1:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: .github/install.sh
|
||||
- name: run1
|
||||
|
|
@ -17,7 +17,7 @@ jobs:
|
|||
batch_2:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: .github/install.sh
|
||||
- name: run2
|
||||
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
batch_3:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: .github/install.sh
|
||||
- name: run3
|
||||
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
batch_4:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: install dependencies
|
||||
run: .github/install.sh
|
||||
- name: run4
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ name: Filter Testsuite
|
|||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions: {}
|
||||
jobs:
|
||||
|
|
@ -13,7 +14,7 @@ jobs:
|
|||
if: (github.event.comment.user.login == 'sloriot' || github.event.comment.user.login == 'lrineau') && contains(github.event.comment.body, '/testme')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: get_label
|
||||
with:
|
||||
result-encoding: string
|
||||
|
|
@ -62,7 +63,7 @@ jobs:
|
|||
ssh ${HOST} "${PATH_TO_SCRIPT}/run_testsuite_from_branch_name.sh $USER_NAME $BRANCH_NAME $BASE $PR_NUMBER"
|
||||
done
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const address = "Testsuite launched. Results will appear on the following page: https://cgal.geometryfactory.com/~cgaltest/test_suite/TESTRESULTS/index.shtml "
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
table {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-bottom: 24px;
|
||||
border-spacing: 0;
|
||||
border-bottom: 2px solid black;
|
||||
border-top: 2px solid black;
|
||||
}
|
||||
table th {
|
||||
padding: 3px 10px;
|
||||
background-color: white;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
table td {
|
||||
padding: 3px 10px;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-bottom: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
table tr.odd {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
table tr.even {
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
name: List workflow last run
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 10 * * 1"
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
jobs:
|
||||
list_workflow:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
messages: ${{ steps.cat_output.outputs.message }}
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: run script
|
||||
run: |
|
||||
chmod +x ./Scripts/developer_scripts/list_cgal_workflows_last_run.sh
|
||||
./Scripts/developer_scripts/list_cgal_workflows_last_run.sh > output.md
|
||||
- name: convert markdown to html
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install -y pandoc
|
||||
pandoc -f markdown -t html --self-contained --css=.github/workflows/list_workflow_last_run.css -o output.html output.md
|
||||
- name: set_output
|
||||
id: cat_output
|
||||
run: |
|
||||
delimiter="$(openssl rand -hex 8)"
|
||||
echo "message<<${delimiter}" >> "${GITHUB_OUTPUT}"
|
||||
echo "Subject:List workflow run \nContent-Type: text/html; charset=\"UTF-8\"\n" >> "${GITHUB_OUTPUT}"
|
||||
echo "<html><body>" >> "${GITHUB_OUTPUT}"
|
||||
cat output.html >> "${GITHUB_OUTPUT}"
|
||||
echo "</body></html>" >> "${GITHUB_OUTPUT}"
|
||||
echo "${delimiter}" >> "${GITHUB_OUTPUT}"
|
||||
call_send_email:
|
||||
needs: list_workflow
|
||||
uses: ./.github/workflows/send_email.yml
|
||||
with:
|
||||
message: ${{needs.list_workflow.outputs.messages}}
|
||||
secrets:
|
||||
email: ${{ secrets.CGAL_SEND_WORKFLOW_LIST_EMAIL_TO }}
|
||||
private_key: ${{ secrets.CGAL_SEND_WORKFLOW_LIST_EMAIL_SSH_PRIVATE_KEY }}
|
||||
user: ${{ secrets.CGAL_SEND_WORKFLOW_LIST_EMAIL_SSH_USER }}
|
||||
host: ${{ secrets.CGAL_SEND_WORKFLOW_LIST_EMAIL_SSH_HOST }}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# SPDX-FileCopyrightText: 2020 Free Software Foundation Europe e.V. <https://fsfe.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
name: REUSE Compliance Check
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
reuse:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: REUSE version
|
||||
uses: fsfe/reuse-action@v2
|
||||
with:
|
||||
args: --version
|
||||
- name: REUSE lint
|
||||
uses: fsfe/reuse-action@v2
|
||||
with:
|
||||
args: --include-submodules lint
|
||||
- name: REUSE SPDX SBOM
|
||||
uses: fsfe/reuse-action@v2
|
||||
with:
|
||||
args: spdx
|
||||
- name: install dependencies
|
||||
run: sudo apt-get install -y cmake
|
||||
- name: Create CGAL internal release
|
||||
run: |
|
||||
mkdir -p ./release
|
||||
cmake -DDESTINATION=./release -DCGAL_VERSION=9.9 -P ./Scripts/developer_scripts/cgal_create_release_with_cmake.cmake
|
||||
- name: REUSE lint release tarball
|
||||
uses: fsfe/reuse-action@v2
|
||||
with:
|
||||
args: --root ./release/CGAL-9.9 --include-submodules lint
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
name: Send Email using SSH
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
message:
|
||||
description: 'Message to send'
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
email:
|
||||
required: true
|
||||
private_key:
|
||||
required: true
|
||||
user:
|
||||
required: true
|
||||
host:
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
send_email:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: install ssh keys
|
||||
run: |
|
||||
install -m 600 -D /dev/null ~/.ssh/id_rsa
|
||||
echo "${{ secrets.private_key }}" > ~/.ssh/id_rsa
|
||||
ssh-keyscan -H ${{ secrets.host }} > ~/.ssh/known_hosts
|
||||
- name: send email via ssh
|
||||
run: |
|
||||
echo -e '${{ inputs.message }}' | ssh ${{ secrets.user }}@${{ secrets.host }} "/sbin/sendmail -t ${{ secrets.email }}"
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
name: Wiki Notification
|
||||
|
||||
on: gollum
|
||||
|
||||
jobs:
|
||||
prepare_email:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
messages: ${{ steps.set-result.outputs.result }}
|
||||
steps:
|
||||
- name: get informations and prepare email
|
||||
uses: actions/github-script@v7
|
||||
id: set-result
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
const payload = context.payload;
|
||||
const actor = payload.sender;
|
||||
const pages = payload.pages;
|
||||
let messages = "Subject:Updates to CGAL Wiki \nContent-Type: text/html\n";
|
||||
messages += "<html><body>";
|
||||
messages += `<p>The following CGAL Wiki page were modified by <a href="${actor.html_url}">"${actor.login}"</a>:</p><ul>\n`
|
||||
for (const page of pages){
|
||||
messages += `<li><a href="${page.html_url}">${page.title}</a> (link to <a href="${page.html_url}/_compare/${page.sha}%5E...${page.sha}">the diff</a>)</li>\n`;
|
||||
}
|
||||
messages += "</ul></body></html>";
|
||||
console.log( messages );
|
||||
return messages;
|
||||
call_send_email:
|
||||
needs: prepare_email
|
||||
uses: ./.github/workflows/send_email.yml
|
||||
with:
|
||||
message: ${{needs.prepare_email.outputs.messages}}
|
||||
secrets:
|
||||
email: ${{ secrets.CGAL_SEND_WIKI_EMAIL_TO }}
|
||||
private_key: ${{ secrets.CGAL_SEND_WIKI_EMAIL_SSH_PRIVATE_KEY }}
|
||||
user: ${{ secrets.CGAL_SEND_WIKI_EMAIL_SSH_USER }}
|
||||
host: ${{ secrets.CGAL_SEND_WIKI_EMAIL_SSH_HOST }}
|
||||
|
|
@ -179,12 +179,6 @@ GraphicsView/demo/Triangulation_2/Makefile
|
|||
GraphicsView/demo/Triangulation_2/Regular_triangulation_2
|
||||
GraphicsView/demo/Triangulation_2/qrc_*.cxx
|
||||
GraphicsView/demo/Triangulation_2/ui_*.h
|
||||
GraphicsView/src/CGAL_Qt5/*.dll
|
||||
GraphicsView/src/CGAL_Qt5/*.lib
|
||||
GraphicsView/src/CGAL_Qt5/*.so
|
||||
GraphicsView/src/CGAL_Qt5/Makefile
|
||||
GraphicsView/src/CGAL_Qt5/moc_*.cxx
|
||||
GraphicsView/src/CGAL_Qt5/qrc_*.cxx
|
||||
HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds_decorator
|
||||
|
|
@ -880,7 +874,6 @@ Surface_mesher/demo/Surface_mesher/.*.deps
|
|||
Surface_mesher/demo/Surface_mesher/.qglviewer.xml
|
||||
Surface_mesher/demo/Surface_mesher/Makefile
|
||||
Surface_mesher/demo/Surface_mesher/Surface_mesher
|
||||
Surface_mesher/demo/Surface_mesher/Surface_mesher_Qt5_Demo
|
||||
Surface_mesher/demo/Surface_mesher/VTK/Makefile
|
||||
Surface_mesher/demo/Surface_mesher/VTK/mesh_a_3D_image
|
||||
Surface_mesher/demo/Surface_mesher/VTK/mesh_a_VTK_3D_image
|
||||
|
|
@ -895,7 +888,6 @@ Surface_mesher/demo/Surface_mesher/out*.off
|
|||
Surface_mesher/demo/Surface_mesher/polyhedron_remesher
|
||||
Surface_mesher/demo/Surface_mesher/polyhedron_remesher_with_edges
|
||||
Surface_mesher/demo/Surface_mesher/qrc_*.c*
|
||||
Surface_mesher/demo/Surface_mesher/qt5-demo
|
||||
Surface_mesher/demo/Surface_mesher/ui_*.h
|
||||
Surface_mesher/doxygen
|
||||
Surface_mesher/examples/Surface_mesher/.*.deps
|
||||
|
|
@ -1213,3 +1205,4 @@ gmon.*
|
|||
Polygonal_surface_reconstruction/examples/build*
|
||||
Polygonal_surface_reconstruction/test/build*
|
||||
Solver_interface/examples/build*
|
||||
/Mesh_3/examples/Mesh_3/indicator_0.inr.gz
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: CGAL
|
||||
Upstream-Contact: CGAL Editorial Board <info@cgal.org>
|
||||
Source: https://github.com/CGAL/cgal
|
||||
|
||||
Files: .* *.cmake *.md .github/* Maintenance/* */TODO */doc/* */deb/* */applications/* */doc_html/* */scripts/* */developer_scripts/* */demo/* */examples/* */src/* */test/* */benchmarks/* */benchmark/* */package_info/* */data/* */cmake/*
|
||||
Copyright: 1995-2023 The CGAL Project
|
||||
License: CC0-1.0
|
||||
|
||||
Files: CMakeLists.txt GraphicsView/include/CGAL/Qt/ImageInterface.ui GraphicsView/include/CGAL/Qt/resources/qglviewer-icon.xpm Installation/AUTHORS Installation/CMakeLists.txt Installation/README Installation/auxiliary/cgal_create_cmake_script.1 Installation/auxiliary/gmp/README Installation/include/CGAL/license/gpl_package_list.txt MacOSX/auxiliary/cgal_app.icns copyright
|
||||
Copyright: 1995-2023 The CGAL Project
|
||||
License: CC0-1.0
|
||||
|
|
@ -6,12 +6,14 @@ project(AABB_traits_benchmark)
|
|||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core)
|
||||
|
||||
# google benchmark
|
||||
find_package(benchmark)
|
||||
|
||||
if (benchmark_FOUND)
|
||||
create_single_source_cgal_program("tree_creation.cpp")
|
||||
target_link_libraries(tree_creation benchmark::benchmark)
|
||||
endif()
|
||||
create_single_source_cgal_program("test.cpp")
|
||||
create_single_source_cgal_program("tree_construction.cpp")
|
||||
|
||||
# google benchmark
|
||||
find_package(benchmark QUIET)
|
||||
if(benchmark_FOUND)
|
||||
create_single_source_cgal_program("tree_creation.cpp")
|
||||
target_link_libraries(tree_creation benchmark::benchmark)
|
||||
else()
|
||||
message(STATUS "NOTICE: The benchmark 'tree_creation.cpp' requires the Google benchmark library, and will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ int main(int argc, char **argv)
|
|||
app.setOrganizationName("INRIA");
|
||||
app.setApplicationName("AABB tree demo");
|
||||
|
||||
// Import resources from libCGALQt (Qt5).
|
||||
// Import resources from libCGALQt (Qt6).
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
|
||||
MainWindow mainWindow;
|
||||
|
|
@ -49,12 +49,3 @@ int main(int argc, char **argv)
|
|||
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
# include "Scene.cpp"
|
||||
# include "Scene_moc.cpp"
|
||||
# include "benchmarks.cpp"
|
||||
# include "Viewer.cpp"
|
||||
# include "Viewer_moc.cpp"
|
||||
# include "MainWindow.cpp"
|
||||
# include "MainWindow_moc.cpp"
|
||||
|
||||
|
|
|
|||
|
|
@ -5,81 +5,47 @@ project(AABB_tree_Demo)
|
|||
|
||||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
# Instruct CMake to run moc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
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)
|
||||
endif()
|
||||
|
||||
if(POLICY CMP0071)
|
||||
cmake_policy(SET CMP0071 NEW)
|
||||
endif()
|
||||
# Find CGAL and CGAL Qt6
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
|
||||
# Include this package's headers first
|
||||
include_directories(BEFORE ./ ./include)
|
||||
# Find Qt6 itself
|
||||
find_package(Qt6 QUIET COMPONENTS Gui OpenGL)
|
||||
|
||||
# Find CGAL and CGAL Qt5
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
|
||||
if(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
# Find Qt5 itself
|
||||
find_package(Qt5 QUIET COMPONENTS Script OpenGL Gui Svg)
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
|
||||
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
# Instruct CMake to run moc/ui/rcc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
qt5_wrap_ui(UI_FILES MainWindow.ui)
|
||||
|
||||
include(AddFileDependencies)
|
||||
|
||||
qt5_generate_moc("MainWindow.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp")
|
||||
add_file_dependencies(MainWindow_moc.cpp
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h")
|
||||
|
||||
qt5_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp")
|
||||
add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h")
|
||||
|
||||
qt5_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp")
|
||||
add_file_dependencies(Scene_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Scene.h")
|
||||
|
||||
qt5_add_resources(CGAL_Qt5_RESOURCE_FILES AABB_demo.qrc)
|
||||
|
||||
add_file_dependencies(
|
||||
AABB_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp")
|
||||
|
||||
add_executable(
|
||||
AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt5_RESOURCE_FILES}
|
||||
#${CGAL_Qt5_MOC_FILES}
|
||||
qt_add_executable(
|
||||
AABB_demo AABB_demo.cpp Scene.cpp benchmarks.cpp Viewer.cpp MainWindow.cpp
|
||||
MainWindow.ui AABB_demo.qrc
|
||||
)
|
||||
# Link with Qt libraries
|
||||
target_link_libraries(AABB_demo PRIVATE Qt5::OpenGL Qt5::Gui
|
||||
CGAL::CGAL CGAL::CGAL_Qt5)
|
||||
target_link_libraries(AABB_demo PRIVATE Qt6::Gui Qt6::OpenGL
|
||||
CGAL::CGAL CGAL::CGAL_Qt6)
|
||||
|
||||
add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo)
|
||||
|
||||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||
cgal_add_compilation_test(AABB_demo)
|
||||
|
||||
else(CGAL_Qt5_FOUND
|
||||
AND Qt5_FOUND)
|
||||
else(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
set(AABB_MISSING_DEPS "")
|
||||
|
||||
if(NOT CGAL_Qt5_FOUND)
|
||||
set(AABB_MISSING_DEPS "CGAL_Qt5, ${AABB_MISSING_DEPS}")
|
||||
if(NOT CGAL_Qt6_FOUND)
|
||||
set(AABB_MISSING_DEPS "CGAL_Qt6, ${AABB_MISSING_DEPS}")
|
||||
endif()
|
||||
|
||||
if(NOT Qt5_FOUND)
|
||||
set(AABB_MISSING_DEPS "Qt5, ${AABB_MISSING_DEPS}")
|
||||
if(NOT Qt6_FOUND)
|
||||
set(AABB_MISSING_DEPS "Qt6, ${AABB_MISSING_DEPS}")
|
||||
endif()
|
||||
|
||||
message(
|
||||
STATUS
|
||||
"NOTICE: This demo requires ${AABB_MISSING_DEPS}and will not be compiled."
|
||||
)
|
||||
message("NOTICE: This demo requires ${AABB_MISSING_DEPS}, and will not be compiled.")
|
||||
|
||||
endif(
|
||||
CGAL_Qt5_FOUND
|
||||
AND Qt5_FOUND)
|
||||
endif(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
|
|
|||
|
|
@ -10,15 +10,19 @@
|
|||
#include <QSettings>
|
||||
#include <QHeaderView>
|
||||
#include <QClipboard>
|
||||
#include <QInputDialog>
|
||||
|
||||
#include "ui_MainWindow.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent)
|
||||
: CGAL::Qt::DemosMainWindow(parent)
|
||||
: CGAL::Qt::DemosMainWindow(parent)
|
||||
{
|
||||
ui = new Ui::MainWindow;
|
||||
ui->setupUi(this);
|
||||
|
||||
this->addAboutDemo(":/cgal/AABB_demo/about.html");
|
||||
this->addAboutCGAL();
|
||||
|
||||
// saves some pointers from ui, for latter use.
|
||||
m_pViewer = ui->viewer;
|
||||
|
||||
|
|
@ -418,7 +422,3 @@ void MainWindow::on_actionCopy_snapshot_triggered()
|
|||
qb->setImage(snapshot);
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QtOpenGL/qgl.h>
|
||||
#include <CGAL/Qt/DemosMainWindow.h>
|
||||
|
||||
class QDragEnterEvent;
|
||||
|
|
@ -12,7 +11,6 @@ namespace Ui {
|
|||
class MainWindow;
|
||||
}
|
||||
|
||||
|
||||
class MainWindow :
|
||||
public CGAL::Qt::DemosMainWindow
|
||||
{
|
||||
|
|
@ -21,12 +19,12 @@ public:
|
|||
MainWindow(QWidget* parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
public slots:
|
||||
public Q_SLOTS:
|
||||
void updateViewerBBox();
|
||||
void open(QString filename);
|
||||
void setAddKeyFrameKeyboardModifiers(Qt::KeyboardModifiers);
|
||||
|
||||
protected slots:
|
||||
protected Q_SLOTS:
|
||||
|
||||
// settings
|
||||
void quit();
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ void Scene::compute_elements(int mode)
|
|||
pos_points.push_back(p.z());
|
||||
}
|
||||
}
|
||||
//The Segements
|
||||
//The segments
|
||||
{
|
||||
std::list<Segment>::iterator sit;
|
||||
for(sit = m_segments.begin(); sit != m_segments.end(); sit++)
|
||||
|
|
@ -618,7 +618,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[0].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(0.7,0.0,0.0);
|
||||
color.setRgbF(0.7f,0.0f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_POINTS, 0, static_cast<GLsizei>(pos_points.size()/3));
|
||||
|
|
@ -631,7 +631,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[1].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(0.0,0.7,0.0);
|
||||
color.setRgbF(0.0f,0.7f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(pos_lines.size()/3));
|
||||
|
|
@ -669,7 +669,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[3].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(1.0,0.0,0.0);
|
||||
color.setRgbF(1.0f,0.0f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(pos_cut_segments.size()/3));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef SCENE_H
|
||||
#define SCENE_H
|
||||
|
||||
#include <QtOpenGL/qgl.h>
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
|
|
@ -77,7 +76,6 @@ private:
|
|||
};
|
||||
|
||||
public:
|
||||
QGLContext* context;
|
||||
void draw(CGAL::QGLViewer*);
|
||||
void update_bbox();
|
||||
Bbox bbox() { return m_bbox; }
|
||||
|
|
@ -173,7 +171,7 @@ private:
|
|||
void attrib_buffers(CGAL::QGLViewer*);
|
||||
void compile_shaders();
|
||||
void compute_texture(int, int, Color_ramp, Color_ramp);
|
||||
private slots:
|
||||
private Q_SLOTS:
|
||||
void updateCutPlane();
|
||||
|
||||
public:
|
||||
|
|
@ -255,7 +253,7 @@ public:
|
|||
|
||||
|
||||
|
||||
public slots:
|
||||
public Q_SLOTS:
|
||||
// cutting plane
|
||||
void cutting_plane(bool override = false);
|
||||
void changed();
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
#include "Viewer.h"
|
||||
#include "Scene.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QGLFunctions>
|
||||
#include <CGAL/Qt/CreateOpenGLContext.h>
|
||||
|
||||
Viewer::Viewer(QWidget* parent)
|
||||
: CGAL::QGLViewer(parent),
|
||||
m_pScene(nullptr),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "Scene.h"
|
||||
#include "Refiner.h"
|
||||
#include <QInputDialog>
|
||||
#include <CGAL/Memory_sizer.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -9,9 +9,11 @@ and compute intersections between query objects and the primitives stored in the
|
|||
In addition, it contains predicates and constructors to compute distances between a point query
|
||||
and the primitives stored in the AABB tree.
|
||||
|
||||
\cgalRefines `SearchGeomTraits_3`
|
||||
\cgalRefines{SearchGeomTraits_3}
|
||||
|
||||
\cgalHasModel All models of the concept `Kernel`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModelsBare{All models of the concept `Kernel`}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\sa `CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>`
|
||||
\sa `CGAL::AABB_tree<AABBTraits>`
|
||||
|
|
@ -47,7 +49,7 @@ Provides the operator:
|
|||
`return_type operator()(const Query& q, const Primitive::Datum& d)`,
|
||||
|
||||
which computes the intersection between `q` and `d`. The type of the returned object
|
||||
must be a `boost::optional` of a `boost::variant` of the possible intersection types.
|
||||
must be a `std::optional` of a `std::variant` of the possible intersection types.
|
||||
*/
|
||||
typedef unspecified_type Intersect_3;
|
||||
|
||||
|
|
@ -74,9 +76,9 @@ typedef unspecified_type Construct_projected_point_3;
|
|||
/*!
|
||||
A functor object to compare the distance of two points wrt a third one. Provides the operator:
|
||||
|
||||
`CGAL::Comparision_result operator()(const Point_3& p1, const Point_3& p2, const Point_3& p3)`,
|
||||
`CGAL::Comparison_result operator()(const Point_3& p1, const Point_3& p2, const Point_3& p3)`,
|
||||
|
||||
which compares the distance between `p1 and `p2`, and between `p2` and `p3`.
|
||||
which compares the distance between `p1` and `p2`, and between `p2` and `p3`.
|
||||
*/
|
||||
typedef unspecified_type Compare_distance_3;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,11 +12,13 @@ The concept `AABBPrimitive` describes the requirements for the primitives stored
|
|||
|
||||
The `Primitive` type can be, e.g., a wrapper around a `Handle`. Assume for instance that the input objects are the triangle faces of a mesh stored as a `CGAL::Polyhedron_3`. The `Datum` would be a `Triangle_3` and the `Id` would be a polyhedron `Face_handle`. Method `datum()` can return either a `Triangle_3` constructed on the fly from the face handle or a `Triangle_3` stored internally. This provides a way for the user to trade memory for efficiency.
|
||||
|
||||
\cgalHasModel `CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMap,Tag_false,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_segment_primitive<Iterator,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_triangle_primitive<Iterator,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_halfedge_graph_segment_primitive<HalfedgeGraph,VertexPointPMap,Tag_false,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_face_graph_triangle_primitive<FaceGraph,VertexPointPMap,Tag_false,CacheDatum>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMap,Tag_false,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_segment_primitive<Iterator,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_triangle_primitive<Iterator,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_halfedge_graph_segment_primitive<HalfedgeGraph,VertexPointPMap,Tag_false,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_face_graph_triangle_primitive<FaceGraph,VertexPointPMap,Tag_false,CacheDatum>}
|
||||
\cgalHasModelsEnd
|
||||
*/
|
||||
|
||||
class AABBPrimitive {
|
||||
|
|
|
|||
|
|
@ -21,9 +21,11 @@ The `Datum` would be a `Triangle_3` and the `Id` a `std::size_t`. The shared dat
|
|||
`std::vector<Triangle_3>`.
|
||||
The method `datum(const Shared_data&)` then returns a triangle from the vector.
|
||||
|
||||
\cgalHasModel `CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMap,Tag_true,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_halfedge_graph_segment_primitive<HalfedgeGraph,VertexPointPMap,Tag_true,CacheDatum>`
|
||||
\cgalHasModel `CGAL::AABB_face_graph_triangle_primitive<FaceGraph,VertexPointPMap,Tag_true,CacheDatum>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::AABB_primitive<Id,ObjectPropertyMap,PointPropertyMap,Tag_true,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_halfedge_graph_segment_primitive<HalfedgeGraph,VertexPointPMap,Tag_true,CacheDatum>}
|
||||
\cgalHasModels{CGAL::AABB_face_graph_triangle_primitive<FaceGraph,VertexPointPMap,Tag_true,CacheDatum>}
|
||||
\cgalHasModelsEnd
|
||||
*/
|
||||
|
||||
class AABBPrimitiveWithSharedData {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,11 @@ concept `AABBGeomTraits`. In addition to the types required by
|
|||
`AABBGeomTraits` it also requires types and functors necessary to
|
||||
define the Intersection_distance functor.
|
||||
|
||||
\cgalRefines `AABBGeomTraits`
|
||||
\cgalRefines{AABBGeomTraits}
|
||||
|
||||
\cgalHasModel All models of the concept `Kernel`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModelsBare{All models of the concept `Kernel`}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\sa `CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>`
|
||||
\sa `CGAL::AABB_tree<AABBTraits>`
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ The concept `AABBRayIntersectionTraits` is a refinement of the concept
|
|||
`AABBTraits` it also requires function objects to calculate the
|
||||
distance of an intersection along a ray.
|
||||
|
||||
\cgalHasModel `CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\sa `CGAL::AABB_tree<AABBTraits>`
|
||||
\sa `AABBPrimitive`
|
||||
|
|
@ -25,15 +27,15 @@ public:
|
|||
/*!
|
||||
A functor object to compute the distance between the source of a ray and its
|
||||
closest intersection point between the ray and a primitive or a bounding box.
|
||||
An empty `boost::optional` is returned, if there is no intersection.
|
||||
An empty `std::optional` is returned, if there is no intersection.
|
||||
When there is an intersection, an object of type `FT` is returned such that
|
||||
if `i1` and `i2` are two intersection points, then `i1` is closer to the source
|
||||
of the ray than `i2` iff `n1 < n2`, `n1` and `n2` being the numbers returned for `i1` and `i2`
|
||||
respectively.
|
||||
|
||||
Provides the operators:
|
||||
`boost::optional<FT> operator()(const Ray_3& r, const Bounding_box& bbox)`.
|
||||
`boost::optional<std::pair<FT, Intersection_and_primitive_id<Ray_3>::%Type > >
|
||||
`std::optional<FT> operator()(const Ray_3& r, const Bounding_box& bbox)`.
|
||||
`std::optional<std::pair<FT, Intersection_and_primitive_id<Ray_3>::%Type > >
|
||||
operator()(const Ray_3& r, const Primitive& primitive)`.
|
||||
|
||||
A common algorithm to compute the intersection between a bounding box and a ray is <A
|
||||
|
|
|
|||
|
|
@ -5,9 +5,11 @@
|
|||
|
||||
The concept `AABBTraits` provides the geometric primitive types and methods for the class `CGAL::AABB_tree<AABBTraits>`.
|
||||
|
||||
\cgalHasModel `CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\cgalRefines `SearchGeomTraits_3`
|
||||
\cgalRefines{SearchGeomTraits_3}
|
||||
|
||||
\sa `CGAL::AABB_traits<AABBGeomTraits,AABBPrimitive>`
|
||||
\sa `CGAL::AABB_tree<AABBTraits>`
|
||||
|
|
@ -119,10 +121,10 @@ typedef unspecified_type Do_intersect;
|
|||
|
||||
/*!
|
||||
A functor object to compute the intersection of a query and a primitive. Provides the operator:
|
||||
`boost::optional<Intersection_and_primitive_id<Query>::%Type > operator()(const Query & q, const Primitive& primitive);` which returns the intersection as a pair composed of an object and a primitive id, iff the query intersects the primitive.
|
||||
`std::optional<Intersection_and_primitive_id<Query>::%Type > operator()(const Query & q, const Primitive& primitive);` which returns the intersection as a pair composed of an object and a primitive id, iff the query intersects the primitive.
|
||||
|
||||
\cgalHeading{Note on Backward Compatibility}
|
||||
Before the release 4.3 of \cgal, the return type of this function used to be `boost::optional<Object_and_primitive_id>`.
|
||||
Before the release 4.3 of \cgal, the return type of this function used to be `std::optional<Object_and_primitive_id>`.
|
||||
*/
|
||||
typedef unspecified_type Intersection;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
\cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABBTree}
|
||||
\cgalPkgPicture{aabb-teaser-thumb.png}
|
||||
\cgalPkgSummaryBegin
|
||||
\cgalPkgAuthors{Pierre Alliez, Stéphane Tayeb, Camille Wormser}
|
||||
\cgalPkgAuthors{Pierre Alliez, Stéphane Tayeb, and Camille Wormser}
|
||||
\cgalPkgDesc{The AABB (axis-aligned bounding box) tree component offers a static data structure and algorithms to perform efficient intersection and distance queries on sets of finite 3D geometric objects.}
|
||||
\cgalPkgManuals{Chapter_3D_Fast_Intersection_and_Distance_Computation,PkgAABBTreeRef}
|
||||
\cgalPkgSummaryEnd
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ query and location of query in space.
|
|||
number of primitive data (greater than 2M faces in our experiments)
|
||||
however we noticed that it is not necessary (and sometimes even
|
||||
slower) to use all reference points when constructing the
|
||||
KD-tree. In these cases we recommend to specify trough the function
|
||||
KD-tree. In these cases we recommend to specify through the function
|
||||
` AABB_tree::accelerate_distance_queries()` fewer reference
|
||||
points (typically not more than 100K) evenly distributed over the
|
||||
input primitives.
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ typedef CGAL::Polyhedron_3<K> Polyhedron;
|
|||
typedef CGAL::AABB_face_graph_triangle_primitive<Polyhedron> Primitive;
|
||||
typedef CGAL::AABB_traits<K, Primitive> Traits;
|
||||
typedef CGAL::AABB_tree<Traits> Tree;
|
||||
typedef boost::optional< Tree::Intersection_and_primitive_id<Segment>::Type > Segment_intersection;
|
||||
typedef boost::optional< Tree::Intersection_and_primitive_id<Plane>::Type > Plane_intersection;
|
||||
typedef std::optional< Tree::Intersection_and_primitive_id<Segment>::Type > Segment_intersection;
|
||||
typedef std::optional< Tree::Intersection_and_primitive_id<Plane>::Type > Plane_intersection;
|
||||
typedef Tree::Primitive_id Primitive_id;
|
||||
|
||||
int main()
|
||||
|
|
@ -57,7 +57,7 @@ int main()
|
|||
if(intersection)
|
||||
{
|
||||
// gets intersection object
|
||||
const Point* p = boost::get<Point>(&(intersection->first));
|
||||
const Point* p = std::get_if<Point>(&(intersection->first));
|
||||
if(p)
|
||||
std::cout << "intersection object is a point " << *p << std::endl;
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ int main()
|
|||
if(plane_intersection)
|
||||
{
|
||||
|
||||
if(boost::get<Segment>(&(plane_intersection->first)))
|
||||
if(std::get_if<Segment>(&(plane_intersection->first)))
|
||||
std::cout << "intersection object is a segment" << std::endl;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ typedef boost::graph_traits<Mesh>::halfedge_descriptor halfedge_descriptor;
|
|||
typedef CGAL::AABB_face_graph_triangle_primitive<Mesh> Primitive;
|
||||
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;
|
||||
typedef std::optional<Tree::Intersection_and_primitive_id<Ray>::Type> Ray_intersection;
|
||||
|
||||
struct Skip
|
||||
{
|
||||
|
|
@ -70,8 +70,8 @@ int main(int argc, char* argv[])
|
|||
Ray_intersection intersection = tree.first_intersection(ray, skip);
|
||||
if(intersection)
|
||||
{
|
||||
if(boost::get<Point>(&(intersection->first))){
|
||||
const Point* p = boost::get<Point>(&(intersection->first) );
|
||||
if(std::get_if<Point>(&(intersection->first))){
|
||||
const Point* p = std::get_if<Point>(&(intersection->first) );
|
||||
std::cout << *p << std::endl;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
#include <CGAL/AABB_primitive.h>
|
||||
#include <CGAL/boost/graph/property_maps.h>
|
||||
#include <CGAL/Default.h>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
|
|
@ -33,7 +32,7 @@ namespace CGAL {
|
|||
* while the AABB tree holding the primitive is in use.
|
||||
* The triangle type of the primitive (`Datum`) is `CGAL::Kernel_traits< boost::property_traits< VertexPointPMap >::%value_type >::%Kernel::Triangle_3`.
|
||||
*
|
||||
* \cgalModels `AABBPrimitiveWithSharedData`
|
||||
* \cgalModels{AABBPrimitiveWithSharedData}
|
||||
*
|
||||
*\tparam FaceGraph is a model of the face graph concept.
|
||||
*\tparam VertexPointPMap is a property map with `boost::graph_traits<FaceGraph>::%vertex_descriptor`
|
||||
|
|
@ -57,9 +56,9 @@ template < class FaceGraph,
|
|||
class CacheDatum=Tag_false >
|
||||
class AABB_face_graph_triangle_primitive
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
: public AABB_primitive<typename boost::mpl::if_<OneFaceGraphPerTree,
|
||||
typename boost::graph_traits<FaceGraph>::face_descriptor,
|
||||
std::pair<typename boost::graph_traits<FaceGraph>::face_descriptor, const FaceGraph*> >::type,
|
||||
: public AABB_primitive<std::conditional_t<OneFaceGraphPerTree::value,
|
||||
typename boost::graph_traits<FaceGraph>::face_descriptor,
|
||||
std::pair<typename boost::graph_traits<FaceGraph>::face_descriptor, const FaceGraph*> >,
|
||||
Triangle_from_face_descriptor_map<
|
||||
FaceGraph,
|
||||
typename Default::Get<VertexPointPMap,
|
||||
|
|
@ -76,7 +75,7 @@ class AABB_face_graph_triangle_primitive
|
|||
{
|
||||
typedef typename Default::Get<VertexPointPMap, typename boost::property_map< FaceGraph, vertex_point_t>::const_type >::type VertexPointPMap_;
|
||||
typedef typename boost::graph_traits<FaceGraph>::face_descriptor FD;
|
||||
typedef typename boost::mpl::if_<OneFaceGraphPerTree, FD, std::pair<FD, const FaceGraph*> >::type Id_;
|
||||
typedef std::conditional_t<OneFaceGraphPerTree::value, FD, std::pair<FD, const FaceGraph*> > Id_;
|
||||
|
||||
typedef Triangle_from_face_descriptor_map<FaceGraph,VertexPointPMap_> Triangle_property_map;
|
||||
typedef One_point_from_face_descriptor_map<FaceGraph,VertexPointPMap_> Point_property_map;
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@
|
|||
#include <iterator>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <CGAL/type_traits/is_iterator.h>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
#include <CGAL/Default.h>
|
||||
|
||||
|
|
@ -34,7 +32,7 @@ namespace CGAL {
|
|||
|
||||
/*!
|
||||
* \ingroup PkgAABBTreeRef
|
||||
* Primitive type for a edge of a polyhedral surface.
|
||||
* Primitive type for an edge of a polyhedral surface.
|
||||
* It wraps an `edge_descriptor` into a 3D segment.
|
||||
* The class model of `HalfedgeGraph` from which the primitive is built should not be deleted
|
||||
* while the AABB tree holding the primitive is in use.
|
||||
|
|
@ -42,8 +40,10 @@ namespace CGAL {
|
|||
* of `VertexPointPMap` (using the `Kernel_traits` mechanism).
|
||||
* The segment type of the primitive (`Datum`) is `CGAL::Kernel_traits< boost::property_traits< VertexPointPMap >::%value_type >::%Kernel::Segment_3`.
|
||||
*
|
||||
* \cgalModels `AABBPrimitive` if `OneHalfedgeGraphPerTree` is `CGAL::Tag_false`,
|
||||
* and `AABBPrimitiveWithSharedData` if `OneHalfedgeGraphPerTree` is `CGAL::Tag_true`.
|
||||
* \cgalModelsBareBegin
|
||||
* \cgalModelsBare{`AABBPrimitive` if `OneHalfedgeGraphPerTree` is `CGAL::Tag_false`}
|
||||
* \cgalModelsBare{`AABBPrimitiveWithSharedData` if `OneHalfedgeGraphPerTree` is `CGAL::Tag_true`}
|
||||
* \cgalModelsBareEnd
|
||||
*
|
||||
* \tparam HalfedgeGraph is a model of the halfedge graph concept.
|
||||
* as key type and a \cgal Kernel `Point_3` as value type.
|
||||
|
|
@ -69,9 +69,9 @@ template < class HalfedgeGraph,
|
|||
class CacheDatum = Tag_false >
|
||||
class AABB_halfedge_graph_segment_primitive
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
: public AABB_primitive< typename boost::mpl::if_<OneHalfedgeGraphPerTree,
|
||||
typename boost::graph_traits<HalfedgeGraph>::edge_descriptor,
|
||||
std::pair<typename boost::graph_traits<HalfedgeGraph>::edge_descriptor, const HalfedgeGraph*> >::type,
|
||||
: public AABB_primitive< std::conditional_t<OneHalfedgeGraphPerTree::value,
|
||||
typename boost::graph_traits<HalfedgeGraph>::edge_descriptor,
|
||||
std::pair<typename boost::graph_traits<HalfedgeGraph>::edge_descriptor, const HalfedgeGraph*> >,
|
||||
Segment_from_edge_descriptor_map<
|
||||
HalfedgeGraph,
|
||||
typename Default::Get<VertexPointPMap,
|
||||
|
|
@ -88,7 +88,7 @@ class AABB_halfedge_graph_segment_primitive
|
|||
{
|
||||
typedef typename Default::Get<VertexPointPMap,typename boost::property_map< HalfedgeGraph,vertex_point_t>::const_type >::type VertexPointPMap_;
|
||||
typedef typename boost::graph_traits<HalfedgeGraph>::edge_descriptor ED;
|
||||
typedef typename boost::mpl::if_<OneHalfedgeGraphPerTree, ED, std::pair<ED, const HalfedgeGraph*> >::type Id_;
|
||||
typedef std::conditional_t<OneHalfedgeGraphPerTree::value, ED, std::pair<ED, const HalfedgeGraph*> > Id_;
|
||||
|
||||
typedef Segment_from_edge_descriptor_map<HalfedgeGraph,VertexPointPMap_> Segment_property_map;
|
||||
typedef Source_point_from_edge_descriptor_map<HalfedgeGraph,VertexPointPMap_> Point_property_map;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ namespace CGAL {
|
|||
/// AABB tree is built should not be deleted while the AABB tree
|
||||
/// is in use.
|
||||
///
|
||||
/// \cgalModels `AABBPrimitive`
|
||||
/// \cgalModels{AABBPrimitive}
|
||||
/// \tparam GeomTraits must provide a \c %Point_3
|
||||
/// type, used as \c Point, and a \c %Segment_3 type, used as \c
|
||||
/// Datum and constructible from two arguments of type \c
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace CGAL {
|
|||
/// the polyhedron from which the AABB tree is built should not be
|
||||
/// deleted while the AABB tree is in use.
|
||||
///
|
||||
/// \cgalModels `AABBPrimitive`
|
||||
/// \cgalModels{AABBPrimitive}
|
||||
/// \tparam GeomTraits must provides a \c %Point_3
|
||||
/// type, used as \c Point, and a \c %Triangle_3 type, used as \c
|
||||
/// Datum and constructible from three arguments of type \c
|
||||
|
|
|
|||
|
|
@ -53,8 +53,10 @@ public:
|
|||
* The two property maps which are template parameters of the class enable to get the datum and the reference point of
|
||||
* the primitive from the identifier. The last template parameter controls whether the primitive class holds a copy of the datum.
|
||||
*
|
||||
* \cgalModels `AABBPrimitive` if `ExternalPropertyMaps` is `CGAL::Tag_false`.
|
||||
* \cgalModels `AABBPrimitiveWithSharedData` if `ExternalPropertyMaps` is `CGAL::Tag_true`.
|
||||
* \cgalModelsBareBegin
|
||||
* \cgalModelsBare{`AABBPrimitive` if `ExternalPropertyMaps` is `CGAL::Tag_false`}
|
||||
* \cgalModelsBare{`AABBPrimitiveWithSharedData` if `ExternalPropertyMaps` is `CGAL::Tag_true`}
|
||||
* \cgalModelsBareEnd
|
||||
*
|
||||
* \tparam ObjectPropertyMap is a model of `ReadablePropertyMap` with `Id` as
|
||||
* `key_type`. It must be a model of `CopyConstructible`, `DefaultConstructible`, and `CopyAssignable`.
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ namespace internal {
|
|||
* The iterator from which the primitive is built should not be invalided
|
||||
* while the AABB tree holding the primitive is in use.
|
||||
*
|
||||
* \cgalModels `AABBPrimitive`
|
||||
* \cgalModels{AABBPrimitive}
|
||||
*
|
||||
* \tparam GeomTraits is a traits class providing the nested type `Point_3` and `Segment_3`.
|
||||
* It also provides the functor `Construct_source_3` that has an operator taking a `Segment_3`
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#include <CGAL/Kernel_23/internal/Has_boolean_tags.h>
|
||||
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
#include <optional>
|
||||
|
||||
/// \file AABB_traits.h
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ template <class T>
|
|||
struct Remove_optional { typedef T type; };
|
||||
|
||||
template <class T>
|
||||
struct Remove_optional< ::boost::optional<T> > { typedef T type; };
|
||||
struct Remove_optional< ::std::optional<T> > { typedef T type; };
|
||||
|
||||
//helper controlling whether extra data should be stored in the AABB_tree traits class
|
||||
template <class Primitive, bool has_shared_data=Has_nested_type_Shared_data<Primitive>::value>
|
||||
|
|
@ -85,7 +85,7 @@ struct AABB_traits_base_2<GeomTraits,true>{
|
|||
typedef typename CGAL::Bbox_3 Bounding_box;
|
||||
|
||||
struct Intersection_distance {
|
||||
boost::optional<FT> operator()(const Ray_3& ray, const Bounding_box& bbox) const {
|
||||
std::optional<FT> operator()(const Ray_3& ray, const Bounding_box& bbox) const {
|
||||
FT t_near = -DBL_MAX; // std::numeric_limits<FT>::lowest(); C++1903
|
||||
FT t_far = DBL_MAX;
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ struct AABB_traits_base_2<GeomTraits,true>{
|
|||
for(int i = 0; i < 3; ++i, ++source_iter, ++direction_iter) {
|
||||
if(*direction_iter == 0) {
|
||||
if((*source_iter < (bbox.min)(i)) || (*source_iter > (bbox.max)(i))) {
|
||||
return boost::none;
|
||||
return std::nullopt;
|
||||
}
|
||||
} else {
|
||||
FT t1 = ((bbox.min)(i) - *source_iter) / *direction_iter;
|
||||
|
|
@ -118,7 +118,7 @@ struct AABB_traits_base_2<GeomTraits,true>{
|
|||
// t_far = t2;
|
||||
|
||||
if(t_near > t_far || t_far < FT(0.))
|
||||
return boost::none;
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -149,9 +149,8 @@ class AABB_tree;
|
|||
/// computations, and it handles points as query type for distance
|
||||
/// queries.
|
||||
///
|
||||
/// \cgalModels AABBTraits
|
||||
/// \cgalModels AABBRayIntersectionTraits
|
||||
|
||||
/// \cgalModels{AABBTraits,AABBRayIntersectionTraits}
|
||||
///
|
||||
/// \tparam GeomTraits must be a model of the concept \ref AABBGeomTraits,
|
||||
/// and provide the geometric types as well as the intersection tests and computations.
|
||||
/// \tparam Primitive provide the type of primitives stored in the AABB_tree.
|
||||
|
|
@ -193,7 +192,7 @@ public:
|
|||
|
||||
/// `Intersection_and_primitive_id<Query>::%Type::first_type` is found according to
|
||||
/// the result type of `GeomTraits::Intersect_3::operator()`. If it is
|
||||
/// `boost::optional<T>` then it is `T`, and the result type otherwise.
|
||||
/// `std::optional<T>` then it is `T`, and the result type otherwise.
|
||||
template<typename Query>
|
||||
struct Intersection_and_primitive_id {
|
||||
typedef decltype(
|
||||
|
|
@ -213,7 +212,7 @@ public:
|
|||
/// Point query type.
|
||||
typedef typename GeomTraits::Point_3 Point_3;
|
||||
|
||||
/// additionnal types for the search tree, required by the RangeSearchTraits concept
|
||||
/// additional types for the search tree, required by the RangeSearchTraits concept
|
||||
/// \bug This is not documented for now in the AABBTraits concept.
|
||||
typedef typename GeomTraits::Iso_cuboid_3 Iso_cuboid_3;
|
||||
|
||||
|
|
@ -254,7 +253,7 @@ public:
|
|||
* @param beyond iterator on beyond element
|
||||
* @param bbox the bounding box of [first,beyond[
|
||||
*
|
||||
* Sorts the range defined by [first,beyond[. Sort is achieved on bbox longuest
|
||||
* Sorts the range defined by [first,beyond[. Sort is achieved on bbox longest
|
||||
* axis, using the comparison function `<dim>_less_than` (dim in {x,y,z})
|
||||
*/
|
||||
class Split_primitives
|
||||
|
|
@ -364,12 +363,12 @@ public:
|
|||
Intersection(const AABB_traits<GeomTraits,AABBPrimitive,BboxMap>& traits)
|
||||
:m_traits(traits) {}
|
||||
template<typename Query>
|
||||
boost::optional< typename Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename Intersection_and_primitive_id<Query>::Type >
|
||||
operator()(const Query& query, const typename AT::Primitive& primitive) const {
|
||||
auto inter_res = GeomTraits().intersect_3_object()(query, internal::Primitive_helper<AT>::get_datum(primitive,m_traits));
|
||||
if (!inter_res)
|
||||
return boost::none;
|
||||
return boost::make_optional( std::make_pair(*inter_res, primitive.id()) );
|
||||
return std::nullopt;
|
||||
return std::make_optional( std::make_pair(*inter_res, primitive.id()) );
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -26,8 +26,7 @@
|
|||
#include <CGAL/AABB_tree/internal/AABB_search_tree.h>
|
||||
#include <CGAL/AABB_tree/internal/Has_nested_type_Shared_data.h>
|
||||
#include <CGAL/AABB_tree/internal/Primitive_helper.h>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/lambda/lambda.hpp>
|
||||
#include <optional>
|
||||
|
||||
#ifdef CGAL_HAS_THREADS
|
||||
#include <CGAL/mutex.h>
|
||||
|
|
@ -143,7 +142,7 @@ namespace CGAL {
|
|||
/// An explicit call to `build()` must be made to ensure that the next call to
|
||||
/// a query function will not trigger the construction of the data structure.
|
||||
/// A call to `AABBTraits::set_shared_data(t...)` is made using the internally stored traits.
|
||||
/// This procedure has a complexity of \f$O(n log(n))\f$, where \f$n\f$ is the number of
|
||||
/// This procedure has a complexity of \cgalBigO{n log(n)}, where \f$n\f$ is the number of
|
||||
/// primitives of the tree.
|
||||
template<typename ... T>
|
||||
void build(T&& ...);
|
||||
|
|
@ -271,7 +270,7 @@ public:
|
|||
/// \tparam Query must be a type for which `Do_intersect` operators are
|
||||
/// defined in the traits class `AABBTraits`.
|
||||
template <typename Query>
|
||||
boost::optional<Primitive_id> any_intersected_primitive(const Query& query) const;
|
||||
std::optional<Primitive_id> any_intersected_primitive(const Query& query) const;
|
||||
///@}
|
||||
|
||||
/// \name Intersections
|
||||
|
|
@ -294,7 +293,7 @@ public:
|
|||
/// \tparam Query must be a type for which `Do_intersect` and `Intersection` operators are
|
||||
/// defined in the traits class `AABBTraits`.
|
||||
template <typename Query>
|
||||
boost::optional< typename Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename Intersection_and_primitive_id<Query>::Type >
|
||||
any_intersection(const Query& query) const;
|
||||
|
||||
|
||||
|
|
@ -318,15 +317,15 @@ public:
|
|||
/// `AABBTraits` must be a model of `AABBRayIntersectionTraits` to
|
||||
/// call this member function.
|
||||
template<typename Ray, typename SkipFunctor>
|
||||
boost::optional< typename Intersection_and_primitive_id<Ray>::Type >
|
||||
std::optional< typename Intersection_and_primitive_id<Ray>::Type >
|
||||
first_intersection(const Ray& query, const SkipFunctor& skip) const;
|
||||
|
||||
/// \cond
|
||||
template<typename Ray>
|
||||
boost::optional< typename Intersection_and_primitive_id<Ray>::Type >
|
||||
std::optional< typename Intersection_and_primitive_id<Ray>::Type >
|
||||
first_intersection(const Ray& query) const
|
||||
{
|
||||
return first_intersection(query, boost::lambda::constant(false));
|
||||
return first_intersection(query, [](Primitive_id){ return false; });
|
||||
}
|
||||
/// \endcond
|
||||
|
||||
|
|
@ -343,15 +342,15 @@ public:
|
|||
/// `AABBTraits` must be a model of `AABBRayIntersectionTraits` to
|
||||
/// call this member function.
|
||||
template<typename Ray, typename SkipFunctor>
|
||||
boost::optional<Primitive_id>
|
||||
std::optional<Primitive_id>
|
||||
first_intersected_primitive(const Ray& query, const SkipFunctor& skip) const;
|
||||
|
||||
/// \cond
|
||||
template<typename Ray>
|
||||
boost::optional<Primitive_id>
|
||||
std::optional<Primitive_id>
|
||||
first_intersected_primitive(const Ray& query) const
|
||||
{
|
||||
return first_intersected_primitive(query, boost::lambda::constant(false));
|
||||
return first_intersected_primitive(query, [](Primitive_id){ return false; });
|
||||
}
|
||||
/// \endcond
|
||||
///@}
|
||||
|
|
@ -964,7 +963,7 @@ public:
|
|||
|
||||
template <typename Tr>
|
||||
template <typename Query>
|
||||
boost::optional< typename AABB_tree<Tr>::template Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename AABB_tree<Tr>::template Intersection_and_primitive_id<Query>::Type >
|
||||
AABB_tree<Tr>::any_intersection(const Query& query) const
|
||||
{
|
||||
using namespace CGAL::internal::AABB_tree;
|
||||
|
|
@ -976,7 +975,7 @@ public:
|
|||
|
||||
template <typename Tr>
|
||||
template <typename Query>
|
||||
boost::optional<typename AABB_tree<Tr>::Primitive_id>
|
||||
std::optional<typename AABB_tree<Tr>::Primitive_id>
|
||||
AABB_tree<Tr>::any_intersected_primitive(const Query& query) const
|
||||
{
|
||||
using namespace CGAL::internal::AABB_tree;
|
||||
|
|
|
|||
|
|
@ -19,8 +19,7 @@
|
|||
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/variant/apply_visitor.hpp>
|
||||
#include <optional>
|
||||
# if defined(BOOST_MSVC)
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4996)
|
||||
|
|
@ -43,7 +42,7 @@ class AABB_ray_intersection {
|
|||
public:
|
||||
AABB_ray_intersection(const AABBTree& tree) : tree_(tree) {}
|
||||
|
||||
boost::optional< Ray_intersection_and_primitive_id >
|
||||
std::optional< Ray_intersection_and_primitive_id >
|
||||
ray_intersection(const Ray& query, SkipFunctor skip) const {
|
||||
// We hit the root, now continue on the children. Keep track of
|
||||
// nb_primitives through a variable in each Node on the stack. In
|
||||
|
|
@ -63,7 +62,7 @@ public:
|
|||
|
||||
Heap_type pq;
|
||||
// pq.reserve(tree_.size() / 2);
|
||||
boost::optional< Ray_intersection_and_primitive_id >
|
||||
std::optional< Ray_intersection_and_primitive_id >
|
||||
intersection, /* the temporary for calculating the result */
|
||||
p; /* the current best intersection */
|
||||
|
||||
|
|
@ -84,7 +83,7 @@ public:
|
|||
if(!skip(current.node->left_data().id()) /* && do_intersect_obj(query, current.node->left_data()) */) {
|
||||
intersection = intersection_obj(query, current.node->left_data());
|
||||
if(intersection) {
|
||||
FT ray_distance = boost::apply_visitor(param_visitor, intersection->first);
|
||||
FT ray_distance = std::visit(param_visitor, intersection->first);
|
||||
if(ray_distance < t) {
|
||||
t = ray_distance;
|
||||
p = intersection;
|
||||
|
|
@ -96,7 +95,7 @@ public:
|
|||
if(!skip(current.node->right_data().id()) /* && do_intersect_obj(query, current.node->right_data()) */) {
|
||||
intersection = intersection_obj(query, current.node->right_data());
|
||||
if(intersection) {
|
||||
FT ray_distance = boost::apply_visitor(param_visitor, intersection->first);
|
||||
FT ray_distance = std::visit(param_visitor, intersection->first);
|
||||
if(ray_distance < t) {
|
||||
t = ray_distance;
|
||||
p = intersection;
|
||||
|
|
@ -111,7 +110,7 @@ public:
|
|||
if(!skip(current.node->left_data().id()) /* && do_intersect_obj(query, current.node->left_data()) */) {
|
||||
intersection = intersection_obj(query, current.node->left_data());
|
||||
if(intersection) {
|
||||
FT ray_distance = boost::apply_visitor(param_visitor, intersection->first);
|
||||
FT ray_distance = std::visit(param_visitor, intersection->first);
|
||||
if(ray_distance < t) {
|
||||
t = ray_distance;
|
||||
p = intersection;
|
||||
|
|
@ -121,7 +120,7 @@ public:
|
|||
|
||||
// right child
|
||||
const Node* child = &(current.node->right_child());
|
||||
boost::optional< FT > dist = intersection_distance_obj(query, child->bbox());
|
||||
std::optional< FT > dist = intersection_distance_obj(query, child->bbox());
|
||||
if(dist)
|
||||
pq.push(Node_ptr_with_ft(child, *dist, 2));
|
||||
|
||||
|
|
@ -130,7 +129,7 @@ public:
|
|||
default: // Children both inner nodes
|
||||
{
|
||||
const Node* child = &(current.node->left_child());
|
||||
boost::optional<FT> dist = intersection_distance_obj(query, child->bbox());
|
||||
std::optional<FT> dist = intersection_distance_obj(query, child->bbox());
|
||||
if(dist)
|
||||
pq.push(Node_ptr_with_ft(child, *dist, current.nb_primitives/2));
|
||||
|
||||
|
|
@ -198,10 +197,10 @@ private:
|
|||
|
||||
template<typename AABBTraits>
|
||||
template<typename Ray, typename SkipFunctor>
|
||||
boost::optional< typename AABB_tree<AABBTraits>::template Intersection_and_primitive_id<Ray>::Type >
|
||||
std::optional< typename AABB_tree<AABBTraits>::template Intersection_and_primitive_id<Ray>::Type >
|
||||
AABB_tree<AABBTraits>::first_intersection(const Ray& query,
|
||||
const SkipFunctor& skip) const {
|
||||
CGAL_static_assertion_msg((std::is_same<Ray, typename AABBTraits::Ray_3>::value),
|
||||
static_assert(std::is_same<Ray, typename AABBTraits::Ray_3>::value,
|
||||
"Ray and Ray_3 must be the same type");
|
||||
|
||||
switch(size()) // copy-paste from AABB_tree::traversal
|
||||
|
|
@ -219,22 +218,22 @@ AABB_tree<AABBTraits>::first_intersection(const Ray& query,
|
|||
break;
|
||||
}
|
||||
}
|
||||
return boost::none;
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template<typename AABBTraits>
|
||||
template<typename Ray, typename SkipFunctor>
|
||||
boost::optional<typename AABB_tree<AABBTraits>::Primitive_id>
|
||||
std::optional<typename AABB_tree<AABBTraits>::Primitive_id>
|
||||
AABB_tree<AABBTraits>::first_intersected_primitive(const Ray& query,
|
||||
const SkipFunctor& skip) const
|
||||
{
|
||||
boost::optional<
|
||||
std::optional<
|
||||
typename AABB_tree<AABBTraits>::
|
||||
template Intersection_and_primitive_id<Ray>::Type > res =
|
||||
first_intersection(query, skip);
|
||||
if ( (bool) res )
|
||||
return boost::make_optional( res->second );
|
||||
return boost::none;
|
||||
return std::make_optional( res->second );
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
|
||||
#include <CGAL/AABB_tree/internal/AABB_node.h>
|
||||
#include <boost/optional.hpp>
|
||||
#include <optional>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ class First_intersection_traits
|
|||
|
||||
public:
|
||||
typedef
|
||||
boost::optional< typename AABBTraits::template Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename AABBTraits::template Intersection_and_primitive_id<Query>::Type >
|
||||
Result;
|
||||
public:
|
||||
First_intersection_traits(const AABBTraits& traits)
|
||||
|
|
@ -124,7 +124,7 @@ public:
|
|||
|
||||
void intersection(const Query& query, const Primitive& primitive)
|
||||
{
|
||||
boost::optional< typename AABBTraits::template Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename AABBTraits::template Intersection_and_primitive_id<Query>::Type >
|
||||
intersection = m_traits.intersection_object()(query, primitive);
|
||||
|
||||
if(intersection)
|
||||
|
|
@ -211,7 +211,7 @@ public:
|
|||
{
|
||||
if( m_traits.do_intersect_object()(query, primitive) )
|
||||
{
|
||||
m_result = boost::optional<typename Primitive::Id>(primitive.id());
|
||||
m_result = std::optional<typename Primitive::Id>(primitive.id());
|
||||
m_is_found = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -221,12 +221,12 @@ public:
|
|||
return m_traits.do_intersect_object()(query, node.bbox());
|
||||
}
|
||||
|
||||
boost::optional<typename Primitive::Id> result() const { return m_result; }
|
||||
std::optional<typename Primitive::Id> result() const { return m_result; }
|
||||
bool is_intersection_found() const { return m_is_found; }
|
||||
|
||||
private:
|
||||
bool m_is_found;
|
||||
boost::optional<typename Primitive::Id> m_result;
|
||||
std::optional<typename Primitive::Id> m_result;
|
||||
const AABBTraits& m_traits;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -32,11 +32,11 @@ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_cartesian_const_iterator_3,Cartesian_const
|
|||
|
||||
template<typename GeomTraits>
|
||||
struct Is_ray_intersection_geomtraits
|
||||
: boost::mpl::and_< Has_ray_3<GeomTraits>,
|
||||
Has_construct_source_3<GeomTraits>,
|
||||
Has_vector_3<GeomTraits>,
|
||||
Has_construct_cartesian_const_iterator_3<GeomTraits>,
|
||||
Has_cartesian_const_iterator_3<GeomTraits> >::type
|
||||
: std::bool_constant< Has_ray_3<GeomTraits>::value &&
|
||||
Has_construct_source_3<GeomTraits>::value &&
|
||||
Has_vector_3<GeomTraits>::value &&
|
||||
Has_construct_cartesian_const_iterator_3<GeomTraits>::value &&
|
||||
Has_cartesian_const_iterator_3<GeomTraits>::value >
|
||||
{};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -143,18 +143,18 @@ struct AABB_covered_triangle_tree_traits
|
|||
|
||||
// Primitive ID --> box vector pos --> Bounding Box
|
||||
using BPMB = internal::Vector_property_map<CGAL::Bbox_3>;
|
||||
using BPM = CGAL::Property_map_binder<IDPM, BPMB>;
|
||||
using BPM = CGAL::Compose_property_map<IDPM, BPMB>;
|
||||
|
||||
// Primitive ID --> point vector pos --> Reference Point
|
||||
using RPPMB = internal::Vector_property_map<Point>;
|
||||
using RPPM = CGAL::Property_map_binder<IDPM, RPPMB>;
|
||||
using RPPM = CGAL::Compose_property_map<IDPM, RPPMB>;
|
||||
|
||||
// Primitive ID --> Datum pos vector pos --> Datum pos --> Datum
|
||||
// The vector of data has size nf, but the vector of datum pos has size tree.size()
|
||||
using DPPMB = internal::Vector_property_map<std::size_t>; // pos --> Datum pos
|
||||
using DPPM = CGAL::Property_map_binder<IDPM, DPPMB>; // PID --> Datum pos
|
||||
using DPPM = CGAL::Compose_property_map<IDPM, DPPMB>; // PID --> Datum pos
|
||||
using DPMB = internal::Vector_property_map<Triangle_3>; // Datum pos --> Datum
|
||||
using DPM = CGAL::Property_map_binder<DPPM, DPMB>; // PID --> Datum
|
||||
using DPM = CGAL::Compose_property_map<DPPM, DPMB>; // PID --> Datum
|
||||
|
||||
using Primitive = CGAL::AABB_primitive<ID, DPM, RPPM,
|
||||
CGAL::Tag_true /*external pmaps*/,
|
||||
|
|
@ -207,7 +207,7 @@ public:
|
|||
: Base(traits),
|
||||
m_sq_length(square(max_length)),
|
||||
m_dppmb(), m_bpm(), m_rppm(), m_dpmb(),
|
||||
m_dpm(DPPM(m_dppmb/*first binder's value_map*/)/*second binder's key map*/, m_dpmb)
|
||||
m_dpm(DPPM(Default(), m_dppmb/*first binder's value_map*/)/*second binder's key map*/, m_dpmb)
|
||||
{
|
||||
initialize_tree_property_maps();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ namespace internal {
|
|||
* The iterator from which the primitive is built should not be invalided
|
||||
* while the AABB tree holding the primitive is in use.
|
||||
*
|
||||
* \cgalModels `AABBPrimitive`
|
||||
* \cgalModels{AABBPrimitive}
|
||||
*
|
||||
* \tparam GeomTraits is a traits class providing the nested type `Point_3` and `Triangle_3`.
|
||||
* It also provides the functor `Construct_vertex_3` that has an operator taking a `Triangle_3`
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace CGAL {
|
|||
// the TriangleMesh from which the AABB tree is built should not be
|
||||
// deleted while the AABB tree is in use.
|
||||
//
|
||||
// \cgalModels `AABBPrimitive`
|
||||
// \cgalModels{AABBPrimitive}
|
||||
// \tparam GeomTraits must provides a \c %Point_3
|
||||
// type, used as \c Point, and a \c %Triangle_3 type, used as \c
|
||||
// Datum and constructible from three arguments of type \c
|
||||
|
|
|
|||
|
|
@ -95,20 +95,23 @@ void test_all_intersection_query_types(Tree& tree)
|
|||
tree.all_intersected_primitives(segment,std::back_inserter(primitives));
|
||||
|
||||
// any_intersection
|
||||
boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Ray>::Type > r = tree.any_intersection(ray);
|
||||
boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Line>::Type > l = tree.any_intersection(line);
|
||||
boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Segment>::Type > s = tree.any_intersection(segment);
|
||||
std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Ray>::Type > r = tree.any_intersection(ray);
|
||||
std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Line>::Type > l = tree.any_intersection(line);
|
||||
std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Segment>::Type > s = tree.any_intersection(segment);
|
||||
CGAL_USE(r);
|
||||
CGAL_USE(l);
|
||||
CGAL_USE(s);
|
||||
|
||||
// any_intersected_primitive
|
||||
boost::optional<typename Primitive::Id> optional_primitive;
|
||||
std::optional<typename Primitive::Id> optional_primitive;
|
||||
optional_primitive = tree.any_intersected_primitive(ray);
|
||||
optional_primitive = tree.any_intersected_primitive(line);
|
||||
optional_primitive = tree.any_intersected_primitive(segment);
|
||||
|
||||
// all_intersections
|
||||
std::list< boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Ray>::Type > > intersections_r;
|
||||
std::list< boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Line>::Type > > intersections_l;
|
||||
std::list< boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Segment>::Type > > intersections_s;
|
||||
std::list< std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Ray>::Type > > intersections_r;
|
||||
std::list< std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Line>::Type > > intersections_l;
|
||||
std::list< std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Segment>::Type > > intersections_s;
|
||||
tree.all_intersections(ray,std::back_inserter(intersections_r));
|
||||
tree.all_intersections(line,std::back_inserter(intersections_l));
|
||||
tree.all_intersections(segment,std::back_inserter(intersections_s));
|
||||
|
|
@ -322,7 +325,7 @@ class Naive_implementations
|
|||
typedef typename Traits::Point_3 Point;
|
||||
typedef typename Traits::Point_and_primitive_id Point_and_primitive_id;
|
||||
|
||||
typedef boost::optional<Object_and_primitive_id> Intersection_result;
|
||||
typedef std::optional<Object_and_primitive_id> Intersection_result;
|
||||
|
||||
const Traits& m_traits;
|
||||
public:
|
||||
|
|
@ -380,7 +383,7 @@ public:
|
|||
Polyhedron_primitive_iterator it = Pr_generator().begin(p);
|
||||
for ( ; it != Pr_generator().end(p) ; ++it )
|
||||
{
|
||||
boost::optional< typename Traits::template Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename Traits::template Intersection_and_primitive_id<Query>::Type >
|
||||
intersection = m_traits.intersection_object()(query, Pr(it,p));
|
||||
if ( intersection )
|
||||
*out++ = *intersection;
|
||||
|
|
@ -653,7 +656,7 @@ private:
|
|||
}
|
||||
|
||||
// any_intersected_primitive test (do not count time here)
|
||||
typedef boost::optional<typename Primitive::Id> Any_primitive;
|
||||
typedef std::optional<typename Primitive::Id> Any_primitive;
|
||||
Any_primitive primitive = tree.any_intersected_primitive(query);
|
||||
|
||||
// Check: verify we do get the result by naive method
|
||||
|
|
@ -723,7 +726,7 @@ private:
|
|||
}
|
||||
|
||||
// Any intersection test (do not count time here)
|
||||
boost::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Query>::Type >
|
||||
std::optional< typename Tree::AABB_traits::template Intersection_and_primitive_id<Query>::Type >
|
||||
intersection = tree.any_intersection(query);
|
||||
|
||||
// Check: verify we do get the result by naive method
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ std::size_t intersect(ForwardIterator b, ForwardIterator e, const Tree& tree, lo
|
|||
v.reserve(elements);
|
||||
for(; b != e; ++b) {
|
||||
tree.all_intersections(*b, std::back_inserter(v));
|
||||
boost::optional<Obj_type> o = tree.any_intersection(*b);
|
||||
std::optional<Obj_type> o = tree.any_intersection(*b);
|
||||
if(o)
|
||||
++counter;
|
||||
}
|
||||
|
|
@ -131,7 +131,7 @@ std::tuple<std::size_t, std::size_t, std::size_t, long> test(const char* name) {
|
|||
tu = std::make_tuple(intersect(lines.begin(), lines.end(), tree, counter),
|
||||
intersect(rays.begin(), rays.end(), tree, counter),
|
||||
intersect(segments.begin(), segments.end(), tree, counter),
|
||||
// cant use counter here
|
||||
// can't use counter here
|
||||
0);
|
||||
std::get<3>(tu) = counter;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ int test()
|
|||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
boost::optional<Object_and_primitive_id> any;
|
||||
std::optional<Object_and_primitive_id> any;
|
||||
any = tree.any_intersection(pq);
|
||||
if(!any)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -26,16 +26,16 @@ int main()
|
|||
{
|
||||
using namespace CGAL::internal::AABB_tree;
|
||||
|
||||
CGAL_static_assertion_msg(
|
||||
static_assert(
|
||||
(Is_ray_intersection_geomtraits<CGAL::Epeck>::value),
|
||||
"CGAL::Epeck should be a RayIntersectionGeomTraits");
|
||||
CGAL_static_assertion_msg(
|
||||
static_assert(
|
||||
(Is_ray_intersection_geomtraits< CGAL::Simple_cartesian<double> >::value),
|
||||
"CGAL::Epeck should be a RayIntersectionGeomTraits");
|
||||
CGAL_static_assertion_msg(
|
||||
static_assert(
|
||||
(!Is_ray_intersection_geomtraits<AABBGeomTraits>::value),
|
||||
"Pure AABBGeomTraits shouldn't be a RayIntersectionGeomTraits");
|
||||
CGAL_static_assertion_msg(
|
||||
static_assert(
|
||||
(!Is_ray_intersection_geomtraits<nope>::value),
|
||||
"The empty struct shouldn't be a RayIntersectionGeomTraits");
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
#include <iterator>
|
||||
|
||||
#include <boost/functional/value_factory.hpp>
|
||||
#include <boost/array.hpp>
|
||||
|
||||
#include <CGAL/algorithm.h>
|
||||
#include <CGAL/point_generators_3.h>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
#include <iterator>
|
||||
|
||||
#include <boost/functional/value_factory.hpp>
|
||||
#include <boost/array.hpp>
|
||||
|
||||
#include <CGAL/assertions.h>
|
||||
#include <CGAL/algorithm.h>
|
||||
|
|
@ -36,7 +35,7 @@ FT point_on_ray_dist(const Ray& ray, const Point& point) {
|
|||
|
||||
std::size_t accum = 0;
|
||||
|
||||
boost::optional<
|
||||
std::optional<
|
||||
Tree::Intersection_and_primitive_id<Ray>::Type
|
||||
>
|
||||
min_intersection(const Tree& tree, const Ray& ray) {
|
||||
|
|
@ -46,12 +45,12 @@ min_intersection(const Tree& tree, const Ray& ray) {
|
|||
tree.all_intersections(ray, std::back_inserter(all_intersections));
|
||||
accum += all_intersections.size();
|
||||
Tree::FT min_distance = DBL_MAX;
|
||||
boost::optional<
|
||||
std::optional<
|
||||
Tree::Intersection_and_primitive_id<Ray>::Type
|
||||
> mini = boost::none;
|
||||
> mini = std::nullopt;
|
||||
|
||||
for(IntersectionVector::iterator it2 = all_intersections.begin(); it2 != all_intersections.end(); ++it2) {
|
||||
if(Point* point = boost::get<Point>(&(it2->first))) {
|
||||
if(Point* point = std::get_if<Point>(&(it2->first))) {
|
||||
Vector i_ray(*point, ray.source());
|
||||
Tree::FT new_distance = i_ray.squared_length();
|
||||
if(new_distance < min_distance) {
|
||||
|
|
@ -92,7 +91,7 @@ int main()
|
|||
Vector bbox_center((bbox.xmin() + bbox.xmax()) / 2,
|
||||
(bbox.ymin() + bbox.ymax()) / 2,
|
||||
(bbox.zmin() + bbox.zmax()) / 2);
|
||||
boost::array<double, 3> extents;
|
||||
std::array<double, 3> extents;
|
||||
extents[0] = bbox.xmax() - bbox.xmin();
|
||||
extents[1] = bbox.ymax() - bbox.ymin();
|
||||
extents[2] = bbox.zmax() - bbox.zmin();
|
||||
|
|
@ -125,7 +124,7 @@ int main()
|
|||
rays.reserve(NB_RAYS);
|
||||
std::transform(v1.begin(), v1.end(), v2.begin(),
|
||||
std::back_inserter(rays), boost::value_factory<Ray>());
|
||||
std::vector< boost::optional<Tree::Intersection_and_primitive_id<Ray>::Type > > primitives1, primitives2;
|
||||
std::vector< std::optional<Tree::Intersection_and_primitive_id<Ray>::Type > > primitives1, primitives2;
|
||||
primitives1.reserve(NB_RAYS); primitives2.reserve(NB_RAYS);
|
||||
|
||||
|
||||
|
|
@ -140,7 +139,7 @@ int main()
|
|||
}
|
||||
assert(primitives1.size() == primitives2.size()); // Different amount of primitives intersected
|
||||
assert(std::equal(primitives1.begin(), primitives1.end(), primitives2.begin())); // Primitives mismatch
|
||||
std::size_t c = primitives1.size() - std::count(primitives1.begin(), primitives1.end(), boost::none);
|
||||
std::size_t c = primitives1.size() - std::count(primitives1.begin(), primitives1.end(), std::nullopt);
|
||||
std::cout << "Intersected " << c << " primitives with " << NB_RAYS << " rays" << std::endl;
|
||||
std::cout << "Primitive method had to sort " << accum/NB_RAYS
|
||||
<< " intersections on average." << std::endl;
|
||||
|
|
|
|||
|
|
@ -9,9 +9,11 @@ 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`
|
||||
\cgalRefines{DelaunayTriangulationTraits_3}
|
||||
|
||||
\cgalHasModel All models of `Kernel`.
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModelsBare{All models of the concept `Kernel`}
|
||||
\cgalHasModelsEnd
|
||||
*/
|
||||
class AdvancingFrontSurfaceReconstructionTraits_3
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
\cgalPkgDescriptionBegin{Advancing Front Surface Reconstruction,PkgAdvancingFrontSurfaceReconstruction}
|
||||
\cgalPkgPicture{afsr-detail.png}
|
||||
\cgalPkgSummaryBegin
|
||||
\cgalPkgAuthors{Tran Kai Frank Da, David Cohen-Steiner}
|
||||
\cgalPkgAuthors{Tran Kai Frank Da and David Cohen-Steiner}
|
||||
\cgalPkgDesc{This package provides a greedy algorithm for surface reconstruction from an
|
||||
unorganized point set. Starting from a seed facet, a piecewise linear
|
||||
surface is grown by adding Delaunay triangles one by one. The most
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ namespace CGAL {
|
|||
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> > >`
|
||||
CGAL::Exact_predicates_inexact_constructions_kernel> > >
|
||||
\endcode
|
||||
|
||||
\tparam P must be a functor offering
|
||||
|
|
|
|||
|
|
@ -169,8 +169,8 @@ Every \cgal `Kernel` comes with two <I>real number types</I>
|
|||
(number types embeddable into the real numbers). One of them is a
|
||||
`FieldNumberType`, and the other a `RingNumberType`. The
|
||||
coordinates of the basic kernel objects (points, vectors, etc.) come
|
||||
from one of these types (the `FieldNumberType` in case of Cartesian
|
||||
kernels, and the `RingNumberType` for Homogeneous kernels).
|
||||
from one of these types (the `FieldNumberType` in case of %Cartesian
|
||||
kernels, and the `RingNumberType` for %Homogeneous kernels).
|
||||
|
||||
The concept `FieldNumberType` combines the requirements of the
|
||||
concepts `Field` and `RealEmbeddable`, while
|
||||
|
|
@ -277,4 +277,3 @@ subsequent chapters.
|
|||
|
||||
*/
|
||||
} /* namespace CGAL */
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace CGAL {
|
|||
|
||||
An instance of `Algebraic_structure_traits` is a model of `AlgebraicStructureTraits`, where <span class="textsc">T</span> is the associated type.
|
||||
|
||||
\cgalModels `AlgebraicStructureTraits`
|
||||
\cgalModels{AlgebraicStructureTraits}
|
||||
|
||||
*/
|
||||
template< typename T >
|
||||
|
|
@ -22,7 +22,7 @@ namespace CGAL {
|
|||
Tag indicating that a type is a model of the
|
||||
`EuclideanRing` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `EuclideanRing`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -38,7 +38,7 @@ struct Euclidean_ring_tag : public Unique_factorization_domain_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `Field` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `Field`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -54,7 +54,7 @@ struct Field_tag : public Integral_domain_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `FieldWithKthRoot` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `FieldWithKthRoot`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -70,7 +70,7 @@ struct Field_with_kth_root_tag : public Field_with_sqrt_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `FieldWithRootOf` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `FieldWithRootOf`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -86,7 +86,7 @@ struct Field_with_root_of_tag : public Field_with_kth_root_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `FieldWithSqrt` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `FieldWithSqrt`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -102,7 +102,7 @@ struct Field_with_sqrt_tag : public Field_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `IntegralDomain` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `IntegralDomain`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
@ -118,7 +118,7 @@ struct Integral_domain_tag : public Integral_domain_without_division_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `IntegralDomainWithoutDivision` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ struct Integral_domain_without_division_tag {
|
|||
|
||||
Tag indicating that a type is a model of the `UniqueFactorizationDomain` concept.
|
||||
|
||||
\cgalModels `DefaultConstructible`
|
||||
\cgalModels{DefaultConstructible}
|
||||
|
||||
\sa `UniqueFactorizationDomain`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace CGAL {
|
|||
An instance of `Fraction_traits` is a model of `FractionTraits`,
|
||||
where `T` is the associated type.
|
||||
|
||||
\cgalModels `FractionTraits`
|
||||
\cgalModels{FractionTraits}
|
||||
|
||||
*/
|
||||
template< typename T >
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace CGAL {
|
|||
|
||||
An instance of `Real_embeddable_traits` is a model of `RealEmbeddableTraits`, where <span class="textsc">T</span> is the associated type.
|
||||
|
||||
\cgalModels `RealEmbeddableTraits`
|
||||
\cgalModels{RealEmbeddableTraits}
|
||||
|
||||
*/
|
||||
template< typename T >
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace AlgebraicStructureTraits_{
|
|||
`AdaptableBinaryFunction` computes the integral quotient of division
|
||||
with remainder.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `AlgebraicStructureTraits_::Mod`
|
||||
|
|
@ -58,4 +58,4 @@ template <class NT1, class NT2> result_type operator()(NT1 x, NT2 y);
|
|||
|
||||
}; /* end Div */
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ r
|
|||
|
||||
</TABLE>
|
||||
|
||||
\cgalRefines `AdaptableFunctor`
|
||||
\cgalRefines{AdaptableFunctor}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `AlgebraicStructureTraits_::Mod`
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ This functor is required to provide two operators. The first operator takes two
|
|||
arguments and returns true if the first argument divides the second argument.
|
||||
The second operator returns \f$ c\f$ via the additional third argument.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `AlgebraicStructureTraits_::IntegralDivision`
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ unit-normal (i.e.\ have unit part 1).
|
|||
to the partial order of divisibility. This is because an element \f$ a \in R\f$ is said to divide \f$ b \in R\f$, iff \f$ \exists r \in R\f$ such that \f$ a \cdot r = b\f$.
|
||||
Thus, \f$ 0\f$ is divided by every element of the Ring, in particular by itself.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ exists (i.e.\ if \f$ x\f$ is divisible by \f$ y\f$). Otherwise the effect of inv
|
|||
this operation is undefined. Since the ring represented is an integral domain,
|
||||
\f$ z\f$ is uniquely defined if it exists.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `AlgebraicStructureTraits_::Divides`
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace AlgebraicStructureTraits_{
|
|||
`AdaptableUnaryFunction` providing the inverse element with
|
||||
respect to multiplication of a `Field`.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace AlgebraicStructureTraits_{
|
|||
`AdaptableUnaryFunction`,
|
||||
returns true in case the argument is the one of the ring.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ A ring element \f$ x\f$ is said to be a square iff there exists a ring element \
|
|||
that \f$ x= y*y\f$. In case the ring is a `UniqueFactorizationDomain`,
|
||||
\f$ y\f$ is uniquely defined up to multiplication by units.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_{
|
|||
|
||||
`AdaptableUnaryFunction`, returns true in case the argument is the zero element of the ring.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `RealEmbeddableTraits_::IsZero`
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_{
|
|||
|
||||
`AdaptableBinaryFunction` providing the k-th root.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `FieldWithRootOf`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_ {
|
|||
|
||||
`AdaptableBinaryFunction` computes the remainder of division with remainder.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
\sa `AlgebraicStructureTraits_::Div`
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace AlgebraicStructureTraits_{
|
|||
`AdaptableFunctor` computes a real root of a square-free univariate
|
||||
polynomial.
|
||||
|
||||
\cgalRefines `AdaptableFunctor`
|
||||
\cgalRefines{AdaptableFunctor}
|
||||
|
||||
\sa `FieldWithRootOf`
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_{
|
|||
|
||||
This `AdaptableUnaryFunction` may simplify a given object.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_{
|
|||
|
||||
`AdaptableUnaryFunction` providing the square root.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace AlgebraicStructureTraits_{
|
|||
|
||||
`AdaptableUnaryFunction`, computing the square of the argument.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ hence the unit-part of a non-zero integer is its sign. For a `Field`, every
|
|||
non-zero element is a unit and is its own unit part, its unit normal
|
||||
associate being one. The unit part of zero is, by convention, one.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `AlgebraicStructureTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@ algebraic operations within that structure.
|
|||
\sa `CGAL::Field_with_kth_root_tag`
|
||||
\sa `CGAL::Field_with_root_of_tag`
|
||||
|
||||
\cgalHasModel `CGAL::Algebraic_structure_traits<T>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::Algebraic_structure_traits<T>}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -139,7 +141,7 @@ typedef unspecified_type Is_numerical_sensitive;
|
|||
This type specifies the return type of the predicates provided
|
||||
by this traits. The type must be convertible to `bool` and
|
||||
typically the type indeed maps to `bool`. However, there are also
|
||||
cases such as interval arithmetic, in which it is `Uncertain<bool>`
|
||||
cases such as interval arithmetic, in which it is `CGAL::Uncertain<bool>`
|
||||
or some similar type.
|
||||
|
||||
*/
|
||||
|
|
@ -300,4 +302,3 @@ typedef unspecified_type Root_of;
|
|||
/// @}
|
||||
|
||||
}; /* end AlgebraicStructureTraits */
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A model of `EuclideanRing` represents an euclidean ring (or Euclidean domain).
|
||||
A model of `EuclideanRing` represents a Euclidean ring (or Euclidean domain).
|
||||
It is an `UniqueFactorizationDomain` that affords a suitable notion of minimality of remainders
|
||||
such that given \f$ x\f$ and \f$ y \neq 0\f$ we obtain an (almost) unique solution to
|
||||
\f$ x = qy + r \f$ by demanding that a solution \f$ (q,r)\f$ is chosen to minimize \f$ r\f$.
|
||||
|
|
@ -25,7 +25,7 @@ The most prominent example of a Euclidean ring are the integers.
|
|||
Whenever both \f$ x\f$ and \f$ y\f$ are positive, then it is conventional to choose
|
||||
the smallest positive remainder \f$ r\f$.
|
||||
|
||||
\cgalRefines `UniqueFactorizationDomain`
|
||||
\cgalRefines{UniqueFactorizationDomain}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
Two types `A` and `B` are a model of the `ExplicitInteroperable`
|
||||
|
|
@ -27,4 +27,3 @@ class ExplicitInteroperable {
|
|||
public:
|
||||
|
||||
}; /* end ExplicitInteroperable */
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ Moreover, `CGAL::Algebraic_structure_traits< Field >` is a model of
|
|||
- \link AlgebraicStructureTraits::Algebraic_category `CGAL::Algebraic_structure_traits< Field >::Algebraic_category` \endlink derived from `CGAL::Field_tag`
|
||||
- \link AlgebraicStructureTraits::Inverse `CGAL::Algebraic_structure_traits< FieldWithSqrt >::Inverse` \endlink which is a model of `AlgebraicStructureTraits_::Inverse`
|
||||
|
||||
\cgalRefines `IntegralDomain`
|
||||
\cgalRefines{IntegralDomain}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -5,21 +5,22 @@
|
|||
The concept `FieldNumberType` combines the requirements of the concepts
|
||||
`Field` and `RealEmbeddable`.
|
||||
A model of `FieldNumberType` can be used as a template parameter
|
||||
for Cartesian kernels.
|
||||
for %Cartesian kernels.
|
||||
|
||||
\cgalRefines `Field`
|
||||
\cgalRefines `RealEmbeddable`
|
||||
\cgalRefines{Field,RealEmbeddable}
|
||||
|
||||
\cgalHasModel float
|
||||
\cgalHasModel double
|
||||
\cgalHasModel `CGAL::Gmpq`
|
||||
\cgalHasModel `CGAL::Interval_nt`
|
||||
\cgalHasModel `CGAL::Interval_nt_advanced`
|
||||
\cgalHasModel `CGAL::Lazy_exact_nt<FieldNumberType>`
|
||||
\cgalHasModel `CGAL::Quotient<RingNumberType>`
|
||||
\cgalHasModel `leda_rational`
|
||||
\cgalHasModel `leda_bigfloat`
|
||||
\cgalHasModel `leda_real`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{float}
|
||||
\cgalHasModels{double}
|
||||
\cgalHasModels{CGAL::Gmpq}
|
||||
\cgalHasModels{CGAL::Interval_nt}
|
||||
\cgalHasModels{CGAL::Interval_nt_advanced}
|
||||
\cgalHasModels{CGAL::Lazy_exact_nt<FieldNumberType>}
|
||||
\cgalHasModels{CGAL::Quotient<RingNumberType>}
|
||||
\cgalHasModels{leda_rational}
|
||||
\cgalHasModels{leda_bigfloat}
|
||||
\cgalHasModels{leda_real}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\sa `RingNumberType`
|
||||
\sa `Kernel`
|
||||
|
|
@ -33,4 +34,3 @@ public:
|
|||
/// @}
|
||||
|
||||
}; /* end FieldNumberType */
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Moreover, `CGAL::Algebraic_structure_traits< FieldWithKthRoot >` is a model of `
|
|||
- \link AlgebraicStructureTraits::Algebraic_category `CGAL::Algebraic_structure_traits< FieldWithKthRoot >::Algebraic_category` \endlink derived from `CGAL::Field_with_kth_root_tag`
|
||||
- \link AlgebraicStructureTraits::Kth_root `CGAL::Algebraic_structure_traits< FieldWithKthRoot >::Kth_root` \endlink which is a model of `AlgebraicStructureTraits_::KthRoot`
|
||||
|
||||
\cgalRefines `FieldWithSqrt`
|
||||
\cgalRefines{FieldWithSqrt}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Moreover, `CGAL::Algebraic_structure_traits< FieldWithRootOf >` is a model of `A
|
|||
- \link AlgebraicStructureTraits::Algebraic_category `CGAL::Algebraic_structure_traits< FieldWithRootOf >::Algebraic_category` \endlink derived from `CGAL::Field_with_kth_root_tag`
|
||||
- \link AlgebraicStructureTraits::Root_of `CGAL::Algebraic_structure_traits< FieldWithRootOf >::Root_of` \endlink which is a model of `AlgebraicStructureTraits_::RootOf`
|
||||
|
||||
\cgalRefines `FieldWithKthRoot`
|
||||
\cgalRefines{FieldWithKthRoot}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Moreover, `CGAL::Algebraic_structure_traits< FieldWithSqrt >` is a model of `Alg
|
|||
- \link AlgebraicStructureTraits::Algebraic_category `CGAL::Algebraic_structure_traits< FieldWithSqrt >::Algebraic_category` \endlink derived from `CGAL::Field_with_sqrt_tag`
|
||||
- \link AlgebraicStructureTraits::Sqrt `CGAL::Algebraic_structure_traits< FieldWithSqrt >::Sqrt` \endlink which is a model of `AlgebraicStructureTraits_::Sqrt`
|
||||
|
||||
\cgalRefines `Field`
|
||||
\cgalRefines{Field}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsFractionsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A type is considered as a `Fraction`, if there is a reasonable way to
|
||||
|
|
@ -17,4 +17,3 @@ class Fraction {
|
|||
public:
|
||||
|
||||
}; /* end Fraction */
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ A model of `FractionTraits` is associated with a type `Type`.
|
|||
In case the associated type is a `Fraction`, a model of `FractionTraits` provides the relevant functionality for decomposing and re-composing as well
|
||||
as the numerator and denominator type.
|
||||
|
||||
\cgalHasModel `CGAL::Fraction_traits<T>`
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{CGAL::Fraction_traits<T>}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
\sa `FractionTraits_::Decompose`
|
||||
\sa `FractionTraits_::Compose`
|
||||
|
|
@ -113,7 +115,7 @@ FractionTraits::Denominator_type & d);
|
|||
|
||||
`AdaptableBinaryFunction`, returns the fraction of its arguments.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `Fraction`
|
||||
\sa `FractionTraits`
|
||||
|
|
@ -168,7 +170,7 @@ This can be considered as a relaxed version of `AlgebraicStructureTraits_::Gcd`,
|
|||
this is needed because it is not guaranteed that `FractionTraits::Denominator_type` is a model of
|
||||
`UniqueFactorizationDomain`.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `Fraction`
|
||||
\sa `FractionTraits`
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A model of the concept `FromDoubleConstructible` is required
|
||||
|
|
@ -27,4 +27,3 @@ FromDoubleConstructible(const double& d);
|
|||
/// @}
|
||||
|
||||
}; /* end FromDoubleConstructible */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,16 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A model of the concept `FromIntConstructible` is required
|
||||
to be constructible from int.
|
||||
|
||||
\cgalHasModel int
|
||||
\cgalHasModel long
|
||||
\cgalHasModel double
|
||||
\cgalHasModelsBegin
|
||||
\cgalHasModels{int}
|
||||
\cgalHasModels{long}
|
||||
\cgalHasModels{double}
|
||||
\cgalHasModelsEnd
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -26,4 +28,3 @@ FromIntConstructible(int& i);
|
|||
/// @}
|
||||
|
||||
}; /* end FromIntConstructible */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
Two types `A` and `B` are a model of the concept
|
||||
|
|
@ -16,7 +16,7 @@ In this case
|
|||
\link CGAL::Coercion_traits::Are_implicit_interoperable `CGAL::Coercion_traits<A,B>::Are_implicit_interoperable`\endlink
|
||||
is `CGAL::Tag_true`.
|
||||
|
||||
\cgalRefines `ExplicitInteroperable`
|
||||
\cgalRefines{ExplicitInteroperable}
|
||||
|
||||
\sa `CGAL::Coercion_traits<A,B>`
|
||||
\sa `ExplicitInteroperable`
|
||||
|
|
@ -29,4 +29,3 @@ class ImplicitInteroperable {
|
|||
public:
|
||||
|
||||
}; /* end ImplicitInteroperable */
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ Moreover, `CGAL::Algebraic_structure_traits< IntegralDomain >` is a model of
|
|||
- \link AlgebraicStructureTraits::Integral_division `CGAL::Algebraic_structure_traits< IntegralDomain >::Integral_division` \endlink which is a model of `AlgebraicStructureTraits_::IntegralDivision`
|
||||
- \link AlgebraicStructureTraits::Divides `CGAL::Algebraic_structure_traits< IntegralDomain >::Divides` \endlink which is a model of `AlgebraicStructureTraits_::Divides`
|
||||
|
||||
\cgalRefines `IntegralDomainWithoutDivision`
|
||||
\cgalRefines{IntegralDomainWithoutDivision}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@ Moreover, `CGAL::Algebraic_structure_traits< IntegralDomainWithoutDivision >` is
|
|||
- \link AlgebraicStructureTraits::Simplify `CGAL::Algebraic_structure_traits< IntegralDomainWithoutDivision >::Simplify` \endlink which is a model of `AlgebraicStructureTraits_::Simplify`
|
||||
- \link AlgebraicStructureTraits::Unit_part `CGAL::Algebraic_structure_traits< IntegralDomainWithoutDivision >::Unit_part` \endlink which is a model of `AlgebraicStructureTraits_::UnitPart`
|
||||
|
||||
\cgalRefines `Assignable`
|
||||
\cgalRefines `CopyConstructible`
|
||||
\cgalRefines `DefaultConstructible`
|
||||
\cgalRefines `EqualityComparable`
|
||||
\cgalRefines `FromIntConstructible`
|
||||
\cgalRefines{Assignable,CopyConstructible,DefaultConstructible,EqualityComparable,FromIntConstructible}
|
||||
|
||||
\sa `IntegralDomainWithoutDivision`
|
||||
\sa `IntegralDomain`
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ If a number type is a model of both `IntegralDomainWithoutDivision` and
|
|||
`RealEmbeddable`, it follows that the ring represented by such a number type
|
||||
is a sub-ring of the real numbers and hence has characteristic zero.
|
||||
|
||||
\cgalRefines `EqualityComparable`
|
||||
\cgalRefines `LessThanComparable`
|
||||
\cgalRefines{EqualityComparable,LessThanComparable}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
`AdaptableUnaryFunction` computes the absolute value of a number.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
`AdaptableBinaryFunction` compares two real embeddable numbers.
|
||||
|
||||
\cgalRefines `AdaptableBinaryFunction`
|
||||
\cgalRefines{AdaptableBinaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
`AdaptableUnaryFunction`, returns true in case the argument is negative.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
`AdaptableUnaryFunction`, returns true in case the argument is positive.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
`AdaptableUnaryFunction`, returns true in case the argument is 0.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
\sa `AlgebraicStructureTraits_::IsZero`
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace RealEmbeddableTraits_ {
|
|||
|
||||
This `AdaptableUnaryFunction` computes the sign of a real embeddable number.
|
||||
|
||||
\cgalRefines `AdaptableUnaryFunction`
|
||||
\cgalRefines{AdaptableUnaryFunction}
|
||||
|
||||
\sa `RealEmbeddableTraits`
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue