mirror of https://github.com/CGAL/cgal
Merge branch 'master' of https://github.com/CGAL/cgal into Mesh-3-rework-make-mesh-point-initialization-2-aclement
This commit is contained in:
commit
5b0f1fc4c2
|
|
@ -1,11 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libmpfr-dev \
|
||||
libeigen3-dev qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev \
|
||||
libqt5svg5-dev qttools5-dev qttools5-dev-tools libboost-dev libinsighttoolkit4-dev zsh
|
||||
#update cmake to 3.18.4
|
||||
sudo apt-get install -y \
|
||||
libmpfr-dev \
|
||||
libtbb-dev \
|
||||
libmetis-dev \
|
||||
libssh-dev \
|
||||
libeigen3-dev \
|
||||
qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev libqt5websockets5-dev \
|
||||
libqt5svg5-dev qttools5-dev qttools5-dev-tools \
|
||||
libboost-dev libboost-serialization-dev libboost-iostreams-dev libboost-filesystem-dev libboost-filesystem-dev \
|
||||
libvtk9-dev libgdcm-tools libvtkgdcm-dev libunwind-dev \
|
||||
libinsighttoolkit5-dev \
|
||||
libceres-dev \
|
||||
libglpk-dev \
|
||||
libopencv-dev \
|
||||
zsh \
|
||||
qt6-base-dev qt6-declarative-dev libqt6svg6-dev libqt6websockets6-dev
|
||||
|
||||
#update CMake
|
||||
sudo apt purge --auto-remove cmake
|
||||
cd /tmp
|
||||
wget https://cmake.org/files/v3.18/cmake-3.18.4-Linux-x86_64.sh
|
||||
sudo sh cmake-3.18.4-Linux-x86_64.sh --skip-license --prefix=/usr/local
|
||||
rm cmake-3.18.4-Linux-x86_64.sh
|
||||
CMAKE_VER=$(curl --silent https://cmake.org/files/LatestRelease/cmake-latest-files-v1.json | jq -r .version.string)
|
||||
wget https://cmake.org/files/LatestRelease/cmake-$CMAKE_VER-linux-x86_64.sh
|
||||
sudo sh cmake-*.sh --skip-license --prefix=/usr/local
|
||||
rm cmake-*.sh
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
FACTOR=$1
|
||||
set -ex
|
||||
cd Polyhedron/demo
|
||||
LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build . -t help | egrep 'plugin$' |& cut -d\ -f2)
|
||||
/usr/local/bin/cmake -S Polyhedron -B build -DCGAL_DIR=$2
|
||||
LIST_OF_PLUGINS=$(/usr/local/bin/cmake --build build -t help | egrep 'plugin$' |& cut -d\ -f2)
|
||||
PLUGINS_ARRAY=(${LIST_OF_PLUGINS});
|
||||
NB_OF_PLUGINS=${#PLUGINS_ARRAY[@]}
|
||||
DEL=$(($NB_OF_PLUGINS / 4))
|
||||
mkdir build
|
||||
cd build
|
||||
/usr/local/bin/cmake -DCGAL_DIR=$2 ../Polyhedron
|
||||
make -j2 ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))}
|
||||
NUM_PROCS=$(nproc)
|
||||
make -j${NUM_PROCS} ${PLUGINS_ARRAY[@]:$(($FACTOR * $DEL)):$((($FACTOR + 1) * $DEL))}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: remove label
|
||||
steps:
|
||||
- name: removelabel
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
|
|
@ -21,7 +21,7 @@ jobs:
|
|||
name: "Tested",
|
||||
});
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ success() }}
|
||||
with:
|
||||
script: |
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: get_round
|
||||
with:
|
||||
result-encoding: string
|
||||
|
|
@ -38,7 +38,7 @@ jobs:
|
|||
}
|
||||
}
|
||||
return 'stop'
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
id: get_pr_number
|
||||
with:
|
||||
|
|
@ -49,7 +49,7 @@ jobs:
|
|||
return pr_number
|
||||
|
||||
- name: Emoji-comment
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: steps.get_round.outputs.result != 'stop'
|
||||
with:
|
||||
script: |
|
||||
|
|
@ -104,8 +104,8 @@ jobs:
|
|||
echo "DoxygenError=No package affected." >> $GITHUB_OUTPUT
|
||||
exit 1
|
||||
fi
|
||||
cd build_doc && make -j2 doc
|
||||
make -j2 doc_with_postprocessing 2>tmp.log
|
||||
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`
|
||||
delimiter="$(openssl rand -hex 8)"
|
||||
|
|
@ -136,7 +136,7 @@ jobs:
|
|||
fi
|
||||
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ success() && steps.get_round.outputs.result != 'stop' }}
|
||||
with:
|
||||
script: |
|
||||
|
|
@ -154,7 +154,7 @@ jobs:
|
|||
- name: Post error
|
||||
env:
|
||||
ERRORMSG: ${{steps.build_and_run.outputs.DoxygenError}}
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
if: ${{ failure() && steps.get_round.outputs.result != 'stop' }}
|
||||
with:
|
||||
script: |
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@ jobs:
|
|||
- name: configure all
|
||||
run: |
|
||||
set -e
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DBUILD_TESTING=ON ..
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DCGAL_ENABLE_TESTING=ON ..
|
||||
ctest -L Installation -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
cmake-testsuite-with-qt5:
|
||||
cmake-testsuite-with-qt:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
|
|
@ -31,5 +31,5 @@ jobs:
|
|||
- name: configure all
|
||||
run: |
|
||||
set -e
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DBUILD_TESTING=ON ..
|
||||
mkdir build && cd build && CXX=clang++ cmake -DWITH_examples=ON -DWITH_tests=ON -DWITH_demos=ON -DCGAL_ENABLE_TESTING=ON ..
|
||||
ctest -L Installation -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ jobs:
|
|||
if: (github.event.comment.user.login == 'sloriot' || github.event.comment.user.login == 'lrineau') && contains(github.event.comment.body, '/testme')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: get_label
|
||||
with:
|
||||
result-encoding: string
|
||||
|
|
@ -63,7 +63,7 @@ jobs:
|
|||
ssh ${HOST} "${PATH_TO_SCRIPT}/run_testsuite_from_branch_name.sh $USER_NAME $BRANCH_NAME $BASE $PR_NUMBER"
|
||||
done
|
||||
- name: Post address
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const address = "Testsuite launched. Results will appear on the following page: https://cgal.geometryfactory.com/~cgaltest/test_suite/TESTRESULTS/index.shtml "
|
||||
|
|
|
|||
|
|
@ -12,24 +12,24 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: REUSE version
|
||||
uses: fsfe/reuse-action@v2
|
||||
uses: fsfe/reuse-action@v3
|
||||
with:
|
||||
args: --version
|
||||
- name: REUSE lint
|
||||
uses: fsfe/reuse-action@v2
|
||||
uses: fsfe/reuse-action@v3
|
||||
with:
|
||||
args: --include-submodules lint
|
||||
- name: REUSE SPDX SBOM
|
||||
uses: fsfe/reuse-action@v2
|
||||
uses: fsfe/reuse-action@v3
|
||||
with:
|
||||
args: spdx
|
||||
- name: install dependencies
|
||||
run: sudo apt-get install -y cmake
|
||||
run: sudo apt-get update && sudo apt-get install -y cmake
|
||||
- name: Create CGAL internal release
|
||||
run: |
|
||||
mkdir -p ./release
|
||||
cmake -DDESTINATION=./release -DCGAL_VERSION=9.9 -P ./Scripts/developer_scripts/cgal_create_release_with_cmake.cmake
|
||||
- name: REUSE lint release tarball
|
||||
uses: fsfe/reuse-action@v2
|
||||
uses: fsfe/reuse-action@v3
|
||||
with:
|
||||
args: --root ./release/CGAL-9.9 --include-submodules lint
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ jobs:
|
|||
messages: ${{ steps.set-result.outputs.result }}
|
||||
steps:
|
||||
- name: get informations and prepare email
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
id: set-result
|
||||
with:
|
||||
result-encoding: string
|
||||
|
|
|
|||
|
|
@ -178,12 +178,6 @@ GraphicsView/demo/Triangulation_2/Makefile
|
|||
GraphicsView/demo/Triangulation_2/Regular_triangulation_2
|
||||
GraphicsView/demo/Triangulation_2/qrc_*.cxx
|
||||
GraphicsView/demo/Triangulation_2/ui_*.h
|
||||
GraphicsView/src/CGAL_Qt5/*.dll
|
||||
GraphicsView/src/CGAL_Qt5/*.lib
|
||||
GraphicsView/src/CGAL_Qt5/*.so
|
||||
GraphicsView/src/CGAL_Qt5/Makefile
|
||||
GraphicsView/src/CGAL_Qt5/moc_*.cxx
|
||||
GraphicsView/src/CGAL_Qt5/qrc_*.cxx
|
||||
HalfedgeDS/test/HalfedgeDS/cgal_test_with_cmake
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds
|
||||
HalfedgeDS/test/HalfedgeDS/test_hds_decorator
|
||||
|
|
@ -879,7 +873,6 @@ Surface_mesher/demo/Surface_mesher/.*.deps
|
|||
Surface_mesher/demo/Surface_mesher/.qglviewer.xml
|
||||
Surface_mesher/demo/Surface_mesher/Makefile
|
||||
Surface_mesher/demo/Surface_mesher/Surface_mesher
|
||||
Surface_mesher/demo/Surface_mesher/Surface_mesher_Qt5_Demo
|
||||
Surface_mesher/demo/Surface_mesher/VTK/Makefile
|
||||
Surface_mesher/demo/Surface_mesher/VTK/mesh_a_3D_image
|
||||
Surface_mesher/demo/Surface_mesher/VTK/mesh_a_VTK_3D_image
|
||||
|
|
@ -894,7 +887,6 @@ Surface_mesher/demo/Surface_mesher/out*.off
|
|||
Surface_mesher/demo/Surface_mesher/polyhedron_remesher
|
||||
Surface_mesher/demo/Surface_mesher/polyhedron_remesher_with_edges
|
||||
Surface_mesher/demo/Surface_mesher/qrc_*.c*
|
||||
Surface_mesher/demo/Surface_mesher/qt5-demo
|
||||
Surface_mesher/demo/Surface_mesher/ui_*.h
|
||||
Surface_mesher/doxygen
|
||||
Surface_mesher/examples/Surface_mesher/.*.deps
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ int main(int argc, char **argv)
|
|||
app.setOrganizationName("INRIA");
|
||||
app.setApplicationName("AABB tree demo");
|
||||
|
||||
// Import resources from libCGALQt (Qt5).
|
||||
// Import resources from libCGALQt (Qt6).
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
|
||||
MainWindow mainWindow;
|
||||
|
|
@ -49,12 +49,3 @@ int main(int argc, char **argv)
|
|||
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
# include "Scene.cpp"
|
||||
# include "Scene_moc.cpp"
|
||||
# include "benchmarks.cpp"
|
||||
# include "Viewer.cpp"
|
||||
# include "Viewer_moc.cpp"
|
||||
# include "MainWindow.cpp"
|
||||
# include "MainWindow_moc.cpp"
|
||||
|
||||
|
|
|
|||
|
|
@ -6,73 +6,46 @@ project(AABB_tree_Demo)
|
|||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
# Instruct CMake to run moc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
# Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning.
|
||||
cmake_policy(SET CMP0053 OLD)
|
||||
endif()
|
||||
# Find CGAL and CGAL Qt6
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
|
||||
if(POLICY CMP0071)
|
||||
cmake_policy(SET CMP0071 NEW)
|
||||
endif()
|
||||
# Find Qt6 itself
|
||||
find_package(Qt6 QUIET COMPONENTS Gui OpenGL)
|
||||
|
||||
# Include this package's headers first
|
||||
include_directories(BEFORE ./ ./include)
|
||||
if(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
# Find CGAL and CGAL Qt5
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
|
||||
# Find Qt5 itself
|
||||
find_package(Qt5 QUIET COMPONENTS Widgets OpenGL)
|
||||
# Instruct CMake to run moc/ui/rcc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
|
||||
qt5_wrap_ui(UI_FILES MainWindow.ui)
|
||||
|
||||
include(AddFileDependencies)
|
||||
|
||||
qt5_generate_moc("MainWindow.h" "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp")
|
||||
add_file_dependencies(MainWindow_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.h")
|
||||
|
||||
qt5_generate_moc("Viewer.h" "${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp")
|
||||
add_file_dependencies(Viewer_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Viewer.h")
|
||||
|
||||
qt5_generate_moc("Scene.h" "${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp")
|
||||
add_file_dependencies(Scene_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/Scene.h")
|
||||
|
||||
qt5_add_resources(CGAL_Qt5_RESOURCE_FILES AABB_demo.qrc)
|
||||
|
||||
add_file_dependencies(
|
||||
AABB_demo.cpp "${CMAKE_CURRENT_BINARY_DIR}/MainWindow_moc.cpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Viewer_moc.cpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Scene_moc.cpp")
|
||||
|
||||
add_executable(
|
||||
AABB_demo AABB_demo.cpp ${UI_FILES} ${CGAL_Qt5_RESOURCE_FILES}
|
||||
#${CGAL_Qt5_MOC_FILES}
|
||||
qt_add_executable(
|
||||
AABB_demo AABB_demo.cpp Scene.cpp benchmarks.cpp Viewer.cpp MainWindow.cpp
|
||||
MainWindow.ui AABB_demo.qrc
|
||||
)
|
||||
# Link with Qt libraries
|
||||
target_link_libraries(AABB_demo PRIVATE Qt5::Widgets Qt5::OpenGL
|
||||
CGAL::CGAL CGAL::CGAL_Qt5)
|
||||
target_link_libraries(AABB_demo PRIVATE Qt6::Gui Qt6::OpenGL
|
||||
CGAL::CGAL CGAL::CGAL_Qt6)
|
||||
|
||||
add_to_cached_list(CGAL_EXECUTABLE_TARGETS AABB_demo)
|
||||
|
||||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||
cgal_add_compilation_test(AABB_demo)
|
||||
|
||||
else(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
else(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
set(AABB_MISSING_DEPS "")
|
||||
|
||||
if(NOT CGAL_Qt5_FOUND)
|
||||
set(AABB_MISSING_DEPS "CGAL_Qt5, ${AABB_MISSING_DEPS}")
|
||||
if(NOT CGAL_Qt6_FOUND)
|
||||
set(AABB_MISSING_DEPS "CGAL_Qt6, ${AABB_MISSING_DEPS}")
|
||||
endif()
|
||||
|
||||
if(NOT Qt5_FOUND)
|
||||
set(AABB_MISSING_DEPS "Qt5, ${AABB_MISSING_DEPS}")
|
||||
if(NOT Qt6_FOUND)
|
||||
set(AABB_MISSING_DEPS "Qt6, ${AABB_MISSING_DEPS}")
|
||||
endif()
|
||||
|
||||
message("NOTICE: This demo requires ${AABB_MISSING_DEPS}, and will not be compiled.")
|
||||
|
||||
endif(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
endif(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
|
|
|||
|
|
@ -10,15 +10,19 @@
|
|||
#include <QSettings>
|
||||
#include <QHeaderView>
|
||||
#include <QClipboard>
|
||||
#include <QInputDialog>
|
||||
|
||||
#include "ui_MainWindow.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent)
|
||||
: CGAL::Qt::DemosMainWindow(parent)
|
||||
: CGAL::Qt::DemosMainWindow(parent)
|
||||
{
|
||||
ui = new Ui::MainWindow;
|
||||
ui->setupUi(this);
|
||||
|
||||
this->addAboutDemo(":/cgal/AABB_demo/about.html");
|
||||
this->addAboutCGAL();
|
||||
|
||||
// saves some pointers from ui, for latter use.
|
||||
m_pViewer = ui->viewer;
|
||||
|
||||
|
|
@ -418,7 +422,3 @@ void MainWindow::on_actionCopy_snapshot_triggered()
|
|||
qb->setImage(snapshot);
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QtOpenGL/qgl.h>
|
||||
#include <CGAL/Qt/DemosMainWindow.h>
|
||||
|
||||
class QDragEnterEvent;
|
||||
|
|
@ -12,7 +11,6 @@ namespace Ui {
|
|||
class MainWindow;
|
||||
}
|
||||
|
||||
|
||||
class MainWindow :
|
||||
public CGAL::Qt::DemosMainWindow
|
||||
{
|
||||
|
|
@ -21,12 +19,12 @@ public:
|
|||
MainWindow(QWidget* parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
public slots:
|
||||
public Q_SLOTS:
|
||||
void updateViewerBBox();
|
||||
void open(QString filename);
|
||||
void setAddKeyFrameKeyboardModifiers(Qt::KeyboardModifiers);
|
||||
|
||||
protected slots:
|
||||
protected Q_SLOTS:
|
||||
|
||||
// settings
|
||||
void quit();
|
||||
|
|
|
|||
|
|
@ -618,7 +618,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[0].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(0.7,0.0,0.0);
|
||||
color.setRgbF(0.7f,0.0f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_POINTS, 0, static_cast<GLsizei>(pos_points.size()/3));
|
||||
|
|
@ -631,7 +631,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[1].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(0.0,0.7,0.0);
|
||||
color.setRgbF(0.0f,0.7f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(pos_lines.size()/3));
|
||||
|
|
@ -669,7 +669,7 @@ void Scene::draw(CGAL::QGLViewer* viewer)
|
|||
vao[3].bind();
|
||||
attrib_buffers(viewer);
|
||||
rendering_program.bind();
|
||||
color.setRgbF(1.0,0.0,0.0);
|
||||
color.setRgbF(1.0f,0.0f,0.0f);
|
||||
rendering_program.setUniformValue(colorLocation, color);
|
||||
rendering_program.setUniformValue(fLocation, fMatrix);
|
||||
gl->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(pos_cut_segments.size()/3));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef SCENE_H
|
||||
#define SCENE_H
|
||||
|
||||
#include <QtOpenGL/qgl.h>
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
|
|
@ -77,7 +76,6 @@ private:
|
|||
};
|
||||
|
||||
public:
|
||||
QGLContext* context;
|
||||
void draw(CGAL::QGLViewer*);
|
||||
void update_bbox();
|
||||
Bbox bbox() { return m_bbox; }
|
||||
|
|
@ -173,7 +171,7 @@ private:
|
|||
void attrib_buffers(CGAL::QGLViewer*);
|
||||
void compile_shaders();
|
||||
void compute_texture(int, int, Color_ramp, Color_ramp);
|
||||
private slots:
|
||||
private Q_SLOTS:
|
||||
void updateCutPlane();
|
||||
|
||||
public:
|
||||
|
|
@ -255,7 +253,7 @@ public:
|
|||
|
||||
|
||||
|
||||
public slots:
|
||||
public Q_SLOTS:
|
||||
// cutting plane
|
||||
void cutting_plane(bool override = false);
|
||||
void changed();
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
#include "Viewer.h"
|
||||
#include "Scene.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QGLFunctions>
|
||||
#include <CGAL/Qt/CreateOpenGLContext.h>
|
||||
|
||||
Viewer::Viewer(QWidget* parent)
|
||||
: CGAL::QGLViewer(parent),
|
||||
m_pScene(nullptr),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "Scene.h"
|
||||
#include "Refiner.h"
|
||||
#include <QInputDialog>
|
||||
#include <CGAL/Memory_sizer.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
#include <CGAL/AABB_primitive.h>
|
||||
#include <CGAL/boost/graph/property_maps.h>
|
||||
#include <CGAL/Default.h>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
|
|
@ -57,9 +56,9 @@ template < class FaceGraph,
|
|||
class CacheDatum=Tag_false >
|
||||
class AABB_face_graph_triangle_primitive
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
: public AABB_primitive<typename boost::mpl::if_<OneFaceGraphPerTree,
|
||||
typename boost::graph_traits<FaceGraph>::face_descriptor,
|
||||
std::pair<typename boost::graph_traits<FaceGraph>::face_descriptor, const FaceGraph*> >::type,
|
||||
: public AABB_primitive<std::conditional_t<OneFaceGraphPerTree::value,
|
||||
typename boost::graph_traits<FaceGraph>::face_descriptor,
|
||||
std::pair<typename boost::graph_traits<FaceGraph>::face_descriptor, const FaceGraph*> >,
|
||||
Triangle_from_face_descriptor_map<
|
||||
FaceGraph,
|
||||
typename Default::Get<VertexPointPMap,
|
||||
|
|
@ -76,7 +75,7 @@ class AABB_face_graph_triangle_primitive
|
|||
{
|
||||
typedef typename Default::Get<VertexPointPMap, typename boost::property_map< FaceGraph, vertex_point_t>::const_type >::type VertexPointPMap_;
|
||||
typedef typename boost::graph_traits<FaceGraph>::face_descriptor FD;
|
||||
typedef typename boost::mpl::if_<OneFaceGraphPerTree, FD, std::pair<FD, const FaceGraph*> >::type Id_;
|
||||
typedef std::conditional_t<OneFaceGraphPerTree::value, FD, std::pair<FD, const FaceGraph*> > Id_;
|
||||
|
||||
typedef Triangle_from_face_descriptor_map<FaceGraph,VertexPointPMap_> Triangle_property_map;
|
||||
typedef One_point_from_face_descriptor_map<FaceGraph,VertexPointPMap_> Point_property_map;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
#include <iterator>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <CGAL/type_traits/is_iterator.h>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
#include <CGAL/Default.h>
|
||||
|
||||
|
|
@ -70,9 +69,9 @@ template < class HalfedgeGraph,
|
|||
class CacheDatum = Tag_false >
|
||||
class AABB_halfedge_graph_segment_primitive
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
: public AABB_primitive< typename boost::mpl::if_<OneHalfedgeGraphPerTree,
|
||||
typename boost::graph_traits<HalfedgeGraph>::edge_descriptor,
|
||||
std::pair<typename boost::graph_traits<HalfedgeGraph>::edge_descriptor, const HalfedgeGraph*> >::type,
|
||||
: public AABB_primitive< std::conditional_t<OneHalfedgeGraphPerTree::value,
|
||||
typename boost::graph_traits<HalfedgeGraph>::edge_descriptor,
|
||||
std::pair<typename boost::graph_traits<HalfedgeGraph>::edge_descriptor, const HalfedgeGraph*> >,
|
||||
Segment_from_edge_descriptor_map<
|
||||
HalfedgeGraph,
|
||||
typename Default::Get<VertexPointPMap,
|
||||
|
|
@ -89,7 +88,7 @@ class AABB_halfedge_graph_segment_primitive
|
|||
{
|
||||
typedef typename Default::Get<VertexPointPMap,typename boost::property_map< HalfedgeGraph,vertex_point_t>::const_type >::type VertexPointPMap_;
|
||||
typedef typename boost::graph_traits<HalfedgeGraph>::edge_descriptor ED;
|
||||
typedef typename boost::mpl::if_<OneHalfedgeGraphPerTree, ED, std::pair<ED, const HalfedgeGraph*> >::type Id_;
|
||||
typedef std::conditional_t<OneHalfedgeGraphPerTree::value, ED, std::pair<ED, const HalfedgeGraph*> > Id_;
|
||||
|
||||
typedef Segment_from_edge_descriptor_map<HalfedgeGraph,VertexPointPMap_> Segment_property_map;
|
||||
typedef Source_point_from_edge_descriptor_map<HalfedgeGraph,VertexPointPMap_> Point_property_map;
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public:
|
|||
Result;
|
||||
public:
|
||||
First_intersection_traits(const AABBTraits& traits)
|
||||
: m_result(), m_traits(traits)
|
||||
: m_result(std::nullopt), m_traits(traits)
|
||||
{}
|
||||
|
||||
bool go_further() const {
|
||||
|
|
@ -202,7 +202,7 @@ class First_primitive_traits
|
|||
public:
|
||||
First_primitive_traits(const AABBTraits& traits)
|
||||
: m_is_found(false)
|
||||
, m_result()
|
||||
, m_result(std::nullopt)
|
||||
, m_traits(traits) {}
|
||||
|
||||
bool go_further() const { return !m_is_found; }
|
||||
|
|
|
|||
|
|
@ -32,11 +32,11 @@ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_cartesian_const_iterator_3,Cartesian_const
|
|||
|
||||
template<typename GeomTraits>
|
||||
struct Is_ray_intersection_geomtraits
|
||||
: boost::mpl::and_< Has_ray_3<GeomTraits>,
|
||||
Has_construct_source_3<GeomTraits>,
|
||||
Has_vector_3<GeomTraits>,
|
||||
Has_construct_cartesian_const_iterator_3<GeomTraits>,
|
||||
Has_cartesian_const_iterator_3<GeomTraits> >::type
|
||||
: std::bool_constant< Has_ray_3<GeomTraits>::value &&
|
||||
Has_construct_source_3<GeomTraits>::value &&
|
||||
Has_vector_3<GeomTraits>::value &&
|
||||
Has_construct_cartesian_const_iterator_3<GeomTraits>::value &&
|
||||
Has_cartesian_const_iterator_3<GeomTraits>::value >
|
||||
{};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ Advancing_front_surface_reconstruction
|
|||
Algebraic_foundations
|
||||
Arithmetic_kernel
|
||||
BGL
|
||||
CGAL_Core
|
||||
Cartesian_kernel
|
||||
Circulator
|
||||
Distance_2
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
Two types `A` and `B` are a model of the `ExplicitInteroperable`
|
||||
|
|
@ -27,4 +27,3 @@ class ExplicitInteroperable {
|
|||
public:
|
||||
|
||||
}; /* end ExplicitInteroperable */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsFractionsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A type is considered as a `Fraction`, if there is a reasonable way to
|
||||
|
|
@ -17,4 +17,3 @@ class Fraction {
|
|||
public:
|
||||
|
||||
}; /* end Fraction */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A model of the concept `FromDoubleConstructible` is required
|
||||
|
|
@ -27,4 +27,3 @@ FromDoubleConstructible(const double& d);
|
|||
/// @}
|
||||
|
||||
}; /* end FromDoubleConstructible */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
A model of the concept `FromIntConstructible` is required
|
||||
|
|
@ -28,4 +28,3 @@ FromIntConstructible(int& i);
|
|||
/// @}
|
||||
|
||||
}; /* end FromIntConstructible */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
|
||||
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
|
||||
\cgalConcept
|
||||
|
||||
Two types `A` and `B` are a model of the concept
|
||||
|
|
@ -29,4 +29,3 @@ class ImplicitInteroperable {
|
|||
public:
|
||||
|
||||
}; /* end ImplicitInteroperable */
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ struct Rational_traits_base<Rational, true>
|
|||
{
|
||||
private:
|
||||
typedef Fraction_traits<Rational> FT;
|
||||
typedef typename FT::Decompose Decomose;
|
||||
typedef typename FT::Decompose Decompose;
|
||||
typedef typename FT::Compose Compose;
|
||||
|
||||
public:
|
||||
|
|
@ -61,13 +61,13 @@ public:
|
|||
|
||||
RT numerator (const Rational& r) const {
|
||||
RT num,den;
|
||||
Decomose()(r,num,den);
|
||||
Decompose()(r,num,den);
|
||||
return num;
|
||||
}
|
||||
|
||||
RT denominator (const Rational& r) const {
|
||||
RT num,den;
|
||||
Decomose()(r,num,den);
|
||||
Decompose()(r,num,den);
|
||||
return den;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -194,21 +194,21 @@ root_of( int k, Input_iterator begin, Input_iterator end ) {
|
|||
template< class Number_type >
|
||||
inline
|
||||
// select a Is_zero functor
|
||||
typename boost::mpl::if_c<
|
||||
::std::is_same< typename Algebraic_structure_traits< Number_type >::Is_zero,
|
||||
Null_functor >::value ,
|
||||
typename std::conditional_t<
|
||||
std::is_same_v< typename Algebraic_structure_traits< Number_type >::Is_zero,
|
||||
Null_functor >,
|
||||
typename Real_embeddable_traits< Number_type >::Is_zero,
|
||||
typename Algebraic_structure_traits< Number_type >::Is_zero
|
||||
>::type::result_type
|
||||
>::result_type
|
||||
is_zero( const Number_type& x ) {
|
||||
// We take the Algebraic_structure_traits<>::Is_zero functor by default. If it
|
||||
// is not available, we take the Real_embeddable_traits functor
|
||||
typename ::boost::mpl::if_c<
|
||||
::std::is_same<
|
||||
std::conditional_t<
|
||||
std::is_same_v<
|
||||
typename Algebraic_structure_traits< Number_type >::Is_zero,
|
||||
Null_functor >::value ,
|
||||
Null_functor > ,
|
||||
typename Real_embeddable_traits< Number_type >::Is_zero,
|
||||
typename Algebraic_structure_traits< Number_type >::Is_zero >::type
|
||||
typename Algebraic_structure_traits< Number_type >::Is_zero >
|
||||
is_zero;
|
||||
return is_zero( x );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ public:
|
|||
Integer alpha_num = Integer(1), int log_denom = 1
|
||||
) : alpha_num_(alpha_num),
|
||||
beta_num_((Integer(1) << log_denom) - alpha_num),
|
||||
half_((log_denom > 0) ? (Integer(1) << log_denom-1) : 0),
|
||||
half_((log_denom > 0) ? Integer(Integer(1) << log_denom-1) : 0),
|
||||
log_denom_(log_denom)
|
||||
{
|
||||
CGAL_precondition(log_denom_ >= 0);
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ polynomial_power_to_bernstein_approx(
|
|||
std::vector<Integer> f(n+1);
|
||||
polynomial_affine_transform_approx_log_denom(
|
||||
first, beyond, f.begin(),
|
||||
upper_num - lower_num, lower_num, log_denom,
|
||||
Integer(upper_num - lower_num), lower_num, log_denom,
|
||||
p+q,
|
||||
approx, log, logl
|
||||
);
|
||||
|
|
|
|||
|
|
@ -27,31 +27,10 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#if CGAL_USE_CORE
|
||||
namespace CORE { class BigInt; }
|
||||
#endif
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
namespace internal {
|
||||
|
||||
#if CGAL_USE_CORE
|
||||
// bugfix for CORE by Michael Kerber
|
||||
// why is there a specialized function for CORE?
|
||||
inline CORE::BigInt shift_integer_by(CORE::BigInt x, long shift){
|
||||
if( shift > 0 ){
|
||||
while(shift>63) {
|
||||
x = (x >> 63);
|
||||
shift-=63;
|
||||
}
|
||||
x = (x >> shift);
|
||||
}else{
|
||||
// add 0 bits
|
||||
x = (x << -shift);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
#endif
|
||||
|
||||
template <class Shiftable>
|
||||
Shiftable shift_integer_by(Shiftable x, long shift){
|
||||
|
|
|
|||
|
|
@ -327,7 +327,7 @@ public:
|
|||
long operator()( CORE::BigFloat x ) const {
|
||||
CGAL_precondition(!CGAL::zero_in(x));
|
||||
x = CGAL::abs(x);
|
||||
return CORE::floorLg(x.m()-x.err())+x.exp()*CORE::CHUNK_BIT;
|
||||
return CORE::floorLg(CORE::BigInt(x.m()-x.err()))+x.exp()*CORE::CHUNK_BIT;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -337,7 +337,7 @@ public:
|
|||
// (already commented out in EXACUS)...
|
||||
// NiX_precond(!(NiX::in_zero(x) && NiX::singleton(x)));
|
||||
x = CGAL::abs(x);
|
||||
return CORE::ceilLg(x.m()+x.err())+x.exp()*CORE::CHUNK_BIT;
|
||||
return CORE::ceilLg(CORE::BigInt(x.m()+x.err()))+x.exp()*CORE::CHUNK_BIT;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ simple_bound_between(const Algebraic_real& a,
|
|||
final_mantissa = final_mantissa << 1;
|
||||
final_mantissa++;
|
||||
y_log--;
|
||||
x_m = x_m==0 ? 0 : x_m & ((Integer(1) << x_log) - 1); //x_m - CGAL::ipower(Integer(2),x_log);
|
||||
x_m = x_m==0 ? 0 : Integer(x_m & ((Integer(1) << x_log) - 1)); //x_m - CGAL::ipower(Integer(2),x_log);
|
||||
x_log = x_m==0 ? -1 : CGAL::internal::floor_log2_abs(x_m);
|
||||
}
|
||||
final_mantissa = final_mantissa << 1;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
Algebraic_foundations
|
||||
Algebraic_kernel_for_circles
|
||||
Arithmetic_kernel
|
||||
CGAL_Core
|
||||
Filtered_kernel
|
||||
Installation
|
||||
Interval_support
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
Algebraic_foundations
|
||||
Algebraic_kernel_for_spheres
|
||||
Arithmetic_kernel
|
||||
CGAL_Core
|
||||
Filtered_kernel
|
||||
Installation
|
||||
Interval_support
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
Algebraic_foundations
|
||||
Alpha_shapes_2
|
||||
Arithmetic_kernel
|
||||
CGAL_Core
|
||||
Cartesian_kernel
|
||||
Hash_map
|
||||
Homogeneous_kernel
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ int main(int argc, char** argv)
|
|||
application.setOrganizationName("GeometryFactory");
|
||||
application.setApplicationName("Alpha Shape Reconstruction");
|
||||
|
||||
// Import resources from libCGALQt (Qt5).
|
||||
// See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE
|
||||
// Import resources from libCGAL_Qt6
|
||||
// See https://doc.qt.io/qt-6/qtresource-proxy.html#Q_INIT_RESOURCE
|
||||
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
Q_INIT_RESOURCE(Alpha_shape_3);
|
||||
|
|
|
|||
|
|
@ -7,46 +7,32 @@ project(Alpha_shapes_3_Demo)
|
|||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
# Instruct CMake to run moc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
if(NOT POLICY CMP0070 AND POLICY CMP0053)
|
||||
# Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning.
|
||||
cmake_policy(SET CMP0053 OLD)
|
||||
endif()
|
||||
if(POLICY CMP0071)
|
||||
cmake_policy(SET CMP0071 NEW)
|
||||
endif()
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
|
||||
find_package(Qt6 QUIET COMPONENTS Widgets OpenGL)
|
||||
|
||||
find_package(Qt5 QUIET COMPONENTS Widgets OpenGL)
|
||||
|
||||
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
if(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
|
||||
# include(${QT_USE_FILE})
|
||||
include_directories(BEFORE ./)
|
||||
# Instruct CMake to run moc/ui/rcc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
# ui file, created with Qt Designer
|
||||
qt5_wrap_ui(uis MainWindow.ui)
|
||||
qt_add_executable(Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp
|
||||
MainWindow.ui Alpha_shape_3.qrc)
|
||||
|
||||
# qrc files (resources files, that contain icons, at least)
|
||||
qt5_add_resources(CGAL_Qt5_RESOURCE_FILES ./Alpha_shape_3.qrc)
|
||||
|
||||
add_executable(
|
||||
Alpha_shape_3 Alpha_shape_3.cpp MainWindow.cpp Viewer.cpp ${uis}
|
||||
${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES})
|
||||
add_to_cached_list(CGAL_EXECUTABLE_TARGETS Alpha_shape_3)
|
||||
|
||||
target_link_libraries(Alpha_shape_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5
|
||||
Qt5::Widgets Qt5::OpenGL)
|
||||
target_link_libraries(Alpha_shape_3 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6
|
||||
Qt6::Widgets Qt6::OpenGL)
|
||||
|
||||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||
cgal_add_compilation_test(Alpha_shape_3)
|
||||
|
||||
else()
|
||||
|
||||
message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.")
|
||||
message("NOTICE: This demo requires CGAL and Qt6, and will not be compiled.")
|
||||
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
The purpose of this repository is to make some range data
|
||||
and detailed reconstructions available to the public. Currently, this repository only contains models that were scanned and reconstructed
|
||||
at the Stanford Computer Graphics Laboratory . In the future, we hope to include data sets and reconstructions from other sources.
|
||||
|
||||
The models in this repository were all scanned with a Cyberware 3030MS optical triangulation scanner.
|
||||
Please acknowledge ....
|
||||
|
||||
http://www-graphics.stanford.edu/data/3Dscanrep/
|
||||
e-mail: 3Dscanrep@graphics.stanford.edu
|
||||
file://www-graphics.stanford.edu/pub/zippack/data/
|
||||
|
||||
http://www.hs.washington.edu/locke/vislab/
|
||||
http://biocomp.arc.nasa.gov/3dreconstruction/data/
|
||||
medical data
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,582 @@
|
|||
581
|
||||
-9496.000158 -6621.999660 73324.000108
|
||||
1941.000008 -502.999956 53448.000262
|
||||
-13993.000076 -9472.000458 73547.999893
|
||||
-3165.000198 2805.999696 53841.000158
|
||||
3941.000109 -826.999564 53350.999780
|
||||
-13992.999698 -6391.999696 73548.000325
|
||||
-4629.000334 -2729.999756 72919.999638
|
||||
-14544.000229 7643.999701 62169.999969
|
||||
-3539.000009 -7617.000066 72743.000159
|
||||
-3569.999951 1963.000330 53954.000331
|
||||
4099.000115 540.000082 55720.000195
|
||||
3946.000208 3611.000347 54343.000242
|
||||
3942.000336 -1955.000290 53845.000430
|
||||
24.000106 -8480.000056 72560.000446
|
||||
-2817.999819 -7080.000021 72739.999999
|
||||
274.999768 2681.999578 53612.999729
|
||||
-5673.000363 -8522.000312 72919.999924
|
||||
-3569.999681 5328.999917 53954.000391
|
||||
7057.000447 22.999921 72019.999778
|
||||
-7114.999994 -4259.000412 73100.000243
|
||||
3129.999877 -1020.000207 53119.999650
|
||||
-14575.999938 2064.000292 60412.000409
|
||||
-8087.999603 -2692.999873 73164.999998
|
||||
-9496.000263 -8099.000270 73323.999696
|
||||
-14575.999757 4785.999619 60412.000416
|
||||
1767.000453 -2710.000440 72380.000399
|
||||
4723.999558 2984.999684 72199.999829
|
||||
4173.000154 -1942.000364 57518.000224
|
||||
-14185.000047 -8155.999786 69664.999947
|
||||
8462.999751 -2789.999723 72019.999998
|
||||
-14475.999680 -6322.000368 63961.000010
|
||||
-14185.000218 -6669.000381 69665.000452
|
||||
-14411.999521 8769.999611 63528.000202
|
||||
-3929.999793 121.999623 53660.000393
|
||||
-3538.999885 -6227.999801 72743.000078
|
||||
5664.000221 8483.999673 72199.999788
|
||||
4160.000223 3746.999664 57257.999712
|
||||
16.999585 1061.999516 53479.999584
|
||||
3441.000482 4789.999724 53120.000035
|
||||
3941.000301 861.000216 53350.999558
|
||||
3941.000166 186.000103 53350.999891
|
||||
-5672.999756 5721.000193 72920.000053
|
||||
-14411.999799 1051.999879 63528.000013
|
||||
3441.000192 5308.999633 53119.999836
|
||||
-13970.999556 -6778.999631 71592.999827
|
||||
-5673.000352 1448.000308 72919.999896
|
||||
1941.000287 3661.000398 53448.000221
|
||||
4159.999588 2681.999997 57257.999788
|
||||
2098.999573 1058.000232 53299.999983
|
||||
-3569.999774 280.000127 53953.999842
|
||||
-3538.999679 -9006.000017 72743.000111
|
||||
-3570.000143 -1402.000081 53954.000006
|
||||
-7115.000060 5734.999820 73099.999872
|
||||
-1026.999875 -1026.999558 53479.999537
|
||||
7056.999811 -4195.999750 72020.000402
|
||||
-3570.000168 3085.000137 53954.000020
|
||||
-13970.999844 -9803.999811 71592.999532
|
||||
17.000252 6285.000424 53479.999576
|
||||
-14322.999690 -2587.000320 65092.999918
|
||||
-5387.999792 -1969.999910 72920.000067
|
||||
-1426.999888 2743.999772 53744.000433
|
||||
-3538.999950 -2059.999970 72742.999563
|
||||
-14412.000000 6664.999905 63527.999948
|
||||
-3570.000271 3646.000059 53954.000087
|
||||
-3929.999828 -1973.999852 53659.999952
|
||||
-4237.999601 -7080.000344 72740.000252
|
||||
-14373.000194 -7866.999965 65785.999683
|
||||
3946.000001 2584.000490 54343.000220
|
||||
3941.000101 2886.999557 53350.999752
|
||||
4160.000230 551.000414 57257.999512
|
||||
4264.000084 1686.000457 60564.000497
|
||||
-9495.999646 -3667.999852 73323.999965
|
||||
4288.000261 1950.999734 60834.000001
|
||||
1432.000381 -1938.999865 53464.000475
|
||||
-5126.999748 3887.999847 72980.999916
|
||||
4287.999632 278.999662 60833.999729
|
||||
-2072.000101 17.000308 53479.999547
|
||||
-14411.999918 5261.999514 63527.999544
|
||||
-14185.000455 -5180.999602 69665.000041
|
||||
4263.999685 -536.999855 60563.999513
|
||||
4724.000258 1575.000409 72200.000149
|
||||
4159.999987 4812.999838 57258.000035
|
||||
-3930.000140 4837.999779 53659.999939
|
||||
-8543.000324 -8542.999590 73099.999989
|
||||
-3570.000177 840.999915 53954.000138
|
||||
3941.000105 1874.000098 53351.000382
|
||||
3946.000349 4637.999658 54342.999822
|
||||
8462.999539 8462.999818 72019.999892
|
||||
5664.000082 4253.999844 72200.000354
|
||||
-5387.999671 2302.000049 72920.000121
|
||||
-5388.000189 166.000459 72919.999521
|
||||
5664.000053 -4206.999676 72200.000476
|
||||
2473.999900 -2709.999879 72380.000265
|
||||
16.999506 -1027.000446 53479.999576
|
||||
4263.999639 -1647.999637 60564.000406
|
||||
3441.000140 1676.999539 53120.000327
|
||||
-9496.000107 -5145.000342 73323.999932
|
||||
-13992.999533 -4852.000259 73548.000110
|
||||
4287.999970 6968.000328 60833.999686
|
||||
275.000199 3746.999653 53612.999629
|
||||
-14412.000182 -350.999721 63528.000472
|
||||
-13992.999868 -4338.000196 73547.999622
|
||||
-8543.000347 -4259.000087 73100.000032
|
||||
16.999876 5240.000063 53479.999960
|
||||
-14372.999770 -9301.999508 65786.000118
|
||||
-5127.000314 8129.000114 72980.999503
|
||||
-1394.000093 -4227.999771 72560.000486
|
||||
4098.999711 3673.000482 55719.999928
|
||||
3946.000083 -1523.000092 54342.999694
|
||||
4724.000061 -1246.000449 72200.000281
|
||||
-13720.999502 -5353.000086 73556.000360
|
||||
4723.999887 7215.000403 72200.000242
|
||||
-14184.999932 -2754.999701 67936.999780
|
||||
1437.000194 -5630.999670 72380.000099
|
||||
-5444.999665 -9188.000372 72930.000378
|
||||
-4238.000442 -8500.999822 72740.000263
|
||||
-8542.999594 4307.000192 73099.999910
|
||||
-5388.000269 6574.999714 72920.000493
|
||||
-1394.000324 -2811.000366 72559.999570
|
||||
16.999584 16.999963 53479.999782
|
||||
-14327.000037 -2687.000254 67063.000303
|
||||
-1027.000347 6284.999698 53480.000414
|
||||
2850.999763 -5631.000213 72380.000333
|
||||
-14543.999669 -8982.999787 62170.000241
|
||||
-1426.999789 563.000156 53743.999616
|
||||
-5127.000214 -2474.000449 72980.999585
|
||||
-8542.999689 5734.999797 73100.000259
|
||||
-13993.000354 -8958.999738 73548.000223
|
||||
1057.999632 3139.999725 53299.999575
|
||||
7056.999573 1429.999852 72020.000196
|
||||
-13412.999816 -2989.999795 73597.999993
|
||||
-14411.999793 5963.000061 63527.999980
|
||||
-14544.000399 3487.000172 62169.999836
|
||||
4723.999840 869.999743 72200.000174
|
||||
1940.999817 5742.999710 53447.999666
|
||||
-14411.999874 7365.999941 63528.000371
|
||||
3441.000223 5827.000153 53120.000059
|
||||
1941.000349 1579.000153 53447.999990
|
||||
4723.999767 5099.999678 72199.999767
|
||||
-5444.999773 -6354.000185 72929.999902
|
||||
-11526.999785 -8253.000306 73393.000090
|
||||
4287.999859 5853.000374 60833.999882
|
||||
-3538.999732 -3449.999625 72742.999793
|
||||
-13993.000364 -7932.000020 73548.000260
|
||||
-14373.000228 -3563.000378 65785.999768
|
||||
4253.999995 -7026.999870 72200.000060
|
||||
-3164.999721 -539.000085 53841.000259
|
||||
3940.999621 -1165.000187 53351.000040
|
||||
4251.999655 -1611.999954 58826.000287
|
||||
3130.000441 1055.000205 53119.999800
|
||||
-7114.999827 -7115.000264 73100.000269
|
||||
-5388.000004 5151.000233 72919.999833
|
||||
-14543.999690 -4825.999812 62169.999558
|
||||
-3929.999555 6411.000130 53659.999733
|
||||
1940.999639 4702.000362 53447.999846
|
||||
-14411.999716 2454.999607 63527.999612
|
||||
3440.999501 -915.999922 53119.999778
|
||||
4288.000012 -1950.999731 60833.999534
|
||||
275.000261 1616.000437 53612.999949
|
||||
-1427.000136 -527.000171 53743.999568
|
||||
4251.999503 -525.000281 58825.999809
|
||||
-260.999615 -1966.999943 53479.999718
|
||||
7057.000208 -5603.000018 72020.000259
|
||||
-5127.000479 6715.000320 72980.999619
|
||||
-1427.000327 3834.000257 53744.000353
|
||||
3440.999911 6346.000423 53120.000030
|
||||
2850.999822 -7045.000455 72380.000243
|
||||
5664.000435 -1386.999766 72200.000059
|
||||
-14412.000002 3156.999581 63527.999801
|
||||
-8543.000189 -7115.000435 73099.999877
|
||||
3445.999629 2566.999931 53380.000265
|
||||
3440.999872 -1434.999562 53119.999546
|
||||
-3165.000457 5035.000031 53841.000213
|
||||
-3929.999582 2218.000457 53659.999557
|
||||
3445.999965 -1512.999532 53379.999504
|
||||
-1958.000338 -1957.000101 53738.999698
|
||||
275.000452 -1581.000215 53613.000308
|
||||
-14088.000048 -2934.999842 70989.999715
|
||||
-14373.000177 -4997.999695 65786.000128
|
||||
8462.999777 5649.999794 72019.999678
|
||||
1058.000275 6263.000038 53300.000358
|
||||
-7102.000019 -2619.000327 73101.999718
|
||||
-8542.999951 -5687.000307 73099.999616
|
||||
-3930.000250 2741.999930 53660.000203
|
||||
1300.999742 -1960.999792 53299.999640
|
||||
4723.999966 4394.999535 72200.000035
|
||||
4098.999994 1583.999527 55720.000241
|
||||
-13992.999829 -8445.999614 73548.000422
|
||||
4098.999861 -1548.999788 55719.999858
|
||||
-3930.000368 -1449.999960 53660.000492
|
||||
4287.999872 3066.000210 60833.999876
|
||||
4287.999522 2508.000016 60833.999841
|
||||
-5445.000250 -3519.000073 72930.000344
|
||||
-14232.999547 -8002.000380 67645.000212
|
||||
-5126.999777 -1767.000240 72980.999857
|
||||
3129.999543 5204.999843 53119.999708
|
||||
3946.000005 530.999826 54343.000175
|
||||
-13721.000221 -3816.000216 73556.000357
|
||||
8463.000349 22.999637 72020.000002
|
||||
4724.000003 3690.000471 72200.000108
|
||||
1058.000380 4180.999601 53300.000207
|
||||
274.999810 5879.000134 53613.000459
|
||||
354.000245 -2715.999978 72560.000238
|
||||
1437.000165 -4217.000476 72380.000479
|
||||
3940.999844 4913.000151 53350.999582
|
||||
-2895.000382 -1945.000376 53846.999541
|
||||
2099.000389 2099.000230 53300.000474
|
||||
8463.000426 1430.000487 72020.000078
|
||||
4252.000374 561.000004 58826.000032
|
||||
3940.999558 523.000164 53351.000416
|
||||
1437.000253 -2804.000496 72380.000323
|
||||
-14543.999762 -3440.999829 62169.999916
|
||||
-14543.999982 -6211.999551 62170.000041
|
||||
3441.000291 2714.999685 53119.999987
|
||||
5663.999985 -2797.000025 72200.000024
|
||||
-14411.999984 -1051.999942 63528.000370
|
||||
3440.999562 4271.000407 53120.000029
|
||||
-3539.000186 2107.000409 72743.000388
|
||||
1057.999822 -1024.000255 53300.000171
|
||||
3945.999666 5664.999689 54342.999562
|
||||
-5126.999539 5301.000010 72981.000462
|
||||
-14575.999627 -3379.999597 60411.999811
|
||||
3180.999744 -2710.000374 72380.000052
|
||||
-1026.999719 4195.999827 53480.000234
|
||||
-3165.000176 575.999615 53840.999507
|
||||
3941.000445 -151.999807 53351.000391
|
||||
-14576.000174 -657.999845 60411.999636
|
||||
-2349.999962 -1966.999590 53479.999902
|
||||
-14411.999854 3858.999681 63528.000283
|
||||
-10090.000319 -2795.000040 73260.999652
|
||||
3941.000477 5924.999710 53350.999731
|
||||
4085.000468 -1954.000357 55213.000428
|
||||
4253.999936 -8436.999819 72199.999776
|
||||
-1394.000360 -8479.999946 72559.999636
|
||||
-3569.999726 -841.000285 53953.999993
|
||||
-9083.999507 -2718.999761 73217.000072
|
||||
3441.000399 640.000398 53120.000050
|
||||
4287.999748 -1394.000023 60833.999874
|
||||
5664.000340 7073.999686 72199.999963
|
||||
-5387.999666 4438.999817 72919.999562
|
||||
7056.999636 -7010.000061 72019.999662
|
||||
1057.999689 5222.000173 53299.999663
|
||||
-5673.000248 4296.000142 72920.000031
|
||||
-1027.000260 5239.999713 53480.000273
|
||||
-7114.999766 -8543.000300 73100.000022
|
||||
274.999590 551.000141 53612.999775
|
||||
-3929.999711 -926.000493 53660.000132
|
||||
4288.000365 -836.000403 60833.999756
|
||||
3446.000332 3586.999913 53379.999531
|
||||
3887.999686 -2709.999801 72379.999876
|
||||
-3539.000418 -670.999562 72742.999614
|
||||
4251.999963 1648.000235 58826.000350
|
||||
7056.999875 -1382.999580 72019.999867
|
||||
-11526.999831 -9757.999777 73393.000349
|
||||
3130.000328 4167.000247 53120.000320
|
||||
8463.000402 2837.000196 72020.000275
|
||||
3446.000436 -493.000175 53380.000405
|
||||
-1427.000357 6013.999828 53744.000254
|
||||
-13993.000352 -5365.000211 73547.999983
|
||||
3130.000064 6241.999698 53120.000243
|
||||
-1393.999680 -7061.999503 72559.999762
|
||||
-3929.999947 3266.000354 53660.000396
|
||||
-5388.000052 8711.000308 72919.999522
|
||||
-5387.999641 5862.999935 72920.000126
|
||||
-5673.000220 24.000330 72919.999842
|
||||
4160.000111 -514.999580 57257.999620
|
||||
3445.999928 527.000347 53379.999914
|
||||
-8542.999580 7162.000367 73099.999863
|
||||
2947.999993 -1968.000009 53405.999963
|
||||
-3929.999592 -1974.000291 53659.999860
|
||||
-1305.999625 -1967.000077 53480.000398
|
||||
3129.999665 3130.000305 53119.999882
|
||||
-4237.999635 -4237.999904 72739.999541
|
||||
7057.000491 4243.000297 72019.999582
|
||||
-14576.000246 -6102.000206 60411.999747
|
||||
4264.000083 2796.999726 60563.999829
|
||||
4724.000254 5805.000459 72199.999985
|
||||
-5672.999808 -7097.000478 72920.000322
|
||||
-7114.999930 1452.000036 73099.999694
|
||||
-3929.999839 4313.999708 53660.000336
|
||||
-13971.000086 -5267.000118 71592.999574
|
||||
-3164.999892 1691.000266 53840.999559
|
||||
3941.000485 1198.999988 53351.000119
|
||||
-2071.999680 1062.000046 53480.000119
|
||||
-3930.000107 5362.999664 53659.999659
|
||||
-13972.000434 -2989.999797 73073.000355
|
||||
-5387.999734 1589.999640 72920.000470
|
||||
-14575.999747 6147.000157 60412.000152
|
||||
-3539.000484 4885.000479 72743.000415
|
||||
-8543.000350 23.999745 73100.000201
|
||||
4159.999933 5878.999799 57258.000196
|
||||
-5444.999733 -7771.000335 72929.999842
|
||||
-14372.999532 -6432.999688 65786.000443
|
||||
3941.000032 5250.000483 53350.999566
|
||||
-2817.999801 -4237.999840 72739.999681
|
||||
2099.000054 4180.999939 53300.000374
|
||||
3440.999903 121.000021 53120.000493
|
||||
-14575.999797 -4741.000478 60411.999775
|
||||
3940.999685 1535.999624 53351.000429
|
||||
-14576.000473 702.999598 60412.000428
|
||||
-14475.999775 -4911.999679 63960.999993
|
||||
-14131.000326 -2857.999672 69963.000289
|
||||
2099.000221 -1024.000206 53299.999555
|
||||
-3539.000177 -4839.000490 72742.999973
|
||||
-5672.999696 -4248.999669 72919.999901
|
||||
1057.999780 16.999883 53300.000257
|
||||
5663.999977 5663.999867 72199.999515
|
||||
5663.999992 -8436.999738 72200.000314
|
||||
-14412.000335 8068.000149 63527.999665
|
||||
-5388.000218 -545.999702 72919.999648
|
||||
4264.000448 3907.999781 60564.000285
|
||||
3129.999620 2092.000354 53120.000415
|
||||
1062.999967 -2715.999634 72560.000024
|
||||
3940.999708 -1840.000490 53351.000006
|
||||
23.999785 -4227.999646 72560.000090
|
||||
-3165.000129 -1654.000323 53840.999660
|
||||
-5127.000159 2474.000343 72981.000044
|
||||
3941.000234 2210.999659 53351.000276
|
||||
1436.999565 -7045.000204 72380.000395
|
||||
-1426.999662 1654.000050 53744.000497
|
||||
4159.999762 -1580.999657 57257.999765
|
||||
2099.000277 6263.000009 53300.000166
|
||||
-14233.000173 -9461.999637 67644.999640
|
||||
4724.000132 6510.000452 72199.999686
|
||||
-5388.000295 3014.999741 72919.999528
|
||||
4107.000341 -1973.999932 55973.999842
|
||||
-1027.000486 1061.999561 53480.000336
|
||||
4263.999763 5018.999546 60563.999509
|
||||
-3126.999968 6305.999575 53660.000329
|
||||
-1062.999814 -2715.999805 72559.999701
|
||||
3441.000092 -398.000054 53119.999576
|
||||
23.999882 -5645.000302 72559.999942
|
||||
-5126.999834 4594.000338 72980.999829
|
||||
4252.000254 4907.999952 58825.999554
|
||||
-3569.999712 4767.999673 53953.999940
|
||||
-14476.000032 -9143.000078 63960.999819
|
||||
4071.000131 -1967.999892 54460.000432
|
||||
3440.999875 3752.000283 53120.000467
|
||||
-14576.000485 3424.999842 60411.999944
|
||||
-5160.999508 -2520.999928 72949.000110
|
||||
4287.999692 3622.999957 60834.000077
|
||||
-5127.000118 1767.000066 72980.999700
|
||||
5663.999655 24.000344 72200.000194
|
||||
-14576.000480 7508.000120 60411.999689
|
||||
-2881.999956 -1974.000116 53659.999591
|
||||
3129.999776 16.999790 53119.999905
|
||||
-13993.000072 -5879.000105 73548.000170
|
||||
4723.999855 -2656.000037 72200.000312
|
||||
3940.999633 4574.999653 53351.000095
|
||||
17.000159 3150.999751 53479.999993
|
||||
-13721.000066 -6890.000008 73555.999864
|
||||
-5673.000136 8569.000239 72919.999812
|
||||
4287.999834 1393.999656 60834.000047
|
||||
-5127.000002 3181.000499 72980.999577
|
||||
1437.000111 -8457.999664 72379.999810
|
||||
-1027.000182 3151.000481 53480.000213
|
||||
8462.999880 -5602.999786 72020.000397
|
||||
5663.999998 -7027.000337 72200.000179
|
||||
-2071.999836 5240.000427 53480.000403
|
||||
3445.999729 4607.000036 53380.000383
|
||||
-1394.000136 -5645.000011 72559.999949
|
||||
-3127.000033 2113.999786 53660.000272
|
||||
3941.000324 2548.999788 53350.999985
|
||||
3940.999570 -1502.000342 53351.000013
|
||||
-3126.999914 -1030.999894 53659.999552
|
||||
-4238.000253 -2817.999880 72739.999988
|
||||
3440.999843 -1953.999504 53120.000421
|
||||
259.999737 -1960.999636 53300.000138
|
||||
-245.000117 -1948.999943 53618.999915
|
||||
-11526.999811 -5243.000037 73392.999756
|
||||
4724.000234 165.000038 72199.999547
|
||||
-3126.999977 3161.999991 53659.999978
|
||||
-3569.999564 4207.000094 53953.999501
|
||||
275.000170 -514.999842 53613.000034
|
||||
-11526.999613 -6747.999928 73392.999616
|
||||
-7390.999730 -5035.000249 73077.999705
|
||||
275.000340 4813.000352 53612.999844
|
||||
-2071.999948 3150.999602 53480.000403
|
||||
4251.999765 2735.000064 58826.000103
|
||||
-7115.000351 -5686.999885 73100.000358
|
||||
4098.999827 2628.999611 55719.999560
|
||||
8463.000124 -7010.000397 72020.000009
|
||||
-14232.999615 -6543.000442 67645.000485
|
||||
-3930.000232 5887.000299 53659.999634
|
||||
-14544.000461 2101.000409 62170.000359
|
||||
3372.000265 -1954.000261 53119.999806
|
||||
-14412.000115 1754.000439 63527.999500
|
||||
-14438.999828 -2520.999738 64242.999578
|
||||
-14329.999599 -2661.000068 66073.000238
|
||||
1941.000120 -1544.000357 53448.000031
|
||||
-4238.000332 -5659.000491 72740.000442
|
||||
4098.999594 -505.000192 55720.000025
|
||||
-2818.000128 -5658.999652 72739.999655
|
||||
4288.000306 -278.999978 60833.999586
|
||||
-1026.999893 17.000290 53480.000077
|
||||
-7114.999937 2878.999603 73099.999625
|
||||
4251.999706 3821.999721 58825.999856
|
||||
-14544.000411 -7596.999761 62170.000298
|
||||
-3539.000189 6273.999627 72742.999519
|
||||
-8542.999929 8590.000255 73100.000232
|
||||
-14544.000350 715.999575 62170.000076
|
||||
-9495.999848 -9576.000383 73323.999907
|
||||
-14576.000232 -7462.000020 60411.999731
|
||||
-14184.999642 -9643.999972 69665.000056
|
||||
-13970.999811 -8291.000315 71593.000038
|
||||
-5126.999814 1060.000113 72981.000052
|
||||
-7115.000366 7162.000434 73099.999958
|
||||
-3165.000448 6150.000036 53840.999507
|
||||
8462.999808 4242.999904 72020.000254
|
||||
7057.000202 -2790.000123 72020.000020
|
||||
-2071.999832 -1026.999844 53479.999642
|
||||
-7114.999518 -1404.000177 73100.000300
|
||||
3941.000476 3223.999580 53351.000151
|
||||
-3569.999782 1402.000069 53953.999777
|
||||
-3570.000289 7012.000244 53953.999930
|
||||
-5388.000194 877.999982 72919.999818
|
||||
-5126.999702 6008.000102 72980.999919
|
||||
4263.999700 6130.999796 60564.000158
|
||||
-8543.000290 1452.000226 73100.000426
|
||||
2850.999705 -4217.000056 72379.999818
|
||||
7056.999509 7057.000433 72019.999792
|
||||
-13992.999692 -3312.000439 73548.000061
|
||||
2850.999879 -8457.999587 72380.000259
|
||||
-3538.999600 718.000352 72742.999931
|
||||
-3930.000315 646.000457 53659.999635
|
||||
4264.000193 573.999697 60564.000002
|
||||
2099.000093 5221.999649 53300.000412
|
||||
-2071.999917 6284.999527 53479.999583
|
||||
4723.999862 7920.000427 72199.999887
|
||||
4330.999705 -1963.000266 59887.000081
|
||||
2851.000238 -2803.999644 72380.000218
|
||||
3440.999720 2195.999826 53119.999530
|
||||
-14543.999739 -2055.000043 62170.000137
|
||||
-14544.000178 -669.999739 62170.000308
|
||||
-14411.999915 351.000242 63527.999545
|
||||
3940.999876 5587.999982 53351.000452
|
||||
-11526.999792 -3737.999544 73392.999629
|
||||
3940.999584 4236.999929 53351.000136
|
||||
-7115.000083 -2831.999613 73099.999909
|
||||
-14232.999742 -5082.999812 67645.000324
|
||||
-3570.000011 -1963.000243 53954.000457
|
||||
-14575.999963 -8822.999905 60411.999771
|
||||
-3196.999729 -2722.999629 72739.999728
|
||||
4270.999791 -1943.999513 59089.999553
|
||||
-3930.000132 -402.000411 53659.999785
|
||||
4287.999518 -1951.000148 60834.000344
|
||||
1057.999742 2098.999992 53299.999970
|
||||
24.000007 -2810.999989 72560.000497
|
||||
-3570.000037 -280.000196 53954.000365
|
||||
7056.999709 -8415.999536 72020.000349
|
||||
7057.000090 5650.000225 72020.000014
|
||||
4099.000497 4718.000121 55719.999993
|
||||
-7115.000395 24.000272 73099.999724
|
||||
-14476.000166 -3502.000326 63961.000485
|
||||
-3569.999717 6450.999920 53954.000143
|
||||
-1163.000334 -1973.999751 53745.000092
|
||||
4723.999824 -541.000100 72200.000243
|
||||
3940.999990 3899.999923 53350.999622
|
||||
-3127.000218 5257.999652 53659.999673
|
||||
8463.000217 -1382.999504 72019.999695
|
||||
-14232.999844 -3624.000203 67645.000238
|
||||
-7390.999511 -3588.999711 73077.999992
|
||||
-5127.000472 352.999759 72981.000130
|
||||
2099.000363 16.999945 53300.000261
|
||||
-7390.999682 -6480.000469 73077.999642
|
||||
-5387.999952 7999.000376 72920.000277
|
||||
-3569.999553 2524.000332 53954.000210
|
||||
3445.999802 5627.000372 53380.000121
|
||||
-8543.000137 2878.999786 73100.000062
|
||||
-11225.000154 -2878.000184 73429.000219
|
||||
-5444.999752 -4937.000206 72929.999910
|
||||
-3539.000116 3495.999641 72743.000028
|
||||
4724.000434 -1950.999984 72200.000236
|
||||
-5387.999758 7287.000091 72920.000451
|
||||
3694.000162 -1947.999707 53364.999539
|
||||
-14412.000272 -1753.999800 63528.000480
|
||||
4724.000342 8625.000362 72199.999560
|
||||
2341.999734 -1961.000092 53299.999848
|
||||
-2071.999756 4196.000324 53480.000336
|
||||
-8543.000296 -2832.000371 73099.999810
|
||||
-5127.000024 8834.999681 72980.999971
|
||||
-13992.999602 -3825.000472 73548.000110
|
||||
3446.000174 1546.999928 53380.000489
|
||||
-3127.000366 4209.999619 53659.999561
|
||||
-5387.999685 -1258.000068 72920.000033
|
||||
-13720.999529 -8426.000197 73555.999797
|
||||
4135.999975 -1958.000343 56742.000312
|
||||
1058.000030 1057.999685 53299.999642
|
||||
2194.000288 -1954.000142 53438.999837
|
||||
1821.999693 -1961.000245 53300.000177
|
||||
-2486.000272 -2723.000311 72740.000113
|
||||
4251.999519 5994.999969 58825.999706
|
||||
-782.999723 -1966.999702 53480.000385
|
||||
-14184.999503 -3694.000155 69664.999741
|
||||
-7391.000162 -7925.000424 73077.999760
|
||||
3941.000365 3562.000286 53350.999697
|
||||
-5673.000072 -2824.999976 72920.000076
|
||||
-3929.999836 3789.999783 53660.000108
|
||||
4288.000033 5295.999782 60834.000285
|
||||
8463.000290 -4195.999621 72020.000158
|
||||
-1026.999905 2106.000122 53480.000172
|
||||
-14544.000315 6258.000031 62169.999860
|
||||
2098.999845 3140.000130 53300.000384
|
||||
17.000326 2105.999614 53480.000329
|
||||
-2817.999707 -2817.999500 72740.000297
|
||||
-5127.000216 7421.999889 72980.999545
|
||||
-14035.000213 -2961.999816 72026.999857
|
||||
3941.000206 -490.000295 53351.000305
|
||||
-3127.000000 1065.999857 53660.000041
|
||||
-14412.000070 4560.000349 63527.999884
|
||||
-1427.000275 -1616.999797 53744.000069
|
||||
-6126.000265 -2593.999720 73030.000099
|
||||
4099.000391 5762.000184 55719.999589
|
||||
3440.999902 1159.000232 53119.999985
|
||||
23.999963 -7062.000133 72559.999953
|
||||
-3164.999618 3921.000274 53840.999514
|
||||
3940.999690 6263.000241 53351.000160
|
||||
5663.999668 1434.000202 72199.999998
|
||||
3946.000045 -496.000294 54342.999676
|
||||
-3538.999923 7662.999718 72742.999936
|
||||
3946.000069 1557.999781 54343.000397
|
||||
-13992.999519 -7419.000292 73548.000211
|
||||
-14576.000246 -2018.999804 60411.999775
|
||||
4724.000039 2279.999748 72200.000311
|
||||
4253.999732 -5616.999621 72199.999908
|
||||
1940.999753 2619.999683 53447.999667
|
||||
3441.000116 3234.000032 53120.000379
|
||||
-7114.999901 4307.000119 73100.000483
|
||||
4288.000399 4738.000285 60834.000007
|
||||
4253.999724 -2797.000058 72199.999720
|
||||
5664.000222 2843.999541 72200.000437
|
||||
7056.999584 8463.000456 72020.000228
|
||||
-3930.000418 1694.000154 53659.999991
|
||||
-353.999670 -2715.999787 72559.999549
|
||||
-14162.999975 -2781.999699 68944.999901
|
||||
4287.999827 4180.999517 60834.000197
|
||||
-2071.999586 2105.999678 53480.000453
|
||||
-7390.999953 -9370.000271 73077.999510
|
||||
8462.999606 7057.000057 72020.000254
|
||||
7056.999555 2837.000361 72019.999548
|
||||
-7114.999806 8589.999936 73100.000030
|
||||
-5126.999903 -1060.000339 72980.999664
|
||||
8463.000265 -8415.999563 72019.999761
|
||||
-14475.999815 -7732.000263 63960.999905
|
||||
-14411.999736 -2454.999933 63528.000161
|
||||
4253.999680 -4207.000000 72200.000403
|
||||
-5341.000241 -2729.999555 72920.000190
|
||||
2853.000367 -1953.999662 53119.999629
|
||||
-3406.000346 -1973.999690 53659.999516
|
||||
-1775.999547 -2723.000080 72740.000246
|
||||
4217.999913 -1960.999660 58299.999623
|
||||
-12252.999887 -2905.000019 73451.999641
|
||||
-8542.999786 -1404.000473 73099.999728
|
||||
-3126.999630 16.999618 53660.000475
|
||||
4159.999910 1615.999982 57258.000198
|
||||
-2818.000192 -8501.000061 72739.999578
|
||||
-5673.000319 -5673.000048 72919.999599
|
||||
-5126.999657 -352.999916 72981.000008
|
||||
-14543.999526 4873.000287 62170.000355
|
||||
5664.000113 -5617.000339 72200.000484
|
||||
-13992.999970 -6905.000388 73548.000167
|
||||
-3906.999574 -2723.000211 72740.000342
|
||||
-5672.999570 -1399.999715 72920.000026
|
||||
-3569.999982 5890.000467 53954.000331
|
||||
4288.000173 6409.999525 60833.999858
|
||||
-5387.999815 -2682.000374 72920.000431
|
||||
-13971.000415 -3755.000354 71592.999978
|
||||
-3930.000128 1170.000156 53659.999938
|
||||
-1828.000158 -1966.999726 53479.999657
|
||||
17.000335 4196.000427 53479.999613
|
||||
-1427.000066 4924.000037 53743.999863
|
||||
-13721.000451 -9963.000322 73555.999557
|
||||
-5388.000021 3727.000164 72919.999832
|
||||
1941.000051 538.000495 53448.000163
|
||||
4287.999864 836.000460 60833.999839
|
||||
780.999670 -1960.999553 53299.999658
|
||||
-5673.000397 7144.999809 72919.999807
|
||||
-5673.000146 2871.999537 72920.000249
|
||||
533.000383 -1965.000046 53607.999748
|
||||
-13992.999662 -9985.999679 73548.000146
|
||||
4582.999714 -2702.999761 72199.999726
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
7
|
||||
5.51274721097227705 8.87625776353026552 1.95944807904169238
|
||||
9.0973375091665627 3.5350701520269201 4.7238755547204434
|
||||
0.911806739546155987 6.95856700036594145 2.36699662526417143
|
||||
5.36336900378107373 1.05840486239320186 1.22179856797203001
|
||||
0.289239615689291796 9.24621240074391082 2.17110435171762095
|
||||
1.39772879354093327 3.51084799856703622 9.44541630320511771
|
||||
7.31227573940480369 2.67306741439382023 0.511378392640958745
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
5.51275 8.87626 1.95945
|
||||
0.911807 6.95857 2.367
|
||||
5.36337 1.0584 1.2218
|
||||
7.31228 2.67307 0.511378
|
||||
9.09734 3.53507 4.72388
|
||||
1.39773 3.51085 9.44542
|
||||
0.28924 9.24621 2.1711
|
||||
4 5 0
|
||||
5 6 0
|
||||
1 0 6
|
||||
3 2 4
|
||||
4 0 3
|
||||
2 3 1
|
||||
0 1 3
|
||||
2 5 4
|
||||
5 2 1
|
||||
6 5 1
|
||||
|
|
@ -0,0 +1,857 @@
|
|||
856
|
||||
304.000000 483.000000 110.000433
|
||||
173.000000 315.000000 150.000135
|
||||
389.000000 259.000000 110.000009
|
||||
197.000000 341.000000 130.000097
|
||||
390.000000 329.000000 69.999907
|
||||
87.000000 189.000000 119.999588
|
||||
427.000000 391.000000 19.999914
|
||||
219.000000 283.000000 159.999587
|
||||
228.000000 410.000000 149.999687
|
||||
176.000000 356.000000 150.000143
|
||||
36.000000 243.000000 40.000174
|
||||
409.000000 409.000000 9.999581
|
||||
345.000000 395.000000 130.000241
|
||||
378.000000 336.000000 79.999859
|
||||
405.000000 442.000000 29.999878
|
||||
437.000000 388.000000 20.000099
|
||||
385.000000 345.000000 90.000418
|
||||
223.000000 509.000000 10.000330
|
||||
253.000000 62.000000 10.000304
|
||||
339.000000 498.000000 40.000232
|
||||
418.000000 406.000000 20.000279
|
||||
203.000000 86.000000 99.999776
|
||||
96.000000 159.000000 120.000081
|
||||
390.000000 320.000000 69.999762
|
||||
344.000000 362.000000 139.999772
|
||||
157.000000 57.000000 -0.000304
|
||||
130.000000 480.000000 40.000064
|
||||
190.000000 294.000000 160.000245
|
||||
407.000000 398.000000 30.000234
|
||||
396.000000 436.000000 40.000360
|
||||
387.000000 332.000000 49.999562
|
||||
192.000000 317.000000 149.999693
|
||||
90.000000 134.000000 99.999822
|
||||
92.000000 252.000000 130.000028
|
||||
164.000000 251.000000 159.999649
|
||||
161.000000 448.000000 120.000467
|
||||
380.000000 453.000000 50.000039
|
||||
76.000000 423.000000 39.999921
|
||||
410.000000 176.000000 40.000464
|
||||
346.000000 238.000000 140.000280
|
||||
278.000000 464.000000 130.000458
|
||||
318.000000 464.000000 110.000374
|
||||
421.000000 273.000000 39.999857
|
||||
320.000000 85.000000 9.999990
|
||||
230.000000 60.000000 40.000167
|
||||
403.000000 443.000000 9.999941
|
||||
377.000000 278.000000 129.999965
|
||||
211.000000 75.000000 79.999614
|
||||
396.000000 451.000000 19.999695
|
||||
379.000000 323.000000 100.000100
|
||||
138.000000 162.000000 149.999904
|
||||
373.000000 359.000000 119.999709
|
||||
298.000000 154.000000 140.000005
|
||||
377.000000 481.000000 19.999977
|
||||
405.000000 280.000000 99.999667
|
||||
412.000000 329.000000 20.000329
|
||||
392.000000 320.000000 80.000343
|
||||
155.000000 323.000000 159.999924
|
||||
171.000000 323.000000 149.999700
|
||||
70.000000 369.000000 60.000396
|
||||
270.000000 512.000000 100.000031
|
||||
62.000000 359.000000 10.000338
|
||||
401.000000 300.000000 49.999758
|
||||
366.000000 156.000000 99.999742
|
||||
125.000000 289.000000 150.000344
|
||||
306.000000 417.000000 140.000297
|
||||
189.000000 303.000000 160.000009
|
||||
215.000000 339.000000 140.000396
|
||||
346.000000 349.000000 139.999537
|
||||
73.000000 365.000000 69.999577
|
||||
127.000000 77.000000 70.000150
|
||||
108.000000 80.000000 9.999701
|
||||
416.000000 396.000000 29.999763
|
||||
355.000000 471.000000 70.000335
|
||||
383.000000 332.000000 79.999789
|
||||
279.000000 495.000000 109.999962
|
||||
182.000000 392.000000 139.999695
|
||||
418.000000 194.000000 20.000169
|
||||
399.000000 396.000000 49.999602
|
||||
323.000000 406.000000 139.999632
|
||||
401.000000 296.000000 70.000372
|
||||
116.000000 94.000000 90.000421
|
||||
408.000000 302.000000 39.999870
|
||||
398.000000 444.000000 39.999970
|
||||
391.000000 316.000000 59.999679
|
||||
34.000000 233.000000 29.999582
|
||||
406.000000 412.000000 20.000116
|
||||
75.000000 278.000000 109.999973
|
||||
36.000000 251.000000 19.999539
|
||||
387.000000 142.000000 -0.000290
|
||||
415.000000 231.000000 60.000112
|
||||
114.000000 84.000000 59.999969
|
||||
176.000000 309.000000 159.999733
|
||||
104.000000 469.000000 79.999782
|
||||
134.000000 80.000000 80.000475
|
||||
365.000000 453.000000 60.000166
|
||||
76.000000 325.000000 100.000301
|
||||
372.000000 346.000000 120.000425
|
||||
384.000000 160.000000 79.999710
|
||||
352.000000 318.000000 129.999934
|
||||
385.000000 317.000000 40.000493
|
||||
381.000000 319.000000 110.000497
|
||||
103.000000 84.000000 19.999857
|
||||
400.000000 406.000000 40.000279
|
||||
354.000000 491.000000 60.000459
|
||||
419.000000 282.000000 10.000487
|
||||
203.000000 507.000000 60.000487
|
||||
235.000000 510.000000 89.999674
|
||||
444.000000 387.000000 29.999811
|
||||
391.000000 313.000000 99.999893
|
||||
398.000000 450.000000 9.999883
|
||||
131.000000 300.000000 150.000225
|
||||
83.000000 110.000000 40.000016
|
||||
187.000000 503.000000 -0.000434
|
||||
155.000000 323.000000 150.000140
|
||||
212.000000 54.000000 19.999945
|
||||
97.000000 291.000000 129.999725
|
||||
148.000000 308.000000 149.999883
|
||||
343.000000 211.000000 139.999546
|
||||
198.000000 328.000000 120.000389
|
||||
431.000000 405.000000 19.999725
|
||||
400.000000 300.000000 89.999605
|
||||
400.000000 184.000000 80.000122
|
||||
362.000000 340.000000 129.999568
|
||||
347.000000 272.000000 140.000053
|
||||
104.000000 251.000000 140.000464
|
||||
71.000000 131.000000 59.999648
|
||||
110.000000 94.000000 79.999923
|
||||
374.000000 479.000000 40.000239
|
||||
372.000000 328.000000 99.999759
|
||||
374.000000 456.000000 49.999600
|
||||
217.000000 466.000000 129.999695
|
||||
207.000000 340.000000 119.999813
|
||||
394.000000 298.000000 109.999600
|
||||
398.000000 158.000000 20.000463
|
||||
376.000000 422.000000 69.999535
|
||||
419.000000 204.000000 39.999848
|
||||
397.000000 425.000000 39.999772
|
||||
425.000000 394.000000 -0.000166
|
||||
395.000000 469.000000 0.000180
|
||||
203.000000 347.000000 130.000090
|
||||
175.000000 356.000000 159.999756
|
||||
337.000000 482.000000 79.999700
|
||||
403.000000 290.000000 100.000395
|
||||
384.000000 441.000000 59.999825
|
||||
103.000000 268.000000 139.999921
|
||||
88.000000 158.000000 110.000417
|
||||
420.000000 264.000000 49.999543
|
||||
394.000000 309.000000 59.999763
|
||||
403.000000 385.000000 49.999907
|
||||
398.000000 274.000000 109.999683
|
||||
398.000000 396.000000 30.000477
|
||||
188.000000 376.000000 149.999695
|
||||
251.000000 467.000000 129.999727
|
||||
410.000000 173.000000 -0.000375
|
||||
419.000000 388.000000 30.000459
|
||||
53.000000 178.000000 70.000064
|
||||
386.000000 456.000000 29.999720
|
||||
230.000000 432.000000 139.999657
|
||||
209.000000 102.000000 119.999952
|
||||
399.000000 261.000000 100.000481
|
||||
34.000000 263.000000 9.999982
|
||||
387.000000 185.000000 100.000227
|
||||
166.000000 200.000000 160.000091
|
||||
397.000000 459.000000 10.000459
|
||||
112.000000 355.000000 119.999623
|
||||
151.000000 416.000000 119.999934
|
||||
387.000000 396.000000 70.000126
|
||||
414.000000 205.000000 59.999887
|
||||
84.000000 431.000000 49.999623
|
||||
54.000000 333.000000 40.000151
|
||||
226.000000 489.000000 120.000098
|
||||
210.000000 331.000000 139.999959
|
||||
62.000000 355.000000 59.999599
|
||||
128.000000 201.000000 149.999744
|
||||
399.000000 310.000000 40.000499
|
||||
285.000000 137.000000 129.999978
|
||||
271.000000 90.000000 79.999948
|
||||
392.000000 406.000000 39.999814
|
||||
126.000000 71.000000 19.999775
|
||||
395.000000 316.000000 69.999631
|
||||
196.000000 340.000000 140.000123
|
||||
172.000000 101.000000 119.999703
|
||||
386.000000 386.000000 20.000299
|
||||
412.000000 373.000000 20.000375
|
||||
368.000000 337.000000 119.999973
|
||||
192.000000 56.000000 29.999926
|
||||
326.000000 425.000000 129.999868
|
||||
328.000000 124.000000 100.000456
|
||||
419.000000 252.000000 60.000317
|
||||
101.000000 187.000000 130.000292
|
||||
282.000000 510.000000 40.000476
|
||||
48.000000 169.000000 19.999612
|
||||
368.000000 263.000000 130.000181
|
||||
106.000000 86.000000 40.000336
|
||||
137.000000 485.000000 60.000020
|
||||
337.000000 498.000000 10.000284
|
||||
179.000000 390.000000 149.999695
|
||||
57.000000 165.000000 60.000363
|
||||
370.000000 319.000000 119.999686
|
||||
159.000000 305.000000 159.999920
|
||||
380.000000 410.000000 69.999540
|
||||
66.000000 161.000000 80.000411
|
||||
211.000000 325.000000 120.000116
|
||||
207.000000 322.000000 110.000247
|
||||
136.000000 139.000000 139.999844
|
||||
425.000000 364.000000 0.000175
|
||||
46.000000 181.000000 50.000130
|
||||
407.000000 374.000000 39.999586
|
||||
410.000000 170.000000 9.999842
|
||||
416.000000 288.000000 40.000290
|
||||
301.000000 198.000000 149.999552
|
||||
368.000000 431.000000 79.999967
|
||||
95.000000 115.000000 89.999527
|
||||
190.000000 504.000000 40.000392
|
||||
431.000000 381.000000 39.999951
|
||||
389.000000 385.000000 60.000331
|
||||
111.000000 236.000000 139.999941
|
||||
305.000000 86.000000 49.999887
|
||||
174.000000 344.000000 150.000400
|
||||
406.000000 290.000000 79.999632
|
||||
411.000000 176.000000 30.000029
|
||||
403.000000 401.000000 0.000395
|
||||
186.000000 371.000000 149.999597
|
||||
396.000000 378.000000 19.999972
|
||||
407.000000 393.000000 50.000248
|
||||
314.000000 84.000000 30.000111
|
||||
82.000000 442.000000 40.000237
|
||||
190.000000 63.000000 59.999546
|
||||
418.000000 280.000000 50.000063
|
||||
107.000000 109.000000 99.999534
|
||||
429.000000 377.000000 20.000148
|
||||
241.000000 399.000000 149.999519
|
||||
231.000000 480.000000 119.999633
|
||||
293.000000 494.000000 110.000320
|
||||
386.000000 395.000000 50.000398
|
||||
189.000000 304.000000 150.000129
|
||||
359.000000 426.000000 100.000239
|
||||
404.000000 445.000000 20.000042
|
||||
390.000000 362.000000 60.000269
|
||||
255.000000 393.000000 149.999647
|
||||
266.000000 511.000000 60.000270
|
||||
445.000000 377.000000 19.999922
|
||||
238.000000 512.000000 80.000183
|
||||
263.000000 74.000000 60.000051
|
||||
345.000000 327.000000 130.000341
|
||||
297.000000 510.000000 69.999558
|
||||
204.000000 336.000000 110.000464
|
||||
93.000000 273.000000 130.000439
|
||||
156.000000 143.000000 149.999849
|
||||
214.000000 414.000000 150.000013
|
||||
208.000000 475.000000 130.000315
|
||||
174.000000 350.000000 149.999545
|
||||
406.000000 179.000000 59.999608
|
||||
397.000000 418.000000 39.999645
|
||||
197.000000 340.000000 109.999887
|
||||
305.000000 95.000000 70.000078
|
||||
223.000000 451.000000 130.000063
|
||||
67.000000 291.000000 99.999993
|
||||
374.000000 461.000000 59.999831
|
||||
395.000000 317.000000 89.999780
|
||||
140.000000 482.000000 100.000201
|
||||
364.000000 361.000000 129.999692
|
||||
396.000000 462.000000 0.000002
|
||||
403.000000 421.000000 10.000436
|
||||
373.000000 174.000000 109.999736
|
||||
393.000000 458.000000 19.999949
|
||||
379.000000 456.000000 39.999971
|
||||
396.000000 240.000000 100.000184
|
||||
71.000000 118.000000 20.000391
|
||||
364.000000 427.000000 90.000438
|
||||
390.000000 440.000000 49.999887
|
||||
44.000000 183.000000 0.000039
|
||||
75.000000 348.000000 90.000315
|
||||
405.000000 315.000000 0.000238
|
||||
320.000000 96.000000 60.000082
|
||||
85.000000 447.000000 50.000024
|
||||
391.000000 313.000000 40.000474
|
||||
303.000000 506.000000 29.999976
|
||||
346.000000 147.000000 110.000432
|
||||
203.000000 323.000000 120.000169
|
||||
185.000000 502.000000 90.000110
|
||||
135.000000 94.000000 100.000385
|
||||
385.000000 326.000000 99.999934
|
||||
388.000000 474.000000 39.999867
|
||||
43.000000 221.000000 70.000067
|
||||
415.000000 267.000000 79.999572
|
||||
401.000000 300.000000 80.000252
|
||||
54.000000 190.000000 79.999547
|
||||
388.000000 414.000000 49.999501
|
||||
400.000000 435.000000 29.999929
|
||||
179.000000 325.000000 149.999681
|
||||
390.000000 475.000000 20.000480
|
||||
210.000000 329.000000 110.000432
|
||||
124.000000 264.000000 149.999656
|
||||
380.000000 357.000000 110.000447
|
||||
35.000000 221.000000 0.000130
|
||||
422.000000 256.000000 -0.000478
|
||||
297.000000 502.000000 100.000074
|
||||
387.000000 404.000000 40.000484
|
||||
121.000000 142.000000 129.999588
|
||||
363.000000 488.000000 49.999644
|
||||
81.000000 441.000000 -0.000224
|
||||
310.000000 125.000000 110.000381
|
||||
202.000000 330.000000 129.999580
|
||||
154.000000 79.000000 90.000488
|
||||
349.000000 281.000000 139.999939
|
||||
266.000000 452.000000 139.999876
|
||||
419.000000 273.000000 60.000253
|
||||
60.000000 291.000000 90.000373
|
||||
53.000000 160.000000 30.000462
|
||||
401.000000 327.000000 29.999868
|
||||
388.000000 333.000000 90.000054
|
||||
409.000000 393.000000 39.999876
|
||||
329.000000 501.000000 19.999774
|
||||
66.000000 203.000000 99.999570
|
||||
84.000000 101.000000 0.000252
|
||||
378.000000 372.000000 110.000496
|
||||
177.000000 378.000000 160.000055
|
||||
378.000000 208.000000 120.000080
|
||||
39.000000 260.000000 49.999598
|
||||
113.000000 439.000000 90.000322
|
||||
386.000000 404.000000 50.000352
|
||||
88.000000 335.000000 110.000457
|
||||
408.000000 239.000000 80.000309
|
||||
385.000000 339.000000 79.999563
|
||||
65.000000 359.000000 -0.000186
|
||||
388.000000 339.000000 70.000118
|
||||
194.000000 479.000000 130.000054
|
||||
205.000000 359.000000 150.000249
|
||||
308.000000 366.000000 149.999771
|
||||
411.000000 305.000000 9.999644
|
||||
336.000000 473.000000 90.000141
|
||||
107.000000 380.000000 100.000196
|
||||
413.000000 210.000000 69.999762
|
||||
417.000000 191.000000 9.999593
|
||||
422.000000 243.000000 30.000485
|
||||
290.000000 76.000000 39.999602
|
||||
387.000000 321.000000 99.999700
|
||||
107.000000 439.000000 79.999777
|
||||
240.000000 254.000000 160.000437
|
||||
422.000000 265.000000 9.999794
|
||||
49.000000 243.000000 79.999624
|
||||
396.000000 392.000000 29.999964
|
||||
69.000000 389.000000 9.999977
|
||||
393.000000 327.000000 79.999595
|
||||
383.000000 337.000000 90.000313
|
||||
124.000000 155.000000 139.999884
|
||||
390.000000 328.000000 89.999610
|
||||
388.000000 310.000000 109.999974
|
||||
401.000000 437.000000 20.000420
|
||||
181.000000 305.000000 149.999817
|
||||
122.000000 121.000000 119.999998
|
||||
81.000000 441.000000 20.000065
|
||||
107.000000 303.000000 129.999801
|
||||
51.000000 295.000000 60.000192
|
||||
97.000000 458.000000 70.000150
|
||||
112.000000 293.000000 140.000309
|
||||
392.000000 147.000000 29.999844
|
||||
395.000000 458.000000 -0.000345
|
||||
396.000000 471.000000 20.000089
|
||||
205.000000 445.000000 139.999722
|
||||
392.000000 425.000000 49.999927
|
||||
407.000000 291.000000 60.000455
|
||||
364.000000 329.000000 109.999573
|
||||
334.000000 449.000000 110.000287
|
||||
377.000000 296.000000 129.999513
|
||||
202.000000 396.000000 149.999929
|
||||
68.000000 386.000000 19.999990
|
||||
376.000000 332.000000 89.999690
|
||||
442.000000 399.000000 20.000326
|
||||
388.000000 295.000000 120.000295
|
||||
387.000000 341.000000 50.000408
|
||||
112.000000 81.000000 49.999621
|
||||
410.000000 386.000000 50.000226
|
||||
59.000000 311.000000 80.000359
|
||||
330.000000 499.000000 80.000308
|
||||
199.000000 332.000000 110.000351
|
||||
202.000000 332.000000 140.000116
|
||||
38.000000 196.000000 30.000366
|
||||
206.000000 407.000000 150.000108
|
||||
385.000000 458.000000 39.999801
|
||||
178.000000 370.000000 150.000203
|
||||
74.000000 419.000000 10.000074
|
||||
417.000000 405.000000 29.999702
|
||||
47.000000 272.000000 69.999870
|
||||
164.000000 373.000000 160.000203
|
||||
408.000000 409.000000 29.999548
|
||||
376.000000 335.000000 99.999615
|
||||
399.000000 396.000000 19.999683
|
||||
334.000000 491.000000 79.999633
|
||||
379.000000 478.000000 -0.000167
|
||||
303.000000 471.000000 120.000457
|
||||
291.000000 478.000000 120.000436
|
||||
400.000000 433.000000 0.000031
|
||||
90.000000 450.000000 59.999865
|
||||
319.000000 291.000000 150.000192
|
||||
33.000000 256.000000 20.000497
|
||||
445.000000 393.000000 10.000151
|
||||
341.000000 497.000000 69.999978
|
||||
390.000000 240.000000 110.000036
|
||||
276.000000 69.000000 19.999504
|
||||
173.000000 57.000000 40.000059
|
||||
209.000000 359.000000 139.999774
|
||||
387.000000 392.000000 20.000481
|
||||
318.000000 503.000000 89.999523
|
||||
378.000000 478.000000 39.999991
|
||||
84.000000 285.000000 119.999551
|
||||
337.000000 335.000000 140.000134
|
||||
117.000000 372.000000 109.999629
|
||||
359.000000 458.000000 79.999820
|
||||
146.000000 67.000000 60.000076
|
||||
377.000000 406.000000 90.000477
|
||||
381.000000 316.000000 109.999684
|
||||
48.000000 183.000000 60.000220
|
||||
302.000000 452.000000 130.000413
|
||||
138.000000 100.000000 109.999758
|
||||
268.000000 511.000000 20.000319
|
||||
210.000000 324.000000 109.999505
|
||||
331.000000 180.000000 139.999527
|
||||
354.000000 422.000000 109.999787
|
||||
287.000000 509.000000 80.000157
|
||||
217.000000 437.000000 139.999915
|
||||
348.000000 294.000000 139.999826
|
||||
145.000000 109.000000 119.999748
|
||||
86.000000 413.000000 69.999800
|
||||
407.000000 365.000000 39.999844
|
||||
393.000000 458.000000 29.999694
|
||||
180.000000 409.000000 139.999597
|
||||
79.000000 429.000000 0.000369
|
||||
385.000000 468.000000 50.000300
|
||||
167.000000 68.000000 70.000425
|
||||
424.000000 392.000000 40.000496
|
||||
334.000000 328.000000 139.999843
|
||||
88.000000 115.000000 79.999614
|
||||
185.000000 284.000000 160.000326
|
||||
178.000000 122.000000 140.000324
|
||||
96.000000 434.000000 69.999906
|
||||
138.000000 390.000000 119.999927
|
||||
379.000000 449.000000 60.000479
|
||||
383.000000 360.000000 100.000229
|
||||
394.000000 447.000000 40.000372
|
||||
429.000000 374.000000 0.000267
|
||||
250.000000 447.000000 140.000291
|
||||
374.000000 395.000000 99.999977
|
||||
421.000000 400.000000 29.999804
|
||||
173.000000 498.000000 100.000223
|
||||
112.000000 80.000000 29.999608
|
||||
397.000000 307.000000 69.999990
|
||||
94.000000 95.000000 30.000227
|
||||
365.000000 214.000000 130.000457
|
||||
69.000000 124.000000 -0.000140
|
||||
214.000000 342.000000 129.999922
|
||||
378.000000 324.000000 50.000407
|
||||
170.000000 92.000000 110.000496
|
||||
396.000000 206.000000 99.999936
|
||||
385.000000 359.000000 89.999911
|
||||
262.000000 483.000000 120.000212
|
||||
73.000000 418.000000 0.000094
|
||||
263.000000 117.000000 120.000412
|
||||
392.000000 469.000000 40.000013
|
||||
203.000000 340.000000 120.000411
|
||||
206.000000 141.000000 149.999614
|
||||
65.000000 250.000000 100.000372
|
||||
408.000000 263.000000 89.999711
|
||||
356.000000 326.000000 120.000249
|
||||
390.000000 318.000000 90.000241
|
||||
357.000000 369.000000 129.999641
|
||||
200.000000 332.000000 149.999692
|
||||
356.000000 314.000000 130.000478
|
||||
206.000000 335.000000 150.000105
|
||||
388.000000 349.000000 79.999724
|
||||
422.000000 361.000000 29.999572
|
||||
336.000000 384.000000 139.999898
|
||||
371.000000 477.000000 49.999938
|
||||
383.000000 332.000000 70.000333
|
||||
358.000000 117.000000 49.999606
|
||||
228.000000 511.000000 109.999685
|
||||
391.000000 449.000000 50.000425
|
||||
210.000000 331.000000 130.000294
|
||||
414.000000 332.000000 10.000205
|
||||
79.000000 429.000000 20.000389
|
||||
425.000000 348.000000 19.999522
|
||||
188.000000 500.000000 120.000132
|
||||
414.000000 395.000000 19.999694
|
||||
333.000000 502.000000 0.000474
|
||||
163.000000 74.000000 80.000256
|
||||
414.000000 352.000000 0.000273
|
||||
396.000000 471.000000 29.999511
|
||||
161.000000 113.000000 130.000121
|
||||
38.000000 271.000000 0.000064
|
||||
406.000000 390.000000 29.999509
|
||||
255.000000 136.000000 140.000180
|
||||
143.000000 362.000000 130.000256
|
||||
205.000000 348.000000 149.999703
|
||||
370.000000 484.000000 39.999679
|
||||
361.000000 394.000000 119.999961
|
||||
236.000000 511.000000 69.999764
|
||||
161.000000 344.000000 150.000324
|
||||
271.000000 99.000000 100.000087
|
||||
347.000000 129.000000 90.000352
|
||||
383.000000 473.000000 20.000348
|
||||
418.000000 261.000000 69.999636
|
||||
342.000000 477.000000 80.000249
|
||||
240.000000 212.000000 159.999945
|
||||
93.000000 387.000000 89.999525
|
||||
214.000000 335.000000 130.000266
|
||||
434.000000 365.000000 19.999711
|
||||
377.000000 248.000000 120.000476
|
||||
84.000000 227.000000 120.000431
|
||||
391.000000 462.000000 39.999559
|
||||
390.000000 473.000000 -0.000072
|
||||
442.000000 378.000000 29.999932
|
||||
357.000000 126.000000 69.999812
|
||||
64.000000 143.000000 49.999661
|
||||
339.000000 310.000000 139.999787
|
||||
376.000000 446.000000 69.999556
|
||||
421.000000 272.000000 29.999579
|
||||
383.000000 398.000000 79.999947
|
||||
377.000000 339.000000 90.000050
|
||||
357.000000 461.000000 70.000494
|
||||
381.000000 346.000000 99.999989
|
||||
198.000000 335.000000 129.999550
|
||||
383.000000 383.000000 89.999876
|
||||
392.000000 395.000000 50.000489
|
||||
385.000000 318.000000 50.000068
|
||||
196.000000 506.000000 109.999506
|
||||
183.000000 138.000000 150.000295
|
||||
434.000000 396.000000 0.000059
|
||||
38.000000 219.000000 50.000182
|
||||
390.000000 284.000000 120.000395
|
||||
365.000000 347.000000 129.999830
|
||||
74.000000 118.000000 30.000426
|
||||
207.000000 122.000000 140.000380
|
||||
113.000000 116.000000 109.999784
|
||||
416.000000 292.000000 30.000362
|
||||
414.000000 279.000000 80.000030
|
||||
441.000000 386.000000 0.000095
|
||||
144.000000 337.000000 139.999525
|
||||
386.000000 148.000000 60.000351
|
||||
93.000000 409.000000 79.999575
|
||||
170.000000 409.000000 129.999719
|
||||
104.000000 348.000000 119.999514
|
||||
377.000000 416.000000 80.000066
|
||||
392.000000 410.000000 40.000224
|
||||
322.000000 258.000000 150.000354
|
||||
387.000000 142.000000 39.999842
|
||||
378.000000 327.000000 109.999670
|
||||
403.000000 268.000000 99.999822
|
||||
219.000000 183.000000 160.000476
|
||||
196.000000 361.000000 150.000187
|
||||
436.000000 397.000000 30.000102
|
||||
187.000000 334.000000 150.000416
|
||||
361.000000 476.000000 60.000302
|
||||
265.000000 462.000000 129.999811
|
||||
357.000000 334.000000 129.999518
|
||||
397.000000 317.000000 80.000196
|
||||
201.000000 110.000000 129.999544
|
||||
170.000000 292.000000 159.999874
|
||||
376.000000 342.000000 110.000096
|
||||
288.000000 382.000000 150.000470
|
||||
385.000000 328.000000 40.000208
|
||||
380.000000 263.000000 120.000184
|
||||
279.000000 96.000000 90.000454
|
||||
298.000000 508.000000 10.000017
|
||||
391.000000 274.000000 119.999504
|
||||
80.000000 121.000000 70.000114
|
||||
414.000000 240.000000 70.000303
|
||||
72.000000 385.000000 50.000489
|
||||
312.000000 443.000000 129.999958
|
||||
381.000000 307.000000 119.999893
|
||||
147.000000 60.000000 29.999771
|
||||
233.000000 512.000000 49.999755
|
||||
129.000000 479.000000 69.999985
|
||||
383.000000 474.000000 -0.000300
|
||||
119.000000 474.000000 50.000440
|
||||
162.000000 87.000000 99.999822
|
||||
388.000000 320.000000 60.000475
|
||||
208.000000 92.000000 110.000454
|
||||
402.000000 441.000000 -0.000434
|
||||
247.000000 61.000000 30.000254
|
||||
60.000000 177.000000 89.999508
|
||||
375.000000 338.000000 100.000112
|
||||
388.000000 475.000000 30.000200
|
||||
169.000000 361.000000 150.000305
|
||||
73.000000 138.000000 69.999613
|
||||
151.000000 130.000000 140.000243
|
||||
292.000000 428.000000 139.999652
|
||||
43.000000 288.000000 40.000209
|
||||
411.000000 196.000000 69.999886
|
||||
191.000000 440.000000 139.999870
|
||||
188.000000 393.000000 150.000062
|
||||
379.000000 331.000000 100.000426
|
||||
421.000000 211.000000 10.000373
|
||||
151.000000 489.000000 110.000018
|
||||
214.000000 501.000000 120.000350
|
||||
186.000000 475.000000 130.000205
|
||||
119.000000 171.000000 139.999644
|
||||
166.000000 495.000000 49.999638
|
||||
94.000000 139.000000 110.000263
|
||||
361.000000 113.000000 30.000475
|
||||
287.000000 462.000000 129.999600
|
||||
119.000000 472.000000 0.000324
|
||||
336.000000 499.000000 59.999701
|
||||
397.000000 309.000000 79.999503
|
||||
396.000000 468.000000 9.999539
|
||||
418.000000 219.000000 50.000021
|
||||
188.000000 53.000000 9.999892
|
||||
317.000000 484.000000 99.999771
|
||||
87.000000 99.000000 9.999789
|
||||
440.000000 400.000000 10.000026
|
||||
77.000000 414.000000 50.000086
|
||||
59.000000 334.000000 69.999692
|
||||
389.000000 473.000000 10.000131
|
||||
93.000000 364.000000 99.999586
|
||||
191.000000 380.000000 140.000324
|
||||
397.000000 463.000000 20.000440
|
||||
314.000000 83.000000 -0.000144
|
||||
404.000000 252.000000 89.999526
|
||||
192.000000 55.000000 0.000057
|
||||
37.000000 211.000000 39.999811
|
||||
408.000000 337.000000 0.000463
|
||||
386.000000 321.000000 50.000145
|
||||
57.000000 307.000000 69.999726
|
||||
399.000000 434.000000 9.999597
|
||||
440.000000 394.000000 0.000167
|
||||
194.000000 347.000000 139.999819
|
||||
187.000000 359.000000 160.000408
|
||||
82.000000 430.000000 30.000265
|
||||
292.000000 510.000000 90.000293
|
||||
179.000000 291.000000 160.000422
|
||||
346.000000 484.000000 69.999785
|
||||
433.000000 395.000000 19.999927
|
||||
238.000000 463.000000 129.999988
|
||||
431.000000 404.000000 10.000165
|
||||
125.000000 346.000000 130.000258
|
||||
364.000000 483.000000 50.000249
|
||||
152.000000 60.000000 10.000471
|
||||
412.000000 390.000000 50.000296
|
||||
167.000000 492.000000 119.999873
|
||||
162.000000 360.000000 140.000440
|
||||
76.000000 394.000000 60.000355
|
||||
404.000000 389.000000 0.000108
|
||||
131.000000 68.000000 10.000393
|
||||
79.000000 430.000000 9.999539
|
||||
414.000000 282.000000 59.999976
|
||||
171.000000 344.000000 160.000494
|
||||
140.000000 307.000000 150.000051
|
||||
371.000000 276.000000 130.000475
|
||||
410.000000 320.000000 9.999772
|
||||
399.000000 300.000000 60.000152
|
||||
410.000000 275.000000 90.000213
|
||||
178.000000 501.000000 69.999844
|
||||
396.000000 463.000000 29.999717
|
||||
270.000000 511.000000 0.000287
|
||||
105.000000 365.000000 110.000111
|
||||
36.000000 263.000000 29.999728
|
||||
42.000000 269.000000 60.000204
|
||||
152.000000 382.000000 129.999554
|
||||
139.000000 124.000000 129.999830
|
||||
178.000000 499.000000 9.999512
|
||||
380.000000 329.000000 60.000364
|
||||
195.000000 398.000000 149.999704
|
||||
105.000000 138.000000 120.000289
|
||||
130.000000 480.000000 19.999848
|
||||
241.000000 504.000000 110.000227
|
||||
249.000000 61.000000 0.000215
|
||||
149.000000 63.000000 50.000394
|
||||
435.000000 381.000000 19.999612
|
||||
370.000000 120.000000 19.999582
|
||||
395.000000 363.000000 50.000173
|
||||
390.000000 455.000000 0.000083
|
||||
345.000000 465.000000 89.999529
|
||||
321.000000 451.000000 120.000069
|
||||
232.000000 72.000000 69.999566
|
||||
78.000000 441.000000 10.000433
|
||||
411.000000 254.000000 79.999644
|
||||
349.000000 104.000000 9.999972
|
||||
40.000000 224.000000 59.999868
|
||||
401.000000 417.000000 30.000379
|
||||
55.000000 328.000000 60.000186
|
||||
136.000000 66.000000 39.999869
|
||||
387.000000 459.000000 19.999694
|
||||
238.000000 120.000000 129.999648
|
||||
380.000000 232.000000 119.999852
|
||||
387.000000 336.000000 59.999680
|
||||
386.000000 316.000000 100.000192
|
||||
202.000000 323.000000 110.000169
|
||||
421.000000 243.000000 39.999865
|
||||
378.000000 477.000000 19.999946
|
||||
403.000000 407.000000 0.000441
|
||||
117.000000 473.000000 10.000461
|
||||
388.000000 454.000000 40.000397
|
||||
36.000000 209.000000 9.999788
|
||||
344.000000 158.000000 120.000283
|
||||
167.000000 319.000000 160.000206
|
||||
80.000000 432.000000 39.999684
|
||||
124.000000 318.000000 139.999804
|
||||
379.000000 285.000000 130.000148
|
||||
420.000000 205.000000 29.999982
|
||||
364.000000 457.000000 60.000173
|
||||
314.000000 319.000000 150.000372
|
||||
271.000000 387.000000 149.999929
|
||||
405.000000 324.000000 -0.000038
|
||||
393.000000 305.000000 49.999780
|
||||
380.000000 472.000000 50.000100
|
||||
392.000000 455.000000 10.000360
|
||||
430.000000 366.000000 30.000433
|
||||
88.000000 433.000000 60.000203
|
||||
400.000000 426.000000 20.000350
|
||||
198.000000 506.000000 19.999553
|
||||
369.000000 321.000000 109.999993
|
||||
389.000000 376.000000 70.000300
|
||||
447.000000 391.000000 19.999590
|
||||
78.000000 255.000000 120.000420
|
||||
201.000000 310.000000 150.000380
|
||||
385.000000 330.000000 99.999671
|
||||
313.000000 506.000000 50.000090
|
||||
398.000000 286.000000 110.000315
|
||||
366.000000 325.000000 119.999806
|
||||
431.000000 389.000000 39.999680
|
||||
71.000000 122.000000 9.999706
|
||||
416.000000 393.000000 -0.000388
|
||||
339.000000 98.000000 40.000373
|
||||
354.000000 120.000000 59.999789
|
||||
163.000000 480.000000 119.999792
|
||||
209.000000 78.000000 90.000471
|
||||
340.000000 454.000000 100.000347
|
||||
344.000000 120.000000 79.999566
|
||||
34.000000 221.000000 20.000076
|
||||
130.000000 440.000000 100.000378
|
||||
367.000000 328.000000 100.000402
|
||||
372.000000 485.000000 29.999664
|
||||
35.000000 247.000000 -0.000266
|
||||
230.000000 454.000000 130.000398
|
||||
155.000000 314.000000 150.000438
|
||||
386.000000 168.000000 89.999942
|
||||
423.000000 398.000000 20.000409
|
||||
252.000000 68.000000 49.999609
|
||||
405.000000 314.000000 30.000086
|
||||
78.000000 140.000000 90.000406
|
||||
373.000000 453.000000 60.000142
|
||||
159.000000 328.000000 150.000142
|
||||
74.000000 417.000000 30.000409
|
||||
330.000000 91.000000 20.000081
|
||||
388.000000 332.000000 80.000109
|
||||
385.000000 328.000000 60.000013
|
||||
174.000000 447.000000 130.000073
|
||||
316.000000 226.000000 149.999931
|
||||
393.000000 453.000000 30.000415
|
||||
361.000000 321.000000 119.999624
|
||||
376.000000 465.000000 60.000467
|
||||
366.000000 448.000000 79.999941
|
||||
58.000000 346.000000 50.000010
|
||||
391.000000 384.000000 50.000228
|
||||
162.000000 396.000000 129.999672
|
||||
425.000000 378.000000 40.000076
|
||||
421.000000 278.000000 -0.000240
|
||||
179.000000 381.000000 150.000273
|
||||
355.000000 483.000000 60.000125
|
||||
82.000000 442.000000 29.999998
|
||||
83.000000 108.000000 50.000310
|
||||
407.000000 175.000000 49.999596
|
||||
74.000000 418.000000 19.999690
|
||||
132.000000 415.000000 109.999606
|
||||
327.000000 489.000000 90.000109
|
||||
408.000000 211.000000 79.999683
|
||||
416.000000 201.000000 50.000427
|
||||
69.000000 380.000000 40.000280
|
||||
235.000000 151.000000 150.000472
|
||||
369.000000 307.000000 130.000229
|
||||
396.000000 164.000000 70.000265
|
||||
308.000000 338.000000 149.999970
|
||||
175.000000 330.000000 159.999778
|
||||
150.000000 349.000000 139.999937
|
||||
421.000000 219.000000 -0.000068
|
||||
444.000000 384.000000 9.999661
|
||||
407.000000 335.000000 29.999975
|
||||
123.000000 480.000000 90.000020
|
||||
388.000000 207.000000 110.000124
|
||||
190.000000 372.000000 140.000446
|
||||
127.000000 482.000000 30.000090
|
||||
276.000000 476.000000 120.000370
|
||||
413.000000 289.000000 49.999591
|
||||
240.000000 510.000000 30.000054
|
||||
410.000000 316.000000 20.000107
|
||||
354.000000 109.000000 -0.000420
|
||||
56.000000 226.000000 90.000305
|
||||
55.000000 346.000000 20.000297
|
||||
373.000000 329.000000 109.999831
|
||||
421.000000 269.000000 20.000125
|
||||
417.000000 194.000000 -0.000244
|
||||
377.000000 477.000000 10.000096
|
||||
311.000000 136.000000 120.000023
|
||||
355.000000 326.000000 130.000433
|
||||
84.000000 110.000000 60.000454
|
||||
202.000000 506.000000 80.000296
|
||||
398.000000 392.000000 0.000118
|
||||
261.000000 501.000000 110.000266
|
||||
386.000000 140.000000 10.000112
|
||||
75.000000 210.000000 110.000483
|
||||
418.000000 392.000000 39.999772
|
||||
47.000000 172.000000 39.999530
|
||||
201.000000 61.000000 50.000348
|
||||
174.000000 426.000000 129.999769
|
||||
406.000000 287.000000 89.999588
|
||||
406.000000 294.000000 50.000482
|
||||
178.000000 464.000000 129.999690
|
||||
379.000000 481.000000 0.000359
|
||||
66.000000 135.000000 40.000472
|
||||
439.000000 380.000000 -0.000057
|
||||
410.000000 300.000000 0.000483
|
||||
400.000000 198.000000 90.000463
|
||||
396.000000 305.000000 99.999628
|
||||
112.000000 327.000000 129.999537
|
||||
400.000000 351.000000 39.999731
|
||||
285.000000 445.000000 140.000481
|
||||
194.000000 345.000000 120.000109
|
||||
395.000000 373.000000 49.999714
|
||||
417.000000 277.000000 69.999982
|
||||
220.000000 511.000000 100.000036
|
||||
368.000000 181.000000 119.999800
|
||||
330.000000 162.000000 130.000194
|
||||
355.000000 188.000000 130.000376
|
||||
158.000000 58.000000 20.000298
|
||||
402.000000 419.000000 0.000043
|
||||
389.000000 147.000000 50.000103
|
||||
77.000000 161.000000 99.999915
|
||||
99.000000 98.000000 69.999881
|
||||
383.000000 472.000000 10.000356
|
||||
123.000000 366.000000 120.000131
|
||||
109.000000 78.000000 -0.000493
|
||||
441.000000 394.000000 29.999848
|
||||
118.000000 405.000000 100.000021
|
||||
148.000000 454.000000 109.999506
|
||||
416.000000 405.000000 10.000422
|
||||
214.000000 331.000000 120.000073
|
||||
377.000000 481.000000 9.999558
|
||||
381.000000 413.000000 59.999620
|
||||
400.000000 448.000000 30.000243
|
||||
185.000000 358.000000 149.999663
|
||||
194.000000 362.000000 139.999629
|
||||
184.000000 183.000000 160.000453
|
||||
391.000000 348.000000 50.000085
|
||||
378.000000 477.000000 30.000336
|
||||
314.000000 349.000000 150.000272
|
||||
159.000000 302.000000 150.000093
|
||||
70.000000 396.000000 29.999689
|
||||
186.000000 428.000000 140.000092
|
||||
384.000000 460.000000 50.000420
|
||||
240.000000 438.000000 139.999721
|
||||
384.000000 426.000000 59.999785
|
||||
396.000000 389.000000 50.000117
|
||||
210.000000 348.000000 139.999537
|
||||
46.000000 171.000000 9.999837
|
||||
173.000000 498.000000 30.000387
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,384 @@
|
|||
383
|
||||
27.850301 -17.970299 134.875148
|
||||
-30.421501 -21.008499 144.254249
|
||||
0.114400 -1.784400 50.132200
|
||||
-18.264400 12.484400 101.627799
|
||||
17.396600 -1.906600 99.023301
|
||||
21.063600 -19.043600 132.826796
|
||||
29.463299 -5.123300 142.671651
|
||||
28.427000 -18.197000 149.973500
|
||||
20.364199 6.405800 114.632099
|
||||
14.811500 -9.141500 105.235749
|
||||
19.542701 -11.952700 123.446353
|
||||
-15.004000 -8.116000 98.497997
|
||||
-10.693900 -4.016100 58.998050
|
||||
-24.134400 11.784400 107.332801
|
||||
-23.475999 8.946000 104.191998
|
||||
-4.457700 9.027700 56.901148
|
||||
16.912700 15.277300 98.476347
|
||||
12.924100 12.075900 77.677051
|
||||
-21.715099 6.515100 96.397452
|
||||
10.053100 -2.053100 61.576548
|
||||
8.974900 -5.644900 68.852447
|
||||
8.249500 -14.839500 101.639749
|
||||
29.422501 -20.732500 142.186247
|
||||
27.104600 -21.824600 149.962300
|
||||
31.013999 -2.164000 149.977000
|
||||
27.157400 -17.317400 149.988700
|
||||
30.981799 -14.521800 149.960900
|
||||
31.027899 -19.127900 149.983950
|
||||
20.507200 17.852800 112.518598
|
||||
21.309300 -12.729300 134.384644
|
||||
19.385099 -11.085100 123.957550
|
||||
22.975500 -13.585500 143.232755
|
||||
14.246800 -7.776800 92.238399
|
||||
15.299200 -12.349200 106.839596
|
||||
-20.686101 6.686100 104.721952
|
||||
10.410300 -14.950300 109.945149
|
||||
-0.572800 -12.837200 104.743602
|
||||
9.430900 -11.520900 105.765453
|
||||
22.088301 -9.988300 120.869147
|
||||
18.696699 -9.706700 114.113353
|
||||
20.051600 -15.941601 125.510798
|
||||
17.014300 -12.824300 114.637149
|
||||
25.541301 -12.251300 134.885648
|
||||
22.033800 -2.333800 121.891898
|
||||
-18.289400 -7.380600 96.930299
|
||||
-21.954500 4.094500 101.622749
|
||||
-19.513600 4.613600 100.078202
|
||||
-20.256000 10.436000 98.992001
|
||||
-13.608300 -11.011700 97.960850
|
||||
-2.165500 -7.894500 80.802246
|
||||
-2.200600 2.110600 56.369702
|
||||
14.424000 10.726000 88.107003
|
||||
-17.650600 6.960600 97.964700
|
||||
-16.106900 1.746900 89.671550
|
||||
3.865300 -3.635300 75.612649
|
||||
3.290200 -2.310200 69.370102
|
||||
-16.555599 8.445600 91.712202
|
||||
-7.549400 1.549400 62.095299
|
||||
7.074300 -4.804300 73.542148
|
||||
10.674700 -9.114700 102.117354
|
||||
6.940000 -9.100000 95.914998
|
||||
-20.917200 -9.272800 92.751403
|
||||
-4.043800 -2.546200 51.163101
|
||||
-15.706300 -13.303700 92.791853
|
||||
-22.591499 15.911500 100.584248
|
||||
-15.927600 14.587600 91.711202
|
||||
3.550800 8.709200 54.815400
|
||||
-19.986700 12.906700 96.921649
|
||||
-11.174600 7.344600 64.152697
|
||||
5.729900 -1.889900 53.249949
|
||||
7.298300 1.991700 57.419149
|
||||
17.288300 -16.248301 111.504147
|
||||
11.139900 -5.079900 66.779953
|
||||
9.299900 -4.059900 60.559951
|
||||
23.049200 11.560800 111.494597
|
||||
24.139500 4.980500 116.704751
|
||||
29.687400 -21.817400 149.958700
|
||||
22.317100 -19.487100 141.113554
|
||||
23.782200 -13.892200 146.856105
|
||||
28.643601 -7.063600 145.816796
|
||||
-19.830300 13.350300 103.164847
|
||||
19.028700 14.271300 109.414352
|
||||
28.074900 -4.714900 140.597449
|
||||
22.833101 4.646900 119.306550
|
||||
22.090100 5.439900 116.685051
|
||||
22.567500 9.082500 114.078753
|
||||
20.163701 14.096300 113.586848
|
||||
20.742100 -11.562100 131.231049
|
||||
21.981901 -17.111900 134.370944
|
||||
25.385999 -12.786000 140.117995
|
||||
24.287300 -11.777300 136.968650
|
||||
27.245601 -13.955600 143.737795
|
||||
27.890600 -16.050599 147.355294
|
||||
21.251200 -8.951200 115.150604
|
||||
12.877700 -11.097700 103.713851
|
||||
-18.707900 5.677900 101.101053
|
||||
12.688800 -9.448800 105.264399
|
||||
-11.035400 -9.444600 102.652300
|
||||
-14.368000 -10.892000 101.091003
|
||||
-1.861500 -14.028500 102.634250
|
||||
-13.923300 -12.566700 98.998351
|
||||
12.485200 -11.985200 105.252599
|
||||
11.048700 -13.378700 106.834346
|
||||
15.585200 -10.855200 108.912598
|
||||
16.027501 -12.237500 112.513748
|
||||
14.253200 -14.333200 110.456603
|
||||
16.070500 -14.640500 114.080253
|
||||
17.983100 -12.533100 114.631549
|
||||
6.535600 -13.215600 105.777803
|
||||
21.772400 1.057600 117.201198
|
||||
22.093599 -4.353600 119.821796
|
||||
12.941200 -11.261200 110.465603
|
||||
8.894700 -11.624700 107.357351
|
||||
19.696600 0.693400 108.898298
|
||||
21.726600 6.443400 112.543298
|
||||
18.646500 -13.406500 116.678251
|
||||
21.180000 -14.900000 129.675001
|
||||
24.322701 -5.942700 126.056352
|
||||
20.577200 -13.737200 125.553598
|
||||
23.806999 -11.367000 134.358494
|
||||
21.780000 -11.330000 131.770003
|
||||
23.553400 -3.403400 121.911698
|
||||
-18.976199 -4.463800 99.036901
|
||||
-18.976499 -2.053500 99.036751
|
||||
-20.277900 -7.612100 97.431053
|
||||
-20.563300 -1.986700 97.458353
|
||||
-21.594099 7.434100 103.177947
|
||||
-20.604900 6.144900 101.112553
|
||||
-19.292400 9.542400 100.588798
|
||||
-22.819500 11.419500 103.675251
|
||||
-21.773300 11.133300 102.113354
|
||||
-16.047000 -8.803000 98.486497
|
||||
-17.838200 -12.431800 97.955900
|
||||
-18.931901 -9.888100 98.489047
|
||||
-2.144400 1.054400 53.792799
|
||||
-4.323100 1.703100 55.838451
|
||||
1.430600 -2.270600 61.570298
|
||||
-2.026100 -1.613900 55.831951
|
||||
2.131900 -1.761900 54.815950
|
||||
-0.320800 -1.229200 52.214602
|
||||
6.954800 -1.014800 57.937399
|
||||
4.719600 1.400400 55.329801
|
||||
-6.380700 2.000700 58.964650
|
||||
1.736200 -5.286200 72.513097
|
||||
5.514400 -4.744400 71.962200
|
||||
3.504500 -4.074500 74.042252
|
||||
-0.940300 5.240300 57.939849
|
||||
0.447400 8.312600 61.558698
|
||||
7.754600 1.155400 61.057302
|
||||
7.038400 3.821600 60.524201
|
||||
-18.130300 12.180300 96.929849
|
||||
0.591600 -4.271600 79.750803
|
||||
-16.671001 -7.499000 95.374502
|
||||
-17.649101 -4.930900 92.780453
|
||||
-14.640000 -9.350000 96.914999
|
||||
-9.162100 -7.997900 88.098953
|
||||
-15.918000 -6.132000 86.515998
|
||||
-19.701600 12.661600 100.069202
|
||||
-20.835200 13.045200 96.912399
|
||||
-18.631699 13.451700 92.279149
|
||||
-18.708099 7.788100 96.405952
|
||||
-7.977300 3.337300 60.541351
|
||||
-10.023200 0.453200 62.598399
|
||||
-7.388900 -3.921100 68.870547
|
||||
-3.846100 -3.533900 69.391952
|
||||
0.788000 -3.358000 76.674000
|
||||
-2.012200 -3.767800 75.083903
|
||||
-7.760200 6.150200 62.099899
|
||||
-9.870600 7.370600 66.764703
|
||||
-11.900100 5.990100 72.514947
|
||||
3.315700 -5.645700 77.702851
|
||||
-0.920200 -10.459800 101.614899
|
||||
-1.343500 -7.016500 82.893248
|
||||
6.011700 -11.191700 100.565848
|
||||
7.105100 -12.185100 103.692551
|
||||
-10.273400 -10.216600 99.028301
|
||||
-11.712200 -9.327800 96.408902
|
||||
-8.960200 -11.809800 97.454903
|
||||
3.113900 -12.953900 100.591948
|
||||
3.243300 -10.013300 101.081653
|
||||
-20.770601 -11.609400 92.244699
|
||||
-19.028101 -12.051900 90.675951
|
||||
-20.208101 13.128100 90.710951
|
||||
-9.834500 10.214500 64.157747
|
||||
4.486300 2.443700 51.688151
|
||||
9.673400 0.846600 60.536701
|
||||
9.712600 8.327400 65.196298
|
||||
13.512100 -4.832100 74.061052
|
||||
12.061000 -4.051000 66.245499
|
||||
22.982500 17.437500 112.026251
|
||||
23.673800 14.956200 114.606899
|
||||
20.499800 9.810200 108.359902
|
||||
21.161500 11.518500 111.515747
|
||||
22.374501 15.865500 108.362252
|
||||
24.998800 -17.598800 145.279407
|
||||
26.518900 -9.998900 142.679451
|
||||
27.565800 -12.355800 145.307907
|
||||
24.669799 -12.679800 143.214905
|
||||
23.095200 -1.885200 121.892598
|
||||
24.370300 1.799700 121.900148
|
||||
21.694800 8.405200 114.607399
|
||||
24.475301 -14.645300 142.167647
|
||||
23.101000 -12.941000 136.965500
|
||||
23.011600 -11.721600 136.445796
|
||||
11.249500 -10.039500 102.144754
|
||||
11.478300 -9.638300 105.789153
|
||||
-12.076300 -11.093700 102.666850
|
||||
-10.158400 -11.291600 100.555798
|
||||
-14.430500 -13.689500 100.589748
|
||||
-11.942100 -12.587900 101.628949
|
||||
4.210800 -13.780800 102.150404
|
||||
11.627100 -10.087100 103.713551
|
||||
13.965000 -12.725000 108.367502
|
||||
13.494400 -10.934400 107.342201
|
||||
11.087800 -11.727800 107.343901
|
||||
17.523701 -10.653700 114.596849
|
||||
15.976999 -14.507000 112.003501
|
||||
22.654100 0.555900 117.237048
|
||||
21.217500 1.302500 117.223748
|
||||
10.458900 -12.888900 110.959450
|
||||
20.789201 -3.569200 115.119604
|
||||
12.419000 -14.169000 106.289500
|
||||
26.735001 -12.275000 134.897498
|
||||
23.753101 -11.153100 131.261549
|
||||
25.044499 -9.814500 134.397244
|
||||
-15.024300 -9.735700 103.167847
|
||||
-18.943901 -9.896100 101.638049
|
||||
-19.183900 -0.826100 97.473053
|
||||
-21.081500 4.011500 100.074252
|
||||
-21.030300 -7.229700 97.474853
|
||||
-20.216900 -5.253100 99.011551
|
||||
-20.370299 9.710300 100.569848
|
||||
-18.827300 4.747300 101.606349
|
||||
-17.820599 -13.119400 96.429702
|
||||
-19.615700 -11.634300 96.937149
|
||||
-17.897401 -11.592600 99.541298
|
||||
-4.505300 -1.134700 55.352351
|
||||
-3.076800 -0.133200 54.281600
|
||||
-1.984000 -0.956000 53.782999
|
||||
-1.971800 5.601800 55.859101
|
||||
4.345700 1.744300 56.382852
|
||||
4.337700 0.212300 53.788849
|
||||
-5.845100 -0.054900 57.392449
|
||||
-2.207900 2.327900 56.896048
|
||||
-4.803200 5.673200 58.448400
|
||||
-3.315500 7.895500 58.437250
|
||||
-4.058200 3.998200 57.390899
|
||||
-2.918700 2.268700 55.330651
|
||||
1.922000 -4.172000 72.991001
|
||||
8.036200 6.673800 64.173097
|
||||
9.331000 0.699000 62.070499
|
||||
15.177400 9.722600 87.078702
|
||||
-15.047600 -11.302400 96.401202
|
||||
-18.230100 -10.259900 96.959949
|
||||
-19.210901 -7.459100 95.914548
|
||||
-20.057501 -6.162500 95.906248
|
||||
-14.785000 9.135000 81.832497
|
||||
-6.880700 -4.639300 67.304650
|
||||
0.504400 -5.664400 76.667200
|
||||
-9.644500 3.944500 63.637750
|
||||
-5.252100 8.492100 60.543951
|
||||
-8.323400 7.803400 64.193297
|
||||
-7.812700 5.902700 64.168647
|
||||
12.889700 -9.189700 101.594849
|
||||
-8.747400 -8.232600 93.291300
|
||||
-8.437700 -9.452300 99.006151
|
||||
4.299700 -11.999700 101.089853
|
||||
-13.059600 -9.500400 97.980200
|
||||
-4.751400 -11.228600 101.629299
|
||||
-5.702600 -11.687400 100.078702
|
||||
-0.019300 -11.130700 99.550348
|
||||
-1.125500 -12.214500 101.077253
|
||||
1.704500 -9.164500 92.257249
|
||||
-8.743600 -12.276400 95.388202
|
||||
-6.535000 -12.745000 98.482497
|
||||
-0.395100 -12.694900 102.657450
|
||||
8.012100 -6.662100 76.156054
|
||||
5.773300 -7.943300 83.946649
|
||||
-13.410600 -8.179400 97.974700
|
||||
2.629100 -10.759100 104.719552
|
||||
17.136201 12.023800 100.573098
|
||||
18.969300 1.950700 106.829646
|
||||
18.233000 12.227000 105.786503
|
||||
19.635699 9.214300 108.397852
|
||||
-19.567501 14.097500 89.146254
|
||||
-10.928400 9.608400 64.670801
|
||||
4.128600 -1.358600 51.189301
|
||||
23.612199 17.337800 114.111103
|
||||
22.350301 12.439700 113.035152
|
||||
20.050601 16.059400 108.890298
|
||||
25.622900 -14.602900 141.656443
|
||||
13.433900 -12.663900 105.271949
|
||||
14.446700 -13.526700 106.293350
|
||||
-12.458200 -10.991800 104.215898
|
||||
-7.977000 -12.133000 102.136504
|
||||
-10.337200 -11.122800 98.996401
|
||||
8.685300 -12.285300 103.677651
|
||||
11.915700 -12.805700 110.432853
|
||||
15.323500 -12.373500 108.876748
|
||||
21.036700 2.813300 115.143354
|
||||
20.474001 -10.874000 126.566998
|
||||
-15.678100 -9.831900 101.605949
|
||||
-18.537900 -9.082100 100.051052
|
||||
-19.415301 0.275300 95.892348
|
||||
-20.074500 -1.855500 98.997751
|
||||
-20.657700 -11.132300 96.921149
|
||||
-16.127301 -11.362700 102.676350
|
||||
-4.404800 -1.805200 55.352601
|
||||
3.603800 0.256200 52.236902
|
||||
-1.456500 2.376500 55.346751
|
||||
-6.989300 -0.650700 59.515350
|
||||
-3.508500 6.938500 57.420749
|
||||
13.405600 2.894400 79.752803
|
||||
5.013300 -5.403300 77.176647
|
||||
-16.463399 -12.186600 95.398302
|
||||
-17.237900 -8.492100 96.956049
|
||||
-15.187700 -11.322300 99.526148
|
||||
-19.380301 -9.519700 94.354851
|
||||
-17.254100 -10.525900 93.792946
|
||||
-10.367600 -8.342400 93.286200
|
||||
-18.943799 -7.526200 94.333101
|
||||
-18.886901 -5.823100 95.911548
|
||||
-18.345499 13.475500 90.702251
|
||||
0.806700 -5.676700 77.718351
|
||||
1.046900 -4.706900 77.708451
|
||||
-9.061500 5.131500 65.209248
|
||||
-11.407800 7.057800 72.511097
|
||||
-4.013600 -10.796400 100.058202
|
||||
3.416100 -12.676100 104.238048
|
||||
2.260000 -12.440000 102.655000
|
||||
7.753900 -12.673900 102.156954
|
||||
9.956900 -9.976900 102.113454
|
||||
7.505000 -11.235000 104.212498
|
||||
5.119000 -10.599000 102.669500
|
||||
-3.021400 -11.178600 103.199297
|
||||
-8.721000 -11.079000 99.034501
|
||||
-5.856500 -11.553500 98.481747
|
||||
3.042600 -10.732600 99.536298
|
||||
1.399600 -11.809600 101.119803
|
||||
-8.425600 8.965600 60.527201
|
||||
2.854500 -0.104500 50.117250
|
||||
20.102601 14.287400 110.996300
|
||||
20.071300 15.338700 106.825646
|
||||
25.300099 -13.550100 140.075045
|
||||
-14.544200 -10.735800 102.672900
|
||||
8.899800 -11.309800 103.694901
|
||||
8.373500 -13.593500 103.701751
|
||||
14.957000 -13.707000 108.393502
|
||||
-14.790800 -10.369200 100.579598
|
||||
-19.526100 -0.693900 99.016951
|
||||
-19.891100 1.501100 99.004451
|
||||
-20.159900 -11.180100 95.360052
|
||||
-19.838100 -11.101900 93.795946
|
||||
3.044600 0.755400 51.682301
|
||||
3.687800 1.442200 52.738898
|
||||
-6.885100 -3.294900 61.557448
|
||||
-6.215400 1.495400 59.492300
|
||||
-17.352500 -7.377500 94.313751
|
||||
-16.239999 -6.860000 91.224998
|
||||
-20.576800 0.046800 95.891598
|
||||
-18.031599 5.911600 96.409202
|
||||
-16.499700 13.289700 90.685151
|
||||
-9.316800 8.566800 63.131600
|
||||
-6.187100 -10.722900 98.486447
|
||||
3.329400 -10.959400 102.659700
|
||||
-9.227300 -10.502700 100.586348
|
||||
-5.203100 -11.776900 96.948449
|
||||
2.934500 -1.344500 50.157250
|
||||
21.912201 13.157800 111.506097
|
||||
-17.928601 0.158600 95.890698
|
||||
-17.785900 3.815900 96.932049
|
||||
-20.299200 3.889200 98.485397
|
||||
4.120400 0.749600 54.270200
|
||||
-17.981600 -6.818400 94.324201
|
||||
-19.942101 -5.897900 94.318951
|
||||
-18.396400 7.436400 94.846797
|
||||
-9.592500 7.612500 63.663750
|
||||
21.840700 14.839300 110.435353
|
||||
-20.119800 2.629800 96.935099
|
||||
21.831000 16.478999 112.030501
|
||||
20.249299 14.330700 108.894648
|
||||
21.416699 14.473300 113.053352
|
||||
21.707799 13.162200 109.433902
|
||||
|
|
@ -0,0 +1,500 @@
|
|||
500
|
||||
231.000000 182.000000 0.000351
|
||||
14.000000 115.000000 -15.999829
|
||||
71.000000 94.000000 31.999592
|
||||
68.000000 54.000000 47.999560
|
||||
207.000000 119.000000 31.999602
|
||||
108.000000 241.000000 -31.999965
|
||||
36.000000 131.000000 -31.999798
|
||||
61.000000 79.000000 -16.000061
|
||||
158.000000 29.000000 47.999573
|
||||
171.000000 20.000000 32.000102
|
||||
80.000000 21.000000 15.999613
|
||||
208.000000 209.000000 -32.000094
|
||||
72.000000 154.000000 -0.000168
|
||||
130.000000 195.000000 0.000267
|
||||
159.000000 185.000000 0.000415
|
||||
165.000000 172.000000 -15.999620
|
||||
189.000000 138.000000 -16.000149
|
||||
180.000000 211.000000 -48.000257
|
||||
152.000000 182.000000 -32.000245
|
||||
196.000000 216.000000 -0.000361
|
||||
171.000000 63.000000 47.999650
|
||||
8.000000 118.000000 -0.000377
|
||||
167.000000 228.000000 0.000447
|
||||
149.000000 64.000000 -0.000335
|
||||
26.000000 166.000000 -31.999897
|
||||
62.000000 132.000000 15.999507
|
||||
129.000000 244.000000 -15.999563
|
||||
223.000000 57.000000 15.999837
|
||||
142.000000 25.000000 47.999532
|
||||
119.000000 12.000000 15.999691
|
||||
51.000000 213.000000 -32.000051
|
||||
67.000000 59.000000 47.999558
|
||||
244.000000 118.000000 16.000059
|
||||
229.000000 186.000000 0.000022
|
||||
151.000000 232.000000 0.000274
|
||||
177.000000 166.000000 -0.000265
|
||||
139.000000 71.000000 16.000400
|
||||
201.000000 184.000000 16.000257
|
||||
149.000000 26.000000 47.999937
|
||||
144.000000 184.000000 -32.000347
|
||||
212.000000 44.000000 16.000372
|
||||
122.000000 243.000000 -32.000271
|
||||
63.000000 226.000000 -15.999717
|
||||
14.000000 92.000000 -0.000228
|
||||
79.000000 191.000000 -48.000345
|
||||
168.000000 174.000000 -31.999750
|
||||
94.000000 239.000000 -15.999957
|
||||
128.000000 196.000000 -0.000407
|
||||
10.000000 151.000000 -0.000198
|
||||
28.000000 63.000000 16.000490
|
||||
50.000000 217.000000 -15.999698
|
||||
147.000000 242.000000 -16.000115
|
||||
11.000000 139.000000 -16.000482
|
||||
208.000000 183.000000 16.000006
|
||||
153.000000 28.000000 47.999911
|
||||
63.000000 29.000000 15.999721
|
||||
18.000000 173.000000 0.000064
|
||||
80.000000 86.000000 31.999967
|
||||
214.000000 131.000000 -31.999614
|
||||
25.000000 164.000000 -32.000292
|
||||
18.000000 81.000000 15.999688
|
||||
174.000000 164.000000 -15.999519
|
||||
112.000000 58.000000 48.000316
|
||||
221.000000 196.000000 0.000020
|
||||
87.000000 228.000000 0.000271
|
||||
85.000000 82.000000 31.999577
|
||||
136.000000 185.000000 -31.999946
|
||||
139.000000 12.000000 15.999814
|
||||
207.000000 136.000000 -31.999751
|
||||
243.000000 127.000000 -16.000406
|
||||
238.000000 83.000000 16.000043
|
||||
236.000000 175.000000 0.000133
|
||||
59.000000 39.000000 -0.000173
|
||||
138.000000 58.000000 48.000435
|
||||
63.000000 125.000000 -15.999958
|
||||
148.000000 59.000000 47.999763
|
||||
11.000000 116.000000 16.000295
|
||||
12.000000 104.000000 16.000059
|
||||
99.000000 195.000000 -47.999545
|
||||
176.000000 168.000000 -32.000485
|
||||
97.000000 186.000000 -0.000049
|
||||
26.000000 69.000000 0.000408
|
||||
67.000000 196.000000 -48.000408
|
||||
197.000000 73.000000 -15.999752
|
||||
180.000000 99.000000 15.999739
|
||||
246.000000 145.000000 0.000341
|
||||
54.000000 184.000000 15.999968
|
||||
194.000000 78.000000 -15.999879
|
||||
16.000000 144.000000 15.999772
|
||||
100.000000 28.000000 47.999568
|
||||
26.000000 108.000000 32.000427
|
||||
188.000000 58.000000 48.000056
|
||||
104.000000 23.000000 0.000019
|
||||
186.000000 193.000000 -47.999712
|
||||
242.000000 100.000000 16.000407
|
||||
139.000000 12.000000 31.999602
|
||||
229.000000 168.000000 -31.999564
|
||||
96.000000 230.000000 -0.000241
|
||||
144.000000 71.000000 31.999954
|
||||
139.000000 184.000000 -16.000332
|
||||
158.000000 226.000000 -48.000437
|
||||
54.000000 143.000000 -31.999968
|
||||
241.000000 163.000000 -0.000375
|
||||
110.000000 59.000000 47.999725
|
||||
88.000000 27.000000 0.000264
|
||||
159.000000 25.000000 0.000204
|
||||
228.000000 68.000000 0.000450
|
||||
53.000000 114.000000 31.999861
|
||||
76.000000 22.000000 16.000012
|
||||
238.000000 172.000000 -16.000306
|
||||
27.000000 174.000000 -32.000074
|
||||
71.000000 64.000000 48.000089
|
||||
58.000000 73.000000 -16.000054
|
||||
226.000000 75.000000 31.999956
|
||||
64.000000 224.000000 -32.000409
|
||||
219.000000 79.000000 -16.000015
|
||||
171.000000 219.000000 -48.000443
|
||||
17.000000 149.000000 15.999620
|
||||
85.000000 219.000000 -47.999948
|
||||
139.000000 243.000000 -31.999927
|
||||
64.000000 132.000000 -15.999923
|
||||
133.000000 60.000000 0.000370
|
||||
141.000000 13.000000 32.000016
|
||||
144.000000 193.000000 0.000487
|
||||
29.000000 77.000000 32.000389
|
||||
186.000000 227.000000 -31.999584
|
||||
51.000000 211.000000 -0.000140
|
||||
100.000000 67.000000 -0.000192
|
||||
153.000000 240.000000 -31.999932
|
||||
184.000000 64.000000 48.000329
|
||||
118.000000 233.000000 0.000081
|
||||
37.000000 196.000000 -32.000450
|
||||
196.000000 35.000000 32.000130
|
||||
43.000000 51.000000 32.000190
|
||||
97.000000 61.000000 47.999902
|
||||
18.000000 174.000000 -15.999889
|
||||
54.000000 112.000000 32.000389
|
||||
244.000000 102.000000 -0.000141
|
||||
26.000000 89.000000 31.999633
|
||||
183.000000 101.000000 -0.000397
|
||||
190.000000 155.000000 -32.000059
|
||||
141.000000 61.000000 -0.000261
|
||||
122.000000 69.000000 31.999905
|
||||
159.000000 239.000000 -31.999703
|
||||
180.000000 156.000000 -16.000295
|
||||
122.000000 186.000000 -32.000017
|
||||
159.000000 16.000000 31.999811
|
||||
111.000000 62.000000 0.000081
|
||||
30.000000 73.000000 32.000406
|
||||
40.000000 131.000000 -32.000022
|
||||
185.000000 50.000000 47.999556
|
||||
46.000000 121.000000 32.000010
|
||||
15.000000 91.000000 15.999817
|
||||
139.000000 243.000000 -15.999875
|
||||
194.000000 110.000000 -15.999682
|
||||
200.000000 221.000000 -16.000194
|
||||
146.000000 183.000000 -32.000064
|
||||
106.000000 191.000000 0.000436
|
||||
182.000000 156.000000 -0.000125
|
||||
201.000000 71.000000 -16.000001
|
||||
127.000000 59.000000 0.000459
|
||||
141.000000 242.000000 -32.000493
|
||||
171.000000 235.000000 -31.999615
|
||||
61.000000 176.000000 15.999908
|
||||
151.000000 14.000000 31.999740
|
||||
121.000000 185.000000 -16.000410
|
||||
9.000000 110.000000 -0.000308
|
||||
36.000000 124.000000 31.999681
|
||||
162.000000 16.000000 16.000300
|
||||
80.000000 234.000000 -16.000029
|
||||
15.000000 164.000000 -15.999884
|
||||
208.000000 72.000000 -16.000103
|
||||
67.000000 114.000000 15.999868
|
||||
120.000000 60.000000 0.000358
|
||||
153.000000 24.000000 -0.000315
|
||||
167.000000 77.000000 0.000084
|
||||
88.000000 178.000000 -0.000296
|
||||
178.000000 88.000000 31.999579
|
||||
75.000000 99.000000 16.000467
|
||||
151.000000 241.000000 -31.999550
|
||||
47.000000 183.000000 15.999840
|
||||
151.000000 180.000000 -15.999625
|
||||
112.000000 230.000000 -47.999580
|
||||
152.000000 60.000000 47.999920
|
||||
145.000000 183.000000 -15.999679
|
||||
62.000000 123.000000 -16.000320
|
||||
228.000000 142.000000 -32.000272
|
||||
106.000000 232.000000 0.000122
|
||||
89.000000 33.000000 48.000060
|
||||
118.000000 231.000000 -48.000438
|
||||
162.000000 239.000000 -15.999565
|
||||
196.000000 220.000000 -31.999656
|
||||
189.000000 117.000000 15.999870
|
||||
73.000000 46.000000 48.000414
|
||||
193.000000 37.000000 0.000188
|
||||
187.000000 221.000000 0.000304
|
||||
61.000000 140.000000 15.999972
|
||||
115.000000 184.000000 -15.999817
|
||||
153.000000 231.000000 -0.000374
|
||||
46.000000 134.000000 -31.999890
|
||||
68.000000 201.000000 -47.999923
|
||||
217.000000 55.000000 -0.000048
|
||||
200.000000 34.000000 16.000119
|
||||
152.000000 195.000000 -48.000153
|
||||
146.000000 72.000000 32.000142
|
||||
105.000000 242.000000 -15.999819
|
||||
158.000000 69.000000 0.000177
|
||||
145.000000 72.000000 15.999652
|
||||
103.000000 73.000000 32.000330
|
||||
246.000000 112.000000 -0.000307
|
||||
243.000000 128.000000 16.000331
|
||||
46.000000 48.000000 0.000354
|
||||
99.000000 15.000000 31.999993
|
||||
96.000000 70.000000 0.000313
|
||||
192.000000 129.000000 15.999724
|
||||
171.000000 36.000000 48.000142
|
||||
56.000000 41.000000 -0.000237
|
||||
87.000000 236.000000 -32.000264
|
||||
110.000000 242.000000 -32.000440
|
||||
90.000000 26.000000 0.000233
|
||||
219.000000 176.000000 16.000414
|
||||
196.000000 32.000000 15.999647
|
||||
225.000000 119.000000 31.999763
|
||||
168.000000 81.000000 31.999513
|
||||
103.000000 182.000000 -31.999641
|
||||
28.000000 192.000000 -16.000020
|
||||
225.000000 136.000000 -32.000475
|
||||
62.000000 117.000000 -15.999916
|
||||
58.000000 182.000000 16.000479
|
||||
94.000000 71.000000 0.000277
|
||||
210.000000 43.000000 16.000458
|
||||
238.000000 86.000000 -0.000143
|
||||
186.000000 28.000000 32.000422
|
||||
208.000000 46.000000 32.000427
|
||||
99.000000 60.000000 47.999544
|
||||
85.000000 36.000000 47.999560
|
||||
14.000000 140.000000 16.000064
|
||||
174.000000 91.000000 16.000080
|
||||
72.000000 33.000000 0.000351
|
||||
230.000000 95.000000 31.999702
|
||||
153.000000 15.000000 31.999736
|
||||
180.000000 44.000000 48.000142
|
||||
147.000000 13.000000 16.000173
|
||||
168.000000 27.000000 0.000135
|
||||
16.000000 168.000000 -16.000330
|
||||
12.000000 98.000000 0.000077
|
||||
84.000000 88.000000 15.999770
|
||||
175.000000 162.000000 -15.999729
|
||||
122.000000 12.000000 31.999587
|
||||
194.000000 145.000000 16.000214
|
||||
245.000000 104.000000 0.000096
|
||||
38.000000 50.000000 16.000261
|
||||
102.000000 231.000000 -0.000273
|
||||
120.000000 70.000000 32.000247
|
||||
103.000000 241.000000 -15.999562
|
||||
24.000000 73.000000 0.000059
|
||||
153.000000 241.000000 -16.000022
|
||||
80.000000 29.000000 -0.000425
|
||||
73.000000 223.000000 0.000246
|
||||
25.000000 91.000000 -15.999716
|
||||
110.000000 13.000000 31.999612
|
||||
142.000000 230.000000 -47.999894
|
||||
23.000000 185.000000 -16.000220
|
||||
226.000000 180.000000 -31.999881
|
||||
230.000000 105.000000 32.000364
|
||||
80.000000 169.000000 -31.999656
|
||||
219.000000 203.000000 -16.000266
|
||||
69.000000 142.000000 -0.000292
|
||||
33.000000 61.000000 0.000446
|
||||
66.000000 119.000000 15.999737
|
||||
29.000000 178.000000 -31.999839
|
||||
122.000000 195.000000 0.000250
|
||||
95.000000 79.000000 15.999537
|
||||
53.000000 141.000000 -32.000021
|
||||
228.000000 113.000000 31.999506
|
||||
110.000000 196.000000 -48.000009
|
||||
84.000000 167.000000 -16.000145
|
||||
221.000000 123.000000 32.000377
|
||||
192.000000 126.000000 -16.000016
|
||||
163.000000 237.000000 -32.000336
|
||||
107.000000 73.000000 15.999636
|
||||
30.000000 59.000000 15.999555
|
||||
143.000000 233.000000 -0.000014
|
||||
76.000000 233.000000 -16.000291
|
||||
140.000000 24.000000 48.000373
|
||||
13.000000 122.000000 -16.000396
|
||||
119.000000 243.000000 -15.999928
|
||||
219.000000 52.000000 15.999516
|
||||
39.000000 207.000000 -16.000205
|
||||
11.000000 153.000000 0.000400
|
||||
153.000000 227.000000 -47.999632
|
||||
197.000000 182.000000 15.999689
|
||||
96.000000 15.000000 16.000408
|
||||
189.000000 27.000000 16.000370
|
||||
85.000000 173.000000 -32.000317
|
||||
137.000000 185.000000 -15.999535
|
||||
186.000000 113.000000 0.000316
|
||||
47.000000 72.000000 -16.000307
|
||||
26.000000 147.000000 -31.999760
|
||||
34.000000 59.000000 0.000272
|
||||
184.000000 191.000000 -47.999729
|
||||
135.000000 195.000000 0.000041
|
||||
137.000000 22.000000 0.000252
|
||||
137.000000 70.000000 16.000342
|
||||
25.000000 164.000000 16.000081
|
||||
241.000000 162.000000 -16.000253
|
||||
25.000000 91.000000 31.999907
|
||||
204.000000 44.000000 -0.000409
|
||||
110.000000 184.000000 -32.000070
|
||||
71.000000 191.000000 -47.999714
|
||||
186.000000 141.000000 -0.000049
|
||||
112.000000 22.000000 -0.000413
|
||||
27.000000 187.000000 -0.000197
|
||||
28.000000 139.000000 -31.999749
|
||||
155.000000 76.000000 16.000041
|
||||
31.000000 135.000000 -31.999815
|
||||
99.000000 240.000000 -32.000440
|
||||
218.000000 59.000000 32.000098
|
||||
240.000000 164.000000 -16.000179
|
||||
186.000000 62.000000 48.000381
|
||||
193.000000 120.000000 -15.999543
|
||||
87.000000 19.000000 32.000031
|
||||
185.000000 148.000000 -0.000396
|
||||
187.000000 139.000000 -0.000262
|
||||
194.000000 177.000000 15.999986
|
||||
13.000000 133.000000 15.999525
|
||||
217.000000 131.000000 -32.000238
|
||||
73.000000 229.000000 -31.999844
|
||||
218.000000 196.000000 -31.999779
|
||||
62.000000 218.000000 -0.000483
|
||||
131.000000 12.000000 16.000284
|
||||
68.000000 136.000000 -0.000446
|
||||
14.000000 94.000000 16.000185
|
||||
112.000000 197.000000 -48.000241
|
||||
223.000000 198.000000 -15.999801
|
||||
71.000000 161.000000 -32.000219
|
||||
86.000000 18.000000 16.000351
|
||||
100.000000 227.000000 -47.999777
|
||||
17.000000 169.000000 -0.000308
|
||||
118.000000 24.000000 47.999953
|
||||
190.000000 100.000000 31.999686
|
||||
72.000000 103.000000 0.000019
|
||||
214.000000 124.000000 32.000046
|
||||
221.000000 132.000000 -32.000248
|
||||
81.000000 217.000000 -48.000242
|
||||
54.000000 71.000000 -16.000327
|
||||
14.000000 161.000000 -16.000004
|
||||
64.000000 31.000000 31.999705
|
||||
196.000000 223.000000 -16.000117
|
||||
114.000000 194.000000 0.000448
|
||||
239.000000 109.000000 -15.999611
|
||||
242.000000 155.000000 -15.999961
|
||||
62.000000 138.000000 15.999829
|
||||
155.000000 188.000000 -0.000170
|
||||
12.000000 131.000000 15.999532
|
||||
230.000000 150.000000 -31.999836
|
||||
12.000000 124.000000 -15.999937
|
||||
244.000000 137.000000 -15.999895
|
||||
38.000000 200.000000 0.000110
|
||||
175.000000 93.000000 16.000389
|
||||
40.000000 124.000000 32.000203
|
||||
129.000000 11.000000 15.999840
|
||||
39.000000 48.000000 16.000091
|
||||
23.000000 70.000000 15.999560
|
||||
89.000000 222.000000 -47.999557
|
||||
73.000000 26.000000 31.999999
|
||||
242.000000 94.000000 -0.000065
|
||||
229.000000 148.000000 -32.000276
|
||||
86.000000 237.000000 -15.999800
|
||||
229.000000 190.000000 -15.999638
|
||||
115.000000 71.000000 15.999835
|
||||
180.000000 95.000000 -0.000262
|
||||
247.000000 137.000000 0.000076
|
||||
130.000000 69.000000 31.999978
|
||||
38.000000 205.000000 -15.999885
|
||||
95.000000 238.000000 -31.999829
|
||||
155.000000 179.000000 -16.000164
|
||||
25.000000 153.000000 -32.000133
|
||||
17.000000 106.000000 -15.999715
|
||||
178.000000 167.000000 -31.999967
|
||||
209.000000 207.000000 -0.000472
|
||||
68.000000 34.000000 0.000071
|
||||
239.000000 146.000000 15.999682
|
||||
81.000000 38.000000 47.999976
|
||||
110.000000 23.000000 -0.000396
|
||||
27.000000 81.000000 31.999842
|
||||
136.000000 70.000000 32.000427
|
||||
145.000000 232.000000 0.000270
|
||||
140.000000 231.000000 -47.999598
|
||||
148.000000 196.000000 -48.000069
|
||||
16.000000 111.000000 -16.000408
|
||||
108.000000 14.000000 31.999518
|
||||
240.000000 91.000000 16.000149
|
||||
230.000000 160.000000 -32.000275
|
||||
64.000000 123.000000 15.999728
|
||||
16.000000 87.000000 15.999844
|
||||
8.000000 141.000000 0.000100
|
||||
222.000000 194.000000 -0.000178
|
||||
160.000000 61.000000 48.000409
|
||||
174.000000 20.000000 15.999672
|
||||
171.000000 174.000000 0.000162
|
||||
84.000000 81.000000 -0.000264
|
||||
151.000000 75.000000 15.999741
|
||||
36.000000 79.000000 -16.000373
|
||||
163.000000 18.000000 31.999651
|
||||
68.000000 116.000000 -0.000288
|
||||
185.000000 205.000000 -48.000148
|
||||
193.000000 135.000000 16.000057
|
||||
187.000000 119.000000 0.000122
|
||||
19.000000 80.000000 0.000444
|
||||
173.000000 64.000000 47.999899
|
||||
237.000000 82.000000 0.000371
|
||||
212.000000 211.000000 -15.999928
|
||||
229.000000 87.000000 31.999870
|
||||
69.000000 114.000000 0.000236
|
||||
97.000000 194.000000 -48.000360
|
||||
36.000000 176.000000 15.999577
|
||||
55.000000 213.000000 -0.000157
|
||||
189.000000 228.000000 -15.999840
|
||||
110.000000 192.000000 -0.000275
|
||||
174.000000 235.000000 -15.999655
|
||||
73.000000 99.000000 -0.000327
|
||||
28.000000 116.000000 31.999974
|
||||
229.000000 107.000000 31.999858
|
||||
153.000000 14.000000 15.999576
|
||||
103.000000 14.000000 16.000290
|
||||
130.000000 186.000000 -31.999906
|
||||
162.000000 62.000000 48.000005
|
||||
75.000000 160.000000 0.000127
|
||||
13.000000 161.000000 -0.000169
|
||||
183.000000 222.000000 -0.000352
|
||||
107.000000 182.000000 -15.999640
|
||||
105.000000 13.000000 15.999856
|
||||
50.000000 38.000000 16.000248
|
||||
175.000000 86.000000 0.000015
|
||||
30.000000 196.000000 -15.999867
|
||||
51.000000 42.000000 31.999990
|
||||
241.000000 93.000000 15.999799
|
||||
131.000000 243.000000 -16.000487
|
||||
243.000000 102.000000 15.999527
|
||||
30.000000 182.000000 -32.000239
|
||||
120.000000 185.000000 -31.999833
|
||||
66.000000 136.000000 -16.000264
|
||||
200.000000 42.000000 -0.000351
|
||||
25.000000 102.000000 32.000231
|
||||
176.000000 87.000000 32.000019
|
||||
160.000000 194.000000 -47.999614
|
||||
96.000000 240.000000 -16.000345
|
||||
230.000000 91.000000 -15.999643
|
||||
243.000000 157.000000 -0.000306
|
||||
243.000000 153.000000 -16.000310
|
||||
217.000000 124.000000 32.000136
|
||||
188.000000 197.000000 -47.999767
|
||||
121.000000 70.000000 15.999790
|
||||
242.000000 134.000000 16.000201
|
||||
165.000000 229.000000 -0.000410
|
||||
102.000000 24.000000 -0.000139
|
||||
230.000000 164.000000 16.000285
|
||||
182.000000 32.000000 0.000135
|
||||
247.000000 114.000000 -0.000002
|
||||
43.000000 204.000000 -32.000367
|
||||
210.000000 212.000000 -15.999682
|
||||
37.000000 59.000000 32.000195
|
||||
94.000000 16.000000 15.999830
|
||||
112.000000 25.000000 48.000203
|
||||
95.000000 17.000000 31.999534
|
||||
171.000000 192.000000 -48.000241
|
||||
125.000000 60.000000 0.000292
|
||||
12.000000 151.000000 -15.999890
|
||||
162.000000 193.000000 -48.000247
|
||||
161.000000 184.000000 0.000343
|
||||
70.000000 107.000000 -0.000360
|
||||
31.000000 120.000000 32.000491
|
||||
73.000000 209.000000 -47.999995
|
||||
106.000000 73.000000 31.999769
|
||||
145.000000 63.000000 -0.000340
|
||||
183.000000 152.000000 0.000134
|
||||
138.000000 197.000000 -47.999966
|
||||
106.000000 182.000000 -32.000377
|
||||
95.000000 176.000000 -15.999590
|
||||
61.000000 115.000000 -16.000234
|
||||
80.000000 169.000000 0.000431
|
||||
149.000000 23.000000 0.000338
|
||||
242.000000 121.000000 -16.000055
|
||||
63.000000 130.000000 16.000208
|
||||
229.000000 65.000000 15.999791
|
||||
152.000000 73.000000 31.999837
|
||||
9.000000 143.000000 -0.000190
|
||||
13.000000 100.000000 15.999721
|
||||
78.000000 89.000000 0.000382
|
||||
175.000000 226.000000 -0.000207
|
||||
79.000000 64.000000 47.999724
|
||||
165.000000 83.000000 15.999635
|
||||
173.000000 191.000000 -48.000118
|
||||
67.000000 141.000000 -15.999508
|
||||
149.000000 229.000000 -48.000104
|
||||
75.000000 156.000000 -15.999668
|
||||
13.000000 155.000000 -15.999930
|
||||
110.000000 71.000000 32.000201
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Algebraic_foundations
|
||||
Alpha_shapes_3
|
||||
Arithmetic_kernel
|
||||
CGAL_Core
|
||||
Cartesian_kernel
|
||||
Circulator
|
||||
Filtered_kernel
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
# Created by the script cgal_create_cmake_script
|
||||
# This is the CMake script for compiling a CGAL application.
|
||||
|
||||
cmake_minimum_required(VERSION 3.1...3.20)
|
||||
project(Alpha_wrap_3_Benchmark)
|
||||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
include_directories (BEFORE ../../include ./Quality ./Robustness) # AW3 includes
|
||||
include_directories (BEFORE ../../../CGAL-Patches/include)
|
||||
|
||||
# create a target per cppfile
|
||||
create_single_source_cgal_program("Performance/performance_benchmark.cpp")
|
||||
create_single_source_cgal_program("Quality/quality_benchmark.cpp")
|
||||
create_single_source_cgal_program("Robustness/robustness_benchmark.cpp")
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, getopt
|
||||
|
||||
def compute_performance_benchmark_data(execname, filename, alpha):
|
||||
|
||||
output = ""
|
||||
cmd = ("/usr/bin/time", "-v",
|
||||
execname, "-i",
|
||||
filename, "-a", alpha)
|
||||
proc = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
start_new_session=True)
|
||||
|
||||
outs, errs = proc.communicate()
|
||||
output = outs.decode("utf-8") + errs.decode("utf-8")
|
||||
|
||||
for output_line in output.split("\n"):
|
||||
if "User time (seconds): " in output_line:
|
||||
print(output_line[len("User time (seconds): "):])
|
||||
continue
|
||||
if "Maximum resident set size (kbytes): " in output_line:
|
||||
print(output_line[len("Maximum resident set size (kbytes): "):])
|
||||
continue
|
||||
|
||||
def main(argv):
|
||||
execname=""
|
||||
filename=""
|
||||
alpha=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'e:i:a:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-e":
|
||||
execname = arg
|
||||
elif opt == "-i":
|
||||
filename = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
|
||||
compute_performance_benchmark_data(execname, filename, alpha)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, signal, getopt
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def main(argv):
|
||||
|
||||
inputdir=""
|
||||
outputdir=""
|
||||
commit_hash=""
|
||||
alpha=""
|
||||
do_diff=False
|
||||
diffdir=""
|
||||
diff_hash=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'i:a:o:c:d:p:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-i":
|
||||
inputdir = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
elif opt == "-o":
|
||||
outputdir = arg
|
||||
elif opt == "-c":
|
||||
commit_hash = arg
|
||||
elif opt == "-d":
|
||||
diff_hash = arg
|
||||
do_diff = True
|
||||
elif opt == "-p":
|
||||
diffdir = arg
|
||||
|
||||
all_metric = {
|
||||
"Time_(second)" : {},
|
||||
"Memory_Peak_(kbytes)" : {}}
|
||||
num_input = 0
|
||||
for filename in os.listdir(inputdir) :
|
||||
new_path = os.path.join(inputdir,filename)
|
||||
new_file = open(new_path)
|
||||
is_empty_new = os.path.getsize(new_path) <= 1
|
||||
if do_diff :
|
||||
old_path = os.path.join(diffdir,filename)
|
||||
old_file = open(old_path)
|
||||
is_empty_old = os.path.getsize(old_path) <= 1
|
||||
for key in all_metric:
|
||||
if is_empty_new or is_empty_old :
|
||||
new_val = 0.
|
||||
old_val = 0.
|
||||
else :
|
||||
new_val = float(new_file.readline().rstrip('\n'))
|
||||
old_val = float(old_file.readline().rstrip('\n'))
|
||||
mesh_id = str(filename.split('.')[0])
|
||||
all_metric[key][mesh_id] = [new_val, old_val]
|
||||
else :
|
||||
for key in all_metric:
|
||||
if is_empty_new :
|
||||
new_val = 0.
|
||||
else :
|
||||
new_val = float(new_file.readline().rstrip('\n'))
|
||||
mesh_id = str(filename.split('.')[0])
|
||||
all_metric[key][mesh_id] = [new_val, new_val]
|
||||
num_input = num_input+1
|
||||
|
||||
# update .pdf chart
|
||||
date_now = datetime.datetime.now()
|
||||
date_for_filename = str(date_now.year) +"_"+ str(date_now.month) +"_"+ str(date_now.day) +"_"+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn"
|
||||
for key in all_metric:
|
||||
goal = 0
|
||||
num_el = range(len(all_metric[key]))
|
||||
avg_diff_to_goal = 0.
|
||||
avg = 0.
|
||||
x1 = []
|
||||
x2 = []
|
||||
for value in all_metric[key].values() :
|
||||
avg += value[0]
|
||||
diff_to_goal = abs(value[1]-goal) - abs(value[0]-goal)
|
||||
avg_diff_to_goal += diff_to_goal
|
||||
x1.append(value[0])
|
||||
x2.append(value[1])
|
||||
avg_diff_to_goal /= float(len(all_metric[key]))
|
||||
avg /= float(len(all_metric[key]))
|
||||
|
||||
plt.figure(figsize=(8,8))
|
||||
if do_diff :
|
||||
plt.hist(x2, bins=100, color='tab:green', alpha=0.5)
|
||||
plt.hist(x1, bins=100, color='tab:blue', alpha=0.5)
|
||||
plt.vlines(x = goal, ymin=plt.ylim()[0], ymax=plt.ylim()[1], linestyles='dashed')
|
||||
|
||||
title = ""
|
||||
if do_diff :
|
||||
title += "Diff between " + commit_hash + " and " + diff_hash + " on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha
|
||||
else :
|
||||
title += "Benchmarking on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha
|
||||
|
||||
avg_str = str(format(abs(avg), '.2f'))
|
||||
if key == "Time_(second)" :
|
||||
title += "\nIn average we spend " + avg_str + " seconds"
|
||||
else :
|
||||
title += "\nIn average we use up to " + avg_str + " kbytes"
|
||||
|
||||
if do_diff and avg_diff_to_goal == 0. :
|
||||
title += "\nNo change between the two commits"
|
||||
elif do_diff :
|
||||
avg_diff_str = str(format(abs(avg_diff_to_goal), '.2f'))
|
||||
if key == "Time_(second)" :
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we get slower by "
|
||||
else :
|
||||
title += "\nIn average we get faster "
|
||||
title += avg_diff_str + " seconds"
|
||||
else :
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we use " + avg_diff_str + " more"
|
||||
else :
|
||||
title += "\nIn average we use " + avg_diff_str + " less"
|
||||
title += " kbytes"
|
||||
|
||||
plt.title(title, fontsize=15)
|
||||
plt.xlabel(key.replace("_"," "), fontsize=14)
|
||||
plt.ylabel("# of meshes", fontsize=14)
|
||||
plt.tick_params(axis="x", labelsize=9)
|
||||
plt.tick_params(axis="y", labelsize=9)
|
||||
|
||||
chart_filename = ""
|
||||
if do_diff :
|
||||
chart_filename += "diff_"+commit_hash+"_"+diff_hash+"_"+key+"_"+date_for_filename+".pdf"
|
||||
else :
|
||||
chart_filename += "results_"+commit_hash+"_"+key+"_"+date_for_filename+".pdf"
|
||||
chart_path = os.path.join(outputdir+"/charts",chart_filename)
|
||||
if os.path.isfile(chart_path) :
|
||||
os.remove(chart_path)
|
||||
plt.savefig(chart_path, bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
print("pdf updated")
|
||||
|
||||
sys.exit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
|
||||
#include <CGAL/IO/polygon_soup_io.h>
|
||||
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using K = CGAL::Exact_predicates_inexact_constructions_kernel;
|
||||
using Point_3 = K::Point_3;
|
||||
using Vector_3 = K::Vector_3;
|
||||
|
||||
using Mesh = CGAL::Surface_mesh<Point_3>;
|
||||
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const int argc_check = argc - 1;
|
||||
const char* entry_name_ptr = nullptr;
|
||||
double relative_alpha_ratio = 20., relative_offset_ratio = 600.;
|
||||
|
||||
for(int i=1; i<argc; ++i)
|
||||
{
|
||||
if(!strcmp("-i", argv[i]) && i < argc_check)
|
||||
entry_name_ptr = argv[++i];
|
||||
else if(!strcmp("-a", argv[i]) && i < argc_check)
|
||||
relative_alpha_ratio = std::stod(argv[++i]);
|
||||
else if(!strcmp("-d", argv[i]) && i < argc_check)
|
||||
relative_offset_ratio = std::stod(argv[++i]);
|
||||
}
|
||||
|
||||
if(argc < 3 || relative_alpha_ratio <= 0.)
|
||||
{
|
||||
std::cerr << "Error: bad input parameters." << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
std::vector<Point_3> points;
|
||||
std::vector<std::array<std::size_t, 3> > faces;
|
||||
if(!CGAL::IO::read_polygon_soup(entry_name_ptr, points, faces) || faces.empty())
|
||||
{
|
||||
std::cerr << "Error: Invalid input data." << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
CGAL::Bbox_3 bbox;
|
||||
for(const Point_3& p : points)
|
||||
bbox += p.bbox();
|
||||
|
||||
const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
const double alpha = diag_length / relative_alpha_ratio;
|
||||
const double offset = diag_length / relative_offset_ratio;
|
||||
|
||||
Mesh wrap;
|
||||
CGAL::alpha_wrap_3(points, faces, alpha, offset, wrap);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, getopt
|
||||
|
||||
def compute_quality_benchmark_data(execname, filename, alpha):
|
||||
|
||||
output = ""
|
||||
cmd = (execname, "-i",
|
||||
filename, "-a", alpha)
|
||||
proc = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
start_new_session=True)
|
||||
|
||||
outs, errs = proc.communicate()
|
||||
output = outs.decode("utf-8") + errs.decode("utf-8")
|
||||
|
||||
print(output)
|
||||
|
||||
def main(argv):
|
||||
execname=""
|
||||
filename=""
|
||||
alpha=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'e:i:a:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-e":
|
||||
execname = arg
|
||||
elif opt == "-i":
|
||||
filename = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
|
||||
compute_quality_benchmark_data(execname, filename, alpha)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
// Copyright (c) 2019-2022 Google LLC (USA).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Pierre Alliez
|
||||
// Michael Hemmer
|
||||
// Cedric Portaneri
|
||||
|
||||
#ifndef CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_
|
||||
#define CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_
|
||||
|
||||
#include <CGAL/AABB_face_graph_triangle_primitive.h>
|
||||
#include <CGAL/AABB_traits.h>
|
||||
#include <CGAL/AABB_tree.h>
|
||||
#include <CGAL/bounding_box.h>
|
||||
#include <CGAL/Polygon_mesh_processing/bbox.h>
|
||||
#include <CGAL/Polygon_mesh_processing/distance.h>
|
||||
#include <CGAL/point_generators_3.h>
|
||||
#include <CGAL/Search_traits_3.h>
|
||||
|
||||
namespace Aw3i {
|
||||
|
||||
enum Distance_metric { HAUSDORFF = 0, MEAN = 1, RMS = 2 };
|
||||
|
||||
template <typename Point, typename AABBTree>
|
||||
inline double approximate_hausdorff_distance(const std::vector<Point>& sample_points,
|
||||
const AABBTree& tree,
|
||||
Point& hint)
|
||||
{
|
||||
double hdist = 0;
|
||||
for(const Point& pt : sample_points)
|
||||
{
|
||||
hint = tree.closest_point(pt, hint);
|
||||
auto dist = CGAL::squared_distance(hint, pt);
|
||||
double d = CGAL::to_double(CGAL::approximate_sqrt(dist));
|
||||
if(d > hdist)
|
||||
hdist = d;
|
||||
}
|
||||
|
||||
return hdist;
|
||||
}
|
||||
|
||||
template <typename Point, typename AABBTree>
|
||||
inline double approximate_mean_distance(const std::vector<Point>& sample_points,
|
||||
const AABBTree& tree,
|
||||
Point& hint)
|
||||
{
|
||||
double mdist = 0;
|
||||
for(const Point& pt : sample_points)
|
||||
{
|
||||
hint = tree.closest_point(pt, hint);
|
||||
auto dist = CGAL::squared_distance(hint, pt);
|
||||
double d = CGAL::to_double(CGAL::approximate_sqrt(dist));
|
||||
mdist += d;
|
||||
}
|
||||
|
||||
return mdist / sample_points.size();
|
||||
}
|
||||
|
||||
template <typename Point, typename AABBTree>
|
||||
inline double approximate_rms_distance(const std::vector<Point>& sample_points,
|
||||
const AABBTree& tree,
|
||||
Point& hint)
|
||||
{
|
||||
double rmsdist = 0;
|
||||
for(const Point& pt : sample_points)
|
||||
{
|
||||
hint = tree.closest_point(pt, hint);
|
||||
auto dist = CGAL::squared_distance(hint, pt);
|
||||
rmsdist += CGAL::to_double(dist);
|
||||
}
|
||||
|
||||
return CGAL::to_double(CGAL::approximate_sqrt(rmsdist / sample_points.size()));
|
||||
}
|
||||
|
||||
template <typename TriangleMesh>
|
||||
inline double approximate_distance(const TriangleMesh& tm1,
|
||||
const TriangleMesh& tm2,
|
||||
const Distance_metric& metric)
|
||||
{
|
||||
using GT = typename CGAL::GetGeomTraits<TriangleMesh>::type;
|
||||
using Point_3 = typename GT::Point_3;
|
||||
|
||||
using Primitive = CGAL::AABB_face_graph_triangle_primitive<TriangleMesh>;
|
||||
using AABB_traits = CGAL::AABB_traits<GT, Primitive>;
|
||||
using AABB_tree = CGAL::AABB_tree<AABB_traits>;
|
||||
|
||||
using CGAL::parameters::choose_parameter;
|
||||
using CGAL::parameters::get_parameter;
|
||||
|
||||
std::vector<Point_3> original_sample_points;
|
||||
CGAL::Polygon_mesh_processing::sample_triangle_mesh(tm1, std::back_inserter(original_sample_points),
|
||||
CGAL::parameters::all_default());
|
||||
|
||||
std::vector<Point_3> sample_points(std::begin(original_sample_points),
|
||||
std::end(original_sample_points));
|
||||
CGAL::spatial_sort(sample_points.begin(), sample_points.end());
|
||||
|
||||
AABB_tree tree(faces(tm2).first, faces(tm2).second, tm2);
|
||||
tree.build();
|
||||
|
||||
auto vpm_2 = get(CGAL::vertex_point, tm2);
|
||||
Point_3 hint = get(vpm_2, *vertices(tm2).first);
|
||||
|
||||
if(metric == HAUSDORFF)
|
||||
return approximate_hausdorff_distance(sample_points, tree, hint);
|
||||
else if(metric == MEAN)
|
||||
return approximate_mean_distance(sample_points, tree, hint);
|
||||
else if(metric == RMS)
|
||||
return approximate_rms_distance(sample_points, tree, hint);
|
||||
else
|
||||
std::cerr << "Metric unknown\n" << std::endl;
|
||||
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
template <typename TriangleMesh>
|
||||
double get_longest_diag_bbox(const TriangleMesh& tm)
|
||||
{
|
||||
CGAL::Bbox_3 bbox = CGAL::Polygon_mesh_processing::bbox(tm);
|
||||
return std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
}
|
||||
|
||||
template <typename TriangleMesh>
|
||||
inline double approximate_distance_relative_to_bbox(const TriangleMesh& tm1,
|
||||
const TriangleMesh& tm2,
|
||||
const Distance_metric& metric)
|
||||
{
|
||||
double longest_diag_length = get_longest_diag_bbox(tm1);
|
||||
return approximate_distance(tm1, tm2, metric) / longest_diag_length;
|
||||
}
|
||||
|
||||
template <typename TriangleMesh, typename FT>
|
||||
inline double approximate_distance_relative_to_bbox(const TriangleMesh& tm1,
|
||||
const TriangleMesh& tm2,
|
||||
const Distance_metric& metric,
|
||||
const FT& longest_diag_length)
|
||||
{
|
||||
return approximate_distance(tm1, tm2, metric) / CGAL::to_double(longest_diag_length);
|
||||
}
|
||||
|
||||
} // namespace Aw3i
|
||||
|
||||
#endif // CGAL_CGAL_ALPHA_WRAP_3_BENCHMARK_ALPHA_WRAP_3_QUALITY_DISTANCE_H_
|
||||
|
|
@ -0,0 +1,182 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, signal, getopt
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def main(argv):
|
||||
|
||||
inputdir=""
|
||||
outputdir=""
|
||||
commit_hash=""
|
||||
alpha=""
|
||||
do_diff=False
|
||||
diffdir=""
|
||||
diff_hash=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'i:a:o:c:d:p:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-i":
|
||||
inputdir = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
elif opt == "-o":
|
||||
outputdir = arg
|
||||
elif opt == "-c":
|
||||
commit_hash = arg
|
||||
elif opt == "-d":
|
||||
diff_hash = arg
|
||||
do_diff = True
|
||||
elif opt == "-p":
|
||||
diffdir = arg
|
||||
|
||||
all_metric = {
|
||||
"Mean_Min_Angle_(degree)" : {},
|
||||
"Mean_Max_Angle_(degree)" : {},
|
||||
"Mean_Radius_Ratio" : {},
|
||||
"Mean_Edge_Ratio" : {},
|
||||
"Mean_Aspect_Ratio" : {},
|
||||
"Complexity_(#_of_triangle)" : {},
|
||||
"#_of_almost_degenerate_triangle" : {},
|
||||
"Hausdorff_distance_output_to_input_(%_of_bbox_diag)" : {}}
|
||||
num_input = 0
|
||||
print("inputdir = ", inputdir)
|
||||
for filename in os.listdir(inputdir) :
|
||||
new_path = os.path.join(inputdir,filename)
|
||||
new_file = open(new_path)
|
||||
if do_diff :
|
||||
old_path = os.path.join(diffdir,filename)
|
||||
old_file = open(old_path)
|
||||
is_empty_old = os.path.getsize(old_path) <= 1
|
||||
for key in all_metric :
|
||||
try :
|
||||
new_val = float(new_file.readline().rstrip('\n'))
|
||||
old_val = float(old_file.readline().rstrip('\n'))
|
||||
mesh_id = str(filename.split('.')[0])
|
||||
all_metric[key][mesh_id] = [new_val, old_val]
|
||||
except ValueError:
|
||||
pass
|
||||
else :
|
||||
for key in all_metric :
|
||||
try :
|
||||
new_val = float(new_file.readline().rstrip('\n'))
|
||||
mesh_id = str(filename.split('.')[0])
|
||||
all_metric[key][mesh_id] = [new_val, new_val]
|
||||
except ValueError:
|
||||
pass
|
||||
num_input = num_input+1
|
||||
|
||||
# update .pdf chart
|
||||
date_now = datetime.datetime.now()
|
||||
date_for_filename = str(date_now.year) +"_"+ str(date_now.month) +"_"+ str(date_now.day) +"_"+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn"
|
||||
for key in all_metric:
|
||||
goal = 0
|
||||
if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)":
|
||||
goal = 60
|
||||
elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" :
|
||||
goal = 1
|
||||
|
||||
num_el = range(len(all_metric[key]))
|
||||
avg_diff_to_goal = 0.
|
||||
avg = 0.
|
||||
x1 = []
|
||||
x2 = []
|
||||
for value in all_metric[key].values() :
|
||||
avg += value[0]
|
||||
diff_to_goal = abs(value[1]-goal) - abs(value[0]-goal)
|
||||
avg_diff_to_goal += diff_to_goal
|
||||
x1.append(value[0])
|
||||
x2.append(value[1])
|
||||
avg_diff_to_goal /= float(len(all_metric[key]))
|
||||
avg /= float(len(all_metric[key]))
|
||||
|
||||
plt.figure(figsize=(8,8))
|
||||
if do_diff :
|
||||
plt.hist(x2, bins=100, color='tab:green', alpha=0.5)
|
||||
plt.hist(x1, bins=100, color='tab:blue', alpha=0.5)
|
||||
plt.vlines(x = goal, ymin=plt.ylim()[0], ymax=plt.ylim()[1], linestyles='dashed')
|
||||
|
||||
title = ""
|
||||
if do_diff :
|
||||
title += "Diff between " + commit_hash + " and " + diff_hash + " on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha
|
||||
else :
|
||||
title += "Benchmarking on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha
|
||||
|
||||
avg_str = str(format(abs(avg), '.2f'))
|
||||
if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)":
|
||||
title += "\nIn average we have " + avg_str + "°"
|
||||
elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" :
|
||||
title += "\nIn average we have a ratio of " + avg_str
|
||||
elif key == "Hausdorff_distance_output_to_input_(%_of_bbox_diag)" :
|
||||
title += "\nIn average we have a distance of " + avg_str + "% of bbox diag"
|
||||
elif key == "Complexity_(#_of_triangle)" or key == "#_of_almost_degenerate_triangle" :
|
||||
title += "\nIn average we have " + avg_str + " triangles"
|
||||
|
||||
if do_diff and avg_diff_to_goal == 0. :
|
||||
title += "\nNo change between the two commits"
|
||||
elif do_diff :
|
||||
avg_diff_str = str(format(abs(avg_diff_to_goal), '.2f'))
|
||||
if key == "Mean_Min_Angle_(degree)" or key == "Mean_Max_Angle_(degree)":
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we loose "
|
||||
else :
|
||||
title += "\nIn average we gain "
|
||||
title += avg_diff_str + "° toward 60°"
|
||||
elif key == "Mean_Radius_Ratio" or key == "Mean_Edge_Ratio" or key == "Mean_Aspect_Ratio" :
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we loose "
|
||||
else :
|
||||
title += "\nIn average we gain "
|
||||
title += avg_diff_str + " of ratio toward 1"
|
||||
elif key == "Hausdorff_distance_output_to_input_(%_of_bbox_diag)" :
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we increase by "
|
||||
else :
|
||||
title += "\nIn average we reduce by "
|
||||
title += avg_diff_str + " the bbox ratio"
|
||||
elif key == "Complexity_(#_of_triangle)" or key == "#_of_almost_degenerate_triangle" :
|
||||
if avg_diff_to_goal < 0 :
|
||||
title += "\nIn average we get " + avg_diff_str + " more"
|
||||
else :
|
||||
title += "\nIn average we get " + avg_diff_str + " less"
|
||||
title += " triangles"
|
||||
|
||||
plt.title(title, fontsize=15)
|
||||
plt.xlabel(key.replace("_"," "), fontsize=14)
|
||||
plt.ylabel("# of meshes", fontsize=14)
|
||||
plt.tick_params(axis="x", labelsize=9)
|
||||
plt.tick_params(axis="y", labelsize=9)
|
||||
|
||||
chart_filename = ""
|
||||
if do_diff :
|
||||
chart_filename += "diff_"+commit_hash+"_"+diff_hash+"_"+key+"_"+date_for_filename+".pdf"
|
||||
else :
|
||||
chart_filename += "results_"+commit_hash+"_"+key+"_"+date_for_filename+".pdf"
|
||||
chart_path = os.path.join(outputdir+"/charts",chart_filename)
|
||||
if os.path.isfile(chart_path) :
|
||||
os.remove(chart_path)
|
||||
plt.savefig(chart_path, bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
print("pdf updated")
|
||||
|
||||
sys.exit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,271 @@
|
|||
#include <distance_utils.h>
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
|
||||
#include <CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h>
|
||||
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel;
|
||||
using Point_3 = Kernel::Point_3;
|
||||
using Vector_3 = Kernel::Vector_3;
|
||||
using Triangle_3 = Kernel::Triangle_3;
|
||||
using FT = Kernel::FT;
|
||||
|
||||
using Mesh = CGAL::Surface_mesh<Point_3>;
|
||||
using face_descriptor = boost::graph_traits<Mesh>::face_descriptor;
|
||||
|
||||
using Oracle = CGAL::Alpha_wraps_3::internal::Triangle_mesh_oracle<Kernel>;
|
||||
using Dt = CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>::Triangulation;
|
||||
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
|
||||
std::array<FT, 3> triangle_angles(const Triangle_3& tr)
|
||||
{
|
||||
FT sq_a = CGAL::squared_distance(tr[0], tr[1]);
|
||||
FT sq_b = CGAL::squared_distance(tr[1], tr[2]);
|
||||
FT sq_c = CGAL::squared_distance(tr[2], tr[0]);
|
||||
|
||||
FT two_ab = 2. * CGAL::sqrt(sq_a) * CGAL::sqrt(sq_b);
|
||||
FT two_bc = 2. * CGAL::sqrt(sq_b) * CGAL::sqrt(sq_c);
|
||||
FT two_ca = 2. * CGAL::sqrt(sq_c) * CGAL::sqrt(sq_a);
|
||||
|
||||
FT angle_a = (sq_b + sq_c - sq_a) / two_bc;
|
||||
FT angle_b = (sq_c + sq_a - sq_b) / two_ca;
|
||||
FT angle_c = (sq_a + sq_b - sq_c) / two_ab;
|
||||
if(angle_a < -1.) angle_a = -1.;
|
||||
if(angle_b < -1.) angle_b = -1.;
|
||||
if(angle_c < -1.) angle_c = -1.;
|
||||
if(angle_a > 1.) angle_a = 1.;
|
||||
if(angle_b > 1.) angle_b = 1.;
|
||||
if(angle_c > 1.) angle_c = 1.;
|
||||
angle_a = std::acos(angle_a);
|
||||
angle_b = std::acos(angle_b);
|
||||
angle_c = std::acos(angle_c);
|
||||
|
||||
return {angle_a, angle_b, angle_c};
|
||||
}
|
||||
|
||||
bool is_almost_degenerate(const Triangle_3& tr,
|
||||
double threshold)
|
||||
{
|
||||
FT sq_area = tr.squared_area();
|
||||
return (CGAL::sqrt(CGAL::to_double(sq_area)) < threshold);
|
||||
}
|
||||
|
||||
auto surface_mesh_face_to_triangle(const face_descriptor fd,
|
||||
const Mesh& sm)
|
||||
{
|
||||
typename boost::graph_traits<Mesh>::halfedge_descriptor hd = halfedge(fd,sm);
|
||||
return Triangle_3(sm.point(target(hd,sm)),
|
||||
sm.point(target(next(hd,sm),sm)),
|
||||
sm.point(target(next(next(hd,sm),sm),sm)));
|
||||
}
|
||||
|
||||
double mean_min_angle(const Mesh& mesh)
|
||||
{
|
||||
double mean_min_angle = 0.;
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
std::array<FT, 3> angles = triangle_angles(tr);
|
||||
|
||||
FT min_angle = std::min({angles[0], angles[1], angles[2]});
|
||||
|
||||
min_angle = min_angle * (180.0 / CGAL_PI);
|
||||
mean_min_angle += min_angle;
|
||||
}
|
||||
|
||||
mean_min_angle /= static_cast<double>(mesh.number_of_faces());
|
||||
return mean_min_angle;
|
||||
}
|
||||
|
||||
double mean_max_angle(const Mesh& mesh)
|
||||
{
|
||||
double mean_max_angle = 0.;
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
std::array<FT, 3> angles = triangle_angles(tr);
|
||||
|
||||
FT max_angle = std::max({angles[0], angles[1], angles[2]});
|
||||
|
||||
max_angle = max_angle * (180.0 / CGAL_PI);
|
||||
mean_max_angle += max_angle;
|
||||
}
|
||||
|
||||
mean_max_angle /= static_cast<double>(mesh.number_of_faces());
|
||||
return mean_max_angle;
|
||||
}
|
||||
|
||||
double mean_radius_ratio(const Mesh& mesh,
|
||||
double degenerate_threshold)
|
||||
{
|
||||
double mean_radius_ratio = 0.;
|
||||
size_t num_almost_degenerate_tri = 0;
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
if(is_almost_degenerate(tr, degenerate_threshold))
|
||||
{
|
||||
++num_almost_degenerate_tri;
|
||||
continue;
|
||||
}
|
||||
|
||||
FT circumsphere_radius = std::sqrt(CGAL::squared_radius(tr[0], tr[1], tr[2]));
|
||||
|
||||
FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1]));
|
||||
FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2]));
|
||||
FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0]));
|
||||
FT s = 0.5 * (a + b + c);
|
||||
FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s);
|
||||
FT radius_ratio = circumsphere_radius / inscribed_radius;
|
||||
radius_ratio /= 2.; // normalized
|
||||
mean_radius_ratio += radius_ratio;
|
||||
}
|
||||
|
||||
mean_radius_ratio /= static_cast<double>(mesh.number_of_faces() - num_almost_degenerate_tri);
|
||||
return mean_radius_ratio;
|
||||
}
|
||||
|
||||
double mean_edge_ratio(const Mesh& mesh,
|
||||
double degenerate_threshold)
|
||||
{
|
||||
double mean_edge_ratio = 0.;
|
||||
size_t num_almost_degenerate_tri = 0;
|
||||
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
if(is_almost_degenerate(tr, degenerate_threshold))
|
||||
{
|
||||
++num_almost_degenerate_tri;
|
||||
continue;
|
||||
}
|
||||
|
||||
FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1]));
|
||||
FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2]));
|
||||
FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0]));
|
||||
FT min_edge = std::min({a, b, c});
|
||||
FT max_edge = std::max({a, b, c});
|
||||
FT edge_ratio = max_edge / min_edge;
|
||||
|
||||
mean_edge_ratio += edge_ratio;
|
||||
}
|
||||
|
||||
mean_edge_ratio /= static_cast<double>(mesh.number_of_faces() - num_almost_degenerate_tri);
|
||||
return mean_edge_ratio;
|
||||
}
|
||||
|
||||
double mean_aspect_ratio(const Mesh& mesh,
|
||||
double degenerate_threshold)
|
||||
{
|
||||
double mean_aspect_ratio = 0.;
|
||||
size_t num_almost_degenerate_tri = 0;
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
if(is_almost_degenerate(tr, degenerate_threshold))
|
||||
{
|
||||
++num_almost_degenerate_tri;
|
||||
continue;
|
||||
}
|
||||
|
||||
FT a = std::sqrt(CGAL::squared_distance(tr[0], tr[1]));
|
||||
FT b = std::sqrt(CGAL::squared_distance(tr[1], tr[2]));
|
||||
FT c = std::sqrt(CGAL::squared_distance(tr[2], tr[0]));
|
||||
FT s = 0.5 * (a + b + c);
|
||||
FT inscribed_radius = std::sqrt((s * (s - a) * (s - b) * (s - c)) / s);
|
||||
FT max_edge = std::max({a, b, c});
|
||||
FT aspect_ratio = max_edge / inscribed_radius;
|
||||
aspect_ratio /= (2. * std::sqrt(3.)); // normalized
|
||||
mean_aspect_ratio += aspect_ratio;
|
||||
}
|
||||
|
||||
mean_aspect_ratio /= static_cast<double>(mesh.number_of_faces() - num_almost_degenerate_tri);
|
||||
return mean_aspect_ratio;
|
||||
}
|
||||
|
||||
size_t num_almost_degenerate_tri(const Mesh& mesh,
|
||||
double degenerate_threshold)
|
||||
{
|
||||
size_t num_almost_degenerate_tri = 0;
|
||||
for(const face_descriptor f : faces(mesh))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, mesh);
|
||||
if(is_almost_degenerate(tr, degenerate_threshold))
|
||||
{
|
||||
++num_almost_degenerate_tri;
|
||||
}
|
||||
}
|
||||
return num_almost_degenerate_tri;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const int argc_check = argc - 1;
|
||||
char *entry_name_ptr = nullptr;
|
||||
double relative_alpha_ratio = 20.;
|
||||
double relative_offset_ratio = 600.;
|
||||
|
||||
for(int i=1; i<argc; ++i)
|
||||
{
|
||||
if(!strcmp("-i", argv[i]) && i < argc_check) {
|
||||
entry_name_ptr = argv[++i];
|
||||
} else if(!strcmp("-a", argv[i]) && i < argc_check) {
|
||||
relative_alpha_ratio = std::stod(argv[++i]);
|
||||
} else if(!strcmp("-d", argv[i]) && i < argc_check) {
|
||||
relative_offset_ratio = std::stod(argv[++i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(argc < 3 || relative_alpha_ratio <= 0.)
|
||||
{
|
||||
std::cerr << "Error: bad input parameters." << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Mesh input_mesh;
|
||||
if(!PMP::IO::read_polygon_mesh(entry_name_ptr, input_mesh) ||
|
||||
is_empty(input_mesh) ||
|
||||
!is_triangle_mesh(input_mesh))
|
||||
{
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
CGAL::Bbox_3 bbox = PMP::bbox(input_mesh);
|
||||
const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
const double alpha = diag_length / relative_alpha_ratio;
|
||||
const double offset = diag_length / relative_offset_ratio;
|
||||
|
||||
Mesh wrap;
|
||||
CGAL::alpha_wrap_3(input_mesh, alpha, offset, wrap);
|
||||
|
||||
double degenerate_threshold = 0.;
|
||||
for(const face_descriptor f : faces(wrap))
|
||||
{
|
||||
const Triangle_3 tr = surface_mesh_face_to_triangle(f, wrap);
|
||||
degenerate_threshold += CGAL::sqrt(CGAL::to_double(tr.squared_area()));
|
||||
}
|
||||
|
||||
degenerate_threshold /= wrap.number_of_faces();
|
||||
degenerate_threshold /= 1000;
|
||||
|
||||
std::cout << mean_min_angle(wrap) << "\n";
|
||||
std::cout << mean_max_angle(wrap) << "\n";
|
||||
std::cout << mean_radius_ratio(wrap, degenerate_threshold) << "\n";
|
||||
std::cout << mean_edge_ratio(wrap, degenerate_threshold) << "\n";
|
||||
std::cout << mean_aspect_ratio(wrap, degenerate_threshold) << "\n";
|
||||
std::cout << wrap.number_of_faces() << "\n";
|
||||
std::cout << num_almost_degenerate_tri(wrap, degenerate_threshold) << "\n";
|
||||
std::cout << 100. * approximate_distance_relative_to_bbox(wrap, input_mesh, Aw3i::HAUSDORFF) << "\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, signal, getopt
|
||||
|
||||
def signal_handler(signum, frame):
|
||||
raise Exception("Timed out!")
|
||||
|
||||
def compute_robustness_benchmark_data(execname, filename, alpha, max_time):
|
||||
|
||||
exit_codes = {
|
||||
0 : "VALID_SOLID_OUTPUT",
|
||||
1 : "INPUT_IS_INVALID",
|
||||
2 : "OUTPUT_IS_NOT_TRIANGLE_MESH",
|
||||
3 : "OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD",
|
||||
4 : "OUTPUT_HAS_BORDERS",
|
||||
5 : "OUTPUT_HAS_DEGENERATED_FACES",
|
||||
6 : "OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS",
|
||||
7 : "OUTPUT_DOES_NOT_BOUND_VOLUME",
|
||||
8 : "OUTPUT_DOES_NOT_CONTAIN_INPUT",
|
||||
9 : "OUTPUT_DISTANCE_IS_TOO_LARGE",
|
||||
10 : "SIGSEGV",
|
||||
11 : "SIGABRT",
|
||||
12 : "SIGFPE",
|
||||
13 : "TIMEOUT"
|
||||
}
|
||||
|
||||
exit_code = 0
|
||||
output = ""
|
||||
cmd = ("/usr/bin/time", "-v",
|
||||
execname, "-i",
|
||||
filename, "-a", alpha)
|
||||
proc = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
start_new_session=True)
|
||||
|
||||
try:
|
||||
outs, errs = proc.communicate(timeout=int(max_time))
|
||||
exit_code = proc.returncode
|
||||
output = outs.decode("utf-8") + errs.decode("utf-8")
|
||||
|
||||
for output_line in output.split("\n"):
|
||||
if output_line == "Command terminated by signal 11":
|
||||
exit_code = 10
|
||||
continue
|
||||
elif output_line == "Command terminated by signal 6":
|
||||
exit_code = 11
|
||||
continue
|
||||
elif output_line == "Command terminated by signal 8":
|
||||
exit_code = 12
|
||||
continue
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
|
||||
exit_code = 13
|
||||
output = "process ran too long"
|
||||
|
||||
print(exit_codes[exit_code])
|
||||
|
||||
def main(argv):
|
||||
execname=""
|
||||
filename=""
|
||||
alpha=""
|
||||
max_time=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'e:i:a:t:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-e":
|
||||
execname = arg
|
||||
elif opt == "-i":
|
||||
filename = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
elif opt == "-t":
|
||||
max_time = arg
|
||||
|
||||
compute_robustness_benchmark_data(execname, filename, alpha, max_time)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
#
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, subprocess, datetime, time, signal, getopt
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def main(argv):
|
||||
|
||||
inputdir=""
|
||||
outputdir=""
|
||||
commit_hash=""
|
||||
alpha=""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'i:a:o:c:')
|
||||
except getopt.GetoptError:
|
||||
sys.exit(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-i":
|
||||
inputdir = arg
|
||||
elif opt == "-a":
|
||||
alpha = arg
|
||||
elif opt == "-o":
|
||||
outputdir = arg
|
||||
elif opt == "-c":
|
||||
commit_hash = arg
|
||||
|
||||
exit_codes = {
|
||||
0 : "VALID_SOLID_OUTPUT",
|
||||
1 : "INPUT_IS_INVALID",
|
||||
2 : "OUTPUT_IS_NOT_TRIANGLE_MESH",
|
||||
3 : "OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD",
|
||||
4 : "OUTPUT_HAS_BORDERS",
|
||||
5 : "OUTPUT_HAS_DEGENERATED_FACES",
|
||||
6 : "OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS",
|
||||
7 : "OUTPUT_DOES_NOT_BOUND_VOLUME",
|
||||
8 : "OUTPUT_DOES_NOT_CONTAIN_INPUT",
|
||||
9 : "OUTPUT_DISTANCE_IS_TOO_LARGE",
|
||||
10 : "SIGSEGV",
|
||||
11 : "SIGABRT",
|
||||
12 : "SIGFPE",
|
||||
13 : "TIMEOUT"
|
||||
}
|
||||
|
||||
current_run_data = {
|
||||
"VALID_SOLID_OUTPUT" : 0,
|
||||
"INPUT_IS_INVALID" : 0,
|
||||
"OUTPUT_IS_NOT_TRIANGLE_MESH" : 0,
|
||||
"OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD" : 0,
|
||||
"OUTPUT_HAS_BORDERS" : 0,
|
||||
"OUTPUT_HAS_DEGENERATED_FACES" : 0,
|
||||
"OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS" : 0,
|
||||
"OUTPUT_DOES_NOT_BOUND_VOLUME" : 0,
|
||||
"OUTPUT_DOES_NOT_CONTAIN_INPUT" : 0,
|
||||
"OUTPUT_DISTANCE_IS_TOO_LARGE" : 0,
|
||||
"SIGSEGV" : 0,
|
||||
"SIGABRT" : 0,
|
||||
"SIGFPE" : 0,
|
||||
"TIMEOUT" : 0
|
||||
}
|
||||
|
||||
filenames_per_codes = {}
|
||||
for key in current_run_data :
|
||||
filenames_per_codes[key] = []
|
||||
|
||||
print("inputdir = ", inputdir)
|
||||
|
||||
num_input = 0
|
||||
for filename in os.listdir(inputdir) :
|
||||
print("filename = ", filename)
|
||||
|
||||
f = open(os.path.join(inputdir,filename))
|
||||
status = f.readline().rstrip('\n');
|
||||
current_run_data[status] += 1
|
||||
filenames_per_codes[status].append(filename.rstrip('.log'))
|
||||
num_input = num_input+1
|
||||
|
||||
# sort current_run_data by value
|
||||
current_run_data = {k: v for k, v in sorted(current_run_data.items(), key=lambda item: item[1], reverse=True)}
|
||||
|
||||
# update chart data files
|
||||
date_now = datetime.datetime.now()
|
||||
date = str(date_now.year) +"-"+ str(date_now.month) +"-"+ str(date_now.day) +" "+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn"
|
||||
|
||||
for key_filename in current_run_data:
|
||||
f = open(os.path.join(outputdir+"/charts_data", key_filename+".txt"), "a+")
|
||||
f.write(str(current_run_data[key_filename]) + " " + commit_hash + " " + date + "\n")
|
||||
|
||||
print("chart data updated")
|
||||
|
||||
# update .pdf chart
|
||||
chart = plt.figure(figsize=(10, 7))
|
||||
colormap = ["tab:blue","tab:orange","tab:green","tab:red","tab:purple","tab:brown","tab:pink","tab:gray","tab:olive","tab:cyan","b","palegreen", "peachpuff"]
|
||||
plt.gca().set_prop_cycle('color', colormap)
|
||||
plt.style.use('tableau-colorblind10')
|
||||
for key_filename in current_run_data:
|
||||
|
||||
f = open(os.path.join(outputdir+"/charts_data", key_filename+".txt"), "r")
|
||||
lines = f.readlines()
|
||||
x_number_values = []
|
||||
y_number_values = []
|
||||
i = 0
|
||||
for line in lines :
|
||||
if i < (len(lines) - 10) :
|
||||
i=i+1
|
||||
continue
|
||||
|
||||
i=i+1
|
||||
words = line.strip().split()
|
||||
x_number_values.append(words[1]+"\n"+words[2]+"\n"+words[3])
|
||||
y_number_values.append(int(words[0]))
|
||||
plt.plot(x_number_values, y_number_values, marker='o', label=key_filename+": "+str(current_run_data[key_filename]))
|
||||
|
||||
plt.xlabel("Version", fontsize=14)
|
||||
plt.ylabel("# of mesh", fontsize=14)
|
||||
plt.tick_params(axis="both", labelsize=9)
|
||||
plt.title("Benchmarking on " + str(num_input) + " meshes from Thingi10K\nAlpha = Bbox diag length / " + alpha, fontsize=15)
|
||||
plt.legend(loc='lower left', bbox_to_anchor= (1.01, 0.58), ncol=1,
|
||||
borderaxespad=0, frameon=False)
|
||||
|
||||
date_for_filename = str(date_now.year) +"-"+ str(date_now.month) +"-"+ str(date_now.day) +"-"+ str(date_now.hour) +"h"+ str(date_now.minute) +"mn"
|
||||
chart_filename = os.path.join(outputdir+"/charts","benchmarking_version_"+commit_hash+"-"+date_for_filename+".pdf")
|
||||
if os.path.isfile(chart_filename) :
|
||||
os.remove(chart_filename)
|
||||
chart.savefig(chart_filename, bbox_inches="tight")
|
||||
plt.close(chart)
|
||||
|
||||
print("pdf updated")
|
||||
|
||||
# dump filenames per codes
|
||||
log_dirname = os.path.join(outputdir, "log/"+commit_hash+"-"+date_for_filename)
|
||||
if not os.path.exists(log_dirname):
|
||||
os.mkdir(log_dirname)
|
||||
for key in filenames_per_codes :
|
||||
file = open(os.path.join(log_dirname, key+".txt"), "w+")
|
||||
for filename in filenames_per_codes[key] :
|
||||
file.write(filename + "\n")
|
||||
file.close()
|
||||
|
||||
sys.exit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include <CGAL/Alpha_wrap_3/internal/validation.h>
|
||||
|
||||
#include <CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h>
|
||||
|
||||
using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel;
|
||||
using Point_3 = Kernel::Point_3;
|
||||
using Mesh = CGAL::Surface_mesh<Point_3>;
|
||||
|
||||
namespace CGAL {
|
||||
namespace Alpha_wraps_3 {
|
||||
namespace internal {
|
||||
namespace {
|
||||
|
||||
enum Robustness_benchmark_exit_code
|
||||
{
|
||||
// Success
|
||||
VALID_SOLID_OUTPUT = 0,
|
||||
|
||||
// Failure
|
||||
INPUT_IS_INVALID = 1,
|
||||
OUTPUT_IS_NOT_TRIANGLE_MESH = 2,
|
||||
OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD = 3,
|
||||
OUTPUT_HAS_BORDERS = 4,
|
||||
OUTPUT_HAS_DEGENERATED_FACES = 5,
|
||||
OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS = 6,
|
||||
OUTPUT_DOES_NOT_BOUND_VOLUME = 7,
|
||||
OUTPUT_DOES_NOT_CONTAIN_INPUT = 8,
|
||||
OUTPUT_DISTANCE_IS_TOO_LARGE = 9,
|
||||
};
|
||||
|
||||
} // namespace
|
||||
} // namespace internal
|
||||
} // namespace Alpha_wraps_3
|
||||
} // namespace CGAL
|
||||
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
namespace AW3i = CGAL::Alpha_wraps_3::internal;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const int argc_check = argc - 1;
|
||||
char* entry_name_ptr = nullptr;
|
||||
double relative_alpha_ratio = 20.;
|
||||
double relative_offset_ratio = 600.;
|
||||
|
||||
for(int i=1; i<argc; ++i)
|
||||
{
|
||||
if(!strcmp("-i", argv[i]) && i < argc_check) {
|
||||
entry_name_ptr = argv[++i];
|
||||
} else if(!strcmp("-a", argv[i]) && i < argc_check) {
|
||||
relative_alpha_ratio = std::stod(argv[++i]);
|
||||
} else if(!strcmp("-d", argv[i]) && i < argc_check) {
|
||||
relative_offset_ratio = std::stod(argv[++i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(argc < 3 || relative_alpha_ratio <= 0.)
|
||||
return AW3i::INPUT_IS_INVALID;
|
||||
|
||||
Mesh input_mesh;
|
||||
if(!PMP::IO::read_polygon_mesh(entry_name_ptr, input_mesh) ||
|
||||
is_empty(input_mesh) ||
|
||||
!is_triangle_mesh(input_mesh)
|
||||
#ifndef CGAL_ALPHA_WRAP_3_TOLERATE_DEGENERACIES
|
||||
|| AW3i::has_degenerated_faces(input_mesh)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
return AW3i::INPUT_IS_INVALID;
|
||||
}
|
||||
|
||||
const CGAL::Bbox_3 bbox = PMP::bbox(input_mesh);
|
||||
const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
const double alpha = diag_length / relative_alpha_ratio;
|
||||
const double offset = diag_length / relative_offset_ratio;
|
||||
|
||||
Mesh wrap;
|
||||
alpha_wrap_3(input_mesh, alpha, offset, wrap);
|
||||
|
||||
if(!is_triangle_mesh(wrap))
|
||||
return AW3i::OUTPUT_IS_NOT_TRIANGLE_MESH;
|
||||
|
||||
if(!is_closed(wrap))
|
||||
return AW3i::OUTPUT_HAS_BORDERS;
|
||||
|
||||
if(AW3i::has_degenerated_faces(wrap))
|
||||
return AW3i::OUTPUT_HAS_DEGENERATED_FACES;
|
||||
|
||||
if(AW3i::is_combinatorially_non_manifold(wrap))
|
||||
return AW3i::OUTPUT_IS_COMBINATORIAL_NON_MANIFOLD;
|
||||
|
||||
if(PMP::does_self_intersect(wrap))
|
||||
return AW3i::OUTPUT_HAS_GEOMETRIC_SELF_INTERSECTIONS;
|
||||
|
||||
if(!PMP::does_bound_a_volume(wrap))
|
||||
return AW3i::OUTPUT_DOES_NOT_BOUND_VOLUME;
|
||||
|
||||
if(!AW3i::is_outer_wrap_of_triangle_mesh(wrap, input_mesh))
|
||||
return AW3i::OUTPUT_DOES_NOT_CONTAIN_INPUT;
|
||||
|
||||
if(!AW3i::has_expected_Hausdorff_distance(wrap, input_mesh, alpha, offset))
|
||||
return AW3i::OUTPUT_DISTANCE_IS_TOO_LARGE;
|
||||
|
||||
return AW3i::VALID_SOLID_OUTPUT;
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
# Copyright (c) 2019-2023 Google LLC (USA).
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is part of the 3D Alpha Wrapping package, which is being prepared for
|
||||
# submission to CGAL (www.cgal.org).
|
||||
#
|
||||
# $URL$
|
||||
# $Id$
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
#
|
||||
# Author(s) : Pierre Alliez
|
||||
# Michael Hemmer
|
||||
# Cedric Portaneri
|
||||
# Mael Rouxel-Labbé
|
||||
#
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# $1: directory containing the alpha wrap project
|
||||
# $2: directory containing the output results
|
||||
# $3: alpha value
|
||||
# $4: timeout value in seconds
|
||||
# $5: hash of the latest commit
|
||||
# $6: the input file path
|
||||
function compute_benchmark_data() {
|
||||
filename=$(basename -- "$6")
|
||||
filename="${filename%.*}"
|
||||
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/compute_robustness_benchmark_data.py \
|
||||
-e $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/build-release/robustness_benchmark -i $6 -a $3 -t $4 \
|
||||
> $2/Robustness/results/$5/$filename.log
|
||||
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/compute_performance_benchmark_data.py \
|
||||
-e $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/build-release/performance_benchmark -i $6 -a $3 \
|
||||
> $2/Performance/results/$5/$filename.log
|
||||
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/compute_quality_benchmark_data.py \
|
||||
-e $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/build-release/quality_benchmark -i $6 -a $3 \
|
||||
> $2/Quality/results/$5/$filename.log
|
||||
}
|
||||
export -f compute_benchmark_data
|
||||
|
||||
# $1: directory containing the alpha wrap project
|
||||
# $2: directory containing the input data folder
|
||||
# $3: directory containing the output results
|
||||
# $4: alpha value
|
||||
# $5: timeout value for robustness benchmark in seconds
|
||||
# $6: number of virtual thread used
|
||||
# $7: hash of the latest commit
|
||||
# $8: hash of a commit to perform the diff with latest
|
||||
cd $1
|
||||
|
||||
mkdir -p $3/Robustness/results/$7
|
||||
mkdir -p $3/Performance/results/$7
|
||||
mkdir -p $3/Quality/results/$7
|
||||
mkdir -p $3/Robustness/charts_data
|
||||
mkdir -p $3/Performance/charts_data
|
||||
mkdir -p $3/Quality/charts_data
|
||||
mkdir -p $3/Robustness/charts
|
||||
mkdir -p $3/Performance/charts
|
||||
mkdir -p $3/Quality/charts
|
||||
mkdir -p $3/Robustness/log
|
||||
mkdir -p $3/Performance/log
|
||||
mkdir -p $3/Quality/log
|
||||
mkdir -p $3/charts
|
||||
|
||||
find $2 -mindepth 1 | parallel -j$6 compute_benchmark_data $1 $3 $4 $5 $7 :::
|
||||
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Robustness/generate_robustness_benchmark_charts.py -i $3/Robustness/results/$7 -o $3/Robustness -a $4 -c $7
|
||||
|
||||
if [ -z "$8" ]; then
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py -i $3/Performance/results/$7 -o $3/Performance -a $4 -c $7;
|
||||
else
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Performance/generate_performance_benchmark_charts.py -i $3/Performance/results/$7 -o $3/Performance -a $4 -c $7 -p $3/Performance/results/$8 -d $8;
|
||||
fi
|
||||
|
||||
if [ -z "$8" ]; then
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py -i $3/Quality/results/$7 -o $3/Quality -a $4 -c $7;
|
||||
else
|
||||
python3 $1/Alpha_wrap_3/benchmark/Alpha_wrap_3/Quality/generate_quality_benchmark_charts.py -i $3/Quality/results/$7 -o $3/Quality -a $4 -c $7 -p $3/Quality/results/$8 -d $8;
|
||||
fi
|
||||
|
||||
charts_path="$(ls "$3/Robustness/charts"/* -dArt | tail -n 1) $(ls "$3/Performance/charts"/* -dArt | tail -n 2) $(ls "$3/Quality/charts"/* -dArt | tail -n 9)"
|
||||
|
||||
pdfjam --nup 2x6 $charts_path --outfile $3/charts/results_$7_$8_alpha_$4_$(date '+%Y-%m-%d_%H:%M:%S').pdf
|
||||
|
|
@ -13,3 +13,5 @@ create_single_source_cgal_program("point_set_wrap.cpp")
|
|||
create_single_source_cgal_program("wrap_from_cavity.cpp")
|
||||
create_single_source_cgal_program("mixed_inputs_wrap.cpp")
|
||||
create_single_source_cgal_program("volumetric_wrap.cpp")
|
||||
create_single_source_cgal_program("successive_wraps.cpp")
|
||||
create_single_source_cgal_program("pause_and_resume_wrapping.cpp")
|
||||
|
|
|
|||
|
|
@ -103,10 +103,10 @@ int main(int argc, char** argv)
|
|||
oracle.add_segment_soup(segments, CGAL::parameters::default_values());
|
||||
oracle.add_point_set(ps_points, CGAL::parameters::default_values());
|
||||
|
||||
CGAL::Alpha_wraps_3::internal::Alpha_wrap_3<Oracle> aw3(oracle);
|
||||
CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle> aw3(oracle);
|
||||
|
||||
Mesh output_mesh;
|
||||
aw3(alpha, offset, output_mesh);
|
||||
Mesh wrap;
|
||||
aw3(alpha, offset, wrap);
|
||||
|
||||
t.stop();
|
||||
std::cout << "Took " << t.time() << std::endl;
|
||||
|
|
@ -120,10 +120,11 @@ int main(int argc, char** argv)
|
|||
std::string ps_name = std::string(ps_filename);
|
||||
ps_name = ps_name.substr(ps_name.find_last_of("/") + 1, ps_name.length() - 1);
|
||||
ps_name = ps_name.substr(0, ps_name.find_last_of("."));
|
||||
std::string output_name = ts_name + "_" + ss_name + "_" + ps_name + "_" + std::to_string(static_cast<int>(relative_alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
std::string output_name = ts_name + "_" + ss_name + "_" + ps_name + "_"
|
||||
+ std::to_string(static_cast<int>(relative_alpha)) + "_"
|
||||
+ std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, output_mesh, CGAL::parameters::stream_precision(17));
|
||||
CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H
|
||||
#define CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H
|
||||
|
||||
#include <string>
|
||||
|
||||
std::string generate_output_name(std::string input_name,
|
||||
const double alpha,
|
||||
const double offset)
|
||||
{
|
||||
input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1);
|
||||
input_name = input_name.substr(0, input_name.find_last_of("."));
|
||||
std::string output_name = input_name
|
||||
+ "_" + std::to_string(static_cast<int>(alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(offset)) + ".off";
|
||||
|
||||
return output_name;
|
||||
}
|
||||
|
||||
#endif // CGAL_ALPHA_WRAP_3_EXAMPLES_OUTPUT_HELPER_H
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
// This example demonstrates how to interrupt the wrapping process before it has terminated,
|
||||
// and how to resume afterwards.
|
||||
//
|
||||
// -------------------------------- !! Warning !! --------------------------------------------------
|
||||
// By default, the wrapper uses an unsorted LIFO queue of faces to refine. This means that
|
||||
// the intermediate result is not very useful because the algorithm carves deep and not wide
|
||||
// (somewhat like a DFS vs a BFS).
|
||||
//
|
||||
// The sorted queue option is enabled with the macro below to make the refinement algorithm
|
||||
// more uniform. The downside is that it is slower.
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
#define CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
|
||||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include <CGAL/IO/polygon_soup_io.h>
|
||||
#include <CGAL/Polygon_mesh_processing/measure.h>
|
||||
#include <CGAL/Random.h>
|
||||
#include <CGAL/Timer.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
namespace AW3 = CGAL::Alpha_wraps_3;
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
|
||||
using K = CGAL::Exact_predicates_inexact_constructions_kernel;
|
||||
using Point_3 = K::Point_3;
|
||||
|
||||
using Points = std::vector<Point_3>;
|
||||
using Face = std::array<std::size_t, 3>;
|
||||
using Faces = std::vector<Face>;
|
||||
|
||||
using Mesh = CGAL::Surface_mesh<Point_3>;
|
||||
using face_descriptor = boost::graph_traits<Mesh>::face_descriptor;
|
||||
|
||||
struct Interrupter_visitor
|
||||
: public AW3::internal::Wrapping_default_visitor
|
||||
{
|
||||
using Base = AW3::internal::Wrapping_default_visitor;
|
||||
|
||||
CGAL::Real_timer timer;
|
||||
double max_time = -1; // in seconds
|
||||
|
||||
public:
|
||||
void set_max_time(double t) { max_time = t; }
|
||||
|
||||
public:
|
||||
template <typename AlphaWrapper>
|
||||
void on_flood_fill_begin(const AlphaWrapper&)
|
||||
{
|
||||
std::cout << "Starting timer..." << std::endl;
|
||||
timer.start();
|
||||
}
|
||||
|
||||
template <typename Wrapper>
|
||||
bool go_further(const Wrapper&)
|
||||
{
|
||||
if(timer.time() > max_time)
|
||||
{
|
||||
timer.stop();
|
||||
std::cout << "Paused after " << timer.time() << " s." << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
std::cout.precision(17);
|
||||
std::cerr.precision(17);
|
||||
|
||||
CGAL::Random rng;
|
||||
std::cout << "Random seed = " << rng.get_seed() << std::endl;
|
||||
|
||||
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/armadillo.off");
|
||||
|
||||
// = read the soup
|
||||
Points points;
|
||||
Faces faces;
|
||||
if(!CGAL::IO::read_polygon_soup(filename, points, faces) || faces.empty())
|
||||
{
|
||||
std::cerr << "Invalid soup input: " << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
std::cout << "Input: " << points.size() << " points, " << faces.size() << " faces" << std::endl;
|
||||
|
||||
// Compute the alpha and offset values
|
||||
const double relative_alpha = (argc > 2) ? std::stod(argv[2]) : rng.get_double(150., 200.);
|
||||
const double relative_offset = (argc > 3) ? std::stod(argv[3]) : 600.;
|
||||
std::cout << "relative_alpha = " << relative_alpha << std::endl;
|
||||
|
||||
CGAL::Bbox_3 bbox;
|
||||
for(const Point_3& p : points)
|
||||
bbox += p.bbox();
|
||||
|
||||
const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
|
||||
const double alpha = diag_length / relative_alpha;
|
||||
const double offset = diag_length / relative_offset;
|
||||
|
||||
// Build the wrapper
|
||||
using Oracle = CGAL::Alpha_wraps_3::internal::Triangle_soup_oracle<K>;
|
||||
Oracle oracle(alpha);
|
||||
oracle.add_triangle_soup(points, faces, CGAL::parameters::default_values());
|
||||
CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle> aw3(oracle);
|
||||
|
||||
// --- Launch the wrapping, and pause when the algorithm has spent 1s flooding
|
||||
Interrupter_visitor interrupter;
|
||||
interrupter.set_max_time(1.);
|
||||
|
||||
Mesh wrap;
|
||||
aw3(alpha, offset, wrap, CGAL::parameters::visitor(interrupter));
|
||||
std::cout << ">>> The current wrap has " << num_vertices(wrap) << " vertices" << std::endl;
|
||||
CGAL::IO::write_polygon_mesh("stopped_1.off", wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
// --- Restart from the previous state, and pause a bit further
|
||||
interrupter.set_max_time(2.);
|
||||
aw3(alpha, offset, wrap, CGAL::parameters::visitor(interrupter)
|
||||
.refine_triangulation(true));
|
||||
std::cout << ">>> The current wrap has " << num_vertices(wrap) << " vertices" << std::endl;
|
||||
CGAL::IO::write_polygon_mesh("stopped_2.off", wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
// --- Restart from the previous state, and let it finish
|
||||
aw3(alpha, offset, wrap, CGAL::parameters::refine_triangulation(true));
|
||||
std::cout << ">>> The final (resumed) wrap has " << num_vertices(wrap) << " vertices" << std::endl;
|
||||
std::string output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << "resumed_" + output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh("resumed_" + output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
// --- Get the final wrap, in one go:
|
||||
Mesh single_pass_wrap;
|
||||
CGAL::alpha_wrap_3(points, faces, alpha, offset, single_pass_wrap);
|
||||
std::cout << ">>> The final (from scratch) wrap has " << num_vertices(single_pass_wrap) << " vertices" << std::endl;
|
||||
|
||||
output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, single_pass_wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
// --- Compare the results to ensure both approaches yield identical meshes
|
||||
std::vector<std::pair<face_descriptor, face_descriptor> > common;
|
||||
std::vector<face_descriptor> m1_only;
|
||||
std::vector<face_descriptor> m2_only;
|
||||
PMP::match_faces(wrap, single_pass_wrap,
|
||||
std::back_inserter(common),
|
||||
std::back_inserter(m1_only),
|
||||
std::back_inserter(m2_only));
|
||||
if(!m1_only.empty() || !m2_only.empty())
|
||||
{
|
||||
std::cerr << "Error: The two wraps should have been identical!" << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
|
|
@ -23,7 +25,7 @@ int main(int argc, char** argv)
|
|||
Point_container points;
|
||||
if(!CGAL::IO::read_points(filename, std::back_inserter(points)) || points.empty())
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
|
@ -53,11 +55,7 @@ int main(int argc, char** argv)
|
|||
std::cout << "Took " << t.time() << " s." << std::endl;
|
||||
|
||||
// Save the result
|
||||
std::string input_name = std::string(filename);
|
||||
input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1);
|
||||
input_name = input_name.substr(0, input_name.find_last_of("."));
|
||||
std::string output_name = input_name + "_" + std::to_string(static_cast<int>(relative_alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,135 @@
|
|||
// In this example, we reuse the underlying triangulation of the previous state, and carve using
|
||||
// a new (smaller) alpha value. This enables considerable speed-up: the cumulated time taken
|
||||
// to run `n` successive instances of `{alpha_wrap(alpha_i)}_(i=1...n)` will be roughly equal
|
||||
// to the time taken to the single instance of alpha_wrap(alpha_n) from scratch.
|
||||
//
|
||||
// The speed-up increases with the number of intermediate results, and on the gap between
|
||||
// alpha values: if alpha_2 is close to alpha_1, practically no new computation are required,
|
||||
// and the speed-up is almost 100%.
|
||||
//
|
||||
// -------------------------------- !! Warning !! --------------------------------------------------
|
||||
// The result of:
|
||||
// > alpha_wrap(alpha_1, ...)
|
||||
// > alpha_wrap(alpha_2, ..., reuse)
|
||||
// is not exactly identical to calling directly:
|
||||
// > alpha_wrap(alpha_2, ..., do_not_reuse)
|
||||
// because the queues are sorted slightly differently and the AABB tree is rebuilt differently
|
||||
// to optimize the runtime.
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include <CGAL/Polygon_mesh_processing/bbox.h>
|
||||
#include <CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h>
|
||||
#include <CGAL/Real_timer.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
|
||||
using K = CGAL::Exact_predicates_inexact_constructions_kernel;
|
||||
using FT = K::FT;
|
||||
using Point_3 = K::Point_3;
|
||||
|
||||
using Mesh = CGAL::Surface_mesh<Point_3>;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
std::cout.precision(17);
|
||||
std::cerr.precision(17);
|
||||
|
||||
// Read the input
|
||||
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/cube.off");
|
||||
std::cout << "Reading " << filename << "..." << std::endl;
|
||||
|
||||
Mesh mesh;
|
||||
if(!PMP::IO::read_polygon_mesh(filename, mesh) || is_empty(mesh) || !is_triangle_mesh(mesh))
|
||||
{
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
std::cout << "Input: " << num_vertices(mesh) << " vertices, " << num_faces(mesh) << " faces" << std::endl;
|
||||
|
||||
const CGAL::Bbox_3 bbox = CGAL::Polygon_mesh_processing::bbox(mesh);
|
||||
const double diag_length = std::sqrt(CGAL::square(bbox.xmax() - bbox.xmin()) +
|
||||
CGAL::square(bbox.ymax() - bbox.ymin()) +
|
||||
CGAL::square(bbox.zmax() - bbox.zmin()));
|
||||
|
||||
// We want decreasing alphas, and these are relative ratios, so they need to be increasing
|
||||
const std::vector<FT> relative_alphas = { 1, 50, 100, 150, 200, 250 };
|
||||
const FT relative_offset = 600;
|
||||
|
||||
// ===============================================================================================
|
||||
// Naive approach:
|
||||
|
||||
CGAL::Real_timer t;
|
||||
double total_time = 0.;
|
||||
|
||||
for(std::size_t i=0; i<relative_alphas.size(); ++i)
|
||||
{
|
||||
t.reset();
|
||||
t.start();
|
||||
|
||||
const double alpha = diag_length / relative_alphas[i];
|
||||
const double offset = diag_length / relative_offset;
|
||||
std::cout << ">>> [" << i << "] alpha: " << alpha << " offset: " << offset << std::endl;
|
||||
|
||||
Mesh wrap;
|
||||
CGAL::alpha_wrap_3(mesh, alpha, offset, wrap);
|
||||
|
||||
t.stop();
|
||||
std::cout << " Result: " << num_vertices(wrap) << " vertices, " << num_faces(wrap) << " faces" << std::endl;
|
||||
std::cout << " Elapsed time: " << t.time() << " s." << std::endl;
|
||||
|
||||
total_time += t.time();
|
||||
}
|
||||
|
||||
std::cout << "Total elapsed time (naive): " << total_time << " s.\n" << std::endl;
|
||||
|
||||
// ===============================================================================================
|
||||
// Re-use approach
|
||||
|
||||
total_time = 0.;
|
||||
t.reset();
|
||||
|
||||
using Oracle = CGAL::Alpha_wraps_3::internal::Triangle_mesh_oracle<K>;
|
||||
using Wrapper = CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>;
|
||||
Wrapper wrapper; // contains the triangulation that is being refined iteratively
|
||||
|
||||
for(std::size_t i=0; i<relative_alphas.size(); ++i)
|
||||
{
|
||||
t.reset();
|
||||
t.start();
|
||||
|
||||
const double alpha = diag_length / relative_alphas[i];
|
||||
const double offset = diag_length / relative_offset;
|
||||
std::cout << ">>> [" << i << "] alpha: " << alpha << " offset: " << offset << std::endl;
|
||||
|
||||
// The triangle mesh oracle should be initialized with alpha to internally perform a split
|
||||
// of too-big facets while building the AABB Tree. This split in fact yields a significant
|
||||
// speed-up for meshes with elements that are large compared to alpha. This speed-up makes it
|
||||
// faster to re-build the AABB tree for every value of alpha than to use a non-optimized tree.
|
||||
Oracle oracle(alpha);
|
||||
oracle.add_triangle_mesh(mesh, CGAL::parameters::default_values());
|
||||
wrapper.oracle() = oracle;
|
||||
|
||||
Mesh wrap;
|
||||
wrapper(alpha, offset, wrap, CGAL::parameters::refine_triangulation((i != 0)));
|
||||
|
||||
t.stop();
|
||||
std::cout << " Result: " << num_vertices(wrap) << " vertices, " << num_faces(wrap) << " faces" << std::endl;
|
||||
std::cout << " Elapsed time: " << t.time() << " s." << std::endl;
|
||||
|
||||
total_time += t.time();
|
||||
}
|
||||
|
||||
std::cout << "Total elapsed time (successive): " << total_time << " s." << std::endl;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
|
|
@ -25,7 +27,7 @@ int main(int argc, char** argv)
|
|||
Mesh mesh;
|
||||
if(!PMP::IO::read_polygon_mesh(filename, mesh) || is_empty(mesh) || !is_triangle_mesh(mesh))
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
|
@ -56,12 +58,7 @@ int main(int argc, char** argv)
|
|||
std::cout << "Took " << t.time() << " s." << std::endl;
|
||||
|
||||
// Save the result
|
||||
std::string input_name = std::string(filename);
|
||||
input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1);
|
||||
input_name = input_name.substr(0, input_name.find_last_of("."));
|
||||
std::string output_name = input_name
|
||||
+ "_" + std::to_string(static_cast<int>(relative_alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
|
|
@ -30,7 +32,7 @@ int main(int argc, char** argv)
|
|||
std::vector<std::array<std::size_t, 3> > faces;
|
||||
if(!CGAL::IO::read_polygon_soup(filename, points, faces) || faces.empty())
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
|
@ -63,12 +65,7 @@ int main(int argc, char** argv)
|
|||
std::cout << "Took " << t.time() << " s." << std::endl;
|
||||
|
||||
// Save the result
|
||||
std::string input_name = std::string(filename);
|
||||
input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1);
|
||||
input_name = input_name.substr(0, input_name.find_last_of("."));
|
||||
std::string output_name = input_name
|
||||
+ "_" + std::to_string(static_cast<int>(relative_alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
|
|
@ -70,7 +72,7 @@ int main(int argc, char** argv)
|
|||
Faces faces;
|
||||
if(!CGAL::IO::read_polygon_soup(filename, points, faces) || faces.empty())
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +103,7 @@ int main(int argc, char** argv)
|
|||
Oracle oracle(K{});
|
||||
oracle.add_triangle_soup(points, faces, CGAL::parameters::default_values());
|
||||
|
||||
CGAL::Alpha_wraps_3::internal::Alpha_wrap_3<Oracle, Delaunay_triangulation> aw3(oracle);
|
||||
CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle, Delaunay_triangulation> aw3(oracle);
|
||||
Mesh wrap;
|
||||
aw3(alpha, offset, wrap);
|
||||
|
||||
|
|
@ -113,12 +115,7 @@ int main(int argc, char** argv)
|
|||
auto dt = aw3.triangulation();
|
||||
|
||||
// Save the result
|
||||
std::string input_name = std::string(filename);
|
||||
input_name = input_name.substr(input_name.find_last_of("/") + 1, input_name.length() - 1);
|
||||
input_name = input_name.substr(0, input_name.find_last_of("."));
|
||||
std::string output_name = input_name
|
||||
+ "_" + std::to_string(static_cast<int>(relative_alpha))
|
||||
+ "_" + std::to_string(static_cast<int>(relative_offset)) + ".off";
|
||||
const std::string output_name = generate_output_name(filename, relative_alpha, relative_offset);
|
||||
std::cout << "Writing to " << output_name << std::endl;
|
||||
CGAL::IO::write_polygon_mesh(output_name, wrap, CGAL::parameters::stream_precision(17));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#include "output_helper.h"
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
|
||||
|
|
@ -25,13 +27,13 @@ int main(int argc, char** argv)
|
|||
if(!PMP::IO::read_polygon_mesh(filename, input) ||
|
||||
is_empty(input) || !is_triangle_mesh(input))
|
||||
{
|
||||
std::cerr << "Invalid input." << std::endl;
|
||||
std::cerr << "Invalid input:" << filename << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
std::cout << "Input: " << num_vertices(input) << " vertices, " << num_faces(input) << " faces" << std::endl;
|
||||
|
||||
const double relative_alpha = (argc > 2) ? std::stod(argv[2]) : 30.;
|
||||
const double relative_alpha = (argc > 2) ? std::stod(argv[2]) : 40.;
|
||||
const double relative_offset = (argc > 3) ? std::stod(argv[3]) : 600.;
|
||||
|
||||
// Compute the alpha and offset values
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -20,18 +20,26 @@ namespace CGAL {
|
|||
namespace Alpha_wraps_3 {
|
||||
namespace internal {
|
||||
|
||||
enum class Cell_label
|
||||
{
|
||||
// Cells that have been carved
|
||||
OUTSIDE,
|
||||
// Cells that have not yet been carved
|
||||
INSIDE,
|
||||
// OUTSIDE cells that have been labeled "inside" again as to make the result manifold
|
||||
MANIFOLD
|
||||
};
|
||||
|
||||
template < typename GT,
|
||||
typename Cb = CGAL::Delaunay_triangulation_cell_base_with_circumcenter_3<GT> >
|
||||
class Alpha_wrap_triangulation_cell_base_3
|
||||
: public Cb
|
||||
{
|
||||
private:
|
||||
bool outside = false;
|
||||
|
||||
public:
|
||||
typedef typename Cb::Vertex_handle Vertex_handle;
|
||||
typedef typename Cb::Cell_handle Cell_handle;
|
||||
|
||||
public:
|
||||
template < typename TDS2 >
|
||||
struct Rebind_TDS
|
||||
{
|
||||
|
|
@ -39,6 +47,14 @@ public:
|
|||
using Other = Alpha_wrap_triangulation_cell_base_3<GT, Cb2>;
|
||||
};
|
||||
|
||||
private:
|
||||
Cell_label m_label = Cell_label::INSIDE;
|
||||
|
||||
#ifndef CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
unsigned int m_erase_counter;
|
||||
#endif
|
||||
|
||||
public:
|
||||
Alpha_wrap_triangulation_cell_base_3()
|
||||
: Cb()
|
||||
{}
|
||||
|
|
@ -55,8 +71,26 @@ public:
|
|||
: Cb(v0, v1, v2, v3, n0, n1, n2, n3)
|
||||
{}
|
||||
|
||||
bool is_outside() const { return outside; }
|
||||
bool& is_outside() { return outside; }
|
||||
public:
|
||||
Cell_label label() const { return m_label; }
|
||||
void set_label(const Cell_label label) { m_label = label; }
|
||||
bool is_inside() const { return m_label == Cell_label::INSIDE; }
|
||||
bool is_outside() const { return m_label == Cell_label::OUTSIDE; }
|
||||
|
||||
#ifndef CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
unsigned int erase_counter() const
|
||||
{
|
||||
return m_erase_counter;
|
||||
}
|
||||
void set_erase_counter(unsigned int c)
|
||||
{
|
||||
m_erase_counter = c;
|
||||
}
|
||||
void increment_erase_counter()
|
||||
{
|
||||
++m_erase_counter;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename Cb>
|
||||
|
|
|
|||
|
|
@ -321,7 +321,6 @@ public:
|
|||
typename AABB_tree::Bounding_box bbox() const
|
||||
{
|
||||
CGAL_precondition(!empty());
|
||||
|
||||
return tree().bbox();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace CGAL {
|
||||
|
|
@ -41,6 +42,7 @@ struct PS_oracle_traits
|
|||
using Geom_traits = Alpha_wrap_AABB_geom_traits<GT_>; // Wrap the kernel to add Ball_3 + custom Do_intersect_3
|
||||
|
||||
using Points = std::vector<typename GT_::Point_3>;
|
||||
using Points_ptr = std::shared_ptr<Points>;
|
||||
using PR_iterator = typename Points::const_iterator;
|
||||
|
||||
using Primitive = AABB_primitive<PR_iterator,
|
||||
|
|
@ -69,26 +71,29 @@ public:
|
|||
|
||||
private:
|
||||
using Points = typename PSOT::Points;
|
||||
using Points_ptr = typename PSOT::Points_ptr;
|
||||
using AABB_tree = typename PSOT::AABB_tree;
|
||||
using Oracle_base = AABB_tree_oracle<Geom_traits, AABB_tree, CGAL::Default, BaseOracle>;
|
||||
|
||||
private:
|
||||
Points m_points;
|
||||
Points_ptr m_points_ptr;
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Point_set_oracle()
|
||||
: Oracle_base(BaseOracle(), Base_GT())
|
||||
{ }
|
||||
|
||||
Point_set_oracle(const BaseOracle& base_oracle,
|
||||
const Base_GT& gt = Base_GT())
|
||||
: Oracle_base(base_oracle, gt)
|
||||
{ }
|
||||
{
|
||||
m_points_ptr = std::make_shared<Points>();
|
||||
}
|
||||
|
||||
Point_set_oracle(const Base_GT& gt,
|
||||
const BaseOracle& base_oracle = BaseOracle())
|
||||
: Oracle_base(base_oracle, gt)
|
||||
: Point_set_oracle(base_oracle, gt)
|
||||
{ }
|
||||
|
||||
Point_set_oracle()
|
||||
: Point_set_oracle(BaseOracle(), Base_GT())
|
||||
{ }
|
||||
|
||||
public:
|
||||
|
|
@ -101,21 +106,27 @@ public:
|
|||
if(points.empty())
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Warning: Input is empty " << std::endl;
|
||||
std::cout << "Warning: Input is empty (PS)" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
const std::size_t old_size = m_points.size();
|
||||
m_points.insert(std::cend(m_points), std::cbegin(points), std::cend(points));
|
||||
const std::size_t old_size = m_points_ptr->size();
|
||||
m_points_ptr->insert(std::cend(*m_points_ptr), std::cbegin(points), std::cend(points));
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Insert into AABB tree (points)..." << std::endl;
|
||||
#endif
|
||||
|
||||
this->tree().insert(std::next(std::cbegin(m_points), old_size), std::cend(m_points));
|
||||
this->tree().insert(std::next(std::cbegin(*m_points_ptr), old_size), std::cend(*m_points_ptr));
|
||||
|
||||
CGAL_postcondition(this->tree().size() == m_points.size());
|
||||
// Manually constructing it here purely for profiling reasons: if we keep the lazy approach,
|
||||
// it will be done at the first treatment of a facet that needs a Steiner point.
|
||||
// So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes
|
||||
// to accelerate the tree.
|
||||
this->tree().accelerate_distance_queries();
|
||||
|
||||
CGAL_postcondition(this->tree().size() == m_points_ptr->size());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace CGAL {
|
||||
|
|
@ -40,7 +41,9 @@ struct SS_oracle_traits
|
|||
{
|
||||
using Geom_traits = Alpha_wrap_AABB_geom_traits<GT_>; // Wrap the kernel to add Ball_3 + custom Do_intersect_3
|
||||
|
||||
using Segments = std::vector<typename GT_::Segment_3>;
|
||||
using Segment = typename GT_::Segment_3;
|
||||
using Segments = std::vector<Segment>;
|
||||
using Segments_ptr = std::shared_ptr<Segments>;
|
||||
using SR_iterator = typename Segments::const_iterator;
|
||||
|
||||
using Primitive = AABB_primitive<SR_iterator,
|
||||
|
|
@ -68,27 +71,31 @@ public:
|
|||
using Geom_traits = typename SSOT::Geom_traits;
|
||||
|
||||
private:
|
||||
using Segment = typename SSOT::Segment;
|
||||
using Segments = typename SSOT::Segments;
|
||||
using Segments_ptr = typename SSOT::Segments_ptr;
|
||||
using AABB_tree = typename SSOT::AABB_tree;
|
||||
using Oracle_base = AABB_tree_oracle<Geom_traits, AABB_tree, CGAL::Default, BaseOracle>;
|
||||
|
||||
private:
|
||||
Segments m_segments;
|
||||
Segments_ptr m_segments_ptr;
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Segment_soup_oracle()
|
||||
: Oracle_base(BaseOracle(), Base_GT())
|
||||
{ }
|
||||
|
||||
Segment_soup_oracle(const BaseOracle& base_oracle,
|
||||
const Base_GT& gt = Base_GT())
|
||||
: Oracle_base(base_oracle, gt)
|
||||
{ }
|
||||
{
|
||||
m_segments_ptr = std::make_shared<Segments>();
|
||||
}
|
||||
|
||||
Segment_soup_oracle(const Base_GT& gt,
|
||||
const BaseOracle& base_oracle = BaseOracle())
|
||||
: Oracle_base(base_oracle, gt)
|
||||
: Segment_soup_oracle(base_oracle, gt)
|
||||
{ }
|
||||
|
||||
Segment_soup_oracle()
|
||||
: Segment_soup_oracle(BaseOracle(), Base_GT())
|
||||
{ }
|
||||
|
||||
public:
|
||||
|
|
@ -100,20 +107,40 @@ public:
|
|||
if(segments.empty())
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Warning: Input is empty " << std::endl;
|
||||
std::cout << "Warning: Input is empty (SS)" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
const std::size_t old_size = m_segments.size();
|
||||
m_segments.insert(std::cend(m_segments), std::cbegin(segments), std::cend(segments));
|
||||
typename Geom_traits::Is_degenerate_3 is_degenerate = this->geom_traits().is_degenerate_3_object();
|
||||
|
||||
const std::size_t old_size = m_segments_ptr->size();
|
||||
|
||||
for(const Segment& s : segments)
|
||||
{
|
||||
if(is_degenerate(s))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cerr << "Warning: ignoring degenerate segment " << s << std::endl;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
m_segments_ptr->push_back(s);
|
||||
}
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Insert into AABB tree (segments)..." << std::endl;
|
||||
#endif
|
||||
this->tree().insert(std::next(std::cbegin(m_segments), old_size), std::cend(m_segments));
|
||||
this->tree().insert(std::next(std::cbegin(*m_segments_ptr), old_size), std::cend(*m_segments_ptr));
|
||||
|
||||
CGAL_postcondition(this->tree().size() == m_segments.size());
|
||||
// Manually constructing it here purely for profiling reasons: if we keep the lazy approach,
|
||||
// it will be done at the first treatment of a facet that needs a Steiner point.
|
||||
// So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes
|
||||
// to accelerate the tree.
|
||||
this->tree().accelerate_distance_queries();
|
||||
|
||||
CGAL_postcondition(this->tree().size() == m_segments_ptr->size());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ public:
|
|||
if(is_empty(tmesh))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Warning: Input is empty " << std::endl;
|
||||
std::cout << "Warning: Input is empty (TM)" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
|
@ -153,7 +153,12 @@ public:
|
|||
for(face_descriptor f : faces(tmesh))
|
||||
{
|
||||
if(Polygon_mesh_processing::is_degenerate_triangle_face(f, tmesh, np))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cerr << "Warning: ignoring degenerate face " << f << std::endl;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
const Point_ref p0 = get(vpm, source(halfedge(f, tmesh), tmesh));
|
||||
const Point_ref p1 = get(vpm, target(halfedge(f, tmesh), tmesh));
|
||||
|
|
@ -164,6 +169,12 @@ public:
|
|||
Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits());
|
||||
}
|
||||
|
||||
// Manually constructing it here purely for profiling reasons: if we keep the lazy approach,
|
||||
// it will be done at the first treatment of a facet that needs a Steiner point.
|
||||
// So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes
|
||||
// to accelerate the tree.
|
||||
this->tree().accelerate_distance_queries();
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Tree: " << this->tree().size() << " primitives (" << num_faces(tmesh) << " faces in input)" << std::endl;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ public:
|
|||
if(points.empty() || faces.empty())
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Warning: Input is empty " << std::endl;
|
||||
std::cout << "Warning: Input is empty (TS)" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
|
@ -164,11 +164,22 @@ public:
|
|||
|
||||
const Triangle_3 tr = triangle(p0, p1, p2);
|
||||
if(is_degenerate(tr))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cerr << "Warning: ignoring degenerate face " << tr << std::endl;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits());
|
||||
}
|
||||
|
||||
// Manually constructing it here purely for profiling reasons: if we keep the lazy approach,
|
||||
// it will be done at the first treatment of a facet that needs a Steiner point.
|
||||
// So if one wanted to bench the flood fill runtime, it would be skewed by the time it takes
|
||||
// to accelerate the tree.
|
||||
this->tree().accelerate_distance_queries();
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Tree: " << this->tree().size() << " primitives (" << faces.size() << " faces in input)" << std::endl;
|
||||
#endif
|
||||
|
|
@ -179,12 +190,31 @@ public:
|
|||
void add_triangle_soup(const TriangleRange& triangles,
|
||||
const CGAL_NP_CLASS& /*np*/ = CGAL::parameters::default_values())
|
||||
{
|
||||
if(triangles.empty())
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Warning: Input is empty (TS)" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cout << "Insert into AABB Tree (triangles)..." << std::endl;
|
||||
#endif
|
||||
|
||||
typename Geom_traits::Is_degenerate_3 is_degenerate = this->geom_traits().is_degenerate_3_object();
|
||||
|
||||
Splitter_base::reserve(triangles.size());
|
||||
|
||||
for(const Triangle_3& tr : triangles)
|
||||
{
|
||||
if(is_degenerate(tr))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG
|
||||
std::cerr << "Warning: ignoring degenerate triangle " << tr << std::endl;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
Splitter_base::split_and_insert_datum(tr, this->tree(), this->geom_traits());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,27 +27,29 @@ namespace CGAL {
|
|||
namespace Alpha_wraps_3 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
|
||||
// Represents an alpha-traversable facet in the mutable priority queue
|
||||
template <typename DT3>
|
||||
template <typename Tr>
|
||||
class Gate
|
||||
{
|
||||
using Facet = typename DT3::Facet;
|
||||
using FT = typename DT3::Geom_traits::FT;
|
||||
using Facet = typename Tr::Facet;
|
||||
using FT = typename Tr::Geom_traits::FT;
|
||||
|
||||
private:
|
||||
Facet m_facet;
|
||||
FT m_priority; // circumsphere sq_radius
|
||||
bool m_is_artificial_facet;
|
||||
bool m_is_permissive_facet;
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Gate(const Facet& facet,
|
||||
const FT& priority,
|
||||
const bool is_artificial_facet)
|
||||
const bool is_permissive_facet)
|
||||
:
|
||||
m_facet(facet),
|
||||
m_priority(priority),
|
||||
m_is_artificial_facet(is_artificial_facet)
|
||||
m_is_permissive_facet(is_permissive_facet)
|
||||
{
|
||||
CGAL_assertion(priority >= 0);
|
||||
}
|
||||
|
|
@ -60,34 +62,85 @@ public:
|
|||
public:
|
||||
const Facet& facet() const { return m_facet; }
|
||||
const FT& priority() const { return m_priority; }
|
||||
bool is_artificial_facet() const { return m_is_artificial_facet; }
|
||||
bool is_permissive_facet() const { return m_is_permissive_facet; }
|
||||
};
|
||||
|
||||
struct Less_gate
|
||||
{
|
||||
template <typename DT3>
|
||||
bool operator()(const Gate<DT3>& a, const Gate<DT3>& b) const
|
||||
template <typename Tr>
|
||||
bool operator()(const Gate<Tr>& a, const Gate<Tr>& b) const
|
||||
{
|
||||
// @fixme? make it a total order by comparing addresses if both gates are bbox facets
|
||||
if(a.is_artificial_facet())
|
||||
return true;
|
||||
else if(b.is_artificial_facet())
|
||||
return false;
|
||||
// If one is permissive and the other is not, give priority to the permissive facet.
|
||||
//
|
||||
// The permissive facet are given highest priority because they need to be treated
|
||||
// regardless of their circumradius. Treating them first allow the part that depends
|
||||
// on alpha to be treated uniformly in a way: whatever the alpha, all permissive faces
|
||||
// will first be treated.
|
||||
if(a.is_permissive_facet() != b.is_permissive_facet())
|
||||
return a.is_permissive_facet();
|
||||
|
||||
if(a.priority() == b.priority())
|
||||
{
|
||||
// arbitrary, the sole purpose is to make it a total order for determinism
|
||||
if(a.facet().first->time_stamp() == b.facet().first->time_stamp())
|
||||
return a.facet().second < b.facet().second;
|
||||
|
||||
return a.facet().first->time_stamp() < b.facet().first->time_stamp();
|
||||
}
|
||||
|
||||
return a.priority() > b.priority();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename DT3>
|
||||
#else // CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
|
||||
// Represents an alpha-traversable facet in the mutable priority queue
|
||||
template <typename Tr>
|
||||
class Gate
|
||||
{
|
||||
using Facet = typename Tr::Facet;
|
||||
using FT = typename Tr::Geom_traits::FT;
|
||||
|
||||
private:
|
||||
Facet m_facet, m_mirror_facet;
|
||||
const unsigned int m_erase_counter_mem;
|
||||
const unsigned int m_mirror_erase_counter_mem;
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Gate(const Facet& facet,
|
||||
const Tr& tr)
|
||||
:
|
||||
m_facet(facet),
|
||||
m_mirror_facet(tr.mirror_facet(facet)),
|
||||
m_erase_counter_mem(m_facet.first->erase_counter()),
|
||||
m_mirror_erase_counter_mem(m_mirror_facet.first->erase_counter())
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
const Facet& facet() const { return m_facet; }
|
||||
|
||||
bool is_zombie() const
|
||||
{
|
||||
return (m_facet.first->erase_counter() != m_erase_counter_mem) ||
|
||||
(m_mirror_facet.first->erase_counter() != m_mirror_erase_counter_mem);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CGAL_AW3_USE_SORTED_PRIORITY_QUEUE
|
||||
|
||||
template <typename Tr>
|
||||
struct Gate_ID_PM
|
||||
{
|
||||
using key_type = Gate<DT3>;
|
||||
using key_type = Gate<Tr>;
|
||||
using value_type = std::size_t;
|
||||
using reference = std::size_t;
|
||||
using category = boost::readable_property_map_tag;
|
||||
|
||||
inline friend value_type get(Gate_ID_PM, const key_type& k)
|
||||
{
|
||||
using Facet = typename DT3::Facet;
|
||||
using Facet = typename Tr::Facet;
|
||||
|
||||
const Facet& f = k.facet();
|
||||
return (4 * f.first->time_stamp() + f.second);
|
||||
|
|
|
|||
|
|
@ -40,16 +40,16 @@ struct Orientation_of_circumcenter
|
|||
}
|
||||
};
|
||||
|
||||
template <typename Dt>
|
||||
template <typename Tr>
|
||||
bool
|
||||
less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
||||
const typename Dt::Facet& fh,
|
||||
const Dt& dt)
|
||||
less_squared_radius_of_min_empty_sphere(typename Tr::Geom_traits::FT sq_alpha,
|
||||
const typename Tr::Facet& fh,
|
||||
const Tr& tr)
|
||||
{
|
||||
using Cell_handle = typename Dt::Cell_handle;
|
||||
using Point = typename Dt::Point;
|
||||
using Cell_handle = typename Tr::Cell_handle;
|
||||
using Point = typename Tr::Point;
|
||||
|
||||
using CK = typename Dt::Geom_traits;
|
||||
using CK = typename Tr::Geom_traits;
|
||||
using Exact_kernel = typename Exact_kernel_selector<CK>::Exact_kernel;
|
||||
using Approximate_kernel = Simple_cartesian<Interval_nt_advanced>;
|
||||
using C2A = Cartesian_converter<CK, Approximate_kernel>;
|
||||
|
|
@ -61,21 +61,30 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
|||
|
||||
Orientation_of_circumcenter orientation_of_circumcenter;
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "Checking for traversability of facet" << std::endl;
|
||||
#endif
|
||||
|
||||
const Cell_handle c = fh.first;
|
||||
const int ic = fh.second;
|
||||
const Cell_handle n = c->neighbor(ic);
|
||||
|
||||
const Point& p1 = dt.point(c, Dt::vertex_triple_index(ic,0));
|
||||
const Point& p2 = dt.point(c, Dt::vertex_triple_index(ic,1));
|
||||
const Point& p3 = dt.point(c, Dt::vertex_triple_index(ic,2));
|
||||
const Point& p1 = tr.point(c, Tr::vertex_triple_index(ic,0));
|
||||
const Point& p2 = tr.point(c, Tr::vertex_triple_index(ic,1));
|
||||
const Point& p3 = tr.point(c, Tr::vertex_triple_index(ic,2));
|
||||
|
||||
// This is not actually possible in the context of alpha wrapping, but keeping it for genericity
|
||||
// and because it does not cost anything.
|
||||
if(dt.is_infinite(n))
|
||||
if(tr.is_infinite(n))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cerr << "Warning: computing less_squared_radius_of_min_empty_sphere() with an infinite neighbor?" << std::endl;
|
||||
#endif
|
||||
CGAL_assertion(!tr.is_infinite(c));
|
||||
|
||||
Orientation ori = orientation_of_circumcenter(p1, p2, p3,
|
||||
dt.point(c, 0), dt.point(c, 1),
|
||||
dt.point(c, 2), dt.point(c, 3));
|
||||
tr.point(c, 0), tr.point(c, 1),
|
||||
tr.point(c, 2), tr.point(c, 3));
|
||||
|
||||
if(ori == POSITIVE)
|
||||
{
|
||||
|
|
@ -84,18 +93,22 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
|||
}
|
||||
else
|
||||
{
|
||||
Comparison_result cr = compare_squared_radius(dt.point(c, 0), dt.point(c, 1),
|
||||
dt.point(c, 2), dt.point(c, 3),
|
||||
Comparison_result cr = compare_squared_radius(tr.point(c, 0), tr.point(c, 1),
|
||||
tr.point(c, 2), tr.point(c, 3),
|
||||
sq_alpha);
|
||||
return cr == LARGER;
|
||||
}
|
||||
}
|
||||
|
||||
if(dt.is_infinite(c))
|
||||
if(tr.is_infinite(c))
|
||||
{
|
||||
Orientation ori = orientation_of_circumcenter(p1, p2, p3,
|
||||
dt.point(n, 0), dt.point(n, 1),
|
||||
dt.point(n, 2), dt.point(n, 3));
|
||||
tr.point(n, 0), tr.point(n, 1),
|
||||
tr.point(n, 2), tr.point(n, 3));
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "Cell 'c' is infinite; Orientation: " << ori << std::endl;
|
||||
#endif
|
||||
|
||||
if(ori == NEGATIVE)
|
||||
{
|
||||
|
|
@ -104,8 +117,8 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
|||
}
|
||||
else
|
||||
{
|
||||
Comparison_result cr = compare_squared_radius(dt.point(n, 0), dt.point(n, 1),
|
||||
dt.point(n, 2), dt.point(n, 3),
|
||||
Comparison_result cr = compare_squared_radius(tr.point(n, 0), tr.point(n, 1),
|
||||
tr.point(n, 2), tr.point(n, 3),
|
||||
sq_alpha);
|
||||
return cr == LARGER;
|
||||
}
|
||||
|
|
@ -113,40 +126,40 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
|||
|
||||
// both c and n are finite
|
||||
if(orientation_of_circumcenter(p1, p2, p3,
|
||||
dt.point(c, 0), dt.point(c, 1), dt.point(c, 2), dt.point(c, 3)) !=
|
||||
tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)) !=
|
||||
orientation_of_circumcenter(p1, p2, p3,
|
||||
dt.point(n, 0), dt.point(n, 1), dt.point(n, 2), dt.point(n, 3)))
|
||||
tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3)))
|
||||
{
|
||||
Comparison_result cr = compare_squared_radius(p1, p2, p3, sq_alpha);
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "dual crosses the face; CR: "
|
||||
<< typename Dt::Geom_traits().compute_squared_radius_3_object()(p1, p2, p3)
|
||||
<< typename Tr::Geom_traits().compute_squared_radius_3_object()(p1, p2, p3)
|
||||
<< " sq alpha " << sq_alpha << std::endl;
|
||||
#endif
|
||||
return cr == LARGER;
|
||||
}
|
||||
else
|
||||
{
|
||||
Comparison_result cr = compare_squared_radius(dt.point(c, 0), dt.point(c, 1),
|
||||
dt.point(c, 2), dt.point(c, 3),
|
||||
Comparison_result cr = compare_squared_radius(tr.point(c, 0), tr.point(c, 1),
|
||||
tr.point(c, 2), tr.point(c, 3),
|
||||
sq_alpha);
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "dual does not cross the face; CR(c): "
|
||||
<< typename Dt::Geom_traits().compute_squared_radius_3_object()(dt.point(c, 0), dt.point(c, 1),
|
||||
dt.point(c, 2), dt.point(c, 3))
|
||||
<< typename Tr::Geom_traits().compute_squared_radius_3_object()(tr.point(c, 0), tr.point(c, 1),
|
||||
tr.point(c, 2), tr.point(c, 3))
|
||||
<< " sq alpha " << sq_alpha << std::endl;
|
||||
#endif
|
||||
|
||||
if(cr != LARGER)
|
||||
return false;
|
||||
|
||||
cr = compare_squared_radius(dt.point(n, 0), dt.point(n, 1),
|
||||
dt.point(n, 2), dt.point(n, 3),
|
||||
cr = compare_squared_radius(tr.point(n, 0), tr.point(n, 1),
|
||||
tr.point(n, 2), tr.point(n, 3),
|
||||
sq_alpha);
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "dual does not cross the face; CR(n): "
|
||||
<< typename Dt::Geom_traits().compute_squared_radius_3_object()(dt.point(n, 0), dt.point(n, 1),
|
||||
dt.point(n, 2), dt.point(n, 3))
|
||||
<< typename Tr::Geom_traits().compute_squared_radius_3_object()(tr.point(n, 0), tr.point(n, 1),
|
||||
tr.point(n, 2), tr.point(n, 3))
|
||||
<< " sq alpha " << sq_alpha << std::endl;
|
||||
#endif
|
||||
|
||||
|
|
@ -154,6 +167,100 @@ less_squared_radius_of_min_empty_sphere(typename Dt::Geom_traits::FT sq_alpha,
|
|||
}
|
||||
}
|
||||
|
||||
template <typename Tr>
|
||||
typename Tr::Geom_traits::FT
|
||||
smallest_squared_radius_3(const typename Tr::Facet& fh,
|
||||
const Tr& tr)
|
||||
{
|
||||
using Cell_handle = typename Tr::Cell_handle;
|
||||
using Point = typename Tr::Point;
|
||||
using FT = typename Tr::Geom_traits::FT;
|
||||
|
||||
using CK = typename Tr::Geom_traits;
|
||||
using Exact_kernel = typename Exact_kernel_selector<CK>::Exact_kernel;
|
||||
using Approximate_kernel = Simple_cartesian<Interval_nt_advanced>;
|
||||
using C2A = Cartesian_converter<CK, Approximate_kernel>;
|
||||
using C2E = typename Exact_kernel_selector<CK>::C2E;
|
||||
|
||||
using Orientation_of_circumcenter = Filtered_predicate<Orientation_of_circumcenter<Exact_kernel>,
|
||||
Orientation_of_circumcenter<Approximate_kernel>,
|
||||
C2E, C2A>;
|
||||
|
||||
Orientation_of_circumcenter orientation_of_circumcenter;
|
||||
|
||||
auto squared_radius = tr.geom_traits().compute_squared_radius_3_object();
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "Computing circumradius of facet" << std::endl;
|
||||
#endif
|
||||
|
||||
CGAL_precondition(!tr.is_infinite(fh));
|
||||
|
||||
const Cell_handle c = fh.first;
|
||||
const int ic = fh.second;
|
||||
const Cell_handle n = c->neighbor(ic);
|
||||
|
||||
const Point& p1 = tr.point(c, Tr::vertex_triple_index(ic,0));
|
||||
const Point& p2 = tr.point(c, Tr::vertex_triple_index(ic,1));
|
||||
const Point& p3 = tr.point(c, Tr::vertex_triple_index(ic,2));
|
||||
|
||||
// This is not actually possible in the context of alpha wrapping, but keeping it for genericity
|
||||
// and because it does not cost anything.
|
||||
if(tr.is_infinite(n))
|
||||
{
|
||||
CGAL_assertion(!tr.is_infinite(c));
|
||||
|
||||
Orientation ori = orientation_of_circumcenter(p1, p2, p3,
|
||||
tr.point(c, 0), tr.point(c, 1),
|
||||
tr.point(c, 2), tr.point(c, 3));
|
||||
if(ori == POSITIVE)
|
||||
return squared_radius(p1, p2, p3);
|
||||
else
|
||||
return squared_radius(tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3));
|
||||
}
|
||||
|
||||
if(tr.is_infinite(c))
|
||||
{
|
||||
Orientation ori = orientation_of_circumcenter(p1, p2, p3,
|
||||
tr.point(n, 0), tr.point(n, 1),
|
||||
tr.point(n, 2), tr.point(n, 3));
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "Cell 'c' is infinite; Orientation: " << ori << std::endl;
|
||||
#endif
|
||||
|
||||
if(ori == NEGATIVE)
|
||||
return squared_radius(p1, p2, p3);
|
||||
else
|
||||
return squared_radius(tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3));
|
||||
}
|
||||
|
||||
// both c and n are finite
|
||||
if(orientation_of_circumcenter(p1, p2, p3,
|
||||
tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3)) !=
|
||||
orientation_of_circumcenter(p1, p2, p3,
|
||||
tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3)))
|
||||
{
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "dual crosses the face; CR: " << squared_radius(p1, p2, p3) << std::endl;
|
||||
#endif
|
||||
|
||||
return squared_radius(p1, p2, p3);
|
||||
}
|
||||
else
|
||||
{
|
||||
const FT cr = squared_radius(tr.point(c, 0), tr.point(c, 1), tr.point(c, 2), tr.point(c, 3));
|
||||
const FT cnr = squared_radius(tr.point(n, 0), tr.point(n, 1), tr.point(n, 2), tr.point(n, 3));
|
||||
|
||||
#ifdef CGAL_AW3_DEBUG_TRAVERSABILITY
|
||||
std::cout << "dual does not cross the face; CR(c): " << cr << " CRn: " << cnr << std::endl;
|
||||
#endif
|
||||
|
||||
return (CGAL::min)(cr, cnr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} // namespace internal
|
||||
} // namespace Alpha_wraps_3
|
||||
} // namespace CGAL
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ bool has_expected_Hausdorff_distance(const TriangleMesh& wrap,
|
|||
|
||||
template <typename TriangleMesh, typename NamedParameters = parameters::Default_named_parameters>
|
||||
bool is_valid_wrap(const TriangleMesh& wrap,
|
||||
const bool check_manifoldness = true,
|
||||
const bool check_manifoldness,
|
||||
const NamedParameters& np = parameters::default_values())
|
||||
{
|
||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||
|
|
@ -203,6 +203,13 @@ bool is_valid_wrap(const TriangleMesh& wrap,
|
|||
return true;
|
||||
}
|
||||
|
||||
template <typename TriangleMesh, typename NamedParameters = parameters::Default_named_parameters>
|
||||
bool is_valid_wrap(const TriangleMesh& wrap,
|
||||
const NamedParameters& np = parameters::default_values())
|
||||
{
|
||||
return is_valid_wrap(wrap, true /*consider manifoldness*/, np);
|
||||
}
|
||||
|
||||
template <typename InputTriangleMesh, typename OutputTriangleMesh,
|
||||
typename InputNamedParameters = parameters::Default_named_parameters,
|
||||
typename OutputNamedParameters = parameters::Default_named_parameters>
|
||||
|
|
@ -105,7 +105,7 @@ void alpha_wrap_3(const PointRange& points,
|
|||
using NP_helper = Point_set_processing_3_np_helper<PointRange, InputNamedParameters>;
|
||||
using Geom_traits = typename NP_helper::Geom_traits;
|
||||
using Oracle = Alpha_wraps_3::internal::Triangle_soup_oracle<Geom_traits>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrap_3<Oracle>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>;
|
||||
|
||||
Geom_traits gt = choose_parameter<Geom_traits>(get_parameter(in_np, internal_np::geom_traits));
|
||||
|
||||
|
|
@ -254,7 +254,7 @@ void alpha_wrap_3(const TriangleMesh& tmesh,
|
|||
|
||||
using Geom_traits = typename GetGeomTraits<TriangleMesh, InputNamedParameters>::type;
|
||||
using Oracle = Alpha_wraps_3::internal::Triangle_mesh_oracle<Geom_traits>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrap_3<Oracle>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>;
|
||||
|
||||
Geom_traits gt = choose_parameter<Geom_traits>(get_parameter(in_np, internal_np::geom_traits));
|
||||
|
||||
|
|
@ -350,7 +350,7 @@ void alpha_wrap_3(const PointRange& points,
|
|||
using NP_helper = Point_set_processing_3_np_helper<PointRange, InputNamedParameters>;
|
||||
using Geom_traits = typename NP_helper::Geom_traits;
|
||||
using Oracle = Alpha_wraps_3::internal::Point_set_oracle<Geom_traits>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrap_3<Oracle>;
|
||||
using AW3 = Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>;
|
||||
|
||||
Geom_traits gt = choose_parameter<Geom_traits>(get_parameter(in_np, internal_np::geom_traits));
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ Alpha_wrap_3
|
|||
Arithmetic_kernel
|
||||
BGL
|
||||
Box_intersection_d
|
||||
CGAL_Core
|
||||
Cartesian_kernel
|
||||
Circulator
|
||||
Distance_2
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
#define CGAL_AW3_TIMER
|
||||
#define CGAL_AW3_DEBUG
|
||||
#define CGAL_AW3_DEBUG_MANIFOLDNESS
|
||||
// #define CGAL_AW3_DEBUG_INITIALIZATION
|
||||
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include "alpha_wrap_validation.h"
|
||||
#include <CGAL/Alpha_wrap_3/internal/validation.h>
|
||||
|
||||
#include <CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h>
|
||||
|
||||
|
|
@ -27,7 +28,7 @@ void generate_random_seeds(const Oracle& oracle,
|
|||
Seeds& seeds,
|
||||
CGAL::Random& r)
|
||||
{
|
||||
const auto bbox = CGAL::Alpha_wraps_3::internal::Alpha_wrap_3<Oracle>(oracle).construct_bbox(offset);
|
||||
const auto bbox = CGAL::Alpha_wraps_3::internal::Alpha_wrapper_3<Oracle>(oracle).construct_bbox(offset);
|
||||
const double sq_offset = CGAL::square(offset);
|
||||
|
||||
while(seeds.size() < 3)
|
||||
|
|
@ -69,7 +70,7 @@ void alpha_wrap_triangle_mesh(Mesh& input_mesh,
|
|||
|
||||
Oracle oracle;
|
||||
oracle.add_triangle_mesh(input_mesh);
|
||||
AW3::internal::Alpha_wrap_3<Oracle> aw3(oracle);
|
||||
AW3::internal::Alpha_wrapper_3<Oracle> aw3(oracle);
|
||||
|
||||
if(seeds.empty())
|
||||
generate_random_seeds(oracle, offset, seeds, r);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
#define CGAL_AW3_TIMER
|
||||
#define CGAL_AW3_DEBUG
|
||||
#define CGAL_AW3_DEBUG_MANIFOLDNESS
|
||||
//#define CGAL_AW3_DEBUG_STEINER_COMPUTATION
|
||||
//#define CGAL_AW3_DEBUG_INITIALIZATION
|
||||
//#define CGAL_AW3_DEBUG_QUEUE
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include "alpha_wrap_validation.h"
|
||||
#include <CGAL/Alpha_wrap_3/internal/validation.h>
|
||||
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#define CGAL_AW3_TIMER
|
||||
#define CGAL_AW3_DEBUG
|
||||
#define CGAL_AW3_DEBUG_MANIFOLDNESS
|
||||
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include "alpha_wrap_validation.h"
|
||||
#include <CGAL/Alpha_wrap_3/internal/validation.h>
|
||||
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/IO/polygon_soup_io.h>
|
||||
|
|
@ -52,7 +53,7 @@ void alpha_wrap_triangle_soup(Points& pr,
|
|||
// AW3
|
||||
Oracle oracle;
|
||||
oracle.add_triangle_soup(pr, fr);
|
||||
AW3::internal::Alpha_wrap_3<Oracle> aw3(oracle);
|
||||
AW3::internal::Alpha_wrapper_3<Oracle> aw3(oracle);
|
||||
|
||||
Mesh wrap;
|
||||
aw3(alpha, offset, wrap, CGAL::parameters::do_enforce_manifoldness(false));
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
#define CGAL_AW3_TIMER
|
||||
//#define CGAL_AW3_DEBUG
|
||||
//#define CGAL_AW3_DEBUG_MANIFOLDNESS
|
||||
#define CGAL_AW3_DEBUG_MANIFOLDNESS
|
||||
//#define CGAL_AW3_DEBUG_STEINER_COMPUTATION
|
||||
//#define CGAL_AW3_DEBUG_INITIALIZATION
|
||||
//#define CGAL_AW3_DEBUG_QUEUE
|
||||
|
||||
#include <CGAL/alpha_wrap_3.h>
|
||||
#include "alpha_wrap_validation.h"
|
||||
#include <CGAL/Alpha_wrap_3/internal/validation.h>
|
||||
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace Qt {
|
|||
}
|
||||
|
||||
template < class Gt >
|
||||
class Parabola_segment_2 : public Parabola_2< Gt >
|
||||
struct Parabola_segment_2 : public Parabola_2< Gt >
|
||||
{
|
||||
typedef CGAL::Parabola_2<Gt> Base;
|
||||
typedef typename Base::Site_2 Site_2;
|
||||
|
|
@ -39,10 +39,10 @@ class Parabola_segment_2 : public Parabola_2< Gt >
|
|||
using Base::t;
|
||||
using Base::f;
|
||||
|
||||
protected:
|
||||
|
||||
Point_2 p1, p2;
|
||||
|
||||
public:
|
||||
|
||||
Parabola_segment_2() : Parabola_2< Gt >() {}
|
||||
|
||||
template<class ApolloniusSite>
|
||||
|
|
|
|||
|
|
@ -1,19 +1,16 @@
|
|||
#ifndef CGAL_APOLLONIUS_GRAPH_2_TEST_H
|
||||
#define CGAL_APOLLONIUS_GRAPH_2_TEST_H
|
||||
|
||||
#include <cassert>
|
||||
#include <CGAL/enum.h>
|
||||
#include <CGAL/use.h>
|
||||
|
||||
#include <CGAL/Vector_2.h> // this is done in order to avoid error
|
||||
// when the Segment_2_Segment_2_intersection.h file is included from
|
||||
// the Triangulation_euclidean_traits_2.h file.
|
||||
|
||||
#include <CGAL/Apollonius_graph_2.h>
|
||||
#include <CGAL/Apollonius_graph_hierarchy_2.h>
|
||||
#include <CGAL/Apollonius_graph_traits_2.h>
|
||||
#include <CGAL/Apollonius_graph_filtered_traits_2.h>
|
||||
//#include <CGAL/new_traits/Apollonius_graph_new_filtered_traits_2.h>
|
||||
|
||||
#include <cassert>
|
||||
#include <CGAL/enum.h>
|
||||
#include <CGAL/use.h>
|
||||
#include <CGAL/Random.h>
|
||||
|
||||
|
||||
#include "IO/Null_output_stream.h"
|
||||
|
||||
|
|
@ -839,24 +836,29 @@ bool test_algo_generic(InputStream& is)
|
|||
// file I/O methods
|
||||
//--------------------------------------------------------------------
|
||||
{
|
||||
std::ofstream ofs("ag_testsuite.tmp");
|
||||
std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
|
||||
std::cout << "writing to " << fname << std::endl;
|
||||
|
||||
std::ofstream ofs(fname);
|
||||
assert( ofs );
|
||||
ag.file_output(ofs);
|
||||
ofs.close();
|
||||
|
||||
std::ifstream ifs("ag_testsuite.tmp");
|
||||
std::ifstream ifs(fname);
|
||||
assert( ifs );
|
||||
ag.file_input(ifs);
|
||||
ifs.close();
|
||||
assert( ag.is_valid() );
|
||||
}
|
||||
{
|
||||
std::ofstream ofs("ag_testsuite.tmp");
|
||||
std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
|
||||
std::cout << "writing to " << fname << std::endl;
|
||||
std::ofstream ofs(fname);
|
||||
assert( ofs );
|
||||
ofs << ag;
|
||||
ofs.close();
|
||||
|
||||
std::ifstream ifs("ag_testsuite.tmp");
|
||||
std::ifstream ifs(fname);
|
||||
assert( ifs );
|
||||
ifs >> ag;
|
||||
ifs.close();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@
|
|||
|
||||
#ifdef CGAL_USE_BOOST_MP
|
||||
|
||||
#ifdef CGAL_USE_CORE
|
||||
#include <CGAL/CORE_arithmetic_kernel.h>
|
||||
#endif
|
||||
|
||||
//Currently already included in boost_mp.h
|
||||
//#include <boost/multiprecision/cpp_int.hpp>
|
||||
//#ifdef CGAL_USE_GMP
|
||||
|
|
@ -26,20 +30,29 @@
|
|||
//#endif
|
||||
|
||||
// FIXME: the could be several kernels based on Boost.Multiprecision.
|
||||
|
||||
namespace CGAL {
|
||||
/** \ingroup CGAL_Arithmetic_kernel
|
||||
* \brief The Boost.Multiprecision set of exact number types
|
||||
*/
|
||||
|
||||
#if !defined(CGAL_USE_CORE) || defined(CGAL_CORE_USE_GMP_BACKEND)
|
||||
struct BOOST_cpp_arithmetic_kernel : internal::Arithmetic_kernel_base {
|
||||
typedef boost::multiprecision::cpp_int Integer;
|
||||
typedef boost::multiprecision::cpp_rational Rational;
|
||||
};
|
||||
#else
|
||||
typedef CORE_arithmetic_kernel BOOST_cpp_arithmetic_kernel;
|
||||
#endif
|
||||
|
||||
#ifdef CGAL_USE_GMP
|
||||
#if !defined(CGAL_USE_CORE) || !defined(CGAL_CORE_USE_GMP_BACKEND)
|
||||
struct BOOST_gmp_arithmetic_kernel : internal::Arithmetic_kernel_base {
|
||||
typedef boost::multiprecision::mpz_int Integer;
|
||||
typedef boost::multiprecision::mpq_rational Rational;
|
||||
};
|
||||
#else
|
||||
typedef CORE_arithmetic_kernel BOOST_gmp_arithmetic_kernel;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
template <class T1, class T2, class T3, class T4, class T5>
|
||||
|
|
|
|||
|
|
@ -55,14 +55,6 @@ public:
|
|||
};
|
||||
|
||||
|
||||
template <>
|
||||
struct Get_arithmetic_kernel<CORE::BigInt>{
|
||||
typedef CORE_arithmetic_kernel Arithmetic_kernel;
|
||||
};
|
||||
template <>
|
||||
struct Get_arithmetic_kernel<CORE::BigRat>{
|
||||
typedef CORE_arithmetic_kernel Arithmetic_kernel;
|
||||
};
|
||||
template <>
|
||||
struct Get_arithmetic_kernel<CORE::Expr>{
|
||||
typedef CORE_arithmetic_kernel Arithmetic_kernel;
|
||||
|
|
@ -74,6 +66,8 @@ struct Get_arithmetic_kernel<CORE::BigFloat>{
|
|||
|
||||
} //namespace CGAL
|
||||
|
||||
#include <CGAL/BOOST_MP_arithmetic_kernel.h>
|
||||
|
||||
#endif // CGAL_USE_CORE
|
||||
|
||||
#endif // CGAL_CORE_ARITHMETIC_KERNEL_H
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
#include <CGAL/Arrangement_with_history_2.h>
|
||||
#include <CGAL/Cartesian.h>
|
||||
#include <CGAL/Arr_default_dcel.h>
|
||||
#include <CGAL/Arr_segment_traits_2.h>
|
||||
#include <CGAL/Arr_linear_traits_2.h>
|
||||
#include <CGAL/Arr_polyline_traits_2.h>
|
||||
|
|
|
|||
|
|
@ -12,13 +12,12 @@ if(POLICY CMP0071)
|
|||
cmake_policy(SET CMP0071 NEW)
|
||||
endif()
|
||||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt5)
|
||||
find_package(Qt5 QUIET COMPONENTS Widgets)
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Core Qt6)
|
||||
find_package(Qt6 QUIET COMPONENTS Widgets)
|
||||
|
||||
if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
||||
include(${CGAL_USE_FILE})
|
||||
if (CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
add_compile_definitions(QT_NO_KEYWORDS)
|
||||
include_directories( BEFORE ./ )
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
# Arrangement package includes
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
|
|
@ -50,7 +49,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
endif()
|
||||
|
||||
|
||||
qt5_wrap_ui(arrangement_2_uis
|
||||
qt6_wrap_ui(arrangement_2_uis
|
||||
ArrangementDemoWindow.ui
|
||||
NewTabDialog.ui
|
||||
OverlayDialog.ui
|
||||
|
|
@ -58,7 +57,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
AlgebraicCurveInputDialog.ui
|
||||
RationalCurveInputDialog.ui)
|
||||
|
||||
qt5_wrap_cpp(CGAL_Qt5_MOC_FILES
|
||||
qt6_wrap_cpp(CGAL_Qt6_MOC_FILES
|
||||
ArrangementDemoWindow.h
|
||||
ArrangementDemoTab.h
|
||||
GraphicsViewCurveInput.h
|
||||
|
|
@ -70,7 +69,7 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
ColorItemEditor.h
|
||||
PropertyValueDelegate.h)
|
||||
|
||||
qt5_add_resources(CGAL_Qt5_RESOURCE_FILES Arrangement_on_surface_2.qrc)
|
||||
qt6_add_resources(CGAL_Qt6_RESOURCE_FILES Arrangement_on_surface_2.qrc)
|
||||
|
||||
add_executable(arrangement_2
|
||||
arrangement_2.cpp
|
||||
|
|
@ -107,11 +106,11 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
ArrangementIO.cpp
|
||||
${UTILS_COMPILE_FILES}
|
||||
${arrangement_2_uis}
|
||||
${CGAL_Qt5_RESOURCE_FILES}
|
||||
${CGAL_Qt5_MOC_FILES})
|
||||
${CGAL_Qt6_RESOURCE_FILES}
|
||||
${CGAL_Qt6_MOC_FILES})
|
||||
|
||||
target_link_libraries(arrangement_2 PRIVATE Qt5::Widgets)
|
||||
target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5)
|
||||
target_link_libraries(arrangement_2 PRIVATE Qt6::Widgets)
|
||||
target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt6)
|
||||
if(CGAL_Core_FOUND)
|
||||
target_link_libraries(arrangement_2 PRIVATE CGAL::CGAL_Core)
|
||||
endif()
|
||||
|
|
@ -124,11 +123,11 @@ if (CGAL_Qt5_FOUND AND Qt5_FOUND)
|
|||
else()
|
||||
set(MISSING_DEPS "")
|
||||
|
||||
if(NOT CGAL_Qt5_FOUND)
|
||||
set(MISSING_DEPS "the CGAL Qt5 library, ${MISSING_DEPS}")
|
||||
if(NOT CGAL_Qt6_FOUND)
|
||||
set(MISSING_DEPS "the CGAL Qt6 library, ${MISSING_DEPS}")
|
||||
endif()
|
||||
if(NOT Qt5_FOUND)
|
||||
set(MISSING_DEPS "Qt5, ${MISSING_DEPS}")
|
||||
if(NOT Qt6_FOUND)
|
||||
set(MISSING_DEPS "Qt6, ${MISSING_DEPS}")
|
||||
endif()
|
||||
message("NOTICE: This demo requires ${MISSING_DEPS} and will not be compiled.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ PropertyValueDelegate::PropertyValueDelegate( QObject* parent ):
|
|||
QItemEditorFactory* factory = new QItemEditorFactory;
|
||||
QItemEditorCreatorBase* creator =
|
||||
new QStandardItemEditorCreator< PositiveSpinBox >( );
|
||||
factory->registerEditor( QVariant::UInt, creator );
|
||||
factory->registerEditor( QMetaType::UInt, creator );
|
||||
this->setItemEditorFactory( factory );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#include "IntersectCurves.h"
|
||||
#include "ArrangementTypes.h"
|
||||
#include <boost/function_output_iterator.hpp>
|
||||
#include <boost/iterator/function_output_iterator.hpp>
|
||||
|
||||
|
||||
template <typename Traits_>
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ operator()(const Point_2& p, const X_monotone_curve_2& curve) const {
|
|||
auto points = painterOstream.getPointsList(curve);
|
||||
|
||||
QPoint p_viewport =
|
||||
view->mapFromScene(QPointF{p.x().doubleValue(), p.y().doubleValue()});
|
||||
view->mapFromScene(QPointF{CGAL::to_double(p.x()), CGAL::to_double(p.y())});
|
||||
|
||||
double min_dist = (std::numeric_limits<double>::max)();
|
||||
for (auto& vec : points) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ int main(int argc, char* argv[])
|
|||
QCoreApplication::setOrganizationName("CGAL");
|
||||
QCoreApplication::setApplicationName("2D Arrangements Demo");
|
||||
|
||||
// Import resources from libCGAL (Qt5).
|
||||
// Import resources from libCGAL (Qt6).
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
|
||||
ArrangementDemoWindow demoWindow;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue