mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/master' into CGAL-remove_RS-GF
This commit is contained in:
commit
2d25b1077f
|
|
@ -58,7 +58,6 @@ Scripts/developer_scripts/check_svn_keywords text eol=lf
|
|||
Scripts/developer_scripts/create_cgal_test text eol=lf
|
||||
Scripts/developer_scripts/create_cgal_test_with_cmake text eol=lf
|
||||
Scripts/developer_scripts/create_internal_release text eol=lf
|
||||
Scripts/developer_scripts/create_macosx_installer text eol=lf
|
||||
Scripts/developer_scripts/create_new_release text eol=lf
|
||||
Scripts/developer_scripts/detect_files_with_mixed_eol_styles text eol=lf
|
||||
Scripts/developer_scripts/detect_packages_licenses text eol=lf
|
||||
|
|
|
|||
|
|
@ -1,56 +1,115 @@
|
|||
name: Documentation
|
||||
name: Build Documentation
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: 'Pull request number for which the documentation should be built'
|
||||
type: number
|
||||
required: true
|
||||
doc_version:
|
||||
description: 'Version number of the documentation build'
|
||||
type: string
|
||||
required: true
|
||||
force_build:
|
||||
description: 'Force the build of the documentation'
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
|
||||
issue_comment:
|
||||
types: [created]
|
||||
types: [created]
|
||||
|
||||
env:
|
||||
author_association: ${{ github.event.comment.author_association }}
|
||||
comment_body: ${{ github.event.comment.body }}
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
build:
|
||||
pre_build_checks:
|
||||
runs-on: ubuntu-latest
|
||||
name: Trigger the build?
|
||||
outputs:
|
||||
trigger_build: ${{ steps.get_doc_version.outputs.result && steps.get_doc_version.outputs.result != '' }}
|
||||
force_build: ${{ steps.check_comment_body.outputs.force_build }}
|
||||
pr_number: ${{ steps.get_pr_number.outputs.pr_number }}
|
||||
doc_version: ${{ steps.get_doc_version.outputs.result }}
|
||||
steps:
|
||||
- name: Display inputs
|
||||
run: |
|
||||
echo "pr_number=${{ inputs.pr_number || github.event.issue.number }}"
|
||||
echo "doc_version=${{ inputs.doc_version }}"
|
||||
echo "force_build=${{ inputs.force_build || startsWith(env.comment_body, '/force-build:') }}"
|
||||
- name: Check comment body
|
||||
id: check_comment_body
|
||||
env:
|
||||
trigger_build: ${{ inputs && inputs.pr_number || startsWith(env.comment_body, '/build:') || startsWith(env.comment_body, '/force-build:') }}
|
||||
force_build: ${{ inputs && inputs.force_build || startsWith(env.comment_body, '/force-build:') }}
|
||||
if: inputs.pr_number || startsWith(env.comment_body, '/build:') || startsWith(env.comment_body, '/force-build:')
|
||||
run: |
|
||||
if [ "${trigger_build}" = "false" ]; then
|
||||
echo "No build requested"
|
||||
exit 1
|
||||
fi
|
||||
echo "force_build=${force_build}" >> $GITHUB_OUTPUT
|
||||
echo "trigger_build=${trigger_build}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check permissions
|
||||
if: ( steps.check_comment_body.outputs.trigger_build || false ) && (inputs.pr_number || env.author_association == 'OWNER' || env.author_association == 'MEMBER')
|
||||
run: echo "Authorized"
|
||||
|
||||
- name: No permissions
|
||||
if: ( steps.check_comment_body.outputs.trigger_build || false ) && (! inputs.pr_number && env.author_association != 'OWNER' && env.author_association != 'MEMBER' )
|
||||
run: |
|
||||
echo 'ERROR: User ${{ github.actor }} is not allowed to trigger the build of the documentation with /build:* or /force-build:*'
|
||||
exit 1
|
||||
|
||||
- name: Get PR number
|
||||
if: ( steps.check_comment_body.outputs.trigger_build || false )
|
||||
id: get_pr_number
|
||||
env:
|
||||
pr_number: ${{ inputs.pr_number || github.event.issue.number }}
|
||||
run: echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Get doc version
|
||||
if: ( steps.check_comment_body.outputs.trigger_build || false )
|
||||
uses: actions/github-script@v7
|
||||
id: get_doc_version
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
if ( context.payload.input && context.payload.inputs.doc_version ) {
|
||||
return context.payload.inputs.doc_version
|
||||
}
|
||||
const body = context.payload.comment.body
|
||||
const re = /\/(force-)?build:(\w+)\s*/;
|
||||
if(re.test(body)) {
|
||||
const res = re.exec(body)
|
||||
return res[2]
|
||||
}
|
||||
throw new Error('No version found')
|
||||
|
||||
build_doc:
|
||||
name: |
|
||||
${{ format('{0}: Build Documentation version "{1}"', github.actor, needs.pre_build_checks.outputs.doc_version) }}
|
||||
needs: pre_build_checks
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
pull-requests: write # to create comment
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
force_build: ${{ needs.pre_build_checks.outputs.force_build }}
|
||||
pr_number: ${{ needs.pre_build_checks.outputs.pr_number }}
|
||||
doc_version: ${{ needs.pre_build_checks.outputs.doc_version }}
|
||||
if: ${{ fromJSON(needs.pre_build_checks.outputs.trigger_build || false) }}
|
||||
steps:
|
||||
- uses: actions/github-script@v7
|
||||
id: get_round
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
const asso = context.payload.comment.author_association
|
||||
if(asso == 'OWNER' || asso == 'MEMBER') {
|
||||
const body = context.payload.comment.body
|
||||
if(body.includes("build:")) {
|
||||
const re = /\/(force-)?build:(\w+)\s*/;
|
||||
if(re.test(body)){
|
||||
const res = re.exec(body)
|
||||
if(body.includes("force-")) {
|
||||
return res[2]+":yes"
|
||||
}
|
||||
else{
|
||||
return res[2]+":no"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 'stop'
|
||||
- uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
id: get_pr_number
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
//get pullrequest url
|
||||
const pr_number = context.payload.issue.number
|
||||
return pr_number
|
||||
|
||||
- name: Emoji-comment
|
||||
if: github.event_name == 'issue_comment'
|
||||
continue-on-error: true
|
||||
uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
with:
|
||||
script: |
|
||||
github.rest.reactions.createForIssueComment({
|
||||
|
|
@ -62,17 +121,23 @@ jobs:
|
|||
|
||||
- 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
|
||||
fetch-depth: 2
|
||||
repository: ${{ github.repository }}
|
||||
ref: refs/pull/${{ env.pr_number }}/head
|
||||
fetch-depth: 0
|
||||
|
||||
- name: install dependencies
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
set -x
|
||||
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
|
||||
|
||||
# Install Github CLI `gh`
|
||||
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y))
|
||||
sudo mkdir -p -m 755 /etc/apt/keyrings
|
||||
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
|
||||
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
||||
|
||||
sudo apt-get update && sudo apt-get install -y gh cmake graphviz ssh bibtex2html
|
||||
sudo pip install lxml
|
||||
sudo pip install pyquery
|
||||
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_9_6_patched/doxygen
|
||||
|
|
@ -81,36 +146,40 @@ jobs:
|
|||
git config --global user.email "cgal@geometryfactory.com"
|
||||
git config --global user.name "cgaltest"
|
||||
|
||||
- name: configure all
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
- name: CMake configuration of Documentation/doc
|
||||
run: |
|
||||
set -ex
|
||||
mkdir -p build_doc && cd build_doc && cmake ../Documentation/doc
|
||||
|
||||
- name: Build and Upload Doc
|
||||
- name: Build and upload Doc
|
||||
id: build_and_run
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
set -ex
|
||||
PR_NUMBER=${{ steps.get_pr_number.outputs.result }}
|
||||
TMP_ROUND=${{ steps.get_round.outputs.result }}
|
||||
ROUND=$(echo $TMP_ROUND | cut -d ":" -f 1)
|
||||
force=$(echo $TMP_ROUND | cut -d ":" -f 2)
|
||||
wget --no-verbose cgal.github.io -O tmp.html
|
||||
if ! egrep -q "\/$PR_NUMBER\/$ROUND" tmp.html || [ "$force" = "yes" ]; then
|
||||
PR_NUMBER=$pr_number
|
||||
ROUND=$doc_version
|
||||
force=$force_build
|
||||
wget --no-verbose cgal.github.io -O index.html
|
||||
if ! egrep -qF "/$PR_NUMBER/$ROUND" index.html || [ "$force" = "yes" ]; then
|
||||
#list impacted packages
|
||||
LIST_OF_PKGS=$(git diff --name-only HEAD^1 HEAD |cut -s -d/ -f1 |sort -u | xargs -I {} echo {} && ls -d {}/package_info 2>/dev/null |cut -d/ -f1 |egrep -v Installation||true)
|
||||
LIST_OF_PKGS=$(git diff --name-only origin/master...HEAD |cut -s -d/ -f1 |sort -u | xargs -I {} echo {} && ls -d {}/package_info 2>/dev/null |cut -d/ -f1 |egrep -v Installation||true)
|
||||
if [ "$LIST_OF_PKGS" = "" ]; then
|
||||
echo "DoxygenError=No package affected." >> $GITHUB_OUTPUT
|
||||
exit 1
|
||||
fi
|
||||
for p in $LIST_OF_PKGS; do
|
||||
if [ -f $p/doc/$p/dependencies ]; then
|
||||
LIST_OF_PKGS="$LIST_OF_PKGS $(cat $p/doc/$p/dependencies)"
|
||||
fi
|
||||
done
|
||||
LIST_OF_PKGS=$(echo $LIST_OF_PKGS | tr ' ' '\n' | sort -u)
|
||||
cd build_doc && make -j$(nproc) doc
|
||||
make -j$(nproc) doc_with_postprocessing 2>tmp.log
|
||||
if [ -s tmp.log ]; then
|
||||
content=`cat ./tmp.log`
|
||||
make -j$(nproc) doc_with_postprocessing 2>build.log
|
||||
if [ -s build.log ]; then
|
||||
delimiter="$(openssl rand -hex 8)"
|
||||
echo "DoxygenError<<${delimiter}" >> "${GITHUB_OUTPUT}"
|
||||
cat tmp.log >> "${GITHUB_OUTPUT}"
|
||||
cat build.log >> "${GITHUB_OUTPUT}"
|
||||
echo "${delimiter}" >> "${GITHUB_OUTPUT}"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -118,18 +187,16 @@ jobs:
|
|||
git clone https://CGAL:${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}@github.com/CGAL/cgal.github.io.git
|
||||
mkdir -p cgal.github.io/${PR_NUMBER}/$ROUND
|
||||
rm cgal.github.io/${PR_NUMBER}/$ROUND/* -rf
|
||||
for f in $LIST_OF_PKGS
|
||||
for f in $LIST_OF_PKGS Manual
|
||||
do
|
||||
if [ -d ./build_doc/doc_output/$f ]; then
|
||||
cp -r ./build_doc/doc_output/$f ./cgal.github.io/${PR_NUMBER}/$ROUND
|
||||
fi
|
||||
done
|
||||
cp -r ./build_doc/doc_output/Manual ./cgal.github.io/${PR_NUMBER}/$ROUND
|
||||
cd ./cgal.github.io
|
||||
egrep -v " ${PR_NUMBER}\." index.html > tmp.html || true
|
||||
echo "<li><a href=https://cgal.github.io/${PR_NUMBER}/$ROUND/Manual/index.html>Manual for PR ${PR_NUMBER} ($ROUND).</a></li>" >> ./tmp.html
|
||||
mv tmp.html index.html
|
||||
git add ${PR_NUMBER}/$ROUND index.html && git commit -q --amend -m "base commit" && git push -q -f -u origin master
|
||||
echo "<li><a href=https://cgal.github.io/${PR_NUMBER}/$ROUND/Manual/index.html>Manual for PR ${PR_NUMBER} ($ROUND).</a></li>" >> ./index.html
|
||||
./cleanup.bash
|
||||
git add ${PR_NUMBER}/$ROUND index.html && git commit -q --amend -m "sole commit" && git push -q -f -u origin master
|
||||
else
|
||||
echo "DoxygenError=This round already exists. Overwrite it with /force-build." >> $GITHUB_OUTPUT
|
||||
exit 1
|
||||
|
|
@ -137,13 +204,11 @@ jobs:
|
|||
|
||||
- name: Post address
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ success() && steps.get_round.outputs.result != 'stop' }}
|
||||
if: ${{ success() }}
|
||||
with:
|
||||
script: |
|
||||
const tmp_round = "${{ steps.get_round.outputs.result }}";
|
||||
const id = tmp_round.indexOf(":");
|
||||
const round = tmp_round.substring(0,id);
|
||||
const address = "The documentation is built. It will be available, after a few minutes, here: https://cgal.github.io/${{ steps.get_pr_number.outputs.result }}/"+round+"/Manual/index.html"
|
||||
const round = "${{ env.doc_version }}"
|
||||
const address = "The documentation is built. It will be available, after a few minutes, here: https://cgal.github.io/${{ env.pr_number }}/"+round+"/Manual/index.html"
|
||||
github.rest.issues.createComment({
|
||||
owner: "CGAL",
|
||||
repo: "cgal",
|
||||
|
|
@ -155,7 +220,7 @@ jobs:
|
|||
env:
|
||||
ERRORMSG: ${{steps.build_and_run.outputs.DoxygenError}}
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ failure() && steps.get_round.outputs.result != 'stop' }}
|
||||
if: ${{ failure() }}
|
||||
with:
|
||||
script: |
|
||||
const error = process.env.ERRORMSG
|
||||
|
|
|
|||
|
|
@ -1,27 +1,33 @@
|
|||
name: Documentation Removal
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
PR_NUMBER:
|
||||
description: 'Pull request number for which the documentation should be removed'
|
||||
type: number
|
||||
required: true
|
||||
pull_request_target:
|
||||
types: [closed, removed, workflow_dispatch]
|
||||
types: [closed]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
delete_doc:
|
||||
permissions:
|
||||
contents: write # for Git to git push
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: delete directory
|
||||
- name: delete directory ${{ github.event.inputs.PR_NUMBER || github.event.pull_request.number }}/ in cgal.github.io
|
||||
env:
|
||||
PR_NUMBER: ${{ github.event.inputs.PR_NUMBER || github.event.pull_request.number }}
|
||||
run: |
|
||||
set -x
|
||||
git config --global user.email "cgal@geometryfactory.com"
|
||||
git config --global user.name "cgaltest"
|
||||
git clone https://CGAL:${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}@github.com/CGAL/cgal.github.io.git
|
||||
PR_NUMBER=$(python -c "import json; import os; y = json.load(open(os.environ['GITHUB_EVENT_PATH'])); print(y[\"number\"])")
|
||||
cd cgal.github.io/
|
||||
egrep -v " ${PR_NUMBER}\." index.html > tmp.html || true
|
||||
if [ -n "$(diff -q ./index.html ./tmp.html)" ]; then
|
||||
|
|
|
|||
|
|
@ -12,15 +12,15 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: REUSE version
|
||||
uses: fsfe/reuse-action@v3
|
||||
uses: fsfe/reuse-action@v4
|
||||
with:
|
||||
args: --version
|
||||
- name: REUSE lint
|
||||
uses: fsfe/reuse-action@v3
|
||||
uses: fsfe/reuse-action@v4
|
||||
with:
|
||||
args: --include-submodules lint
|
||||
- name: REUSE SPDX SBOM
|
||||
uses: fsfe/reuse-action@v3
|
||||
uses: fsfe/reuse-action@v4
|
||||
with:
|
||||
args: spdx
|
||||
- name: install dependencies
|
||||
|
|
@ -30,6 +30,6 @@ jobs:
|
|||
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@v3
|
||||
uses: fsfe/reuse-action@v4
|
||||
with:
|
||||
args: --root ./release/CGAL-9.9 --include-submodules lint
|
||||
|
|
|
|||
|
|
@ -1058,7 +1058,7 @@ cmake_install.cmake
|
|||
*~
|
||||
.#*
|
||||
|
||||
# MacOS file https://en.wikipedia.org/wiki/.DS_Store
|
||||
# macOS file https://en.wikipedia.org/wiki/.DS_Store
|
||||
.DS_Store
|
||||
|
||||
# Binaries:
|
||||
|
|
|
|||
12
.reuse/dep5
12
.reuse/dep5
|
|
@ -1,12 +0,0 @@
|
|||
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
|
||||
|
|
@ -551,7 +551,7 @@ public:
|
|||
traits.intersection(query, singleton_data());
|
||||
break;
|
||||
default: // if(size() >= 2)
|
||||
root_node()->template traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound);
|
||||
root_node()->traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public:
|
|||
/**
|
||||
* @brief General traversal query
|
||||
* @param query the query
|
||||
* @param traits the traversal traits that define the traversal behaviour
|
||||
* @param traits the traversal traits that define the traversal behavior
|
||||
* @param nb_primitives the number of primitive
|
||||
*
|
||||
* General traversal query. The traits class allows using it for the various
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ void test_algebraic_structure_intern(
|
|||
//commutative
|
||||
assert(a+b+c==c+b+a);
|
||||
assert(a*b*c==c*b*a);
|
||||
//distributiv
|
||||
//distributive
|
||||
assert((a-b)*c==a*c-b*c);
|
||||
assert((a+b)*c==a*c+b*c);
|
||||
//binom
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ class Bitstream_descartes;
|
|||
|
||||
|
||||
/*
|
||||
* \brief Thrown whenever a non-specialised virtual member function is called
|
||||
* \brief Thrown whenever a non-specialized virtual member function is called
|
||||
*/
|
||||
class Virtual_method_exception {};
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ public:
|
|||
|
||||
/*!
|
||||
* Constructor computing an interval containing all real roots of \c f,
|
||||
* and initialising the Bitstream Descartes tree
|
||||
* and initializing the Bitstream Descartes tree
|
||||
*/
|
||||
Generic_descartes_rep(Bitstream_descartes_type type,
|
||||
Polynomial f,
|
||||
|
|
@ -170,7 +170,7 @@ public:
|
|||
|
||||
/*!
|
||||
* Constructor that copies the Bitstream tree given from outside
|
||||
* and initialising the Bitstream Descartes tree
|
||||
* and initializing the Bitstream Descartes tree
|
||||
* The tree must "fit" to the polynomial
|
||||
*/
|
||||
Generic_descartes_rep(Bitstream_descartes_type type,
|
||||
|
|
@ -367,7 +367,7 @@ public:
|
|||
/*!
|
||||
* \brief When does the isolation algorithm terminate?
|
||||
*
|
||||
* This method must be specialised by derived classes
|
||||
* This method must be specialized by derived classes
|
||||
*/
|
||||
virtual bool termination_condition() {
|
||||
throw Virtual_method_exception();
|
||||
|
|
@ -378,7 +378,7 @@ public:
|
|||
* \brief gives an opportunity to process the nodes after
|
||||
* the subdivision steps are finished
|
||||
*
|
||||
* This method must be specialised by derived classes, but can
|
||||
* This method must be specialized by derived classes, but can
|
||||
* remain empty in many cases.
|
||||
*/
|
||||
virtual void process_nodes() {
|
||||
|
|
@ -389,7 +389,7 @@ public:
|
|||
/*! \brief returns whether the \c i th root is definitely a simple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
* Must be specialised by derived class
|
||||
* Must be specialized by derived class
|
||||
*/
|
||||
virtual bool is_certainly_simple_root(int) const {
|
||||
throw Virtual_method_exception();
|
||||
|
|
@ -399,7 +399,7 @@ public:
|
|||
/*! \brief returns whether the \c i th root is definitely a multiple root
|
||||
* of the isolated polynomial
|
||||
*
|
||||
* Must be specialised by derived class
|
||||
* Must be specialized by derived class
|
||||
*/
|
||||
virtual bool is_certainly_multiple_root(int) const {
|
||||
throw Virtual_method_exception();
|
||||
|
|
@ -1082,7 +1082,7 @@ protected:
|
|||
* variant of the Bitstream Descartes method: The Square_free_descartes_tag
|
||||
* starts the usual Bitstream method for square free integer polynomials.
|
||||
* With the M_k_descartes tag, it is able to handle one multiple root in
|
||||
* favourable situations, the Backshear_descartes_tag allows to isolate
|
||||
* favorable situations, the Backshear_descartes_tag allows to isolate
|
||||
* even more complicated polynomials, if the multiple roots with even
|
||||
* multiplicity can be refined from outside. See the corresponding
|
||||
* constructors for more information.
|
||||
|
|
|
|||
|
|
@ -865,7 +865,7 @@ public:
|
|||
by trying randomly and checking. This randomization means
|
||||
the same polynomial and same initial interval may give rise
|
||||
to different intervals each time this class is used.
|
||||
As indicated in the paper, we favour subdivision ratios
|
||||
As indicated in the paper, we favor subdivision ratios
|
||||
with a small denominator. Hence we first try denominator
|
||||
2 (subdivision at midpoint), then denominator 16, and
|
||||
only then the "proper" denominator prescribed by theory.
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ public:
|
|||
* (\c SHEAR_ONLY_AT_IRRATIONAL_STRATEGY)
|
||||
* is to \c shear the curve
|
||||
* if a degenerate situation is detected during the analysis,
|
||||
* except at rational x-coordinates where the curve can be analysed
|
||||
* except at rational x-coordinates where the curve can be analyzed
|
||||
* more directly. The analysis
|
||||
* is then performed in the sheared system, and finally translated back
|
||||
* into the original system.
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ public:
|
|||
virtual ~LRU_hashed_map()
|
||||
{ }
|
||||
|
||||
/*! \brief implements cache-like behaviour of the map
|
||||
/*! \brief implements cache-like behavior of the map
|
||||
*
|
||||
* If the object is not in the map, it is constructed using \c Creator
|
||||
* and added to the map
|
||||
|
|
@ -312,7 +312,7 @@ public:
|
|||
~LRU_hashed_map_with_kernel()
|
||||
{ }
|
||||
|
||||
/*! \brief implements cache-like behaviour of the map
|
||||
/*! \brief implements cache-like behavior of the map
|
||||
*
|
||||
* If the object is not in the map, it is constructed using \c Creator
|
||||
* and added to the map
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ namespace CGAL {
|
|||
/*!
|
||||
* \brief Exception class for not sufficiently generic positions.
|
||||
*
|
||||
* Must be thrown whenever a curve cannot be analysed because its position
|
||||
* Must be thrown whenever a curve cannot be analyzed because its position
|
||||
* is not "good enough".
|
||||
*/
|
||||
class Non_generic_position_exception {
|
||||
|
|
@ -40,7 +40,7 @@ namespace CGAL {
|
|||
/*!
|
||||
* \brief Exception class for not sufficiently generic positions.
|
||||
*
|
||||
* Must be thrown whenever a curve cannot be analysed because its position
|
||||
* Must be thrown whenever a curve cannot be analyzed because its position
|
||||
* is not "good enough".
|
||||
*/
|
||||
template<typename Polynomial>
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
|
||||
/**
|
||||
* If set, the curve and curve pair analysis are using specialized code
|
||||
* to analyse conic curves, i.e. curves of degree 2
|
||||
* to analyze conic curves, i.e. curves of degree 2
|
||||
*/
|
||||
#ifndef CGAL_ACK_USE_SPECIAL_TREATMENT_FOR_CONIX
|
||||
#define CGAL_ACK_USE_SPECIAL_TREATMENT_FOR_CONIX 0
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ template<typename Arithmetic_kernel> void test_routine() {
|
|||
#endif
|
||||
}
|
||||
|
||||
{ // More tests...just analyse some curves and compute their segments
|
||||
{ // More tests...just analyze some curves and compute their segments
|
||||
Poly_int2 f = from_string<Poly_int2>("P[8(0,P[8(0,24)(1,-8)(2,-162)(3,204)(4,106)(5,-340)(6,240)(7,-72)(8,8)])(1,P[6(0,-60)(1,8)(2,304)(3,-400)(4,148)(5,8)(6,-8)])(2,P[6(0,18)(1,80)(2,-165)(3,-132)(4,367)(5,-212)(6,38)])(3,P[4(0,-30)(1,-136)(2,264)(3,-72)(4,-26)])(4,P[4(0,-15)(1,36)(2,89)(3,-144)(4,49)])(5,P[2(0,30)(1,-24)(2,-6)])(6,P[2(0,-6)(1,-28)(2,22)])(8,P[0(0,3)])]");
|
||||
Curve_analysis_2 curve= construct_curve_2(f);
|
||||
#if CGAL_ACK_DEBUG_FLAG
|
||||
|
|
|
|||
|
|
@ -1638,7 +1638,7 @@ compute_edge_status( const Cell_handle& c,
|
|||
last=ccirc;
|
||||
while (is_infinite(ccirc) ) ++ccirc; //skip infinite incident cells
|
||||
alpha = (*ccirc).get_alpha();
|
||||
as.set_alpha_mid(alpha); // initialise as.alpha_mid to alpha value of an incident cell
|
||||
as.set_alpha_mid(alpha); // initialize as.alpha_mid to alpha value of an incident cell
|
||||
as.set_alpha_max(alpha); // same for as.alpha_max
|
||||
while (++ccirc != last)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ test_filtration(AS &A, bool verbose)
|
|||
typename AS::NT alpha;
|
||||
if(verbose) {
|
||||
std::cerr << std::endl;
|
||||
std::cerr << "Analyse filtration " << std::endl;
|
||||
std::cerr << "Analyze filtration " << std::endl;
|
||||
}
|
||||
for (; filtre_it != filtration.end(); filtre_it++) {
|
||||
if(assign(vertex, *filtre_it)) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ namespace Qt
|
|||
{
|
||||
class Callback;
|
||||
class ArrangementGraphicsItemBase;
|
||||
class ArrangementGraphicsItemBase;
|
||||
class GraphicsViewCurveInputBase;
|
||||
class GraphicsViewNavigation;
|
||||
enum class CurveType;
|
||||
|
|
|
|||
|
|
@ -111,13 +111,10 @@ void CurveInputMethod::beginInput_()
|
|||
|
||||
static inline void clearPainterPath(QPainterPath& ppath)
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0))
|
||||
ppath.clear();
|
||||
#else
|
||||
ppath = {};
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CurveInputMethod::reset()
|
||||
{
|
||||
this->resetInput();
|
||||
|
|
|
|||
|
|
@ -67,11 +67,7 @@ void GridGraphicsItem::setSpacing(int spacing_)
|
|||
static inline qreal
|
||||
horizontalAdvance(const QFontMetrics& fm, const QString& text)
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||
return fm.horizontalAdvance(text);
|
||||
#else
|
||||
return fm.boundingRect(text).width();
|
||||
#endif
|
||||
}
|
||||
|
||||
void GridGraphicsItem::paint(
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ namespace {
|
|||
Flag(bool init) : v{ init } {}
|
||||
};
|
||||
|
||||
// EXTENDED AOS for analysing the arrangement
|
||||
// EXTENDED AOS for analyzing the arrangement
|
||||
using Ext_dcel = CGAL::Arr_extended_dcel<Geom_traits, Flag, Flag, Flag>;
|
||||
using Ext_topol_traits =
|
||||
CGAL::Arr_spherical_topology_traits_2<Geom_traits, Ext_dcel>;
|
||||
|
|
|
|||
|
|
@ -342,13 +342,13 @@ public:
|
|||
{}
|
||||
|
||||
/*! Operate */
|
||||
bool operator()(const X_monotone_curve_2& xc1,
|
||||
const X_monotone_curve_2& xc2) const
|
||||
{ ++m_counter1; return m_object(xc1, xc2); }
|
||||
bool operator()(const Point_2& p1, const Point_2& p2) const
|
||||
{ ++m_counter1; return m_object(p1, p2); }
|
||||
|
||||
/*! Operate */
|
||||
bool operator()(const Point_2& p1, const Point_2& p2) const
|
||||
{ ++m_counter2; return m_object(p1, p2); }
|
||||
bool operator()(const X_monotone_curve_2& xc1,
|
||||
const X_monotone_curve_2& xc2) const
|
||||
{ ++m_counter2; return m_object(xc1, xc2); }
|
||||
};
|
||||
|
||||
/*! A functor that compares compares the y-coordinates of two x-monotone
|
||||
|
|
@ -563,7 +563,7 @@ public:
|
|||
*/
|
||||
class Is_on_x_identification_2 {
|
||||
private:
|
||||
typename Base::Is_on_x_identificiation_2 m_object;
|
||||
typename Base::Is_on_x_identification_2 m_object;
|
||||
size_t& m_counter1;
|
||||
size_t& m_counter2;
|
||||
|
||||
|
|
@ -571,17 +571,17 @@ public:
|
|||
/*! Construct */
|
||||
Is_on_x_identification_2(const Base* base,
|
||||
size_t& counter1, size_t& counter2) :
|
||||
m_object(base->is_on_x_identificiation_2_object()),
|
||||
m_object(base->is_on_x_identification_2_object()),
|
||||
m_counter1(counter1),
|
||||
m_counter2(counter2)
|
||||
{}
|
||||
|
||||
/*! Operate */
|
||||
Arr_parameter_space operator()(const Point_2& p) const
|
||||
bool operator()(const Point_2& p) const
|
||||
{ ++m_counter1; return m_object(p); }
|
||||
|
||||
/*! Operate */
|
||||
Arr_parameter_space operator()(const X_monotone_curve_2& xc) const
|
||||
bool operator()(const X_monotone_curve_2& xc) const
|
||||
{ ++m_counter2; return m_object(xc); }
|
||||
};
|
||||
|
||||
|
|
@ -666,7 +666,7 @@ public:
|
|||
*/
|
||||
class Is_on_y_identification_2 {
|
||||
private:
|
||||
typename Base::Is_on_y_identificiation_2 m_object;
|
||||
typename Base::Is_on_y_identification_2 m_object;
|
||||
size_t& m_counter1;
|
||||
size_t& m_counter2;
|
||||
|
||||
|
|
@ -674,18 +674,18 @@ public:
|
|||
/*! Construct */
|
||||
Is_on_y_identification_2(const Base* base,
|
||||
size_t& counter1, size_t& counter2) :
|
||||
m_object(base->is_on_y_identificiation_2_object()),
|
||||
m_object(base->is_on_y_identification_2_object()),
|
||||
m_counter1(counter1),
|
||||
m_counter2(counter2)
|
||||
{}
|
||||
|
||||
/*! Operate */
|
||||
Arr_parameter_space operator()(const Point_2& p) const
|
||||
bool operator()(const Point_2& p) const
|
||||
{ ++m_counter1; return m_object(p); }
|
||||
|
||||
|
||||
/*! Operate */
|
||||
Arr_parameter_space operator()(const X_monotone_curve_2& xc) const
|
||||
bool operator()(const X_monotone_curve_2& xc) const
|
||||
{ ++m_counter2; return m_object(xc); }
|
||||
};
|
||||
|
||||
|
|
@ -824,10 +824,10 @@ public:
|
|||
m_counters[IS_ON_X_IDENTIFICATION_CURVE_OP]);
|
||||
}
|
||||
|
||||
Compare_y_on_boundary_2 compare_on_boundary_2_object() const
|
||||
Compare_y_on_boundary_2 compare_y_on_boundary_2_object() const
|
||||
{ return Compare_y_on_boundary_2(this, m_counters[COMPARE_Y_ON_BOUNDARY_OP]); }
|
||||
|
||||
Compare_y_near_boundary_2 compare_near_boundary_2_object() const
|
||||
Compare_y_near_boundary_2 compare_y_near_boundary_2_object() const
|
||||
{
|
||||
return Compare_y_near_boundary_2(this,
|
||||
m_counters[COMPARE_Y_NEAR_BOUNDARY_OP]);
|
||||
|
|
@ -943,7 +943,7 @@ Out_stream& operator<<(Out_stream& os,
|
|||
<< traits.count_parameter_space_in_x_point() << std::endl
|
||||
<< "# of PARAMETER_SPACE_IN_X curve operation = "
|
||||
<< traits.count_parameter_space_in_x_curve() << std::endl
|
||||
<< "# of IS_ON_X_IDENTIFICIATION point operation = "
|
||||
<< "# of IS_ON_X_IDENTIFICATION point operation = "
|
||||
<< traits.count_is_on_x_identification_point() << std::endl
|
||||
<< "# of IS_ON_X_IDENTIFICATION curve operation = "
|
||||
<< traits.count_is_on_x_identification_curve() << std::endl
|
||||
|
|
@ -958,7 +958,7 @@ Out_stream& operator<<(Out_stream& os,
|
|||
<< traits.count_parameter_space_in_y_point() << std::endl
|
||||
<< "# of PARAMETER_SPACE_IN_Y curve operation = "
|
||||
<< traits.count_parameter_space_in_y_curve() << std::endl
|
||||
<< "# of IS_ON_Y_IDENTIFICIATION point operation = "
|
||||
<< "# of IS_ON_Y_IDENTIFICATION point operation = "
|
||||
<< traits.count_is_on_y_identification_point() << std::endl
|
||||
<< "# of IS_ON_Y_IDENTIFICATION curve operation = "
|
||||
<< traits.count_is_on_y_identification_curve() << std::endl
|
||||
|
|
|
|||
|
|
@ -641,8 +641,7 @@ public:
|
|||
* \param[in] plane the containing plane.
|
||||
* \param[in] source the source-point direction.
|
||||
* \param[in] target the target-point direction.
|
||||
* \pre Both endpoint lie on the given plane.
|
||||
* \pre Both endpoint lie on the given plane.
|
||||
* \pre Both endpoints lie on the given plane.
|
||||
*/
|
||||
X_monotone_curve_2 operator()(const Point_2& source, const Point_2& target,
|
||||
const Direction_3& normal) const
|
||||
|
|
@ -3113,7 +3112,7 @@ public:
|
|||
* \param is_directed_right is the arc directed from left to right?
|
||||
* \param is_full is the arc a full circle?
|
||||
* \param is_degenerate is the arc degenerate (single point)?
|
||||
* \pre Both endpoint lie on the given plane.
|
||||
* \pre Both endpoints lie on the given plane.
|
||||
*/
|
||||
Arr_x_monotone_geodesic_arc_on_sphere_3
|
||||
(const Arr_extended_direction_3& src,
|
||||
|
|
@ -3312,8 +3311,7 @@ public:
|
|||
* \param plane the containing plane.
|
||||
* \param source the source-point direction.
|
||||
* \param target the target-point direction.
|
||||
* \pre Both endpoint lie on the given plane.
|
||||
* \pre Both endpoint lie on the given plane.
|
||||
* \pre Both endpoints lie on the given plane.
|
||||
*/
|
||||
Arr_x_monotone_geodesic_arc_on_sphere_3
|
||||
(const Arr_extended_direction_3& source,
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ public:
|
|||
if (! valid)
|
||||
return;
|
||||
|
||||
// Analyze the behaviour of the rational function at x = -oo (the source).
|
||||
// Analyze the behavior of the rational function at x = -oo (the source).
|
||||
Algebraic y0;
|
||||
const Arr_parameter_space inf_s =
|
||||
_analyze_at_minus_infinity (_numer, _denom, y0);
|
||||
|
|
@ -351,7 +351,7 @@ public:
|
|||
else // if (inf_s == ARR_INTERIOR)
|
||||
_ps = Point_2 (0, y0);
|
||||
|
||||
// Analyze the behaviour of the rational function at x = +oo (the target).
|
||||
// Analyze the behavior of the rational function at x = +oo (the target).
|
||||
const Arr_parameter_space inf_t =
|
||||
_analyze_at_plus_infinity (_numer, _denom, y0);
|
||||
|
||||
|
|
@ -735,7 +735,7 @@ public:
|
|||
*/
|
||||
Self split_at_pole (const Algebraic& x0)
|
||||
{
|
||||
// Analyze the behaviour of the function near the given pole.
|
||||
// Analyze the behavior of the function near the given pole.
|
||||
const std::pair<CGAL::Sign, CGAL::Sign> signs = _analyze_near_pole (x0);
|
||||
const CGAL::Sign sign_left = signs.first;
|
||||
const CGAL::Sign sign_right = signs.second;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -591,8 +591,7 @@ public:
|
|||
Comparison_result dir = cmp_seg_endpts(xcv[0]);
|
||||
|
||||
// Locate the subcurve on the polycurve xcv that contains p.
|
||||
std::size_t i = m_poly_traits.locate(xcv, p);
|
||||
|
||||
auto i = m_poly_traits.locate_impl(xcv, p, All_sides_oblivious_category());
|
||||
CGAL_precondition(i != Polycurve_traits_2::INVALID_INDEX);
|
||||
|
||||
// Clear the output curves.
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ public:
|
|||
_info = (_info | IS_DIRECTED_RIGHT);
|
||||
|
||||
|
||||
// Analyze the behaviour of the rational function at x = -oo (the source).
|
||||
// Analyze the behavior of the rational function at x = -oo (the source).
|
||||
Algebraic_real_1 y0;
|
||||
const Arr_parameter_space inf_s = _analyze_at_minus_infinity(P, Q, y0);
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ public:
|
|||
_info = (_info | SRC_AT_Y_PLUS_INFTY);
|
||||
else // if (inf_s == ARR_INTERIOR)
|
||||
_ps = Algebraic_point_2(); //the point is a dummy
|
||||
//Analyze the behaviour of the rational function at x = +oo (the target).
|
||||
//Analyze the behavior of the rational function at x = +oo (the target).
|
||||
const Arr_parameter_space inf_t = _analyze_at_plus_infinity(P, Q, y0);
|
||||
|
||||
if (inf_t == ARR_BOTTOM_BOUNDARY)
|
||||
|
|
@ -949,7 +949,7 @@ public:
|
|||
|
||||
Self split_at_pole(const Algebraic_real_1& x0)
|
||||
{
|
||||
// Analyze the behaviour of the function near the given pole.
|
||||
// Analyze the behavior of the function near the given pole.
|
||||
const std::pair<CGAL::Sign, CGAL::Sign> signs = _analyze_near_pole(x0);
|
||||
const CGAL::Sign sign_left = signs.first;
|
||||
const CGAL::Sign sign_right = signs.second;
|
||||
|
|
|
|||
|
|
@ -1578,7 +1578,7 @@ public:
|
|||
return res;
|
||||
}
|
||||
|
||||
// otherwise: both ends have asymptotic behaviour
|
||||
// otherwise: both ends have asymptotic behavior
|
||||
if (ps_y1 == ps_y2) { // need special y-comparison
|
||||
if (ce1 == ce2) { // both ends approach asymptote from one side
|
||||
Comparison_result res = m_self->compare_x_near_boundary_2_object()(xcv1, xcv2, ce2);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
* \brief
|
||||
* defines class Curve_renderer_traits.
|
||||
*
|
||||
* provides specialisations of Curve_renderer_traits for different number
|
||||
* provides specializations of Curve_renderer_traits for different number
|
||||
* types compatible with the curve renderer
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Input is based on the curves and points indexes from intersect.pt
|
||||
# intersect.xcv. The first two numbers are the numbers of the input curves
|
||||
# to be intersected. After that there is the number of intesections and
|
||||
# to be intersected. After that there is the number of intersections and
|
||||
# 2-3 numbers representing each intersection. Meaning, the input is of the form:
|
||||
# intersect <id of 1st x-curve> <id of 2nd x-curve> \
|
||||
# <expected number of intersections> [<type of intersection> \
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ find_package(CGAL REQUIRED)
|
|||
|
||||
find_package(OpenMesh)
|
||||
if(OpenMesh_FOUND)
|
||||
include(UseOpenMesh)
|
||||
include(CGAL_OpenMesh_support)
|
||||
create_single_source_cgal_program("TriMesh.cpp")
|
||||
target_link_libraries(TriMesh PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_link_libraries(TriMesh PRIVATE CGAL::OpenMesh_support)
|
||||
else()
|
||||
message("NOTICE: This project requires OpenMesh and will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ create_single_source_cgal_program("copy_polyhedron.cpp")
|
|||
|
||||
find_package(OpenMesh QUIET)
|
||||
if(OpenMesh_FOUND)
|
||||
target_link_libraries(copy_polyhedron PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(copy_polyhedron PRIVATE -DCGAL_USE_OPENMESH)
|
||||
include(CGAL_OpenMesh_support)
|
||||
target_link_libraries(copy_polyhedron PRIVATE CGAL::OpenMesh_support)
|
||||
else()
|
||||
message(STATUS "NOTICE: The example 'copy_polyhedron' will not use OpenMesh.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -733,7 +733,7 @@ struct Graph_with_descriptor_with_graph_property_map {
|
|||
}
|
||||
}; // class Graph_with_descriptor_with_graph_property_map
|
||||
|
||||
//specialisation for lvaluepropertymaps
|
||||
//specialization for lvaluepropertymaps
|
||||
template <typename Graph, typename PM>
|
||||
struct Graph_with_descriptor_with_graph_property_map<Graph, PM, boost::lvalue_property_map_tag> {
|
||||
|
||||
|
|
|
|||
|
|
@ -116,8 +116,8 @@ void partition_dual_graph(const TriangleMesh& tm,
|
|||
delete[] eptr;
|
||||
delete[] eind;
|
||||
|
||||
std::free(npart);
|
||||
std::free(epart);
|
||||
(std::free)(npart);
|
||||
(std::free)(epart);
|
||||
}
|
||||
|
||||
template<typename TriangleMesh, typename NamedParameters>
|
||||
|
|
|
|||
|
|
@ -151,8 +151,8 @@ void partition_graph(const TriangleMesh& tm,
|
|||
delete[] eptr;
|
||||
delete[] eind;
|
||||
|
||||
std::free(npart);
|
||||
std::free(epart);
|
||||
(std::free)(npart);
|
||||
(std::free)(epart);
|
||||
}
|
||||
|
||||
template<typename TriangleMesh, typename NamedParameters>
|
||||
|
|
|
|||
|
|
@ -62,13 +62,15 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
const tm_face_descriptor tm_null_face = boost::graph_traits<TargetMesh>::null_face();
|
||||
const tm_vertex_descriptor tm_null_vertex = boost::graph_traits<TargetMesh>::null_vertex();
|
||||
|
||||
reserve(tm, static_cast<typename boost::graph_traits<TargetMesh>::vertices_size_type>(vertices(tm).size()+vertices(sm).size()),
|
||||
static_cast<typename boost::graph_traits<TargetMesh>::edges_size_type>(edges(tm).size()+edges(sm).size()),
|
||||
static_cast<typename boost::graph_traits<TargetMesh>::faces_size_type>(faces(tm).size()+faces(sm).size()) );
|
||||
reserve(tm, static_cast<typename boost::graph_traits<TargetMesh>::vertices_size_type>(internal::exact_num_vertices(tm)+internal::exact_num_vertices(sm)),
|
||||
static_cast<typename boost::graph_traits<TargetMesh>::edges_size_type>(internal::exact_num_edges(tm)+internal::exact_num_edges(sm)),
|
||||
static_cast<typename boost::graph_traits<TargetMesh>::faces_size_type>(internal::exact_num_faces(tm)+internal::exact_num_faces(sm)) );
|
||||
|
||||
//insert halfedges and create each vertex when encountering its halfedge
|
||||
std::vector<tm_edge_descriptor> new_edges;
|
||||
new_edges.reserve(edges(sm).size());
|
||||
std::vector<tm_halfedge_descriptor> new_vertices;
|
||||
new_edges.reserve(internal::exact_num_edges(sm));
|
||||
new_vertices.reserve(internal::exact_num_vertices(sm));
|
||||
for(sm_edge_descriptor sm_e : edges(sm))
|
||||
{
|
||||
tm_edge_descriptor tm_e = add_edge(tm);
|
||||
|
|
@ -106,6 +108,7 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
tm_vertex_descriptor tm_h_tgt = add_vertex(tm);
|
||||
*v2v++=std::make_pair(sm_h_tgt, tm_h_tgt);
|
||||
set_halfedge(tm_h_tgt, tm_h, tm);
|
||||
new_vertices.push_back(tm_h);
|
||||
set_target(tm_h, tm_h_tgt, tm);
|
||||
put(tm_vpm, tm_h_tgt, conv(get(sm_vpm, sm_h_tgt)));
|
||||
}
|
||||
|
|
@ -116,6 +119,7 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
tm_vertex_descriptor tm_h_src = add_vertex(tm);
|
||||
*v2v++=std::make_pair(sm_h_src, tm_h_src);
|
||||
set_halfedge(tm_h_src, tm_h_opp, tm);
|
||||
new_vertices.push_back(tm_h_opp);
|
||||
set_target(tm_h_opp, tm_h_src, tm);
|
||||
put(tm_vpm, tm_h_src, conv(get(sm_vpm, sm_h_src)));
|
||||
}
|
||||
|
|
@ -163,11 +167,9 @@ void copy_face_graph_impl(const SourceMesh& sm, TargetMesh& tm,
|
|||
}
|
||||
}
|
||||
// update halfedge vertex of all but the vertex halfedge
|
||||
for(tm_vertex_descriptor v : vertices(tm))
|
||||
for(tm_halfedge_descriptor h : new_vertices)
|
||||
{
|
||||
tm_halfedge_descriptor h = halfedge(v, tm);
|
||||
if (h==boost::graph_traits<TargetMesh>::null_halfedge())
|
||||
continue;
|
||||
tm_vertex_descriptor v = target(h, tm);
|
||||
tm_halfedge_descriptor next_around_vertex=h;
|
||||
do{
|
||||
next_around_vertex=opposite(next(next_around_vertex, tm), tm);
|
||||
|
|
|
|||
|
|
@ -42,50 +42,31 @@ create_single_source_cgal_program("test_deprecated_io.cpp")
|
|||
|
||||
find_package(OpenMesh QUIET)
|
||||
if(OpenMesh_FOUND)
|
||||
include(UseOpenMesh)
|
||||
add_definitions(-DCGAL_USE_OPENMESH)
|
||||
include(CGAL_OpenMesh_support)
|
||||
|
||||
target_link_libraries(test_clear PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_clear PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_Euler_operations PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_Euler_operations PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_Collapse_edge PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_Collapse_edge PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_Face_filtered_graph PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_Face_filtered_graph PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_graph_traits PRIVATE ${OPENMESH_LIBRARIES} )
|
||||
target_compile_definitions(test_graph_traits PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_Properties PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_Properties PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_bgl_read_write PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_compile_definitions(test_bgl_read_write PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(test_clear PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(test_Euler_operations PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(test_Collapse_edge PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(test_Face_filtered_graph PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(test_graph_traits PRIVATE CGAL::OpenMesh_support )
|
||||
target_link_libraries(test_Properties PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(test_bgl_read_write PRIVATE CGAL::OpenMesh_support)
|
||||
|
||||
create_single_source_cgal_program("graph_concept_OpenMesh.cpp")
|
||||
target_link_libraries(graph_concept_OpenMesh PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_link_libraries(graph_concept_OpenMesh PRIVATE CGAL::OpenMesh_support)
|
||||
else()
|
||||
message(STATUS "NOTICE: Tests that use OpenMesh will not be compiled.")
|
||||
endif()
|
||||
|
||||
find_package(VTK QUIET COMPONENTS vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources)
|
||||
if (VTK_FOUND)
|
||||
if(VTK_USE_FILE)
|
||||
include(${VTK_USE_FILE})
|
||||
endif()
|
||||
|
||||
if ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
|
||||
if(TARGET VTK::CommonCore)
|
||||
set(VTK_LIBRARIES VTK::CommonCore VTK::IOCore VTK::IOLegacy VTK::IOXML VTK::FiltersCore VTK::FiltersSources)
|
||||
endif()
|
||||
|
||||
if(VTK_LIBRARIES)
|
||||
target_link_libraries(test_bgl_read_write PRIVATE ${VTK_LIBRARIES})
|
||||
target_compile_definitions(test_bgl_read_write PRIVATE -DCGAL_USE_VTK -DNOMINMAX)
|
||||
target_link_libraries(test_deprecated_io PRIVATE ${VTK_LIBRARIES})
|
||||
target_compile_definitions(test_deprecated_io PRIVATE -DCGAL_USE_VTK -DNOMINMAX)
|
||||
else()
|
||||
message(STATUS "Tests that use VTK will not be compiled.")
|
||||
endif()
|
||||
endif()
|
||||
find_package(VTK 9.0 QUIET COMPONENTS CommonCore IOCore IOLegacy IOXML FiltersCore FiltersSources)
|
||||
if (VTK_FOUND AND VTK_LIBRARIES)
|
||||
message(STATUS "VTK ${VTK_VERSION} found ${VTK_LIBRARIES}")
|
||||
target_link_libraries(test_bgl_read_write PRIVATE ${VTK_LIBRARIES})
|
||||
target_compile_definitions(test_bgl_read_write PRIVATE -DCGAL_USE_VTK -DNOMINMAX)
|
||||
target_link_libraries(test_deprecated_io PRIVATE ${VTK_LIBRARIES})
|
||||
target_compile_definitions(test_deprecated_io PRIVATE -DCGAL_USE_VTK -DNOMINMAX)
|
||||
else()
|
||||
message(STATUS "Tests that use VTK will not be compiled.")
|
||||
endif() #VTK_FOUND
|
||||
|
||||
find_path(3MF_INCLUDE_DIR
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ test_copy_face_graph_nm_umbrella()
|
|||
T g;
|
||||
Kernel::Point_3 p(0,0,0);
|
||||
|
||||
// make two connected components
|
||||
CGAL::make_tetrahedron(p, p, p, p, g);
|
||||
CGAL::make_tetrahedron(p, p, p, p, g);
|
||||
|
||||
|
|
|
|||
|
|
@ -542,13 +542,13 @@ boundary of each input (linear) polygon as a cyclic sequence of single
|
|||
(\f$x\f$-monotone) polylines. By default, `UsePolylines` is set to
|
||||
`CGAL::Tag_true`, which implies that the boundary of the each input
|
||||
(linear) polygon is treated as a cyclic sequence of (\f$x\f$-monotone)
|
||||
polylines. In most cases this behaviour is superior (that is, less
|
||||
polylines. In most cases this behavior is superior (that is, less
|
||||
time-consuming) because the number of events handled as part of the
|
||||
execution of the plane-sweep algorithm is reduced. In cases where the
|
||||
boundaries of the input polygons frequently intersect, treating them
|
||||
as polylines may become less efficient. In these cases substitute the
|
||||
`UsePolylines` template parameter with `CGAL::Tag_false` to restore
|
||||
the original behaviour (where the boundary of each input linear
|
||||
the original behavior (where the boundary of each input linear
|
||||
polygon is treated as a cyclic sequence of single \f$x\f$-monotone
|
||||
segments).
|
||||
|
||||
|
|
|
|||
|
|
@ -1104,7 +1104,7 @@ do_intersect(const General_polygon_with_holes_2<General_polygon_2<ArrTraits>>& p
|
|||
* \param traits a traits object.
|
||||
* \return `true` if `pgn1` and `pgn2` intersect in their interior and `false`
|
||||
* otherwise.
|
||||
* \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
|
||||
*
|
||||
* \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
|
||||
*/
|
||||
template <typename Polygon, typename GpsTraits>
|
||||
|
|
|
|||
|
|
@ -642,6 +642,7 @@ public:
|
|||
unsigned int i = 1;
|
||||
for (InputIterator itr = begin; itr != end; ++itr, ++i)
|
||||
{
|
||||
ValidationPolicy::is_valid((*itr), *m_traits);
|
||||
arr_vec[i].first = new Aos_2(m_traits);
|
||||
_insert(*itr, *(arr_vec[i].first));
|
||||
}
|
||||
|
|
@ -666,6 +667,7 @@ public:
|
|||
unsigned int i = 1;
|
||||
for (InputIterator itr = begin; itr!=end; ++itr, ++i)
|
||||
{
|
||||
ValidationPolicy::is_valid((*itr), *m_traits);
|
||||
arr_vec[i].first = new Aos_2(m_traits);
|
||||
_insert(*itr, *(arr_vec[i].first));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace CGAL {
|
|||
\ingroup PkgBoundingVolumesRef
|
||||
|
||||
The class `Min_sphere_annulus_d_traits_2` is a traits class for the \f$ d\f$-dimensional
|
||||
optimisation algorithms using the two-dimensional \cgal kernel.
|
||||
optimization algorithms using the two-dimensional \cgal kernel.
|
||||
|
||||
\tparam K must bea model for `Kernel`.
|
||||
\tparam ET NT are models for `RingNumberType`. Their default type is `K::RT`.
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace CGAL {
|
|||
\ingroup PkgBoundingVolumesRef
|
||||
|
||||
The class `Min_sphere_annulus_d_traits_3` is a traits class for the \f$ d\f$-dimensional
|
||||
optimisation algorithms using the three-dimensional \cgal kernel.
|
||||
optimization algorithms using the three-dimensional \cgal kernel.
|
||||
|
||||
\tparam K must be a model for `Kernel`.
|
||||
\tparam ET NT are models for `RingNumberType`. Their default type is `K::RT`.
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace CGAL {
|
|||
\ingroup PkgBoundingVolumesRef
|
||||
|
||||
The class `Min_sphere_annulus_d_traits_d` is a traits class for the \f$ d\f$-dimensional
|
||||
optimisation algorithms using the \f$ d\f$-dimensional \cgal kernel.
|
||||
optimization algorithms using the \f$ d\f$-dimensional \cgal kernel.
|
||||
|
||||
\tparam K must be a model for `Kernel`.
|
||||
\tparam ET NT are models for `RingNumberType`. Their default type is `K::RT`.
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ namespace CGAL {
|
|||
std::vector<const Point *> P; // input points
|
||||
int n; // number of input points, i.e., P.size()
|
||||
|
||||
// This class comes in two flavours:
|
||||
// This class comes in two flavors:
|
||||
//
|
||||
// (i) When Embed is false, the input points are taken to be
|
||||
// ordinary points in R^{d_P}, where d_P is the dimension of the
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ namespace CGAL_MINIBALL_NAMESPACE {
|
|||
// they are convertible to double.
|
||||
// This is indeed the least invasive fix dropint the function that were
|
||||
// defined here and cause linkage bug.
|
||||
// You can still have a behaviour of instantiating only if a type
|
||||
// You can still have a behavior of instantiating only if a type
|
||||
// is convertibale to double (by using type_traits together with _if)
|
||||
// but until "the whole design should be overhauled at some point"
|
||||
// this is fine.
|
||||
|
|
|
|||
|
|
@ -376,7 +376,7 @@ min_rectangle_2(
|
|||
|
||||
// quadruple of points defining the current rectangle
|
||||
ForwardIterator curr[4];
|
||||
// initialised to the points defining the bounding box
|
||||
// initialized to the points defining the bounding box
|
||||
convex_bounding_box_2(f, l, curr, t);
|
||||
|
||||
// curr[i] can be advanced (cyclically) until it reaches limit[i]
|
||||
|
|
@ -482,7 +482,7 @@ min_parallelogram_2(ForwardIterator f,
|
|||
|
||||
// quadruple of points defining the bounding box
|
||||
ForwardIterator curr[4];
|
||||
// initialised to the points defining the bounding box
|
||||
// initialized to the points defining the bounding box
|
||||
convex_bounding_box_2(first, l, curr, t);
|
||||
|
||||
|
||||
|
|
@ -659,7 +659,7 @@ min_strip_2(ForwardIterator f,
|
|||
|
||||
// quadruple of points defining the bounding box
|
||||
ForwardIterator curr[4];
|
||||
// initialised to the points defining the bounding box
|
||||
// initialized to the points defining the bounding box
|
||||
convex_bounding_box_2(first, l, curr, t);
|
||||
|
||||
ForwardIterator low = curr[0];
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ rectangular_3_center_2_type1(
|
|||
rad = sdist(v(r, 2), v(r, 0));
|
||||
// init to prevent default constructor requirement
|
||||
Point bestpoint = *f;
|
||||
// (initialisation avoids warning)
|
||||
// (initialization avoids warning)
|
||||
unsigned int bestrun = 0;
|
||||
|
||||
// two cases: top-left & bottom-right or top-right & bottom-left
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
// release : $CGAL_Revision: CGAL-wip $
|
||||
// release_date : $CGAL_Date$
|
||||
//
|
||||
// chapter : $CGAL_Chapter: Optimisation $
|
||||
// chapter : $CGAL_Chapter: Geometric Optimization $
|
||||
// package : $CGAL_Package: MinSphere $
|
||||
// file : min_sphere_test.C
|
||||
// source : web/Optimisation/Min_sphere_d.aw
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// release : $CGAL_Revision: CGAL-wip $
|
||||
// release_date : $CGAL_Date$
|
||||
//
|
||||
// chapter : $CGAL_Chapter: Optimisation $
|
||||
// chapter : $CGAL_Chapter: Geometric Optimization $
|
||||
// package : $CGAL_Package: MinSphere $
|
||||
// file : min_sphere_traits_2_test.C
|
||||
// source : web/Optimisation/Min_sphere_d.aw
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
// release : $CGAL_Revision: CGAL-wip $
|
||||
// release_date : $CGAL_Date$
|
||||
//
|
||||
// chapter : $CGAL_Chapter: Optimisation $
|
||||
// chapter : $CGAL_Chapter: Geometric Optimization $
|
||||
// package : $CGAL_Package: MinSphere $
|
||||
// file : min_sphere_traits_3_test.C
|
||||
// source : web/Optimisation/Min_sphere_d.aw
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_annulus_d/test_Min_annulus_d.h
|
||||
// package : $CGAL_Package: Min_annulus_d $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// source : web/Min_annulus_d.aw
|
||||
// revision : $Id$
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_annulus_d/test_Min_annulus_d_2.cpp
|
||||
// package : $CGAL_Package: Min_annulus_d $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// revision : $Id$
|
||||
// revision_date : $Date$
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_annulus_d/test_Min_annulus_d_3.cpp
|
||||
// package : $CGAL_Package: Min_annulus_d $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// revision : $Id$
|
||||
// revision_date : $Date$
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_annulus_d/test_Min_annulus_d_d.cpp
|
||||
// package : $CGAL_Package: Min_annulus_d $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// revision : $Id$
|
||||
// revision_date : $Date$
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_circle_2/test_Min_circle_2.C
|
||||
// package : $CGAL_Package: Min_circle_2 $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// source : web/Min_circle_2.aw
|
||||
// revision : $Id$
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
//
|
||||
// file : test/Min_ellipse_2/test_Min_ellipse_2.C
|
||||
// package : $CGAL_Package: Min_ellipse_2 $
|
||||
// chapter : Geometric Optimisation
|
||||
// chapter : Geometric Optimization
|
||||
//
|
||||
// source : web/Min_ellipse_2.aw
|
||||
// revision : $Id$
|
||||
|
|
|
|||
|
|
@ -595,7 +595,7 @@ public:
|
|||
}
|
||||
|
||||
void operator delete( void *p, size_t ){
|
||||
MemoryPool<ConstPolyRep>::global_allocator().free(p);
|
||||
(MemoryPool<ConstPolyRep>::global_allocator().free)(p);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -1248,7 +1248,7 @@ void * AddSubRep<O>::operator new( size_t size)
|
|||
|
||||
template <typename O>
|
||||
void AddSubRep<O>::operator delete( void *p, size_t )
|
||||
{ MemoryPool<AddSubRep<O> >::global_allocator().free(p); }
|
||||
{ (MemoryPool<AddSubRep<O> >::global_allocator().free)(p); }
|
||||
|
||||
|
||||
/// \typedef AddRep
|
||||
|
|
|
|||
|
|
@ -51,14 +51,14 @@
|
|||
CGAL_INLINE_FUNCTION void *T::operator new( size_t size) \
|
||||
{ return MemoryPool<T>::global_allocator().allocate(size); } \
|
||||
CGAL_INLINE_FUNCTION void T::operator delete( void *p, size_t ) \
|
||||
{ MemoryPool<T>::global_allocator().free(p); }
|
||||
{ (MemoryPool<T>::global_allocator().free)(p); }
|
||||
#define CORE_MEMORY_IMPL_TEMPLATE_WITH_ONE_ARG(C) \
|
||||
template <typename T> \
|
||||
CGAL_INLINE_FUNCTION void *C<T>::operator new( size_t size) \
|
||||
{ return MemoryPool<C<T> >::global_allocator().allocate(size); } \
|
||||
template <typename T> \
|
||||
CGAL_INLINE_FUNCTION void C<T>::operator delete( void *p, size_t ) \
|
||||
{ MemoryPool<C<T> >::global_allocator().free(p); }
|
||||
{ (MemoryPool<C<T> >::global_allocator().free)(p); }
|
||||
#endif
|
||||
|
||||
// include some common header files
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public:
|
|||
|
||||
|
||||
void* allocate(std::size_t size);
|
||||
void free(void* p);
|
||||
void free BOOST_PREVENT_MACRO_SUBSTITUTION (void* p);
|
||||
|
||||
// Access the corresponding static global allocator.
|
||||
static MemoryPool<T,nObjects>& global_allocator() {
|
||||
|
|
@ -116,7 +116,7 @@ void* MemoryPool< T, nObjects >::allocate(std::size_t) {
|
|||
}
|
||||
|
||||
template< class T, int nObjects >
|
||||
void MemoryPool< T, nObjects >::free(void* t) {
|
||||
void MemoryPool< T, nObjects >::free BOOST_PREVENT_MACRO_SUBSTITUTION (void* t) {
|
||||
CGAL_assertion(t != 0);
|
||||
if (t == 0) return; // for safety
|
||||
if(blocks.empty()){
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ void * Realbase_for<T>::operator new( size_t size)
|
|||
|
||||
template <class T>
|
||||
void Realbase_for<T>::operator delete( void *p, size_t )
|
||||
{ MemoryPool<Realbase_for<T> >::global_allocator().free(p); }
|
||||
{ (MemoryPool<Realbase_for<T> >::global_allocator().free)(p); }
|
||||
|
||||
typedef Realbase_for<long> RealLong;
|
||||
typedef Realbase_for<double> RealDouble;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include <CGAL/ImageIO.h>
|
||||
|
||||
/* read analyse format header
|
||||
/* read analyze format header
|
||||
|
||||
return:
|
||||
-1: error
|
||||
|
|
|
|||
|
|
@ -108,8 +108,8 @@ typedef std::uint32_t CGAL_UINT32;
|
|||
*/
|
||||
|
||||
/*
|
||||
* Bitmapfileheader defines a single bitmap image. Its analogue in the
|
||||
* Windows SDK is the Bitmapfileheader. Its analogues in the OS/2 Toolkit are
|
||||
* Bitmapfileheader defines a single bitmap image. Its analog in the
|
||||
* Windows SDK is the Bitmapfileheader. Its analogs in the OS/2 Toolkit are
|
||||
* the Bitmapfileheader and Bitmapfileheader2 structures.
|
||||
*
|
||||
* A BITMAPHEADER structure is always concatenated to the end of a
|
||||
|
|
@ -128,7 +128,7 @@ typedef struct Bitmapfileheader
|
|||
/*
|
||||
* BITMAPARRAYHEADER is used to establish a linked list of Bitmapfileheader
|
||||
* structures for a bitmap file with multiple images in it. There is no
|
||||
* equivalent structure in the Windows SDK. Its analogues in the OS/2 toolkit
|
||||
* equivalent structure in the Windows SDK. Its analogs in the OS/2 toolkit
|
||||
* are the BITMAPARRAYFILEHEADER and BITMAPARRAYFILEHEADER2 structures.
|
||||
*
|
||||
* A Bitmapfileheader structure is always concatenated to the end of a
|
||||
|
|
@ -145,9 +145,9 @@ typedef struct BITMAPARRAYHEADER
|
|||
|
||||
|
||||
/*
|
||||
* BITMAPHEADER defines the properties of a bitmap. Its analogues in the
|
||||
* BITMAPHEADER defines the properties of a bitmap. Its analogs in the
|
||||
* Windows SDK are the BITMAPCOREINFOHEADER and BITMAPINFOHEADER structures.
|
||||
* Its analogues in the OS/2 Toolkit are the BITMAPINFOHEADER and
|
||||
* Its analogs in the OS/2 Toolkit are the BITMAPINFOHEADER and
|
||||
* BITMAPINFOHEADER2 structures.
|
||||
*
|
||||
* A color table is concatenated to this structure. The number of elements in
|
||||
|
|
@ -188,8 +188,8 @@ typedef struct BITMAPHEADER
|
|||
|
||||
|
||||
/*
|
||||
* RGB defines a single color palette entry. Its analogues in the Windows SDK
|
||||
* are the RGBTRIPLE and RGBQUAD structures. Its analogues in the OS/2
|
||||
* RGB defines a single color palette entry. Its analogs in the Windows SDK
|
||||
* are the RGBTRIPLE and RGBQUAD structures. Its analogs in the OS/2
|
||||
* Toolkit are the RGB and RGB2 structure.
|
||||
*/
|
||||
typedef struct RGB
|
||||
|
|
|
|||
|
|
@ -283,7 +283,7 @@ RFcoefficientType * InitRecursiveCoefficients( double x,
|
|||
b0 /= x;
|
||||
b1 /= x;
|
||||
|
||||
/*--- normalisation ---*/
|
||||
/*--- normalization ---*/
|
||||
switch ( derivative ) {
|
||||
default :
|
||||
CGAL_FALLTHROUGH;
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@ void k_delaunay(Regular& rt,input_DS& input_wpt,int order){
|
|||
typedef typename Kernel::Point_2 Point_2;
|
||||
typedef typename Kernel::Weighted_point_2 Weighted_point_2;
|
||||
|
||||
std::vector<typename input_DS::iterator> Current_sel;//DS that will contain all possible combinaisons of k points (iterator), where k is the order
|
||||
std::vector<typename input_DS::iterator> Current_sel;//DS that will contain all possible combinations of k points (iterator), where k is the order
|
||||
typename input_DS::iterator it_wpt = input_wpt.begin();
|
||||
typename input_DS::iterator stop_combi = input_wpt.end();
|
||||
for(int i=0;i<order-1;++i){ //First fill the DS with the k fist wpoints
|
||||
Current_sel.push_back(it_wpt);//Useful to know when all combinaisons have been treated
|
||||
Current_sel.push_back(it_wpt);//Useful to know when all combinations have been treated
|
||||
++it_wpt;
|
||||
}
|
||||
--it_wpt;
|
||||
Current_sel.push_back(it_wpt);
|
||||
|
||||
for(int i=0;i<order;++i){ //Fix end point for combinaison searching
|
||||
for(int i=0;i<order;++i){ //Fix end point for combination searching
|
||||
--stop_combi;
|
||||
}
|
||||
do{
|
||||
|
|
|
|||
|
|
@ -2380,7 +2380,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -2493,7 +2492,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -2735,7 +2733,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -2897,7 +2894,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -3308,7 +3304,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -3533,7 +3528,6 @@ void test_circulator_from_iterator() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -3742,7 +3736,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -3855,7 +3848,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -4097,7 +4089,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -4260,7 +4251,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -4671,7 +4661,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -4897,7 +4886,6 @@ void test_circulator_from_container() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == c);
|
||||
assert( i == c);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
|
|||
|
|
@ -304,7 +304,6 @@ void test_struct(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Struct_circulator j = i;
|
||||
|
|
@ -413,7 +412,6 @@ void test_struct(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Struct_const_circulator j = i;
|
||||
|
|
@ -651,7 +649,6 @@ void test_struct(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Struct_bi_circulator j = i;
|
||||
|
|
@ -809,7 +806,6 @@ void test_struct(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Struct_bi_const_circulator j = i;
|
||||
|
|
@ -969,7 +965,6 @@ void test_class(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Class_circulator j = i;
|
||||
|
|
@ -1078,7 +1073,6 @@ void test_class(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Class_const_circulator j = i;
|
||||
|
|
@ -1316,7 +1310,6 @@ void test_class(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Class_bi_circulator j = i;
|
||||
|
|
@ -1474,7 +1467,6 @@ void test_class(){
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Class_bi_const_circulator j = i;
|
||||
|
|
@ -1891,7 +1883,6 @@ void test_array() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
@ -2119,7 +2110,6 @@ void test_array() {
|
|||
assert( ! (i == nullptr));
|
||||
assert( i != nullptr);
|
||||
assert( i == start);
|
||||
assert( i == start);
|
||||
// Do I reach myself.
|
||||
++i;
|
||||
Circulator j = i;
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ Data structures specialized to classify clusters.
|
|||
\cgalPkgDependsOn{\ref PkgSolverInterface, \ref PkgSpatialSearchingD}
|
||||
\cgalPkgBib{cgal:lm-clscm-12}
|
||||
\cgalPkgLicense{\ref licensesGPL "GPL"}
|
||||
\cgalPkgDemo{Operations on Polyhedra,polyhedron_3.zip}
|
||||
\cgalPkgDemo{CGAL Lab,CGALlab.zip}
|
||||
\cgalPkgShortInfoEnd
|
||||
|
||||
\cgalPkgDescriptionEnd
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ typedef Classification::Feature::Vertical_dispersion<Kernel, Point_range, Pmap>
|
|||
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/b9.ply");
|
||||
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("points_3/b9.ply");
|
||||
|
||||
std::cerr << "Reading input" << std::endl;
|
||||
std::vector<Point> pts;
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ typedef Classification::Cluster<Point_set, Pmap> Clu
|
|||
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
std::string filename = CGAL::data_file_path("meshes/b9.ply");
|
||||
std::string filename = CGAL::data_file_path("points_3/b9.ply");
|
||||
std::string filename_config = "data/b9_clusters_config.bin";
|
||||
|
||||
if (argc > 1)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public:
|
|||
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
std::string filename (argc > 1 ? argv[1] : CGAL::data_file_path("meshes/b9.ply"));
|
||||
std::string filename (argc > 1 ? argv[1] : CGAL::data_file_path("points_3/b9.ply"));
|
||||
std::vector<Point> pts;
|
||||
|
||||
std::cerr << "Reading input" << std::endl;
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ public:
|
|||
std::nth_element (z.begin(), z.begin() + (z.size() / 10), z.end());
|
||||
dtm_x(i,j) = z[z.size() / 10];
|
||||
}
|
||||
dem.free();
|
||||
(dem.free)();
|
||||
|
||||
if (grid.width() * grid.height() > input.size())
|
||||
values.resize (input.size(), compressed_float(0));
|
||||
|
|
@ -162,7 +162,7 @@ public:
|
|||
values[*it] = v;
|
||||
}
|
||||
}
|
||||
dtm_x.free();
|
||||
(dtm_x.free)();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ public:
|
|||
std::size_t J = grid.y(i);
|
||||
values[i] = float(dtm(I,J) - get (point_map, *(input.begin() + i)).z());
|
||||
}
|
||||
dtm.free();
|
||||
(dtm.free)();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ public:
|
|||
std::size_t J = grid.y(i);
|
||||
values[i] = float(get (point_map, *(input.begin() + i)).z() - dtm(I,J));
|
||||
}
|
||||
dtm.free();
|
||||
(dtm.free)();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ public:
|
|||
std::size_t J = grid.y(i);
|
||||
values[i] = dtm(I,J);
|
||||
}
|
||||
dtm.free();
|
||||
(dtm.free)();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
void free()
|
||||
void free BOOST_PREVENT_MACRO_SUBSTITUTION ()
|
||||
{
|
||||
m_raw.reset();
|
||||
m_sparse.reset();
|
||||
|
|
|
|||
|
|
@ -662,7 +662,7 @@ namespace CGAL {
|
|||
}
|
||||
|
||||
/** Create a new dart and add it to the map.
|
||||
* The marks of the darts are initialised with mmask_marks, i.e. the dart
|
||||
* The marks of the darts are initialized with mmask_marks, i.e. the dart
|
||||
* is unmarked for all the marks.
|
||||
* @return a Dart_descriptor on the new dart.
|
||||
*/
|
||||
|
|
@ -1780,7 +1780,6 @@ namespace CGAL {
|
|||
void basic_link_beta_for_involution(Dart_descriptor adart1, Dart_descriptor adart2,
|
||||
unsigned int i)
|
||||
{
|
||||
CGAL_assertion( i>=2 && i<=dimension );
|
||||
CGAL_assertion( i>=2 && i<=dimension );
|
||||
dart_link_beta(adart1, adart2, i);
|
||||
dart_link_beta(adart2, adart1, i);
|
||||
|
|
@ -3708,6 +3707,9 @@ namespace CGAL {
|
|||
this->automatic_attributes_management = newval;
|
||||
}
|
||||
|
||||
void set_automatic_attributes_management_without_correction(bool newval)
|
||||
{ this->automatic_attributes_management = newval; }
|
||||
|
||||
/** Create an half-edge.
|
||||
* @return a dart of the new half-edge.
|
||||
*/
|
||||
|
|
@ -4112,7 +4114,7 @@ namespace CGAL {
|
|||
}
|
||||
if (ah != null_descriptor)
|
||||
{
|
||||
// We initialise the 0-atttrib to ah
|
||||
// We initialize the 0-atttrib to ah
|
||||
internal::Set_i_attribute_of_dart_functor<Self, 0>::
|
||||
run(*this, d1, ah);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ struct Call_functor_if_both_attributes_have_point
|
|||
const Pointconverter&)
|
||||
{ return Map2::null_descriptor; }
|
||||
};
|
||||
// Specialisation with i==0 and both attributes have points.
|
||||
// Specialization with i==0 and both attributes have points.
|
||||
template< typename Map1, typename Map2, typename Pointconverter >
|
||||
struct Call_functor_if_both_attributes_have_point<Map1, Map2, 0,
|
||||
Pointconverter, true, true>
|
||||
|
|
@ -285,7 +285,7 @@ struct Copy_attribute_functor_if_nonvoid
|
|||
cmap2.template set_attribute<i>(dh2, res);
|
||||
}
|
||||
};
|
||||
// Specialisation when attr1 is void, and attr2 is non void i==0. Nothing to
|
||||
// Specialization when attr1 is void, and attr2 is non void i==0. Nothing to
|
||||
// copy, but if 0-attributes has point and i==0, we need to create
|
||||
// vertex attributes.
|
||||
template<typename Map1, typename Map2, typename Converters,
|
||||
|
|
@ -310,7 +310,7 @@ struct Copy_attribute_functor_if_nonvoid<Map1, Map2, Converters,
|
|||
set_attribute<0>(dh2, cmap2.template create_attribute<0>());
|
||||
}
|
||||
};
|
||||
// Specialisation when attr1 is void, and attr2 is non void i!=0.
|
||||
// Specialization when attr1 is void, and attr2 is non void i!=0.
|
||||
// Nothing to do.
|
||||
template<typename Map1, typename Map2, typename Converters, unsigned int i,
|
||||
typename Pointconverter, typename Attr2>
|
||||
|
|
@ -360,7 +360,7 @@ struct Copy_dart_info_functor_if_nonvoid
|
|||
const DartInfoConverter& converter)
|
||||
{ converter(map1, map2, dh1, dh2); }
|
||||
};
|
||||
// Specialisation when Info1 is void.
|
||||
// Specialization when Info1 is void.
|
||||
template<typename Map1, typename Map2, typename DartInfoConverter,
|
||||
typename Info2>
|
||||
struct Copy_dart_info_functor_if_nonvoid<Map1, Map2, DartInfoConverter,
|
||||
|
|
@ -373,7 +373,7 @@ struct Copy_dart_info_functor_if_nonvoid<Map1, Map2, DartInfoConverter,
|
|||
const DartInfoConverter&)
|
||||
{}
|
||||
};
|
||||
// Specialisation when Info2 is void.
|
||||
// Specialization when Info2 is void.
|
||||
template<typename Map1, typename Map2, typename DartInfoConverter,
|
||||
typename Info1>
|
||||
struct Copy_dart_info_functor_if_nonvoid<Map1, Map2, DartInfoConverter,
|
||||
|
|
@ -386,7 +386,7 @@ struct Copy_dart_info_functor_if_nonvoid<Map1, Map2, DartInfoConverter,
|
|||
const DartInfoConverter&)
|
||||
{}
|
||||
};
|
||||
// Specialisation when both Info1 and Info2 are void.
|
||||
// Specialization when both Info1 and Info2 are void.
|
||||
template<typename Map1, typename Map2, typename DartInfoConverter>
|
||||
struct Copy_dart_info_functor_if_nonvoid<Map1, Map2, DartInfoConverter,
|
||||
CGAL::Void, CGAL::Void>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace CGAL
|
|||
{
|
||||
static bool run(const CMap& amap, typename CMap::Dart_const_descriptor adart)
|
||||
{
|
||||
// TODO? Optimisation for dim-2, and to not test all the darts of the cell?
|
||||
// TODO? Optimization for dim-2, and to not test all the darts of the cell?
|
||||
bool res = true;
|
||||
for ( CGAL::CMap_dart_const_iterator_of_cell<CMap,i> it(amap, adart);
|
||||
res && it.cont(); ++it )
|
||||
|
|
@ -462,7 +462,7 @@ namespace CGAL
|
|||
{
|
||||
static bool run(const CMap& amap, typename CMap::Dart_const_descriptor adart)
|
||||
{
|
||||
// TODO ? Optimisation possible to not test all the darts of the cell ?
|
||||
// TODO ? Optimization possible to not test all the darts of the cell ?
|
||||
bool res = true;
|
||||
for ( CGAL::CMap_dart_const_iterator_of_cell<CMap,i> it(amap, adart);
|
||||
res && it.cont(); ++it )
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ namespace CGAL {
|
|||
}
|
||||
|
||||
protected:
|
||||
/** Default constructor: no real initialisation,
|
||||
/** Default constructor: no real initialization,
|
||||
* because this is done in the combinatorial map class.
|
||||
*/
|
||||
Dart_without_info()
|
||||
|
|
@ -300,7 +300,7 @@ namespace CGAL {
|
|||
{ return Base::operator==(other) && minfo==other.minfo; }
|
||||
|
||||
protected:
|
||||
/** Default constructor: no real initialisation,
|
||||
/** Default constructor: no real initialization,
|
||||
* because this is done in the combinatorial or generalized map class.
|
||||
*/
|
||||
Dart()=default; // default => zero-initializing built-in types
|
||||
|
|
|
|||
|
|
@ -28,13 +28,12 @@ create_single_source_cgal_program(cmap_test_split_attribute.cpp)
|
|||
|
||||
# Link with OpenMesh if possible
|
||||
find_package(OpenMesh QUIET)
|
||||
if(TARGET OpenMesh::OpenMesh)
|
||||
if(OpenMesh_FOUND)
|
||||
message(STATUS "Found OpenMesh")
|
||||
include(CGAL_OpenMesh_support)
|
||||
|
||||
target_link_libraries(Combinatorial_map_copy_test PRIVATE OpenMesh::OpenMesh)
|
||||
target_compile_definitions(Combinatorial_map_copy_test PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(Combinatorial_map_copy_test_index PRIVATE OpenMesh::OpenMesh)
|
||||
target_compile_definitions(Combinatorial_map_copy_test_index PRIVATE -DCGAL_USE_OPENMESH)
|
||||
target_link_libraries(Combinatorial_map_copy_test PRIVATE CGAL::OpenMesh_support)
|
||||
target_link_libraries(Combinatorial_map_copy_test_index PRIVATE CGAL::OpenMesh_support)
|
||||
else()
|
||||
message(STATUS "NOTICE: Tests will not use OpenMesh.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ public:
|
|||
|
||||
#if defined(CGAL_USE_LEDA) || defined(CGAL_USE_CORE)
|
||||
/*
|
||||
The specialised functor for computing the directions of cone boundaries exactly
|
||||
The specialized functor for computing the directions of cone boundaries exactly
|
||||
with a given cone number and a given initial direction.
|
||||
*/
|
||||
template <>
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ protected:
|
|||
std::vector<typename Graph_::vertex_descriptor> S(vit, ve);
|
||||
std::sort(S.begin (), S.end (), orderD1);
|
||||
|
||||
// Step 2: Initialise an empty set to store vertices sorted by orderD2
|
||||
// Step 2: initialize an empty set to store vertices sorted by orderD2
|
||||
typedef CGAL::ThetaDetail::Plane_scan_tree<typename Graph_::vertex_descriptor,
|
||||
typename Graph_::vertex_descriptor,
|
||||
Less_by_direction,
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ protected:
|
|||
std::vector<typename Graph_::vertex_descriptor> S(vit, ve);
|
||||
std::sort(S.begin (), S.end (), orderD1);
|
||||
|
||||
// Step 2: Initialise an empty set to store vertices sorted by orderD2
|
||||
// Step 2: initialize an empty set to store vertices sorted by orderD2
|
||||
Point_set pst(orderD2);
|
||||
|
||||
// Step 3: visit S in orderD1
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ std::string gnuplot_vertex_list (const Graph& g);
|
|||
|
||||
/* This struct is defined to use partial specialization to generate arrow styles differently for
|
||||
* directed and undirected graphs.
|
||||
* Note: Need to use structs because C++ before 11 doesn't allow partial specialisation
|
||||
* Note: Need to use structs because C++ before 11 doesn't allow partial specialization
|
||||
* for functions
|
||||
*/
|
||||
template <typename Graph, typename Directedness=typename Graph::directed_selector>
|
||||
|
|
|
|||
|
|
@ -76,62 +76,13 @@ class External_structure_builder : public Modifier_base<typename Nef_::SNC_and_P
|
|||
|
||||
SNC_structure* sncp(sncpl.sncp);
|
||||
SNC_point_locator* pl(sncpl.pl);
|
||||
|
||||
|
||||
|
||||
Unique_hash_map<SHalfedge_handle, SFace_handle> sedge2sface;
|
||||
/*
|
||||
SFace_iterator sfi;
|
||||
CGAL_forall_sfaces(sfi, *sncp) {
|
||||
SFace_cycle_iterator sfc;
|
||||
for(sfc = sfi->sface_cycles_begin(); sfc != sfi->sface_cycles_end(); ++sfc) {
|
||||
if(sfc.is_shalfedge()){
|
||||
SHalfedge_around_sface_circulator eaf(sfc), end(eaf);
|
||||
CGAL_For_all(eaf,end) {
|
||||
SHalfedge_handle se(eaf);
|
||||
sedge2sface[eaf] = sfi;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CGAL::SNC_io_parser<SNC_structure> O0(std::cerr, *sncp, false);
|
||||
// O0.print();
|
||||
|
||||
SHalfedge_iterator sei;
|
||||
CGAL_forall_shalfedges(sei, *sncp) {
|
||||
SHalfedge_handle se(sei);
|
||||
if(sedge2sface[se] == SFace_handle()) {
|
||||
SM_decorator SD(&*sei->source()->source());
|
||||
SFace_handle sf_new = SD.new_sface();
|
||||
sf_new->mark() = sei->incident_sface()->mark();
|
||||
|
||||
CGAL_NEF_TRACEN("new entry sedge " << sei->source()->point()
|
||||
<< "->" << sei->twin()->source()->point()
|
||||
<< " at " << sei->source()->source()->point());
|
||||
|
||||
SD.link_as_face_cycle(sei, sf_new);
|
||||
|
||||
SHalfedge_around_sface_circulator eaf(se), end(eaf);
|
||||
CGAL_For_all(eaf,end) {
|
||||
SHalfedge_handle se(eaf);
|
||||
sedge2sface[eaf] = sf_new;
|
||||
}
|
||||
|
||||
// TODO: relink inner sface cycles
|
||||
}
|
||||
}
|
||||
*/
|
||||
SNC_point_locator* old_pl = pl;
|
||||
pl = pl->clone();
|
||||
sncpl.pl = pl;
|
||||
delete old_pl;
|
||||
SNC_external_structure C(*sncp,pl);
|
||||
C.clear_external_structure();
|
||||
C.build_external_structure();
|
||||
|
||||
// CGAL::SNC_io_parser<SNC_structure> Ox(std::cerr, *sncp, false);
|
||||
// Ox.print();
|
||||
delete old_pl;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
|
||||
#include <CGAL/Polyhedron_3.h>
|
||||
#include <CGAL/Nef_polyhedron_3.h>
|
||||
#include <CGAL/IO/Nef_polyhedron_iostream_3.h>
|
||||
#include <CGAL/Nef_3/SNC_indexed_items.h>
|
||||
#include <CGAL/convex_decomposition_3.h>
|
||||
#include <list>
|
||||
|
||||
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
|
||||
typedef CGAL::Polyhedron_3<Kernel> Polyhedron_3;
|
||||
typedef CGAL::Nef_polyhedron_3<Kernel, CGAL::SNC_indexed_items> Nef_polyhedron_3;
|
||||
typedef Nef_polyhedron_3::Volume_const_iterator Volume_const_iterator;
|
||||
|
||||
std::size_t run(std::string path)
|
||||
{
|
||||
Polyhedron_3 input;
|
||||
std::ifstream(path) >> input;
|
||||
|
||||
Nef_polyhedron_3 N(input);
|
||||
|
||||
CGAL::convex_decomposition_3(N);
|
||||
std::list<Polyhedron_3> convex_parts;
|
||||
|
||||
Volume_const_iterator ci = ++N.volumes_begin();
|
||||
for( ; ci != N.volumes_end(); ++ci) {
|
||||
if(ci->mark()) {
|
||||
Polyhedron_3 P;
|
||||
N.convert_inner_shell_to_polyhedron(ci->shells_begin(), P);
|
||||
convex_parts.push_back(P);
|
||||
}
|
||||
}
|
||||
|
||||
// int i=0;
|
||||
for (const Polyhedron_3& P : convex_parts)
|
||||
{
|
||||
// std::ofstream("out_"+std::to_string(i++)+".off") << std::setprecision(17) << P;
|
||||
assert(P.size_of_vertices()!=0);
|
||||
}
|
||||
|
||||
return convex_parts.size();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::size_t val = run("data/in1.off");
|
||||
assert(val==9);
|
||||
val = run("data/in2.off");
|
||||
assert(val==10);
|
||||
val = run("data/in3.off");
|
||||
assert(val==13);
|
||||
val = run("data/in4.off");
|
||||
assert(val==17);
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
OFF 40 76 0
|
||||
5 -5 4
|
||||
5 -5 2
|
||||
5 5 2
|
||||
5 5 4
|
||||
5 -5 -2
|
||||
5 -5 -4
|
||||
5 5 -4
|
||||
5 5 -2
|
||||
-5 5 4
|
||||
-5 -5 4
|
||||
-4 -4 4
|
||||
-4 4 4
|
||||
4 4 4
|
||||
4 -4 4
|
||||
-5 -5 -4
|
||||
-5 5 -4
|
||||
-4 4 -4
|
||||
-4 -4 -4
|
||||
4 -4 -4
|
||||
4 4 -4
|
||||
-5 5 2
|
||||
-5 -5 2
|
||||
-5 -5 -2
|
||||
-5 5 -2
|
||||
4 4 2
|
||||
4 -4 2
|
||||
4 -4 -2
|
||||
4 4 -2
|
||||
-4 4 2
|
||||
-4 -4 2
|
||||
-4 4 -2
|
||||
-4 -4 -2
|
||||
6 -6 2
|
||||
6 -6 -2
|
||||
6 6 -2
|
||||
6 6 2
|
||||
-6 6 2
|
||||
-6 -6 2
|
||||
-6 -6 -2
|
||||
-6 6 -2
|
||||
3 0 2 3
|
||||
3 2 0 1
|
||||
3 4 6 7
|
||||
3 6 4 5
|
||||
3 3 12 0
|
||||
3 3 11 12
|
||||
3 11 8 10
|
||||
3 8 11 3
|
||||
3 13 0 12
|
||||
3 10 0 13
|
||||
3 10 9 0
|
||||
3 9 10 8
|
||||
3 5 18 6
|
||||
3 5 17 18
|
||||
3 17 14 16
|
||||
3 14 17 5
|
||||
3 19 6 18
|
||||
3 16 6 19
|
||||
3 16 15 6
|
||||
3 15 16 14
|
||||
3 21 8 20
|
||||
3 8 21 9
|
||||
3 14 23 15
|
||||
3 23 14 22
|
||||
3 2 8 3
|
||||
3 8 2 20
|
||||
3 6 23 7
|
||||
3 23 6 15
|
||||
3 21 0 9
|
||||
3 0 21 1
|
||||
3 14 4 22
|
||||
3 4 14 5
|
||||
3 25 12 24
|
||||
3 12 25 13
|
||||
3 18 27 19
|
||||
3 27 18 26
|
||||
3 10 28 11
|
||||
3 28 10 29
|
||||
3 31 16 30
|
||||
3 16 31 17
|
||||
3 28 12 11
|
||||
3 12 28 24
|
||||
3 16 27 30
|
||||
3 27 16 19
|
||||
3 25 10 13
|
||||
3 10 25 29
|
||||
3 18 31 26
|
||||
3 31 18 17
|
||||
3 32 34 35
|
||||
3 34 32 33
|
||||
3 35 2 32
|
||||
3 35 20 2
|
||||
3 20 36 21
|
||||
3 36 20 35
|
||||
3 1 32 2
|
||||
3 21 32 1
|
||||
3 21 37 32
|
||||
3 37 21 36
|
||||
3 28 25 24
|
||||
3 25 28 29
|
||||
3 33 4 34
|
||||
3 33 22 4
|
||||
3 22 38 23
|
||||
3 38 22 33
|
||||
3 7 34 4
|
||||
3 23 34 7
|
||||
3 23 39 34
|
||||
3 39 23 38
|
||||
3 31 27 26
|
||||
3 27 31 30
|
||||
3 38 36 39
|
||||
3 36 38 37
|
||||
3 34 36 35
|
||||
3 36 34 39
|
||||
3 38 32 37
|
||||
3 32 38 33
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
OFF
|
||||
48 92 0
|
||||
|
||||
2 2 2
|
||||
2 -2 2
|
||||
-2 2 2
|
||||
-2 -2 2
|
||||
-2 2 4
|
||||
2 2 4
|
||||
-2 -2 4
|
||||
2 -2 4
|
||||
5 -5 4
|
||||
-4 4 4
|
||||
5 5 4
|
||||
4 -4 4
|
||||
-5 -5 4
|
||||
-4 -4 -4
|
||||
5 -5 -4
|
||||
4 4 -4
|
||||
-5 5 -4
|
||||
-5 5 4
|
||||
5 5 -4
|
||||
-5 -5 -4
|
||||
4 4 4
|
||||
4 -4 -2
|
||||
-4 -4 4
|
||||
-4 4 -2
|
||||
-4 4 -4
|
||||
4 4 -2
|
||||
4 -4 -4
|
||||
6 -6 2
|
||||
5 5 2
|
||||
-5 5 2
|
||||
6 6 2
|
||||
5 -5 2
|
||||
-5 -5 2
|
||||
-6 -6 2
|
||||
5 -5 -2
|
||||
-5 -5 -2
|
||||
6 -6 -2
|
||||
5 5 -2
|
||||
-5 5 -2
|
||||
-6 6 -2
|
||||
-4 -4 -2
|
||||
-6 6 2
|
||||
6 6 -2
|
||||
-6 -6 -2
|
||||
-4 -4 2
|
||||
-4 4 2
|
||||
4 4 2
|
||||
4 -4 2
|
||||
3 2 4 5
|
||||
3 7 6 3
|
||||
3 5 7 1
|
||||
3 6 7 5
|
||||
3 3 6 4
|
||||
3 5 0 2
|
||||
3 3 1 7
|
||||
3 1 0 5
|
||||
3 5 4 6
|
||||
3 4 2 3
|
||||
3 8 28 10
|
||||
3 28 8 31
|
||||
3 34 18 37
|
||||
3 18 34 14
|
||||
3 10 20 8
|
||||
3 10 9 20
|
||||
3 9 17 22
|
||||
3 17 9 10
|
||||
3 11 8 20
|
||||
3 22 8 11
|
||||
3 22 12 8
|
||||
3 12 22 17
|
||||
3 14 26 18
|
||||
3 14 13 26
|
||||
3 13 19 24
|
||||
3 19 13 14
|
||||
3 15 18 26
|
||||
3 24 18 15
|
||||
3 24 16 18
|
||||
3 16 24 19
|
||||
3 32 17 29
|
||||
3 17 32 12
|
||||
3 19 38 16
|
||||
3 38 19 35
|
||||
3 28 17 10
|
||||
3 17 28 29
|
||||
3 18 38 37
|
||||
3 38 18 16
|
||||
3 32 8 12
|
||||
3 8 32 31
|
||||
3 19 34 35
|
||||
3 34 19 14
|
||||
3 47 20 46
|
||||
3 20 47 11
|
||||
3 26 25 15
|
||||
3 25 26 21
|
||||
3 22 45 9
|
||||
3 45 22 44
|
||||
3 40 24 23
|
||||
3 24 40 13
|
||||
3 45 20 9
|
||||
3 20 45 46
|
||||
3 24 25 23
|
||||
3 25 24 15
|
||||
3 47 22 11
|
||||
3 22 47 44
|
||||
3 26 40 21
|
||||
3 40 26 13
|
||||
3 27 42 30
|
||||
3 42 27 36
|
||||
3 30 28 27
|
||||
3 30 29 28
|
||||
3 29 41 32
|
||||
3 41 29 30
|
||||
3 31 27 28
|
||||
3 32 27 31
|
||||
3 32 33 27
|
||||
3 33 32 41
|
||||
3 2 0 45
|
||||
3 1 44 47
|
||||
3 36 34 42
|
||||
3 36 35 34
|
||||
3 35 43 38
|
||||
3 43 35 36
|
||||
3 37 42 34
|
||||
3 38 42 37
|
||||
3 38 39 42
|
||||
3 39 38 43
|
||||
3 40 25 21
|
||||
3 25 40 23
|
||||
3 43 41 39
|
||||
3 41 43 33
|
||||
3 42 41 30
|
||||
3 41 42 39
|
||||
3 43 27 33
|
||||
3 27 43 36
|
||||
3 44 1 3
|
||||
3 44 3 45
|
||||
3 45 3 2
|
||||
3 46 45 0
|
||||
3 46 0 47
|
||||
3 47 0 1
|
||||
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
OFF
|
||||
60 116 0
|
||||
|
||||
1 1 4
|
||||
1 0.33333333333333337 4
|
||||
1 -1 4
|
||||
0.33333333333333337 -1 4
|
||||
-1 -1 4
|
||||
-1 0.33333333333333337 4
|
||||
-1 1 4
|
||||
0.33333333333333337 1 4
|
||||
-2 2 2
|
||||
5 -5 4
|
||||
-4 4 4
|
||||
5 5 4
|
||||
4 -4 4
|
||||
-5 -5 4
|
||||
-4 -4 -4
|
||||
5 -5 -4
|
||||
4 4 -4
|
||||
-5 5 -4
|
||||
-5 5 4
|
||||
5 5 -4
|
||||
-5 -5 -4
|
||||
4 4 4
|
||||
4 -4 -2
|
||||
-4 -4 4
|
||||
-4 4 -2
|
||||
-4 4 -4
|
||||
4 4 -2
|
||||
4 -4 -4
|
||||
6 -6 2
|
||||
5 5 2
|
||||
-5 5 2
|
||||
6 6 2
|
||||
5 -5 2
|
||||
-5 -5 2
|
||||
-6 -6 2
|
||||
5 -5 -2
|
||||
-5 -5 -2
|
||||
6 -6 -2
|
||||
5 5 -2
|
||||
-5 5 -2
|
||||
-6 6 -2
|
||||
-4 -4 -2
|
||||
-6 6 2
|
||||
6 6 -2
|
||||
-6 -6 -2
|
||||
-2 -2 2
|
||||
-4 -4 2
|
||||
-4 4 2
|
||||
4 4 2
|
||||
4 -4 2
|
||||
2 -2 2
|
||||
2 2 2
|
||||
-2 2 4
|
||||
2 2 4
|
||||
2 -2 4
|
||||
-2 -2 4
|
||||
1 1 2
|
||||
1 -1 2
|
||||
-1 -1 2
|
||||
-1 1 2
|
||||
3 8 52 53
|
||||
3 54 55 45
|
||||
3 53 54 50
|
||||
3 0 1 53
|
||||
3 45 55 52
|
||||
3 53 51 8
|
||||
3 45 50 54
|
||||
3 50 51 53
|
||||
3 4 5 55
|
||||
3 52 8 45
|
||||
3 9 29 11
|
||||
3 29 9 32
|
||||
3 35 19 38
|
||||
3 19 35 15
|
||||
3 11 21 9
|
||||
3 11 10 21
|
||||
3 10 18 23
|
||||
3 18 10 11
|
||||
3 12 9 21
|
||||
3 23 9 12
|
||||
3 23 13 9
|
||||
3 13 23 18
|
||||
3 15 27 19
|
||||
3 15 14 27
|
||||
3 14 20 25
|
||||
3 20 14 15
|
||||
3 16 19 27
|
||||
3 25 19 16
|
||||
3 25 17 19
|
||||
3 17 25 20
|
||||
3 33 18 30
|
||||
3 18 33 13
|
||||
3 20 39 17
|
||||
3 39 20 36
|
||||
3 29 18 11
|
||||
3 18 29 30
|
||||
3 19 39 38
|
||||
3 39 19 17
|
||||
3 33 9 13
|
||||
3 9 33 32
|
||||
3 20 35 36
|
||||
3 35 20 15
|
||||
3 49 21 48
|
||||
3 21 49 12
|
||||
3 27 26 16
|
||||
3 26 27 22
|
||||
3 23 47 10
|
||||
3 47 23 46
|
||||
3 41 25 24
|
||||
3 25 41 14
|
||||
3 47 21 10
|
||||
3 21 47 48
|
||||
3 25 26 24
|
||||
3 26 25 16
|
||||
3 49 23 12
|
||||
3 23 49 46
|
||||
3 27 41 22
|
||||
3 41 27 14
|
||||
3 28 43 31
|
||||
3 43 28 37
|
||||
3 31 29 28
|
||||
3 31 30 29
|
||||
3 30 42 33
|
||||
3 42 30 31
|
||||
3 32 28 29
|
||||
3 33 28 32
|
||||
3 33 34 28
|
||||
3 34 33 42
|
||||
3 8 51 47
|
||||
3 50 46 49
|
||||
3 37 35 43
|
||||
3 37 36 35
|
||||
3 36 44 39
|
||||
3 44 36 37
|
||||
3 38 43 35
|
||||
3 39 43 38
|
||||
3 39 40 43
|
||||
3 40 39 44
|
||||
3 41 26 22
|
||||
3 26 41 24
|
||||
3 44 42 40
|
||||
3 42 44 34
|
||||
3 43 42 31
|
||||
3 42 43 40
|
||||
3 44 28 34
|
||||
3 28 44 37
|
||||
3 46 50 45
|
||||
3 46 45 47
|
||||
3 47 45 8
|
||||
3 48 47 51
|
||||
3 48 51 49
|
||||
3 49 51 50
|
||||
3 52 55 5
|
||||
3 52 7 53
|
||||
3 52 5 6
|
||||
3 53 7 0
|
||||
3 52 6 7
|
||||
3 54 53 1
|
||||
3 54 2 3
|
||||
3 54 1 2
|
||||
3 55 54 3
|
||||
3 55 3 4
|
||||
3 58 57 56
|
||||
3 59 56 7
|
||||
3 2 57 3
|
||||
3 0 56 1
|
||||
3 5 59 6
|
||||
3 56 59 58
|
||||
3 57 1 56
|
||||
3 57 2 1
|
||||
3 58 5 4
|
||||
3 7 56 0
|
||||
3 58 3 57
|
||||
3 4 3 58
|
||||
3 59 5 58
|
||||
3 7 6 59
|
||||
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
OFF
|
||||
60 116 0
|
||||
|
||||
1 1 4
|
||||
1 0.5 4
|
||||
1 -1 4
|
||||
0.5 -1 4
|
||||
-1 -1 4
|
||||
-1 0.5 4
|
||||
-1 1 4
|
||||
0.5 1 4
|
||||
-2 2 2
|
||||
5 -5 4
|
||||
-4 4 4
|
||||
5 5 4
|
||||
4 -4 4
|
||||
-5 -5 4
|
||||
-4 -4 -4
|
||||
5 -5 -4
|
||||
4 4 -4
|
||||
-5 5 -4
|
||||
-5 5 4
|
||||
5 5 -4
|
||||
-5 -5 -4
|
||||
4 4 4
|
||||
4 -4 -2
|
||||
-4 -4 4
|
||||
-4 4 -2
|
||||
-4 4 -4
|
||||
4 4 -2
|
||||
4 -4 -4
|
||||
6 -6 2
|
||||
5 5 2
|
||||
-5 5 2
|
||||
6 6 2
|
||||
5 -5 2
|
||||
-5 -5 2
|
||||
-6 -6 2
|
||||
5 -5 -2
|
||||
-5 -5 -2
|
||||
6 -6 -2
|
||||
5 5 -2
|
||||
-5 5 -2
|
||||
-6 6 -2
|
||||
-4 -4 -2
|
||||
-6 6 2
|
||||
6 6 -2
|
||||
-6 -6 -2
|
||||
-2 -2 2
|
||||
-4 -4 2
|
||||
-4 4 2
|
||||
4 4 2
|
||||
4 -4 2
|
||||
2 -2 2
|
||||
2 2 2
|
||||
-2 2 4
|
||||
2 2 4
|
||||
2 -2 4
|
||||
-2 -2 4
|
||||
1 1 1
|
||||
1 -1 1
|
||||
-1 -1 1
|
||||
-1 1 1
|
||||
3 8 52 53
|
||||
3 54 55 45
|
||||
3 53 54 50
|
||||
3 0 1 53
|
||||
3 45 55 52
|
||||
3 53 51 8
|
||||
3 45 50 54
|
||||
3 50 51 53
|
||||
3 4 5 55
|
||||
3 52 8 45
|
||||
3 9 29 11
|
||||
3 29 9 32
|
||||
3 35 19 38
|
||||
3 19 35 15
|
||||
3 11 21 9
|
||||
3 11 10 21
|
||||
3 10 18 23
|
||||
3 18 10 11
|
||||
3 12 9 21
|
||||
3 23 9 12
|
||||
3 23 13 9
|
||||
3 13 23 18
|
||||
3 15 27 19
|
||||
3 15 14 27
|
||||
3 14 20 25
|
||||
3 20 14 15
|
||||
3 16 19 27
|
||||
3 25 19 16
|
||||
3 25 17 19
|
||||
3 17 25 20
|
||||
3 33 18 30
|
||||
3 18 33 13
|
||||
3 20 39 17
|
||||
3 39 20 36
|
||||
3 29 18 11
|
||||
3 18 29 30
|
||||
3 19 39 38
|
||||
3 39 19 17
|
||||
3 33 9 13
|
||||
3 9 33 32
|
||||
3 20 35 36
|
||||
3 35 20 15
|
||||
3 49 21 48
|
||||
3 21 49 12
|
||||
3 27 26 16
|
||||
3 26 27 22
|
||||
3 23 47 10
|
||||
3 47 23 46
|
||||
3 41 25 24
|
||||
3 25 41 14
|
||||
3 47 21 10
|
||||
3 21 47 48
|
||||
3 25 26 24
|
||||
3 26 25 16
|
||||
3 49 23 12
|
||||
3 23 49 46
|
||||
3 27 41 22
|
||||
3 41 27 14
|
||||
3 28 43 31
|
||||
3 43 28 37
|
||||
3 31 29 28
|
||||
3 31 30 29
|
||||
3 30 42 33
|
||||
3 42 30 31
|
||||
3 32 28 29
|
||||
3 33 28 32
|
||||
3 33 34 28
|
||||
3 34 33 42
|
||||
3 8 51 47
|
||||
3 50 46 49
|
||||
3 37 35 43
|
||||
3 37 36 35
|
||||
3 36 44 39
|
||||
3 44 36 37
|
||||
3 38 43 35
|
||||
3 39 43 38
|
||||
3 39 40 43
|
||||
3 40 39 44
|
||||
3 41 26 22
|
||||
3 26 41 24
|
||||
3 44 42 40
|
||||
3 42 44 34
|
||||
3 43 42 31
|
||||
3 42 43 40
|
||||
3 44 28 34
|
||||
3 28 44 37
|
||||
3 46 50 45
|
||||
3 46 45 47
|
||||
3 47 45 8
|
||||
3 48 47 51
|
||||
3 48 51 49
|
||||
3 49 51 50
|
||||
3 52 55 5
|
||||
3 52 7 53
|
||||
3 52 5 6
|
||||
3 53 7 0
|
||||
3 52 6 7
|
||||
3 54 53 1
|
||||
3 54 2 3
|
||||
3 54 1 2
|
||||
3 55 54 3
|
||||
3 55 3 4
|
||||
3 58 57 56
|
||||
3 59 56 7
|
||||
3 2 57 3
|
||||
3 0 56 1
|
||||
3 5 59 6
|
||||
3 56 59 58
|
||||
3 57 1 56
|
||||
3 57 2 1
|
||||
3 58 5 4
|
||||
3 7 56 0
|
||||
3 58 3 57
|
||||
3 4 3 58
|
||||
3 59 5 58
|
||||
3 7 6 59
|
||||
|
||||
|
|
@ -21,13 +21,13 @@ create_single_source_cgal_program("extreme_indices_3.cpp")
|
|||
|
||||
find_package(OpenMesh QUIET)
|
||||
if(OpenMesh_FOUND)
|
||||
include(UseOpenMesh)
|
||||
include(CGAL_OpenMesh_support)
|
||||
message(STATUS "Found OpenMesh")
|
||||
|
||||
create_single_source_cgal_program("quickhull_OM_3.cpp")
|
||||
target_link_libraries(quickhull_OM_3 PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_link_libraries(quickhull_OM_3 PRIVATE CGAL::OpenMesh_support)
|
||||
create_single_source_cgal_program("dynamic_hull_OM_3.cpp")
|
||||
target_link_libraries(dynamic_hull_OM_3 PRIVATE ${OPENMESH_LIBRARIES})
|
||||
target_link_libraries(dynamic_hull_OM_3 PRIVATE CGAL::OpenMesh_support)
|
||||
else()
|
||||
message(STATUS "NOTICE: Examples that use OpenMesh will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ private:
|
|||
assert(are_equal(res_o2o1, expected_result));
|
||||
|
||||
do_intersect_check(o1, o2);
|
||||
do_intersect_check(o1, o2);
|
||||
}
|
||||
|
||||
template <typename O1, typename O2>
|
||||
|
|
@ -169,7 +168,6 @@ private:
|
|||
const FT res_o1o2 = CGAL::squared_distance(o1, o2);
|
||||
const FT res_o2o1 = CGAL::squared_distance(o2, o1);
|
||||
|
||||
do_intersect_check(o1, o2);
|
||||
do_intersect_check(o1, o2);
|
||||
|
||||
assert(res_o1o2 <= ubound);
|
||||
|
|
@ -324,7 +322,7 @@ private:
|
|||
check_squared_distance(S{p2, p3}, S{p4, p5}, 0);
|
||||
check_squared_distance(S{p2, p3}, S{p5, p4}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p4, p5}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p4, p5}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p5, p4}, 0);
|
||||
|
||||
const double lambda_6 = r.get_double(0, 1);
|
||||
const P p6 = p3 + FT(lambda_6) * V{p3 - p2};
|
||||
|
|
@ -332,7 +330,7 @@ private:
|
|||
check_squared_distance(S{p2, p3}, S{p6, p5}, 0);
|
||||
check_squared_distance(S{p2, p3}, S{p5, p6}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p6, p5}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p6, p5}, 0);
|
||||
check_squared_distance(S{p3, p2}, S{p5, p6}, 0);
|
||||
|
||||
const double lambda_7 = r.get_double(1, 2);
|
||||
const P p7 = p3 + FT(lambda_7) * V{p3 - p2};
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ configuration.
|
|||
create <B>a single executable</B> for 'source' linked with
|
||||
compilations of all other source files
|
||||
(`*.cc`, `*.cp`, `*.cxx`, `*.cpp`, `*.CPP`, `*.c++`, or `*.C`).
|
||||
This behaviour is usually needed for (graphical) demos.
|
||||
This behavior is usually needed for (graphical) demos.
|
||||
|
||||
If the parameter is not given, the script creates <B>one executable for each given
|
||||
source file</B>.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ also avoid CMake to link with the native threads support library on your system.
|
|||
|
||||
Much of the \cgal code contains assert statements for preconditions, and postconditions of functions
|
||||
as well as in the code. These assertions can be switched on and off per package
|
||||
and the user can change the error behaviour. For details see Section \ref secchecks
|
||||
and the user can change the error behavior. For details see Section \ref secchecks
|
||||
of Chapter \ref Chapter_STL_Extensions_for_CGAL.
|
||||
|
||||
\section Preliminaries_flags Compile-time Flags to Control Inlining
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ supporting C++17 or later.
|
|||
| | `Clang` \cgalFootnote{<A HREF="https://clang.llvm.org/">\cgalFootnoteCode{https://clang.llvm.org/}</A>} compiler version 15.0.7 |
|
||||
| \ms Windows | \gnu `g++` 11.4.0 or later\cgalFootnote{<A HREF="https://gcc.gnu.org/">\cgalFootnoteCode{https://gcc.gnu.org/}</A>} |
|
||||
| | \ms Visual `C++` 15.9, 16.10, 17.0 (\visualstudio 2017, 2019, and 2022)\cgalFootnote{<A HREF="https://visualstudio.microsoft.com/">\cgalFootnoteCode{https://visualstudio.microsoft.com/}</A>} |
|
||||
| MacOS X | \gnu `g++` 11.4.0 or later\cgalFootnote{<A HREF="https://gcc.gnu.org/">\cgalFootnoteCode{https://gcc.gnu.org/}</A>} |
|
||||
| macOS | \gnu `g++` 11.4.0 or later\cgalFootnote{<A HREF="https://gcc.gnu.org/">\cgalFootnoteCode{https://gcc.gnu.org/}</A>} |
|
||||
| | Apple `Clang` compiler versions 10.0.1, 12.0.5, and 15.0.0 |
|
||||
|
||||
<!-- Windows supported version are also listed on windows.html (must change both) -->
|
||||
|
|
@ -72,23 +72,32 @@ As there is no canonical directory for where to find \boost on Windows,
|
|||
we recommend that you define the environment variable
|
||||
`BOOST_ROOT` and set it to where you have installed \boost, e.g., `C:\boost\boost_1_70_0`.
|
||||
|
||||
\subsection thirdpartyMPFR GNU Multiple Precision Arithmetic (GMP) and GNU Multiple Precision Floating-Point Reliably (MPFR) Libraries
|
||||
<b>GMP Version 5.0.1 or later, MPFR Version 3.0.0 or later</b>
|
||||
\subsection thirdpartyMP Multi Precision Number Type Library
|
||||
|
||||
The components \cgal, `CGAL_Core`, and `CGAL_Qt6` require
|
||||
\gmp and \mpfr which are libraries for multi precision integers and rational numbers,
|
||||
and for multi precision floating point numbers.
|
||||
|
||||
\cgal combines floating point arithmetic with exact arithmetic
|
||||
in order to be efficient and reliable. \cgal has a built-in
|
||||
number type for that, but \gmp and \mpfr provide a faster
|
||||
solution, and we recommend using them.
|
||||
GNU Multiple Precision Arithmetic (GMP) and GNU Multiple Precision Floating-Point Reliably (MPFR) Libraries
|
||||
are libraries for multi precision integers and rational numbers, and for multi precision floating point numbers.
|
||||
|
||||
These libraries can be obtained from <A HREF="https://gmplib.org/">`https://gmplib.org/`</A>
|
||||
and <A HREF="https://www.mpfr.org/">`https://www.mpfr.org/`</A>.
|
||||
Since Visual \cpp is not properly supported by the \gmp and \mpfr projects,
|
||||
we provide precompiled versions of \gmp and \mpfr, which can be downloaded
|
||||
from the <a href="https://github.com/CGAL/cgal/releases">assets of a release</a>.
|
||||
Version supported are <b>GMP Version 5.0.1 or later, MPFR Version 3.0.0 or later</b>.
|
||||
|
||||
The \boost library also provides a module for multi precision integers and rational numbers:
|
||||
<A HREF="https://www.boost.org/doc/libs/release/libs/multiprecision/doc/html/index.html">\boost multiprecision</A>.
|
||||
Versions supported are <b>\boost Version 1.72 or later</b>.
|
||||
|
||||
The components \cgal, and `CGAL_Qt6` require either \gmp and \mpfr, or \boost multiprecision
|
||||
for multi precision numbers. `CGAL_Core` requires \boost multiprecision.
|
||||
|
||||
\cgal combines floating point arithmetic with exact arithmetic
|
||||
in order to be efficient and reliable. \cgal has a built-in
|
||||
number type for that, but previous alternatives are faster
|
||||
solutions, and we recommend using one of them.
|
||||
|
||||
The CMake variable `CGAL_CMAKE_EXACT_NT_BACKEND` can be used to select
|
||||
the library that will be used internally for multi precision number types.
|
||||
|
||||
\section secoptional3rdpartysoftware Optional Third Party Libraries
|
||||
|
||||
|
|
@ -226,9 +235,8 @@ imported target `CGAL::LASLIB_support` provided in
|
|||
\laslib information can be obtained from
|
||||
<a href="https://lastools.github.io/">https://lastools.github.io/</a> and
|
||||
<a href="https://rapidlasso.de/product-overview/">https://rapidlasso.de/product-overview/</a>.
|
||||
\laslib is usually distributed along with LAStools: for simplicity, \cgal
|
||||
provides <a href="https://github.com/CGAL/LAStools">a fork with a
|
||||
CMake based install procedure</a>.
|
||||
\laslib is usually distributed along with LAStools. Current versions of \laslib provide CMake support.
|
||||
BUILD_SHARED_LIBS needs to be set to true on windows to create a dynamic linked library.
|
||||
|
||||
\subsection thirdpartyOpenCV OpenCV
|
||||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ An example of a raster image with a rainbow ramp representing height
|
|||
is given in \cgalFigureRef{TutorialGISFigRastering}.
|
||||
|
||||
\cgalFigureBegin{TutorialGISFigRastering, raster.jpg}
|
||||
Raster visualisation of height using a rainbow ramp, ranging from
|
||||
Raster visualization of height using a rainbow ramp, ranging from
|
||||
light blue for low values to dark red for high values.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ Using \cgal requires a few core components to be previously installed:
|
|||
<li> a supported compiler (see Section \ref seccompilers),</li>
|
||||
<li> \ref seccmake,</li>
|
||||
<li> \ref thirdpartyBoost,</li>
|
||||
<li> \ref thirdpartyMPFR.</li>
|
||||
<li> a \ref thirdpartyMP.</li>
|
||||
</ul>
|
||||
|
||||
Optional third-party software might be required to build examples and demos shipped with \cgal,
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue