Merge remote-tracking branch 'origin/Solvers-add_osqp-danston' into Shape_regularization-new_package-danston

This commit is contained in:
Dmitry Anisimov 2021-06-18 16:15:53 +02:00
commit 672a6e8e30
81 changed files with 581 additions and 884 deletions

View File

@ -81,7 +81,7 @@ jobs:
cd build_doc && make -j2 doc cd build_doc && make -j2 doc
make -j2 doc_with_postprocessing 2>tmp.log make -j2 doc_with_postprocessing 2>tmp.log
if [ -s tmp.log ]; then if [ -s tmp.log ]; then
content=`cat ./build_doc/tmp.log` content=`cat ./tmp.log`
echo ::set-output name=DoxygenError::$(cat tmp.log) echo ::set-output name=DoxygenError::$(cat tmp.log)
exit 1 exit 1
fi fi

View File

@ -84,6 +84,7 @@ struct VTK_type_generator<boost::uint32_t> {
typedef vtkUnsignedIntArray ArrayType; typedef vtkUnsignedIntArray ArrayType;
}; };
inline
::vtkImageData* vtk_image_sharing_same_data_pointer(Image_3& image) ::vtkImageData* vtk_image_sharing_same_data_pointer(Image_3& image)
{ {
vtkImageData* vtk_image = vtkImageData::New(); vtkImageData* vtk_image = vtkImageData::New();

View File

@ -227,7 +227,7 @@ cases where many labels are used (more than five).
An [example](\ref Classification_example_ethz_random_forest) shows how to An [example](\ref Classification_example_ethz_random_forest) shows how to
use this classifier. For more details about the algorithm, please refer use this classifier. For more details about the algorithm, please refer
to README provided in the [ETH Zurich's code archive](https://www.ethz.ch/content/dam/ethz/special-interest/baug/igp/photogrammetry-remote-sensing-dam/documents/sourcecode-and-datasets/Random%20Forest/rforest.zip). to README provided in the [ETH Zurich's code archive](https://ethz.ch/content/dam/ethz/special-interest/baug/igp/photogrammetry-remote-sensing-dam/documents/sourcecode-and-datasets/Random%20Forest/rforest.zip).
\subsubsection Classification_ETHZ_random_forest_deprecated Deprecated IO \subsubsection Classification_ETHZ_random_forest_deprecated Deprecated IO

View File

@ -322,7 +322,7 @@ employing the authors) of this work, a pointer to the file containing its text i
<LI>\$URL\$ : canonical path to the file on github, <LI>\$URL\$ : canonical path to the file on github,
<LI>\$Id\$ : the release version the file is from. <LI>\$Id\$ : the release version the file is from.
</UL> </UL>
<LI> Then [SPDX license identifier](https://spdx.org/). For GPL-3+ it should be `SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial`, <LI> Then [SPDX license identifier](https://spdx.dev/). For GPL-3+ it should be `SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial`,
and `SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial` for LGPL-3+. and `SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial` for LGPL-3+.
<LI>Then the authors of (non-negligible parts of) this file are listed, with <LI>Then the authors of (non-negligible parts of) this file are listed, with
optional affiliation or e-mail address. optional affiliation or e-mail address.

View File

@ -10,20 +10,20 @@ supporting <a href="https://isocpp.org/wiki/faq/cpp14">C++14</a> or later.
\cgal \cgalReleaseNumber is supported (continuously tested) for the following compilers/operating systems: \cgal \cgalReleaseNumber is supported (continuously tested) for the following compilers/operating systems:
| Operating System | Compiler | | Operating System | Compiler |
| :------- | :--------------- | | :---------- | :--------------- |
| Linux | \gnu `g++` 6.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} | | Linux | \gnu `g++` 8.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} |
| | `Clang` \cgalFootnote{<A HREF="http://clang.llvm.org/">`http://clang.llvm.org/`</A>} compiler version 8.0.0 | | | `Clang` \cgalFootnote{<A HREF="http://clang.llvm.org/">`http://clang.llvm.org/`</A>} compiler version 11.1.0 |
| \ms Windows | \gnu `g++` 6.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} | | \ms Windows | \gnu `g++` 8.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} |
| | \ms Visual `C++` 14.0, 15.9, 16.0 (\visualstudio 2015, 2017, and 2019)\cgalFootnote{<A HREF="https://visualstudio.microsoft.com/">`https://visualstudio.microsoft.com/`</A>} | | | \ms Visual `C++` 14.0, 15.9, 16.10 (\visualstudio 2015, 2017, and 2019)\cgalFootnote{<A HREF="https://visualstudio.microsoft.com/">`https://visualstudio.microsoft.com/`</A>} |
| MacOS X | \gnu `g++` 6.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} | | MacOS X | \gnu `g++` 8.3 or later\cgalFootnote{<A HREF="http://gcc.gnu.org/">`http://gcc.gnu.org/`</A>} |
| | Apple `Clang` compiler versions 7.0.2 and 10.0.1 | | | Apple `Clang` compiler versions 10.0.1 and 12.0.0 |
<!-- Windows supported version are also listed on windows.html (must change both) --> <!-- Windows supported version are also listed on windows.html (must change both) -->
Older versions of the above listed compilers might work, but no guarantee is provided. Older versions of the above listed compilers might work, but no guarantee is provided.
\section seccmake CMake \section seccmake CMake
<b>Version 3.12 or later</b> <b>Version 3.14 or later</b>
In order to configure and build the \cgal examples, demos, or libraries, In order to configure and build the \cgal examples, demos, or libraries,
you need <a href="https://cmake.org/">CMake</a>, a cross-platform "makefile generator". you need <a href="https://cmake.org/">CMake</a>, a cross-platform "makefile generator".
@ -89,8 +89,8 @@ solution, and we recommend to use them.
These libraries can be obtained from <A HREF="https://gmplib.org/">`https://gmplib.org/`</A> These libraries can be obtained from <A HREF="https://gmplib.org/">`https://gmplib.org/`</A>
and <A HREF="https://www.mpfr.org/">`https://www.mpfr.org/`</A>. and <A HREF="https://www.mpfr.org/">`https://www.mpfr.org/`</A>.
Since Visual \cpp is not properly supported by the \gmp and \mpfr projects, Since Visual \cpp is not properly supported by the \gmp and \mpfr projects,
we provide precompiled versions of \gmp and \mpfr, which can be downloaded with the installer we provide precompiled versions of \gmp and \mpfr, which can be downloaded
<a href="https://github.com/CGAL/cgal/releases">`CGAL-\cgalReleaseNumber``-Setup.exe`</a>. from the <a href="https://github.com/CGAL/cgal/releases">assets of a release</a>.
\section secoptional3rdpartysoftware Optional Third Party Libraries \section secoptional3rdpartysoftware Optional Third Party Libraries
@ -204,7 +204,7 @@ length integers, and for vectors, matrices, and polynomials over the
integers and over finite fields. The optional library \ntl is used by \cgal integers and over finite fields. The optional library \ntl is used by \cgal
to speed up operations of the Polynomial package, such as GCDs. It is recommended to install \ntl with support from \gmp. to speed up operations of the Polynomial package, such as GCDs. It is recommended to install \ntl with support from \gmp.
\ntl can be downloaded from <A HREF="https://www.shoup.net/ntl/">`https://www.shoup.net/ntl/`</A>. \ntl can be downloaded from <A HREF="https://libntl.org">`https://libntl.org`</A>.
\subsection thirdpartyESBTL ESBTL \subsection thirdpartyESBTL ESBTL
@ -225,7 +225,7 @@ code. In order to use \tbb in \cgal programs, the executables
should be linked with the CMake imported target `CGAL::TBB_support` should be linked with the CMake imported target `CGAL::TBB_support`
provided in `CGAL_TBB_support.cmake`. provided in `CGAL_TBB_support.cmake`.
The \tbb web site is <A HREF="https://www.threadingbuildingblocks.org">`https://www.threadingbuildingblocks.org`</A>. The \tbb web site is <A HREF="https://github.com/oneapi-src/oneTBB">`https://github.com/oneapi-src/oneTBB`</A>.
\subsection thirdpartyLASlib LASlib \subsection thirdpartyLASlib LASlib

View File

@ -308,7 +308,7 @@ there must be a global function `halfedges(const G&)`, etc.
An example for a concept with a required traits class is `InputIterator`. An example for a concept with a required traits class is `InputIterator`.
For a model of an `InputIterator` a specialization of the class For a model of an `InputIterator` a specialization of the class
<a href="http://en.cppreference.com/w/cpp/iterator/iterator_traits"> `std::iterator_traits`</a> <a href="https://en.cppreference.com/w/cpp/iterator/iterator_traits"> `std::iterator_traits`</a>
must exist (or the generic template must be applicable). must exist (or the generic template must be applicable).
\section intro_further Further Reading \section intro_further Further Reading

View File

@ -190,17 +190,6 @@ as this will help `cmake` to find Boost.</li>
<li>Add the path to the Boost `dlls` (`C:\dev\libboost_1_71_0\lib64-msvc-XX.Y`) files to the `PATH` environment variable.</li> <li>Add the path to the Boost `dlls` (`C:\dev\libboost_1_71_0\lib64-msvc-XX.Y`) files to the `PATH` environment variable.</li>
</ul> </ul>
\subsection ssect-installer-install-cgal Installing CGAL Itself
Download and run `CGAL-\cgalReleaseNumber``-Setup.exe` from
<a href="https://www.cgal.org/download/windows.html">https://www.cgal.org/download/windows.html</a>.
It is a self extracting executable that downloads the \cgal header files, and optionally the source code of the
examples and demos. Additionally, it can download the precompiled versions of \gmp and \mpfr. You must
specify if you want the 32 or the 64 bit versions of these two libraries.
Setting the environment variable `CGAL_DIR` to `C:\dev\CGAL-\cgalReleaseNumber` is a good idea
to help `cmake` to find \cgal during the configuration process, detailed in the next section.
\subsection ssect-installer-compile-example Compiling an Example \subsection ssect-installer-compile-example Compiling an Example
We assume that you have downloaded the examples with the \cgal Installer. We assume that you have downloaded the examples with the \cgal Installer.
@ -245,8 +234,8 @@ A typical `Qt` installation would consist of the following steps:
<ul> <ul>
<li> <li>
Download and install the Qt library for open source development package for your Visual Studio version at Download and install the Qt library for open source development package for your Visual Studio version at
<a href="https://www.qt.io/download/">https://www.qt.io/download/</a> <a href="https://www.qt.io/download">https://www.qt.io/download</a>
(here is the direct link to the <a href="https://www1.qt.io/offline-installers/">offline installers</a>).</li> (here is the direct link to the <a href="https://www.qt.io/offline-installers">offline installers</a>).</li>
<li>Add the environment variable `QTDIR` pointing to the place you installed Qt, e.g., `C:\dev\Qt\Qt5.13.1`, <li>Add the environment variable `QTDIR` pointing to the place you installed Qt, e.g., `C:\dev\Qt\Qt5.13.1`,
as this will help `cmake` to find Qt.</li> as this will help `cmake` to find Qt.</li>
<li>Add the bin directory of Qt, e.g. add `C:\dev\Qt\Qt5.13.1\msvcXXXX_YY\bin` to `PATH`, where `XXXX_YY` is something like `vc2017_64`. <li>Add the bin directory of Qt, e.g. add `C:\dev\Qt\Qt5.13.1\msvcXXXX_YY\bin` to `PATH`, where `XXXX_YY` is something like `vc2017_64`.

View File

@ -1349,7 +1349,6 @@ Teillaud"
,number = {ECG-TR-122201-01} ,number = {ECG-TR-122201-01}
,address = {Sophia-Antipolis} ,address = {Sophia-Antipolis}
,month = may ,month = may
,url = {ftp://ftp-sop.inria.fr/prisme/ECG/Reports/Month12/ECG-TR-122201-01.ps.gz}
} }
@inproceedings{ cgal:ke-rctac-03 @inproceedings{ cgal:ke-rctac-03
@ -2152,7 +2151,7 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio
,month = dec ,month = dec
,year = {2000} ,year = {2000}
,issn = {0946-011X} ,issn = {0946-011X}
,url = {https://www.mpi-sb.mpg.de/~mehlhorn/ftp/InfiFrames.ps} ,url = {https://people.mpi-inf.mpg.de/~mehlhorn/ftp/InfiFrames.ps}
} }
@InProceedings{cgal:sp-mrbee-05 @InProceedings{cgal:sp-mrbee-05
@ -2383,7 +2382,7 @@ location = {Salt Lake City, Utah, USA}
howpublished = {Stefan Walk (ETH Zurich, Department of Civil, howpublished = {Stefan Walk (ETH Zurich, Department of Civil,
Environmental and Geomatic Engineering, Institute of Environmental and Geomatic Engineering, Institute of
Geodesy and Photogrammetry)}, Geodesy and Photogrammetry)},
url = {http://www.prs.igp.ethz.ch/research/Source_code_and_datasets.html}, url = {https://prs.igp.ethz.ch/research/Source_code_and_datasets.html},
year = 2014 year = 2014
} }

View File

@ -152039,7 +152039,7 @@ pages = {179--189}
Booktitle = {53rd Annual IEEE Symposium on Foundations of Computer Science (FOCS)}, Booktitle = {53rd Annual IEEE Symposium on Foundations of Computer Science (FOCS)},
Year = {2012}, Year = {2012},
Pages = {440-449}, Pages = {440-449},
Url = {http://arxiv.org/abs/1110.4573} Url = {https://arxiv.org/abs/1110.4573}
} }
@article{cvl-ew-12, @article{cvl-ew-12,

View File

@ -3,12 +3,13 @@
var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//;
var url_local = /.*\/doc_output\//; var url_local = /.*\/doc_output\//;
var current_version_local = '5.2' var current_version_local = '5.3-beta1'
var all_versions = [ var all_versions = [
'master', 'master',
'5.2', '5.3-beta1',
'latest', 'latest',
'5.1.2', '5.2.2',
'5.1.4',
'5.0.4', '5.0.4',
'4.14.3', '4.14.3',
'4.13.2', '4.13.2',

View File

@ -3,12 +3,13 @@
var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//;
var url_local = /.*\/doc_output\//; var url_local = /.*\/doc_output\//;
var current_version_local = '5.2' var current_version_local = '5.3-beta1'
var all_versions = [ var all_versions = [
'master', 'master',
'5.2', '5.3-beta1',
'latest', 'latest',
'5.1.2', '5.2.2',
'5.1.4',
'5.0.4', '5.0.4',
'4.14.3', '4.14.3',
'4.13.2', '4.13.2',

View File

@ -3,12 +3,13 @@
var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//;
var url_local = /.*\/doc_output\//; var url_local = /.*\/doc_output\//;
var current_version_local = '5.2' var current_version_local = '5.3-beta1'
var all_versions = [ var all_versions = [
'master', 'master',
'5.2', '5.3-beta1',
'latest', 'latest',
'5.1.2', '5.2.2',
'5.1.4',
'5.0.4', '5.0.4',
'4.14.3', '4.14.3',
'4.13.2', '4.13.2',

View File

@ -3,12 +3,13 @@
var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//;
var url_local = /.*\/doc_output\//; var url_local = /.*\/doc_output\//;
var current_version_local = '5.2' var current_version_local = '5.3-beta1'
var all_versions = [ var all_versions = [
'master', 'master',
'5.2', '5.3-beta1',
'latest', 'latest',
'5.1.2', '5.2.2',
'5.1.4',
'5.0.4', '5.0.4',
'4.14.3', '4.14.3',
'4.13.2', '4.13.2',

View File

@ -33,10 +33,20 @@ namespace internal{
std::size_t std::size_t
operator()(const H& h) operator()(const H& h)
{ {
return std::size_t(&*h) / return std::size_t(h.operator->()) /
sizeof( typename std::iterator_traits<H>::value_type); sizeof( typename std::iterator_traits<H>::value_type);
} }
}; };
template <class H>
struct Hash_functor<H*>{
std::size_t
operator()(const H* h)
{
return std::size_t(h) /
sizeof(H);
}
};
} }
} }

View File

@ -4,18 +4,21 @@ Release History
[Release 5.3](https://github.com/CGAL/cgal/releases/tag/v5.3) [Release 5.3](https://github.com/CGAL/cgal/releases/tag/v5.3)
----------- -----------
Release date: June 2021 Release date: July 2021
### Triangulations on the Sphere (new package) ### [Quadtrees, Octrees, and Orthtrees](https://doc.cgal.org/5.3/Manual/packages.html#PkgOrthtree) (new package)
- This package implements a tree data structure in which each node encloses a hypercubic section
of space and each non-leave node has hypercubic children whose edge lengths are half its edge length.
Such a data structure is known as a quadtree in 2D, an octree in 3D, and is generalized
as an "orthtree" in higher dimensions.
### [Triangulations on the Sphere](https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulationOnSphere2) (new package)
- This package enables the construction and manipulation of Delaunay triangulations on the 2-sphere. - This package enables the construction and manipulation of Delaunay triangulations on the 2-sphere.
Triangulations are built incrementally and can be modified by insertion or removal of vertices. Triangulations are built incrementally and can be modified by insertion or removal of vertices.
Point location querying and primitives to build the dual Voronoi diagram are provided. Point location querying and primitives to build the dual Voronoi diagram are provided.
### General
- Cmake minimal version is now `3.14`.
### File Input / Output ### File Input / Output
- Point set, polygon soup, and polygon mesh file I/O functions have been harmonized and documented: - Point set, polygon soup, and polygon mesh file I/O functions have been harmonized and documented:
@ -23,55 +26,67 @@ Release date: June 2021
- Polygon mesh I/O functions can be found in the package [BGL](https://doc.cgal.org/5.3/Manual/packages.html#PkgBGL). - Polygon mesh I/O functions can be found in the package [BGL](https://doc.cgal.org/5.3/Manual/packages.html#PkgBGL).
- Polygon soup I/O can be found in the package [Stream_support](https://doc.cgal.org/5.3/Manual/packages.html#PkgStreamSupport). - Polygon soup I/O can be found in the package [Stream_support](https://doc.cgal.org/5.3/Manual/packages.html#PkgStreamSupport).
A comprehensive list of the supported file formats is available in the Stream_support package [here](https://doc.cgal.org/5.3/Stream_support/index.html#IOstreamSupportedFormats); inversely, the following [page](https://doc.cgal.org/5.3/Stream_support/IOStreamSupportedFileFormats.html) can be used to find out which CGAL data structures can be used given a specific file format. A comprehensive list of the supported file formats is available in the Stream_support package
[here](https://doc.cgal.org/5.3/Stream_support/index.html#IOstreamSupportedFormats);
inversely, the following [page](https://doc.cgal.org/5.3/Stream_support/IOStreamSupportedFileFormats.html)
can be used to find out which CGAL data structures can be used given a specific file format.
### [Requirements](https://doc.cgal.org/5.3/Manual/thirdparty.html)
- The CMake minimal version is now `3.14`.
- The GNU compiler g++ versions 6 and 7 are no longer tested. Only version 8.3 or later are supported
### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.3/Manual/packages.html#PkgKernel23) ### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.3/Manual/packages.html#PkgKernel23)
- Added functions to the classes `Aff_transformation_2` and `Aff_transformation_3`, which enable to determine if they internally have a specialized representation. - Added `is_translation()`, `is_scaling()`, `is_reflection()`, and `is_rotation()` to the classes
[`Aff_transformation_2`](https://doc.cgal.org/5.3/Kernel_23/classCGAL_1_1Aff__transformation__2.html)
and [`Aff_transformation_3`](https://doc.cgal.org/5.3/Kernel_23/classCGAL_1_1Aff__transformation__3.html),
which enable determining if the transformations use a specialized representation internally.
### [Quadtrees, Octrees, and Orthtrees](https://doc.cgal.org/5.3/Manual/packages.html#PkgOrthree) (new package) ### [2D Regularized Boolean Set-Operations](https://doc.cgal.org/5.3/Manual/packages.html#PkgBooleanSetOperations2)
- Added documentation for the free functions [`oriented_side(const Point_2& p, ....)`](https://doc.cgal.org/5.3/Boolean_set_operations_2/group__boolean__oriented__side.html)
- This package implements a tree data structure in which each node that accept a point and a polygon.
encloses a hypercubic section of space and each non-leave node has - Documentation has been improved across the whole package.
hypercubic children whose edge lengths are half its edge
length. Such a data structure is known as a quadtree in 2D, an
octree in 3D, and is generalized as an "orthtree" in higher
dimensions.
### [Polygon Mesh Processing](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolygonMeshProcessing) ### [Polygon Mesh Processing](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolygonMeshProcessing)
- Added the class `CGAL::Polyhedral_envelope` providing a way to quickly check if a primitive (point, segment, or triangle) - Added the class [`CGAL::Polyhedral_envelope`](https://doc.cgal.org/5.3/Polygon_mesh_processing/structCGAL_1_1Polyhedral__envelope.html),
providing a way to quickly check if a primitive (point, segment, or triangle)
is within a polyhedral envelope around a set of triangles. It is based on the work of is within a polyhedral envelope around a set of triangles. It is based on the work of
Bolun Wang, Teseo Schneider, Yixin Hu, Marco Attene, and Daniele Panozzo. Bolun Wang, Teseo Schneider, Yixin Hu, Marco Attene, and Daniele Panozzo.
"Exact and efficient polyhedral envelope containment check." (ACM Trans. Graph., 39-4, July 2020). "Exact and efficient polyhedral envelope containment check." (ACM Trans. Graph., 39-4, July 2020).
- Added more functions in the visitor of the corefinement based methods to track all edge creations. - Added more functions in the [visitor of the corefinement based methods](https://doc.cgal.org/5.3/Polygon_mesh_processing/classPMPCorefinementVisitor.html)
to track all edge creations.
### [Surface Mesh Topology](https://doc.cgal.org/5.3/Manual/packages.html#PkgSurfaceMeshTopologySummary)
- Added the function [`CGAL::Surface_mesh_topology::Curves_on_surface_topology::is_homotopic_to_simple_cycle()`](https://doc.cgal.org/5.3/Surface_mesh_topology/classCGAL_1_1Surface__mesh__topology_1_1Curves__on__surface__topology.html#a8d7c4cba2cf2cff542f5cd93117233db),
which can be used to determine whehter a closed path on a surface mesh can be continously
transformed to a cycle without self intersection.
### [Surface Mesh Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgSurfaceMeshSimplification) ### [Surface Mesh Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgSurfaceMeshSimplification)
- Added a filtering mechanism so that costly tests get only applied to the next candidate for the edge collapse. - Added a filtering mechanism so that costly tests get only applied to the next candidate for the edge collapse.
- Added the class `Polyhedral_envelope_filter` that enables to perform mesh simplification inside a polyhedral envelope of the input mesh. - Added the class [`Polyhedral_envelope_filter`](https://doc.cgal.org/5.3/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Polyhedral__envelope__filter.html),
which enables to perform mesh simplification inside a polyhedral envelope of the input mesh.
### Surface Mesh Topology
- Added the function `CGAL::Surface_mesh_topology::Curves_on_surface_topology::is_homotopic_to_simple_cycle()`, which can be used to determine whehter a closed path
on a surface mesh can be continously transformed to a cycle without self intersection.
### 2D Regularized Boolean Set Operations
- Added documentation for the free functions `oriented_side(const Point_2& p, ....)` that accept a point and a polygon, and improved the documentation of all other functions
### [2D Polyline Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolylineSimplification2) ### [2D Polyline Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolylineSimplification2)
- When polylines have common subsequences of vertices these subsequences may be simplifified simultaneously. - When polylines have common subsequences of vertices, these subsequences may now be simplifified simultaneously.
### [dD Triangulations](https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulations)
- Added the function [`insert_if_in_star()`](https://doc.cgal.org/5.3/Triangulation/classCGAL_1_1Regular__triangulation.html#aa8df2d138f341939e834bcdd7cb6c71a)
to the class [`CGAL::Regular_triangulation`](https://doc.cgal.org/5.3/Triangulation/classCGAL_1_1Regular__triangulation.html),
which enables users to insert a point `p` in a regular triangulation on the condition that `p`
appears post-insertion in the star of a user-specified, existing vertex.
### [2D and 3D Alpha Shapes](https://doc.cgal.org/5.3/Manual/packages.html#PkgAlphaShapes2) ### [2D and 3D Alpha Shapes](https://doc.cgal.org/5.3/Manual/packages.html#PkgAlphaShapes2)
- The following deprecated classes have been removed: `Alpha_shape_euclidean_traits_2`, - **Breaking change**: The following deprecated classes have been removed: `Alpha_shape_euclidean_traits_2`,
`Weighted_alpha_shape_euclidean_traits_2`, `Alpha_shape_euclidean_traits_3`, and `Weighted_alpha_shape_euclidean_traits_2`, `Alpha_shape_euclidean_traits_3`, and
`Weighted_alpha_shape_euclidean_traits_3`. All CGAL kernel can be used directly as models `Weighted_alpha_shape_euclidean_traits_3`. All CGAL kernel can be used directly as models
of the concepts of the 2D and 3D Alpha Shape packages. of the concepts of the 2D and 3D Alpha Shape packages.
### [dD Triangulations](https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulations)
- Added the function `insert_if_in_star()` to the class `CGAL::Regular_triangulation`, which enables users to insert a point `p` in a regular triangulation on the condition that `p` appears post-insertion in the star of a user-specified, existing vertex.
### [Classification](https://doc.cgal.org/5.3/Manual/packages.html#PkgClassification) ### [Classification](https://doc.cgal.org/5.3/Manual/packages.html#PkgClassification)
- **Breaking change**: the support for TensorFlow was dropped, the - **Breaking change**: the support for TensorFlow has been dropped; the
classifier `CGAL::TensorFlow::Neural_network_classifier` was removed. classifier `CGAL::TensorFlow::Neural_network_classifier` has been removed.
[Release 5.2](https://github.com/CGAL/cgal/releases/tag/v5.2) [Release 5.2](https://github.com/CGAL/cgal/releases/tag/v5.2)
----------- -----------
@ -605,7 +620,7 @@ Release date: November 2019
- Added a function to convert a Nef_polyhedron_3 to a polygon soup: [`CGAL::convert_nef_polyhedron_to_polygon_soup()`](https://doc.cgal.org/5.0/Nef_3/group__PkgNef3IOFunctions.html#ga28a9eb4da0cd6153f0c16f7f9eaf6665) - Added a function to convert a Nef_polyhedron_3 to a polygon soup: [`CGAL::convert_nef_polyhedron_to_polygon_soup()`](https://doc.cgal.org/5.0/Nef_3/group__PkgNef3IOFunctions.html#ga28a9eb4da0cd6153f0c16f7f9eaf6665)
### [IO Streams](https://doc.cgal.org/5.0/Manual/packages.html#PkgStreamSupport) ### [IO Streams](https://doc.cgal.org/5.0/Manual/packages.html#PkgStreamSupport)
- **Breaking change:** The API of [`CGAL::IO::Color`](https://doc.cgal.org/5.0/Stream_support/classCGAL_1_1Color.html) has been cleaned up. - **Breaking change:** The API of [`CGAL::Color`](https://doc.cgal.org/5.0/Stream_support/classCGAL_1_1Color.html) has been cleaned up.
- Added new functions to support some parts of the WKT file format: - Added new functions to support some parts of the WKT file format:
* [`CGAL::read_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gad2872abfe6fcf17d705d38567fdd6248) * [`CGAL::read_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gad2872abfe6fcf17d705d38567fdd6248)
* [`CGAL::read_point_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gadbd2705b183e467507abd2f167446eba) * [`CGAL::read_point_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gadbd2705b183e467507abd2f167446eba)

View File

@ -74,6 +74,7 @@ function(expand_list_with_globbing list_name)
endfunction() endfunction()
function(cgal_add_compilation_test exe_name) function(cgal_add_compilation_test exe_name)
if(NOT CMAKE_VS_MSBUILD_COMMAND)
if(TEST compilation_of__${exe_name}) if(TEST compilation_of__${exe_name})
return() return()
endif() endif()
@ -81,6 +82,27 @@ function(cgal_add_compilation_test exe_name)
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}" --config "$<CONFIG>") COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}" --config "$<CONFIG>")
set_property(TEST "compilation_of__${exe_name}" set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}") APPEND PROPERTY LABELS "${PROJECT_NAME}")
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
elseif(NOT TARGET compilation_of__${PROJECT_NAME})#CMAKE_VS_MSBUILD_COMMAND
#this target is just a flag, to deal with the scope problem with the tests
add_custom_target(compilation_of__${PROJECT_NAME})
add_test(NAME "compilation_of__${PROJECT_NAME}"
COMMAND ${TIME_COMMAND} "${CMAKE_VS_MSBUILD_COMMAND}" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.sln" "-m:$ENV{NUMBER_OF_PROCESSORS}" "/t:Build" "/p:Configuration=$<CONFIG>")
set_property(TEST "compilation_of__${PROJECT_NAME}"
APPEND PROPERTY LABELS "${PROJECT_NAME}")
set_property(TEST "compilation_of__${PROJECT_NAME}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
set_tests_properties("compilation_of__${PROJECT_NAME}"
PROPERTIES RUN_SERIAL TRUE)
#because of the scope of the tests, this part cannot go in the relevant CMakeLists
if("${PROJECT_NAME}" STREQUAL "Polyhedron_Demo")
set_tests_properties(compilation_of__Polyhedron_Demo PROPERTIES TIMEOUT 2400)
elseif("${PROJECT_NAME}" STREQUAL "Mesh_3_Tests" OR "${PROJECT_NAME}" STREQUAL "Mesh_3_Examples")
set_tests_properties(compilation_of__${PROJECT_NAME} PROPERTIES TIMEOUT 1600)
endif()
endif()#CMAKE_VS_MSBUILD_COMMAND
if(NOT TARGET ALL_CGAL_TARGETS) if(NOT TARGET ALL_CGAL_TARGETS)
add_custom_target( ALL_CGAL_TARGETS ) add_custom_target( ALL_CGAL_TARGETS )
endif() endif()
@ -94,8 +116,6 @@ function(cgal_add_compilation_test exe_name)
set_property(TEST "check_build_system" set_property(TEST "check_build_system"
PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture") PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture")
endif() endif()
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
if(TARGET CGAL_Qt5_moc_and_resources) # if CGAL_Qt5 was searched, and is header-only if(TARGET CGAL_Qt5_moc_and_resources) # if CGAL_Qt5 was searched, and is header-only
get_property(linked_libraries TARGET "${exe_name}" PROPERTY LINK_LIBRARIES) get_property(linked_libraries TARGET "${exe_name}" PROPERTY LINK_LIBRARIES)
# message(STATUS "${exe_name} depends on ${linked_libraries}") # message(STATUS "${exe_name} depends on ${linked_libraries}")
@ -135,8 +155,13 @@ function(cgal_setup_test_properties test_name)
endif() endif()
if(exe_name) if(exe_name)
if(NOT CMAKE_VS_MSBUILD_COMMAND)
set_property(TEST "${test_name}" set_property(TEST "${test_name}"
APPEND PROPERTY DEPENDS "compilation_of__${exe_name}") APPEND PROPERTY DEPENDS "compilation_of__${exe_name}")
else()#CMAKE_VS_MSBUILD_COMMAND
set_property(TEST "${test_name}"
APPEND PROPERTY DEPENDS "compilation_of__${PROJECT_NAME}")
endif()#CMAKE_VS_MSBUILD_COMMAND
endif() endif()
get_filename_component(_source_dir_abs ${CMAKE_CURRENT_SOURCE_DIR} ABSOLUTE) get_filename_component(_source_dir_abs ${CMAKE_CURRENT_SOURCE_DIR} ABSOLUTE)
@ -217,8 +242,13 @@ function(cgal_setup_test_properties test_name)
if(exe_name) if(exe_name)
set_property(TEST ${test_name} set_property(TEST ${test_name}
APPEND PROPERTY FIXTURES_REQUIRED "${exe_name}") APPEND PROPERTY FIXTURES_REQUIRED "${exe_name}")
if(NOT CMAKE_VS_MSBUILD_COMMAND)
set_property(TEST "compilation_of__${exe_name}" set_property(TEST "compilation_of__${exe_name}"
PROPERTY FIXTURES_SETUP "${exe_name}") PROPERTY FIXTURES_SETUP "${exe_name}")
else()#CMAKE_VS_MSBUILD_COMMAND
set_property(TEST "compilation_of__${PROJECT_NAME}"
PROPERTY FIXTURES_SETUP "${exe_name}")
endif()#CMAKE_VS_MSBUILD_COMMAND
if((ANDROID OR CGAL_RUN_TESTS_THROUGH_SSH) AND NOT TEST push_of__${exe_name}) if((ANDROID OR CGAL_RUN_TESTS_THROUGH_SSH) AND NOT TEST push_of__${exe_name})
if(ANDROID) if(ANDROID)
add_test(NAME "push_of__${exe_name}" add_test(NAME "push_of__${exe_name}"

View File

@ -55,7 +55,7 @@ if(OpenMesh_FOUND AND NOT TARGET OpenMesh::OpenMesh)
add_library(OpenMesh::OpenMesh UNKNOWN IMPORTED) add_library(OpenMesh::OpenMesh UNKNOWN IMPORTED)
if(TARGET OpenMeshCore) if(TARGET OpenMeshCore)
target_link_libraries(OpenMesh::OpenMesh PUBLIC OpenMeshCore) target_link_libraries(OpenMesh::OpenMesh INTERFACE OpenMeshCore)
return() return()
endif() endif()

View File

@ -188,12 +188,20 @@ endmacro()
#============================================================================= #=============================================================================
# Now to actually find TBB # Now to actually find TBB
# #
#start with looking for TBB_DIR and TBB_ROOT
#start with CONFIG Mode if((TBB_ROOT OR ENV{TBB_ROOT} OR ENV{TBB_DIR} ) AND NOT TBB_FOUND)
find_package(TBB QUIET NO_MODULE) find_package(TBB QUIET NO_MODULE NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
endif()
if(TBB_FOUND) if(TBB_FOUND)
return() return()
endif()#TBB_FOUND endif()#TBB_FOUND
#try CONFIG Mode
find_package(TBB 2019.0.11005 QUIET NO_MODULE)
if(TBB_FOUND)
return()
endif()#TBB_FOUND
# Get path, convert backslashes as ${ENV_${var}} # Get path, convert backslashes as ${ENV_${var}}
getenv_path(TBB_ROOT) getenv_path(TBB_ROOT)

View File

@ -37,7 +37,7 @@ You can access the CGAL Online Manual from the
<li><a href ="https://www.cgal.org/">CGAL Homepage</a> <li><a href ="https://www.cgal.org/">CGAL Homepage</a>
<li><a href ="https://www.cgal.org/FAQ.html">FAQ</a> <li><a href ="https://www.cgal.org/FAQ.html">FAQ</a>
<li><a href ="http://www.boost.org/doc/">Boost Documentation</a> <li><a href ="http://www.boost.org/doc/">Boost Documentation</a>
<li><a href ="http://en.cppreference.com/w/">STL Reference</a> <li><a href ="https://en.cppreference.com/w/">STL Reference</a>
</ul> </ul>

View File

@ -493,7 +493,7 @@ using std::max;
// Macros to detect features of clang. We define them for the other // Macros to detect features of clang. We define them for the other
// compilers. // compilers.
// See http://clang.llvm.org/docs/LanguageExtensions.html // See http://clang.llvm.org/docs/LanguageExtensions.html
// See also http://en.cppreference.com/w/cpp/experimental/feature_test // See also https://en.cppreference.com/w/cpp/experimental/feature_test
#ifndef __has_feature #ifndef __has_feature
#define __has_feature(x) 0 // Compatibility with non-clang compilers. #define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif #endif

View File

@ -6,6 +6,9 @@ foreach(LINE ${package_list})
string(TOUPPER ${PACKAGE_CODE_NAME} PACKAGE_CODE_NAME) string(TOUPPER ${PACKAGE_CODE_NAME} PACKAGE_CODE_NAME)
string(REPLACE "${PACKAGE_NAME}" "" PACKAGE_PRETTY_NAME ${LINE}) string(REPLACE "${PACKAGE_NAME}" "" PACKAGE_PRETTY_NAME ${LINE})
string(STRIP "${PACKAGE_PRETTY_NAME}" PACKAGE_PRETTY_NAME) string(STRIP "${PACKAGE_PRETTY_NAME}" PACKAGE_PRETTY_NAME)
if(NOT PACKAGE_PRETTY_NAME)
set(PACKAGE_PRETTY_NAME ${PACKAGE_NAME})
endif()
message("Generate \"${PACKAGE_NAME}.h\"") message("Generate \"${PACKAGE_NAME}.h\"")
configure_file(gpl.h.in ${PACKAGE_NAME}.h @ONLY NEWLINE_STYLE LF) configure_file(gpl.h.in ${PACKAGE_NAME}.h @ONLY NEWLINE_STYLE LF)
endforeach() endforeach()

View File

@ -17,10 +17,10 @@
#define CGAL_VERSION_H #define CGAL_VERSION_H
#ifndef SWIG #ifndef SWIG
#define CGAL_VERSION 5.3-dev #define CGAL_VERSION 5.3-beta2
#define CGAL_GIT_HASH abcdef #define CGAL_GIT_HASH abcdef
#endif #endif
#define CGAL_VERSION_NR 1050300000 #define CGAL_VERSION_NR 1050300920
#define CGAL_SVN_REVISION 99999 #define CGAL_SVN_REVISION 99999
#define CGAL_RELEASE_DATE 20210630 #define CGAL_RELEASE_DATE 20210630

View File

@ -2,7 +2,7 @@ set(CGAL_MAJOR_VERSION 5)
set(CGAL_MINOR_VERSION 3) set(CGAL_MINOR_VERSION 3)
set(CGAL_BUGFIX_VERSION 0) set(CGAL_BUGFIX_VERSION 0)
include(${CMAKE_CURRENT_LIST_DIR}/CGALConfigBuildVersion.cmake) include(${CMAKE_CURRENT_LIST_DIR}/CGALConfigBuildVersion.cmake)
set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "5.3-beta1") set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "5.3-beta2")
set(CGAL_VERSION_PUBLIC_RELEASE_NAME "CGAL-${CGAL_VERSION_PUBLIC_RELEASE_VERSION}") set(CGAL_VERSION_PUBLIC_RELEASE_NAME "CGAL-${CGAL_VERSION_PUBLIC_RELEASE_VERSION}")
if (CGAL_BUGFIX_VERSION AND CGAL_BUGFIX_VERSION GREATER 0) if (CGAL_BUGFIX_VERSION AND CGAL_BUGFIX_VERSION GREATER 0)

View File

@ -94,7 +94,7 @@ diagrams, also known as <em>power diagrams</em>, are obtained by considering wei
(the weight being a scalar) and considering a weighted distance, the <em>power distance</em>, (the weight being a scalar) and considering a weighted distance, the <em>power distance</em>,
defined between two weighted points \f$ (p, \omega_p) \f$ and \f$ (q, \omega_q) \f$ by defined between two weighted points \f$ (p, \omega_p) \f$ and \f$ (q, \omega_q) \f$ by
\f$ \Pi( (p, \omega_p), (q, \omega_q) ) = pq^2 - \omega_p - \omega_q \f$. \f$ \Pi( (p, \omega_p), (q, \omega_q) ) = pq^2 - \omega_p - \omega_q \f$.
See \link Subsection_2D_Triangulations_Regular_Description this section \endlink See \ref Subsection_2D_Triangulations_Regular_Description "this section"
of the package \ref PkgTriangulation2 for an in-depth description of power diagrams. of the package \ref PkgTriangulation2 for an in-depth description of power diagrams.
\cgalFigureBegin{figrn_coords, rn_coords.svg} \cgalFigureBegin{figrn_coords, rn_coords.svg}

View File

@ -15,29 +15,24 @@ LC_CTYPE=en_US.UTF-8
# Update testsuite result pages # Update testsuite result pages
5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection || echo ERROR 5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection || echo ERROR
# Launch the test suite, every 10mn, from 21:00 to 22:50, with no
# platform. That is actually used by the Doxygen testsuite... :-\
#*/10 21-22 * * * setarch i686 $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake
# Create internal release # Create internal release
# The script also updates the manual tools. # The script also updates the manual tools.
# "master" alone # "master" alone
0 21 * * Sun cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/master.git --public --do-it || echo ERROR 0 21 * * Sun cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/master.git --public --do-it --beta 2 || echo ERROR
# "integration" # "integration"
0 21 * * Mon,Tue,Wed,Thu cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/integration.git $HOME/CGAL/branches/empty-dir --public --do-it || echo ERROR 0 21 * * Mon,Tue,Wed,Thu cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/integration.git $HOME/CGAL/branches/empty-dir --do-it || echo ERROR
# from branch 5.2 # from branch 5.2
0 21 * * Sat cd $HOME/CGAL/create_internal_release-5.2-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.2-branch.git --public --do-it || echo ERROR 0 21 * * Sat cd $HOME/CGAL/create_internal_release-5.2-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.2-branch.git --public --do-it || echo ERROR
# from branch 5.1 # from branch 5.1
0 21 * * Fri cd $HOME/CGAL/create_internal_release-5.1-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.1-branch.git --public --do-it || echo ERROR 0 21 * * Fri cd $HOME/CGAL/create_internal_release-5.1-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.1-branch.git --public --do-it || echo ERROR
## Older stuff
# from branch 5.0 # from branch 5.0
#0 21 * * Fri cd $HOME/CGAL/create_internal_release-5.0-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.0-branch.git --public --do-it || echo ERROR #0 21 * * Fri cd $HOME/CGAL/create_internal_release-5.0-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.0-branch.git --public --do-it || echo ERROR
# from branch 4.14 # from branch 4.14
#0 21 * * Fri cd $HOME/CGAL/create_internal_release-4.14-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-4.14-branch.git --public --do-it || echo ERROR #0 21 * * Fri cd $HOME/CGAL/create_internal_release-4.14-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-4.14-branch.git --public --do-it || echo ERROR
## Older stuff
# from branch 4.13 # from branch 4.13
#0 21 * * Fri cd $HOME/CGAL/create_internal_release-4.13-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-4.13-branch.git --public --do-it || echo ERROR #0 21 * * Fri cd $HOME/CGAL/create_internal_release-4.13-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-4.13-branch.git --public --do-it || echo ERROR
# from branch 4.12 # from branch 4.12

View File

@ -1,5 +1,88 @@
The CGAL Open Source Project is pleased to announce the release 5.2 Beta 1 of CGAL, the Computational Geometry Algorithms Library. %The CGAL Open Source Project is pleased to announce the release 5.3 Beta 1 of CGAL, the Computational Geometry Algorithms Library.
CGAL version 5.2 Beta 1 is a public testing release. It should provide a solid ground to report bugs that need to be tackled before the release of the final version of CGAL 5.2 in December 2020. CGAL version 5.3 Beta 1 is a public testing release. It should provide a solid ground to report bugs that need to be tackled before the release of the final version of CGAL 5.3 in July 2021.
Besides fixes and general enhancement to existing packages, the following has changed since CGAL 5.2:
### [Quadtrees, Octrees, and Orthtrees](https://doc.cgal.org/5.3/Manual/packages.html#PkgOrthtree) (new package)
- This package implements a tree data structure in which each node encloses a hypercubic section
of space and each non-leave node has hypercubic children whose edge lengths are half its edge length.
Such a data structure is known as a quadtree in 2D, an octree in 3D, and is generalized
as an "orthtree" in higher dimensions.
### [Triangulations on the Sphere](https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulationOnSphere2) (new package)
- This package enables the construction and manipulation of Delaunay triangulations on the 2-sphere.
Triangulations are built incrementally and can be modified by insertion or removal of vertices.
Point location querying and primitives to build the dual Voronoi diagram are provided.
### File Input / Output
- Point set, polygon soup, and polygon mesh file I/O functions have been harmonized and documented:
- Point set I/O functions can be found in the packages [Point_set_processing_3](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolygonMeshProcessing), and [Point_set_3](https://doc.cgal.org/5.3/Manual/packages.html#PkgPointSet3).
- Polygon mesh I/O functions can be found in the package [BGL](https://doc.cgal.org/5.3/Manual/packages.html#PkgBGL).
- Polygon soup I/O can be found in the package [Stream_support](https://doc.cgal.org/5.3/Manual/packages.html#PkgStreamSupport).
A comprehensive list of the supported file formats is available in the Stream_support package
[here](https://doc.cgal.org/5.3/Stream_support/index.html#IOstreamSupportedFormats);
inversely, the following [page](https://doc.cgal.org/5.3/Stream_support/IOStreamSupportedFileFormats.html)
can be used to find out which CGAL data structures can be used given a specific file format.
### [Requirements](https://doc.cgal.org/5.3/Manual/thirdparty.html)
- The CMake minimal version is now `3.14`.
- The GNU compiler g++ versions 6 and 7 are no longer tested. Only version 8.3 or later are supported
### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.3/Manual/packages.html#PkgKernel23)
- Added `is_translation()`, `is_scaling()`, `is_reflection()`, and `is_rotation()` to the classes
[`Aff_transformation_2`](https://doc.cgal.org/5.3/Kernel_23/classCGAL_1_1Aff__transformation__2.html)
and [`Aff_transformation_3`](https://doc.cgal.org/5.3/Kernel_23/classCGAL_1_1Aff__transformation__3.html),
which enable determining if the transformations use a specialized representation internally.
### [2D Regularized Boolean Set-Operations](https://doc.cgal.org/5.3/Manual/packages.html#PkgBooleanSetOperations2)
- Added documentation for the free functions [`oriented_side(const Point_2& p, ....)`](https://doc.cgal.org/5.3/Boolean_set_operations_2/group__boolean__oriented__side.html)
that accept a point and a polygon.
- Documentation has been improved across the whole package.
### [Polygon Mesh Processing](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolygonMeshProcessing)
- Added the class [`CGAL::Polyhedral_envelope`](https://doc.cgal.org/5.3/Polygon_mesh_processing/structCGAL_1_1Polyhedral__envelope.html),
providing a way to quickly check if a primitive (point, segment, or triangle)
is within a polyhedral envelope around a set of triangles. It is based on the work of
Bolun Wang, Teseo Schneider, Yixin Hu, Marco Attene, and Daniele Panozzo.
"Exact and efficient polyhedral envelope containment check." (ACM Trans. Graph., 39-4, July 2020).
- Added more functions in the [visitor of the corefinement based methods](https://doc.cgal.org/5.3/Polygon_mesh_processing/classPMPCorefinementVisitor.html)
to track all edge creations.
### [Surface Mesh Topology](https://doc.cgal.org/5.3/Manual/packages.html#PkgSurfaceMeshTopologySummary)
- Added the function [`CGAL::Surface_mesh_topology::Curves_on_surface_topology::is_homotopic_to_simple_cycle()`](https://doc.cgal.org/5.3/Surface_mesh_topology/classCGAL_1_1Surface__mesh__topology_1_1Curves__on__surface__topology.html#a8d7c4cba2cf2cff542f5cd93117233db),
which can be used to determine whehter a closed path on a surface mesh can be continously
transformed to a cycle without self intersection.
### [Surface Mesh Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgSurfaceMeshSimplification)
- Added a filtering mechanism so that costly tests get only applied to the next candidate for the edge collapse.
- Added the class [`Polyhedral_envelope_filter`](https://doc.cgal.org/5.3/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Polyhedral__envelope__filter.html),
which enables to perform mesh simplification inside a polyhedral envelope of the input mesh.
### [2D Polyline Simplification](https://doc.cgal.org/5.3/Manual/packages.html#PkgPolylineSimplification2)
- When polylines have common subsequences of vertices, these subsequences may now be simplifified simultaneously.
### [dD Triangulations](https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulations)
- Added the function [`insert_if_in_star()`](https://doc.cgal.org/5.3/Triangulation/classCGAL_1_1Regular__triangulation.html#aa8df2d138f341939e834bcdd7cb6c71a)
to the class [`CGAL::Regular_triangulation`](https://doc.cgal.org/5.3/Triangulation/classCGAL_1_1Regular__triangulation.html),
which enables users to insert a point `p` in a regular triangulation on the condition that `p`
appears post-insertion in the star of a user-specified, existing vertex.
### [2D and 3D Alpha Shapes](https://doc.cgal.org/5.3/Manual/packages.html#PkgAlphaShapes2)
- **Breaking change**: The following deprecated classes have been removed: `Alpha_shape_euclidean_traits_2`,
`Weighted_alpha_shape_euclidean_traits_2`, `Alpha_shape_euclidean_traits_3`, and
`Weighted_alpha_shape_euclidean_traits_3`. All CGAL kernel can be used directly as models
of the concepts of the 2D and 3D Alpha Shape packages.
### [Classification](https://doc.cgal.org/5.3/Manual/packages.html#PkgClassification)
- **Breaking change**: the support for TensorFlow has been dropped; the
classifier `CGAL::TensorFlow::Neural_network_classifier` has been removed.
Fixes, improvements, and various small features have been added since CGAL 5.1. See https://www.cgal.org/2020/11/18/cgal52-beta1/ for a complete list of changes.

View File

@ -1,18 +1,149 @@
Subject: CGAL 5.2 Beta 1 Released, Computational Geometry Algorithms Library Subject: CGAL 5.3 Beta 1 Released, Computational Geometry Algorithms Library
Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8"
Body: Body:
The CGAL Open Source Project is pleased to announce the release 5.2 Beta 1 The CGAL Open Source Project is pleased to announce the release 5.3 Beta 1
of CGAL, the Computational Geometry Algorithms Library. of CGAL, the Computational Geometry Algorithms Library.
CGAL version 5.2 Beta 1 is a public testing release. It should provide a CGAL version 5.3 Beta 1 is a public testing release. It should provide a
solid ground to report bugs that need to be tackled before the release solid ground to report bugs that need to be tackled before the release
of the final version of CGAL 5.2 in December 2020. of the final version of CGAL 5.3 in July 2021.
Fixes, improvements, and various small features have been added since Besides fixes and general enhancement to existing packages, the following
CGAL 5.1. See https://www.cgal.org/2020/11/18/cgal52-beta1/ for a has changed since CGAL 5.2:
Quadtrees, Octrees, and Orthtrees (new package)
- This package implements a tree data structure in which each node
encloses a hypercubic section of space and each non-leave node has
hypercubic children whose edge lengths are half its edge length.
Such a data structure is known as a quadtree in 2D, an octree in 3D,
and is generalized as an “orthtree” in higher dimensions.
https://www.cgal.org/2021/04/27/Orthtree/
https://doc.cgal.org/5.3/Manual/packages.html#PkgOrthtree
Triangulations on the Sphere (new package)
- This package enables the construction and manipulation of Delaunay
triangulations on the 2-sphere. Triangulations are built
incrementally and can be modified by insertion or removal of
vertices. Point location querying and primitives to build the dual
Voronoi diagram are provided.
https://doc.cgal.org/5.3/Manual/packages.html#PkgTriangulationOnSphere2
File Input / Output
- Point set, polygon soup, and polygon mesh file I/O functions have
been harmonized and documented:
- Point set I/O functions can be found in the packages
Point_set_processing_3, and Point_set_3.
- Polygon mesh I/O functions can be found in the package BGL.
- Polygon soup I/O can be found in the package Stream_support.
A comprehensive list of the supported file formats is available in the
Stream_support package:
https://doc.cgal.org/5.3/Stream_support/index.html#IOstreamSupportedFormats
Inversely, the following page can be used to find out which CGAL data
structures can be used given a specific file format.
https://doc.cgal.org/5.3/Stream_support/IOStreamSupportedFileFormats.html
Requirements
- The CMake minimal version is now 3.14.
- The GNU compiler g++ versions 6 and 7 are no longer tested. Only
version 8.3 or later are supported
2D and 3D Linear Geometry Kernel
- Added is_translation(), is_scaling(), is_reflection(), and
is_rotation() to the classes Aff_transformation_2 and
Aff_transformation_3, which enable determining if the
transformations use a specialized representation internally.
2D Regularized Boolean Set-Operations
- Added documentation for the free functions
oriented_side(const Point_2& p, ....) that accept a point and a
polygon.
- Documentation has been improved across the whole package.
Polygon Mesh Processing
- Added the class CGAL::Polyhedral_envelope, providing a way to
quickly check if a primitive (point, segment, or triangle) is within
a polyhedral envelope around a set of triangles. It is based on the
work of Bolun Wang, Teseo Schneider, Yixin Hu, Marco Attene, and
Daniele Panozzo. “Exact and efficient polyhedral envelope
containment check.” (ACM Trans. Graph., 39-4, July 2020).
- Added more functions in the visitor of the corefinement based
methods to track all edge creations.
Surface Mesh Topology
- Added the function
CGAL::Surface_mesh_topology::Curves_on_surface_topology::is_homotopic_to_simple_cycle(),
which can be used to determine whehter a closed path on a surface
mesh can be continously transformed to a cycle without self
intersection.
Surface Mesh Simplification
- Added a filtering mechanism so that costly tests get only applied to
the next candidate for the edge collapse.
- Added the class Polyhedral_envelope_filter, which enables to perform
mesh simplification inside a polyhedral envelope of the input mesh.
2D Polyline Simplification
- When polylines have common subsequences of vertices, these
subsequences may now be simplifified simultaneously.
dD Triangulations
- Added the function insert_if_in_star() to the class
CGAL::Regular_triangulation, which enables users to insert a point p
in a regular triangulation on the condition that p appears
post-insertion in the star of a user-specified, existing vertex.
2D and 3D Alpha Shapes
- Breaking change: The following deprecated classes have been removed:
Alpha_shape_euclidean_traits_2,
Weighted_alpha_shape_euclidean_traits_2,
Alpha_shape_euclidean_traits_3, and
Weighted_alpha_shape_euclidean_traits_3. All CGAL kernel can be used
directly as models of the concepts of the 2D and 3D Alpha Shape
packages.
Classification
- Breaking change: the support for TensorFlow has been dropped; the
classifier CGAL::TensorFlow::Neural_network_classifier has been
removed.
See https://www.cgal.org/2021/06/04/cgal53-beta1/ for a
complete list of changes. complete list of changes.

View File

@ -542,9 +542,9 @@ cell base classes, the `MeshVertexBase_3` and
`MeshCellBase_3` concepts impose additional requirements. `MeshCellBase_3` concepts impose additional requirements.
Parallel algorithms require the executable to be linked against the Parallel algorithms require the executable to be linked against the
<a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
To control the number of threads used, the user may use the tbb::task_scheduler_init class. To control the number of threads used, the user may use the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
for more details. for more details.
\section Mesh_3_section_io Input/Output \section Mesh_3_section_io Input/Output

View File

@ -525,10 +525,10 @@ polylines_to_protect
Image_word_type> Enriched_pixel; Image_word_type> Enriched_pixel;
array<array<Enriched_pixel, 2>, 2> square = array<array<Enriched_pixel, 2>, 2> square =
{{ {{ { pix00, Point_3(), Domain_type(), 0, false }, {{ {{ { pix00, Point_3(), Domain_type(), 0, false, false },
{ pix01, Point_3(), Domain_type(), 0, false } }}, { pix01, Point_3(), Domain_type(), 0, false, false } }},
{{ { pix10, Point_3(), Domain_type(), 0, false }, {{ { pix10, Point_3(), Domain_type(), 0, false, false },
{ pix11, Point_3(), Domain_type(), 0, false } }} }}; { pix11, Point_3(), Domain_type(), 0, false, false } }} }};
std::map<Domain_type, int> pixel_values_set; std::map<Domain_type, int> pixel_values_set;
for(int ii = 0; ii < 2; ++ii) { for(int ii = 0; ii < 2; ++ii) {

View File

@ -313,12 +313,6 @@ class Binary_operation : public CGAL::SNC_decorator<Map> {
// CGAL_NEF_SETDTHREAD(19*43*131); // CGAL_NEF_SETDTHREAD(19*43*131);
CGAL_NEF_TRACEN("=> binary operation"); CGAL_NEF_TRACEN("=> binary operation");
#ifdef CGAL_NEF3_FACET_WITH_BOX
SNC_constructor C1(snc1);
C1.create_box();
SNC_constructor C2(snc2);
C2.create_box();
#endif
CGAL_NEF_TRACEN("\nnumber of vertices (so far...) = " CGAL_NEF_TRACEN("\nnumber of vertices (so far...) = "
<< this->sncp()->number_of_vertices()); << this->sncp()->number_of_vertices());

View File

@ -258,9 +258,6 @@ typedef typename Traits::Halffacet_handle Halffacet_handle;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
typedef typename Traits::Halffacet_triangle_handle Halffacet_triangle_handle; typedef typename Traits::Halffacet_triangle_handle Halffacet_triangle_handle;
#endif #endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename Traits::Partial_facet Partial_facet;
#endif
typedef typename Traits::Object_handle Object_handle; typedef typename Traits::Object_handle Object_handle;
typedef std::vector<Object_handle> Object_list; typedef std::vector<Object_handle> Object_list;
typedef typename Object_list::const_iterator Object_const_iterator; typedef typename Object_list::const_iterator Object_const_iterator;
@ -898,9 +895,6 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin()
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
if( CGAL::assign( v, *o)) { if( CGAL::assign( v, *o)) {
if( !v_mark[v]) { if( !v_mark[v]) {
@ -928,11 +922,6 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin()
t_mark[tr] = true; t_mark[tr] = true;
} }
} }
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if(CGAL::assign(pf, *o)) {
CGAL_error_msg( "wrong type");
}
#endif #endif
else else
CGAL_error_msg( "wrong handle"); CGAL_error_msg( "wrong handle");
@ -1023,10 +1012,6 @@ std::string dump_object_list( const Object_list& O, int level = 0) {
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
typename Object_list::size_type t_count = 0; typename Object_list::size_type t_count = 0;
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
typename Object_list::size_type p_count = 0;
Partial_facet pf;
#endif #endif
for( o = O.begin(); o != O.end(); ++o) { for( o = O.begin(); o != O.end(); ++o) {
if( CGAL::assign( v, *o)) { if( CGAL::assign( v, *o)) {
@ -1047,12 +1032,6 @@ std::string dump_object_list( const Object_list& O, int level = 0) {
if( level) os << "triangle" << std::endl; if( level) os << "triangle" << std::endl;
++t_count; ++t_count;
} }
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o)) {
if( level) pf.debug();
++p_count;
}
#endif #endif
else else
CGAL_error_msg( "wrong handle"); CGAL_error_msg( "wrong handle");
@ -1060,9 +1039,6 @@ std::string dump_object_list( const Object_list& O, int level = 0) {
os << v_count << "v " << e_count << "e " << f_count << "f "; os << v_count << "v " << e_count << "e " << f_count << "f ";
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
os << t_count << "t "; os << t_count << "t ";
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
os << p_count << "p ";
#endif #endif
return os.str(); return os.str();
} }
@ -1224,19 +1200,6 @@ bool classify_objects(Object_iterator start, Object_iterator end,
Point_3 point_on_plane(partition_plane.point()); Point_3 point_on_plane(partition_plane.point());
for( o = start; o != end; ++o) { for( o = start; o != end; ++o) {
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
if(CGAL::assign(pf, *o)) {
Partial_facet pfn,pfp;
if(pf.divide(partition_plane, pfn, pfp)) {
*o1 = make_object(pfn);
++o1;
*o2 = make_object(pfp);
++o2;
continue;
}
}
#endif
Oriented_side side = sop( point_on_plane, *o, depth); Oriented_side side = sop( point_on_plane, *o, depth);
if( side == ON_NEGATIVE_SIDE || side == ON_ORIENTED_BOUNDARY) { if( side == ON_NEGATIVE_SIDE || side == ON_ORIENTED_BOUNDARY) {
*o1 = *o; *o1 = *o;

View File

@ -87,17 +87,6 @@ class Nef_box : public Box_intersection_d::Box_d< double, 3 > {
init( true ); init( true );
} else { } else {
init( false ); init( false );
#ifdef CGAL_NEF3_FACET_WITH_BOX
std::pair<double, double> q[3];
q[0] = CGAL::to_interval( f->b.min_coord(0) );
q[1] = CGAL::to_interval( f->b.min_coord(1) );
q[2] = CGAL::to_interval( f->b.min_coord(2) );
Box_intersection_d::Box_d< double, 3 >::extend(q);
q[0] = CGAL::to_interval( f->b.max_coord(0) );
q[1] = CGAL::to_interval( f->b.max_coord(1) );
q[2] = CGAL::to_interval( f->b.max_coord(2) );
Box_intersection_d::Box_d< double, 3 >::extend(q);
#else
Halffacet_cycle_iterator cycle_it = f->facet_cycles_begin(); Halffacet_cycle_iterator cycle_it = f->facet_cycles_begin();
if( cycle_it.is_shalfedge() ) { if( cycle_it.is_shalfedge() ) {
SHalfedge_iterator edge_it(cycle_it); SHalfedge_iterator edge_it(cycle_it);
@ -109,7 +98,6 @@ class Nef_box : public Box_intersection_d::Box_d< double, 3 > {
} }
} else } else
CGAL_error_msg( "is facet first cycle a SHalfloop?"); CGAL_error_msg( "is facet first cycle a SHalfloop?");
#endif
} }
} }

View File

@ -37,7 +37,7 @@ class Index_generator {
static int get_unique_index() static int get_unique_index()
{ {
// initialized with 0 // initialized with 0
// http://en.cppreference.com/w/cpp/language/zero_initialization // https://en.cppreference.com/w/cpp/language/zero_initialization
#ifdef CGAL_NO_ATOMIC #ifdef CGAL_NO_ATOMIC
static int unique; static int unique;
#else #else

View File

@ -58,9 +58,6 @@ class SNC_intersection : public SNC_const_decorator<SNC_structure_> {
typedef typename SNC_structure::Halffacet_cycle_const_iterator typedef typename SNC_structure::Halffacet_cycle_const_iterator
Halffacet_cycle_const_iterator; Halffacet_cycle_const_iterator;
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename SNC_structure::Partial_facet Partial_facet;
#endif
typedef typename SNC_structure::Point_3 Point_3; typedef typename SNC_structure::Point_3 Point_3;
typedef typename SNC_structure::Vector_3 Vector_3; typedef typename SNC_structure::Vector_3 Vector_3;
@ -91,16 +88,6 @@ class SNC_intersection : public SNC_const_decorator<SNC_structure_> {
return (locate_point_in_halffacet( p, f) == CGAL::ON_BOUNDED_SIDE); return (locate_point_in_halffacet( p, f) == CGAL::ON_BOUNDED_SIDE);
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
bool does_contain_internally( Partial_facet& pf,
const Point_3& p) const {
CGAL_NEF_TRACEN("does point lie in partial facet" << p);
// pf.debug();
if( !pf.f->plane().has_on(p))
return false;
return (locate_point_in_halffacet( p, pf) == CGAL::ON_BOUNDED_SIDE);
}
#endif
bool does_contain_on_boundary( Halffacet_const_handle f, const Point_3& p) const { bool does_contain_on_boundary( Halffacet_const_handle f, const Point_3& p) const {
typedef Project_shalfedge_point typedef Project_shalfedge_point
@ -287,27 +274,6 @@ class SNC_intersection : public SNC_const_decorator<SNC_structure_> {
return does_contain_internally( f, p, false); return does_contain_internally( f, p, false);
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
bool does_intersect_internally( const Ray_3& ray,
Partial_facet pf,
Point_3& p) const {
CGAL_NEF_TRACEN("-> Intersection facet - ray");
Plane_3 h( pf.f->plane());
CGAL_NEF_TRACEN("-> facet's plane: " << h);
CGAL_NEF_TRACEN("-> a point on the plane: " << h.point());
CGAL_NEF_TRACEN("-> ray: " << ray);
CGAL_assertion(!ray.is_degenerate());
if( h.has_on( ray.source()))
/* no possible internal intersection */
return false;
Object o = intersection( h, ray);
if( !CGAL::assign( p, o))
return false;
CGAL_NEF_TRACEN( "-> intersection point: " << p );
// CGAL_NEF_TRACEN( "-> point in facet interior? "<<does_contain_internally( f, p));
return does_contain_internally( pf, p, false);
}
#endif
bool does_intersect_internally( const Segment_3& seg, bool does_intersect_internally( const Segment_3& seg,
Halffacet_const_handle f, Halffacet_const_handle f,
@ -336,27 +302,6 @@ class SNC_intersection : public SNC_const_decorator<SNC_structure_> {
return( does_contain_internally( f, p, false)); return( does_contain_internally( f, p, false));
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
bool does_intersect_internally( const Segment_3& seg,
Partial_facet pf,
Point_3& p) const {
CGAL_NEF_TRACEN("-> Intersection partial facet - segment");
Plane_3 h( pf.f->plane());
CGAL_NEF_TRACEN("-> facet's plane: " << h);
CGAL_NEF_TRACEN("-> a point on the plane: " << h.point());
CGAL_NEF_TRACEN("-> segment: " << seg);
CGAL_assertion(!seg.is_degenerate());
if( h.has_on( seg.source()) || h.has_on(seg.target()))
/* no possible internal intersection */
return false;
Object o = intersection( h, seg);
if( !CGAL::assign( p, o))
return false;
CGAL_NEF_TRACEN( "-> intersection point: " << p );
// CGAL_NEF_TRACEN( "-> point in facet interior? "<<does_contain_internally( f, p));
return( does_contain_internally( pf, p, false));
}
#endif
Bounded_side locate_point_in_halffacet( const Point_3& p, Bounded_side locate_point_in_halffacet( const Point_3& p,
Halffacet_const_handle f) const { Halffacet_const_handle f) const {
@ -420,79 +365,6 @@ class SNC_intersection : public SNC_const_decorator<SNC_structure_> {
return CGAL::ON_BOUNDED_SIDE; return CGAL::ON_BOUNDED_SIDE;
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
Bounded_side locate_point_in_halffacet( const Point_3& p,
Partial_facet pf) const {
if(p.x() < pf.f->b.min_coord(0) || p.x() > pf.f->b.max_coord(0) ||
p.y() < pf.f->b.min_coord(1) || p.y() > pf.f->b.max_coord(1) ||
p.z() < pf.f->b.min_coord(2) || p.z() > pf.f->b.max_coord(2))
return CGAL::ON_UNBOUNDED_SIDE;
typedef Project_shalfedge_point
< SHalfedge, Point_3> Project;
typedef Circulator_project
< SHalfedge_around_facet_const_circulator, Project,
const Point_3&, const Point_3*> Circulator;
typedef Container_from_circulator<Circulator> Container;
typedef typename Partial_facet::Outer_cycle_iterator Outer_cycle_iterator;
typedef typename Partial_facet::Inner_cycle_iterator Inner_cycle_iterator;
typedef typename Partial_facet::Isolated_vertex_iterator Isolated_vertex_iterator;
Plane_3 h(pf.f->plane());
CGAL_assertion(h.has_on(p));
Bounded_side outer_bound_pos(CGAL::ON_BOUNDED_SIDE);
Outer_cycle_iterator oc = pf.outer_cycles_begin();
while(oc != pf.outer_cycles_end() &&
outer_bound_pos == CGAL::ON_BOUNDED_SIDE) {
if(oc->first == oc->second) {
SHalfedge_around_facet_const_circulator hfc(oc->first);
Circulator c(hfc);
Container ct(c);
CGAL_assertion( !is_empty_range(ct.begin(), ct.end()));
outer_bound_pos = bounded_side_3(ct.begin(), ct.end(), p, h);
} else {
outer_bound_pos = bounded_side_3(Circulator(SHalfedge_around_facet_const_circulator(oc->first)),
Circulator(SHalfedge_around_facet_const_circulator(oc->second)), p, h);
}
++oc;
}
if(outer_bound_pos != CGAL::ON_BOUNDED_SIDE )
return outer_bound_pos;
Bounded_side inner_bound_pos(CGAL::ON_UNBOUNDED_SIDE);
Inner_cycle_iterator ic = pf.inner_cycles_begin();
while(ic != pf.inner_cycles_end() &&
inner_bound_pos == CGAL::ON_UNBOUNDED_SIDE) {
if(ic->first == ic->second) {
SHalfedge_around_facet_const_circulator hfc(ic->first);
Circulator c(hfc);
Container ct(c);
CGAL_assertion( !is_empty_range(ct.begin(), ct.end()));
inner_bound_pos = bounded_side_3(ct.begin(), ct.end(), p, h);
} else {
inner_bound_pos = bounded_side_3(Circulator(SHalfedge_around_facet_const_circulator(ic->first)),
Circulator(SHalfedge_around_facet_const_circulator(ic->second)), p, h);
}
++ic;
}
if(inner_bound_pos != CGAL::ON_UNBOUNDED_SIDE )
return opposite(inner_bound_pos);
Isolated_vertex_iterator iv = pf.isolated_vertices_begin();
while(iv != pf.isolated_vertices_end()) {
if(*iv == p)
return CGAL::ON_BOUNDARY;
++iv;
}
return CGAL::ON_BOUNDED_SIDE;
}
#endif
}; // SNC_intersection }; // SNC_intersection
} //namespace CGAL } //namespace CGAL

View File

@ -111,9 +111,6 @@ public:
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
typedef typename SNC_structure::Halffacet_triangle_handle typedef typename SNC_structure::Halffacet_triangle_handle
Halffacet_triangle_handle; Halffacet_triangle_handle;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename SNC_structure::Partial_facet Partial_facet;
#endif #endif
typedef typename SNC_structure::Object_handle Object_handle; typedef typename SNC_structure::Object_handle Object_handle;
@ -152,10 +149,6 @@ public:
template<typename Depth> Oriented_side operator() template<typename Depth> Oriented_side operator()
( const Point_3& pop, Halffacet_triangle_handle f, Depth depth); ( const Point_3& pop, Halffacet_triangle_handle f, Depth depth);
#endif #endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
template<typename Depth> Oriented_side operator()
( const Point_3& pop, Partial_facet& f, Depth depth);
#endif
#ifdef CGAL_NEF_EXPLOIT_REFERENCE_COUNTING #ifdef CGAL_NEF_EXPLOIT_REFERENCE_COUNTING
bool reference_counted; bool reference_counted;
#endif #endif
@ -298,9 +291,6 @@ public:
typedef typename SNC_structure::Halffacet_triangle_handle typedef typename SNC_structure::Halffacet_triangle_handle
Halffacet_triangle_handle; Halffacet_triangle_handle;
#endif #endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename SNC_structure::Partial_facet Partial_facet;
#endif
typedef typename SNC_structure::Object_handle Object_handle; typedef typename SNC_structure::Object_handle Object_handle;
typedef std::vector<Object_handle> Object_list; typedef std::vector<Object_handle> Object_list;
@ -344,9 +334,6 @@ Side_of_plane<SNC_decorator>::operator()
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
if( CGAL::assign( v, o)) if( CGAL::assign( v, o))
return (*this)(pop, v, depth); return (*this)(pop, v, depth);
@ -354,10 +341,6 @@ Side_of_plane<SNC_decorator>::operator()
return (*this)(pop, e, depth); return (*this)(pop, e, depth);
else if( CGAL::assign( f, o)) else if( CGAL::assign( f, o))
return (*this)(pop, f, depth); return (*this)(pop, f, depth);
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, o))
return (*this)(pop, pf, depth);
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
else if( CGAL::assign( t, o)) else if( CGAL::assign( t, o))
return (*this)(pop, t, depth); return (*this)(pop, t, depth);
@ -547,17 +530,6 @@ Side_of_plane<SNC_decorator>::operator()
as far as two vertices located on different sides of the plane. as far as two vertices located on different sides of the plane.
*/ */
#ifdef CGAL_NEF3_FACET_WITH_BOX
template <class SNC_decorator>
template <typename Depth>
Oriented_side
Side_of_plane<SNC_decorator>::operator()
(const Point_3& pop, Partial_facet& pf, Depth depth) {
CGAL_error_msg( "not implemented yet");
return ON_ORIENTED_BOUNDARY;
}
#endif
template <class SNC_decorator> template <class SNC_decorator>
template <typename Depth> template <typename Depth>

View File

@ -167,9 +167,6 @@ public:
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
typedef typename Decorator_traits::Halffacet_triangle_handle typedef typename Decorator_traits::Halffacet_triangle_handle
Halffacet_triangle_handle; Halffacet_triangle_handle;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename SNC_structure::Partial_facet Partial_facet;
#endif #endif
typedef typename SNC_structure::Point_3 Point_3; typedef typename SNC_structure::Point_3 Point_3;
typedef typename SNC_structure::Plane_3 Plane_3; typedef typename SNC_structure::Plane_3 Plane_3;
@ -372,23 +369,6 @@ public:
CGAL_NEF_TRACEN("add facet " << f->plane()); CGAL_NEF_TRACEN("add facet " << f->plane());
objects.push_back(make_object(Halffacet_handle(f))); objects.push_back(make_object(Halffacet_handle(f)));
} }
#elif defined CGAL_NEF3_FACET_WITH_BOX
#ifndef CGAL_NEF3_PARTITION_MINIMUM
#define CGAL_NEF3_PARTITION_MINIMUM 6
#endif
Halffacet_cycle_iterator fci = f->facet_cycles_begin();
CGAL_assertion(fci.is_shalfedge());
SHalfedge_around_facet_circulator safc(fci), send(safc);
int length = 0;
int stop = CGAL_NEF3_PARTITION_MINIMUM;
while(++length < stop && ++safc != send);
if(length >= stop) {
CGAL_NEF_TRACEN("use Partial facets ");
Partial_facet pf(f);
objects.push_back(make_object(pf));
} else {
objects.push_back(make_object(Halffacet_handle(f)));
}
#else #else
objects.push_back(make_object(Halffacet_handle(f))); objects.push_back(make_object(Halffacet_handle(f)));
#endif #endif
@ -560,9 +540,6 @@ public:
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
bool hit = false; bool hit = false;
Point_3 eor = CGAL::ORIGIN; // 'end of ray', the latest ray's hit point Point_3 eor = CGAL::ORIGIN; // 'end of ray', the latest ray's hit point
@ -628,21 +605,6 @@ public:
_CGAL_NEF_TRACEN("the facet becomes the new hit object"); _CGAL_NEF_TRACEN("the facet becomes the new hit object");
} }
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o) && ((mask&4) != 0)) {
CGAL_NEF_TRACEN("new ray shooting");
Point_3 q;
if( is.does_intersect_internally( ray, pf, q) ) {
if( hit && !has_smaller_distance_to_point( ray.source(), q, eor))
continue;
if( !candidate_provider->is_point_on_cell( q, objects_iterator))
continue;
eor = q;
result = make_object(pf.f);
hit = true;
}
}
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
else if( CGAL::assign( t, *o) && ((mask&8) != 0)) { else if( CGAL::assign( t, *o) && ((mask&8) != 0)) {
Point_3 q; Point_3 q;
@ -690,9 +652,6 @@ public:
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
Object_list candidates = candidate_provider->objects_around_point(p); Object_list candidates = candidate_provider->objects_around_point(p);
Object_list_iterator o = candidates.begin(); Object_list_iterator o = candidates.begin();
@ -732,16 +691,6 @@ public:
found = true; found = true;
} }
} }
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o)) {
CGAL_NEF_TRACEN("new locate ");
if ( is.does_contain_internally( pf, p) ) {
_CGAL_NEF_TRACEN("found on partial facet...");
result = make_object(pf.f);
found = true;
}
}
#endif #endif
o++; o++;
} }
@ -768,9 +717,6 @@ public:
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
Object_list candidates = candidate_provider->objects_around_point(p); Object_list candidates = candidate_provider->objects_around_point(p);
Object_list_iterator o = candidates.begin(); Object_list_iterator o = candidates.begin();
@ -872,18 +818,6 @@ public:
s = Segment_3(p, normalized(ip)); s = Segment_3(p, normalized(ip));
result = make_object(f); result = make_object(f);
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
} else if( CGAL::assign(pf, *o)) {
CGAL_NEF_TRACEN("new locate ");
if ( is.does_contain_internally( pf, p) ) {
_CGAL_NEF_TRACEN("found on partial facet...");
return make_object(pf.f);
}
if( is.does_intersect_internally(s,pf,ip)) {
s = Segment_3(p, normalized(ip));
result = make_object(pf.f);
}
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
} else if( CGAL::assign(t, *o)) { } else if( CGAL::assign(t, *o)) {
CGAL_NEF_TRACEN("test triangle of facet " << t->plane()); CGAL_NEF_TRACEN("test triangle of facet " << t->plane());
@ -961,14 +895,6 @@ public:
if(f->plane().oriented_side(p) == ON_NEGATIVE_SIDE) if(f->plane().oriented_side(p) == ON_NEGATIVE_SIDE)
f = f->twin(); f = f->twin();
return make_object(f->incident_volume()); return make_object(f->incident_volume());
#ifdef CGAL_NEF3_FACET_WITH_BOX
} else if( CGAL::assign(pf, *o)) {
CGAL_error_msg( "should not be executed");
Halffacet_handle f = pf.f;
if(f->plane().oriented_side(p) == ON_NEGATIVE_SIDE)
f = f->twin();
return make_object(f->incident_volume());
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
} else if( CGAL::assign(t, result)) { } else if( CGAL::assign(t, result)) {
f = t; f = t;
@ -1006,9 +932,6 @@ public:
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
Object_list_iterator o; Object_list_iterator o;
Object_list objects = candidate_provider->objects_around_segment(s); Object_list objects = candidate_provider->objects_around_segment(s);
@ -1043,11 +966,6 @@ public:
_CGAL_NEF_TRACEN("edge intersects facet on plane "<<f->plane()<<" on "<<q); _CGAL_NEF_TRACEN("edge intersects facet on plane "<<f->plane()<<" on "<<q);
} }
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o)) {
CGAL_error_msg( "not implemented yet");
}
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
else if( CGAL::assign( t, *o)) { else if( CGAL::assign( t, *o)) {
Point_3 q; Point_3 q;
@ -1083,9 +1001,6 @@ public:
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif #endif
Object_list_iterator o; Object_list_iterator o;
Object_list objects = candidate_provider->objects_around_segment(s); Object_list objects = candidate_provider->objects_around_segment(s);
@ -1111,11 +1026,6 @@ public:
else if( CGAL::assign( f, *o)) { else if( CGAL::assign( f, *o)) {
/* do nothing */ /* do nothing */
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o)) {
CGAL_error_msg( "not implemented yet");
}
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
else if( CGAL::assign( t, *o)) { else if( CGAL::assign( t, *o)) {
/* do nothing */ /* do nothing */
@ -1140,9 +1050,6 @@ public:
Vertex_handle v; Vertex_handle v;
Halfedge_handle e; Halfedge_handle e;
Halffacet_handle f; Halffacet_handle f;
#ifdef CGAL_NEF3_FACET_WITH_BOX
Partial_facet pf;
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
Halffacet_triangle_handle t; Halffacet_triangle_handle t;
#endif #endif
@ -1168,11 +1075,6 @@ public:
_CGAL_NEF_TRACEN("edge intersects facet on plane "<<f->plane()<<" on "<<q); _CGAL_NEF_TRACEN("edge intersects facet on plane "<<f->plane()<<" on "<<q);
} }
} }
#ifdef CGAL_NEF3_FACET_WITH_BOX
else if( CGAL::assign(pf, *o)) {
CGAL_error_msg( "not implemented yet");
}
#endif
#ifdef CGAL_NEF3_TRIANGULATE_FACETS #ifdef CGAL_NEF3_TRIANGULATE_FACETS
else if( CGAL::assign( t, *o)) { else if( CGAL::assign( t, *o)) {
Point_3 q; Point_3 q;

View File

@ -27,9 +27,6 @@
#include <CGAL/Nef_3/SNC_iteration.h> #include <CGAL/Nef_3/SNC_iteration.h>
#include <CGAL/Nef_2/iterator_tools.h> #include <CGAL/Nef_2/iterator_tools.h>
#include <CGAL/Nef_S2/Sphere_geometry.h> #include <CGAL/Nef_S2/Sphere_geometry.h>
#ifdef CGAL_NEF3_FACET_WITH_BOX
#include <CGAL/Box_intersection_d/Box_d.h>
#endif
#include <list> #include <list>
#undef CGAL_NEF_DEBUG #undef CGAL_NEF_DEBUG
@ -129,29 +126,6 @@ public:
and iterators. There's no type |SHalfloop_iterator|, as there is and iterators. There's no type |SHalfloop_iterator|, as there is
at most one |SLoop| pair per vertex.}*/ at most one |SLoop| pair per vertex.}*/
#ifdef CGAL_NEF3_FACET_WITH_BOX
template<class Refs>
class Facet_with_box : public Items::template Halffacet<Refs> {
public:
typedef typename Items::template Halffacet<Refs> Halffacet;
typedef typename Refs::FT FT;
typedef typename Box_intersection_d::Box_d<FT,3> Box;
Box b;
Facet_with_box() : Halffacet(), b() {}
Facet_with_box(const Plane_3& h, Mark m) : Halffacet(h,m) {}
Facet_with_box(const Facet_with_box<Refs>& f) : Halffacet(f) {
b = f.b;
}
Facet_with_box<Refs>& operator=(const Facet_with_box<Refs>& f) {
(Halffacet) *this = (Halffacet) f;
b = f.b;
return *this;
}
};
#endif
public: public:
typedef Sphere_map Vertex_base; typedef Sphere_map Vertex_base;
@ -163,11 +137,7 @@ public:
typedef typename Vertex_list::iterator Vertex_iterator; typedef typename Vertex_list::iterator Vertex_iterator;
typedef typename Vertex_list::const_iterator Vertex_const_iterator; typedef typename Vertex_list::const_iterator Vertex_const_iterator;
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef Facet_with_box<SNC_structure> Halffacet_base;
#else
typedef typename Items::template Halffacet<SNC_structure> Halffacet_base; typedef typename Items::template Halffacet<SNC_structure> Halffacet_base;
#endif
typedef SNC_in_place_list_halffacet<Halffacet_base> Halffacet; typedef SNC_in_place_list_halffacet<Halffacet_base> Halffacet;
typedef CGAL::In_place_list<Halffacet,false> Halffacet_list; typedef CGAL::In_place_list<Halffacet,false> Halffacet_list;
typedef CGAL_ALLOCATOR(Halffacet) Halffacet_alloc; typedef CGAL_ALLOCATOR(Halffacet) Halffacet_alloc;
@ -455,229 +425,6 @@ public:
move_shalfedge_around_facet<SHalfedge_iterator> > move_shalfedge_around_facet<SHalfedge_iterator> >
SHalfedge_around_facet_circulator; SHalfedge_around_facet_circulator;
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef std::pair<SHalfedge_around_facet_circulator,
SHalfedge_around_facet_circulator> Outer_cycle;
typedef std::pair<SHalfedge_around_facet_circulator,
SHalfedge_around_facet_circulator> Inner_cycle;
class Partial_facet {
public:
Halffacet_handle f;
std::list<Outer_cycle> outer_cycles;
std::list<Inner_cycle> inner_cycles;
std::list<Point_3> isolated_vertices;
typedef typename std::list<Outer_cycle>::iterator Outer_cycle_iterator;
typedef typename std::list<Inner_cycle>::iterator Inner_cycle_iterator;
typedef typename std::list<Point_3>::iterator Isolated_vertex_iterator;
Partial_facet() {}
Partial_facet(const Partial_facet& pf) {
f = pf.f;
outer_cycles = pf.outer_cycles;
inner_cycles = pf.inner_cycles;
isolated_vertices = pf.isolated_vertices;
}
Partial_facet& operator=(const Partial_facet& pf) {
f = pf.f;
outer_cycles = pf.outer_cycles;
inner_cycles = pf.inner_cycles;
isolated_vertices = pf.isolated_vertices;
return *this;
}
explicit Partial_facet(Halffacet_handle fin) : f(fin) {
Halffacet_cycle_iterator fc = f->facet_cycles_begin();
for(;fc != f->facet_cycles_end();++fc) {
if(fc.is_shalfedge()) {
SHalfedge_around_facet_circulator se(fc), se_next(se);
++se_next;
if(fc == f->facet_cycles_begin()) {
outer_cycles.push_back(Outer_cycle(se, se));
// outer_cycles.push_back(Outer_cycle(se_next, se));
} else {
inner_cycles.push_back(Inner_cycle(se, se));
// inner_cycles.push_back(Inner_cycle(se_next, se));
}
} else if(fc.is_shalfloop()) {
SHalfloop_handle l(fc);
isolated_vertices.push_back(l->incident_sface()->center_vertex()->point());
} else
CGAL_error_msg( "wrong value");
}
}
Outer_cycle_iterator outer_cycles_begin() { return outer_cycles.begin(); }
Inner_cycle_iterator inner_cycles_begin() { return inner_cycles.begin(); }
Isolated_vertex_iterator isolated_vertices_begin() { return isolated_vertices.begin(); }
Outer_cycle_iterator outer_cycles_end() { return outer_cycles.end(); }
Inner_cycle_iterator inner_cycles_end() { return inner_cycles.end(); }
Isolated_vertex_iterator isolated_vertices_end() { return isolated_vertices.end(); }
bool divide(const Plane_3& p, Partial_facet& pf1, Partial_facet& pf2) {
// std::cerr << "divide " << std::endl;
// debug();
pf1.f = pf2.f = f;
Outer_cycle_iterator oc = outer_cycles.begin();
for(;oc != outer_cycles.end(); ++oc) {
bool next = false;
// CGAL_assertion(oc->first != oc->second);
SHalfedge_around_facet_circulator se = oc->first, se_begin(se), se_new(se), se_end;
Oriented_side ref = p.oriented_side(se->source()->source()->point()), cur;
// std::cerr << "start " << se->source()->source()->point() << ":" << ref << std::endl;
++se;
while(ref == ON_ORIENTED_BOUNDARY && se != oc->second) {
ref = p.oriented_side(se->source()->source()->point());
++se;
}
if(se == oc->second)
return false;
for(;se != oc->second;++se) {
cur = p.oriented_side(se->source()->source()->point());
// std::cerr << "current " << se->source()->source()->point() << ":" << cur << std::endl;
if(cur != ref) {
CGAL_assertion(ref != ON_ORIENTED_BOUNDARY);
if(cur == ON_ORIENTED_BOUNDARY) {
next = true;
continue;
}
se_end = se;
if(next)
--se_end;
if(cur == ON_NEGATIVE_SIDE) {
pf2.outer_cycles.push_back(Outer_cycle(se_begin, se_end));
} else if(cur == ON_POSITIVE_SIDE) {
pf1.outer_cycles.push_back(Outer_cycle(se_begin, se_end));
}
se_begin = se_new;
if(next)
++se_begin;
ref = cur;
} else
se_new = se;
next = false;
}
// std::cerr << "end of cycle " << ref << std::endl;
if(next) {
if(ref == ON_POSITIVE_SIDE) {
pf1.outer_cycles.push_back(Outer_cycle(se_new, se));
pf2.outer_cycles.push_back(Outer_cycle(se_begin, --se));
} else {
pf2.outer_cycles.push_back(Outer_cycle(se_new, se));
pf1.outer_cycles.push_back(Outer_cycle(se_begin, --se));
}
} else {
if(ref == ON_POSITIVE_SIDE)
pf2.outer_cycles.push_back(Outer_cycle(se_begin, se));
else if(ref == ON_NEGATIVE_SIDE)
pf1.outer_cycles.push_back(Outer_cycle(se_begin, se));
}
}
Inner_cycle_iterator ic = inner_cycles.begin();
for(;ic != inner_cycles.end(); ++ic) {
bool next = false;
SHalfedge_around_facet_circulator se = ic->first, se_begin(se), se_new(se), se_end;
Oriented_side ref = p.oriented_side(se->source()->source()->point()), cur;
++se;
while(ref == ON_ORIENTED_BOUNDARY && se != ic->second) {
ref = p.oriented_side(se->source()->source()->point());
++se;
}
if(se == ic->second)
return false;
for(;se != ic->second; ++se) {
cur = p.oriented_side(se->source()->source()->point());
if(cur != ref) {
CGAL_assertion(ref != ON_ORIENTED_BOUNDARY);
if(cur == ON_ORIENTED_BOUNDARY) {
next = true;
continue;
}
se_end = se;
if(next)
--se_end;
if(cur == ON_NEGATIVE_SIDE) {
pf2.inner_cycles.push_back(Inner_cycle(se_begin, se_end));
} else if(cur == ON_POSITIVE_SIDE) {
pf1.inner_cycles.push_back(Inner_cycle(se_begin, se_end));
}
se_begin = se_new;
if(next)
++se_begin;
ref = cur;
} else
se_new = se;
next = false;
}
if(next) {
if(ref == ON_POSITIVE_SIDE) {
pf1.inner_cycles.push_back(Inner_cycle(se_new, se));
pf2.inner_cycles.push_back(Inner_cycle(se_begin, --se));
} else {
pf2.inner_cycles.push_back(Inner_cycle(se_new, se));
pf1.inner_cycles.push_back(Inner_cycle(se_begin, --se));
}
} else {
if(ref == ON_POSITIVE_SIDE)
pf2.inner_cycles.push_back(Inner_cycle(se_begin, se));
else if(ref == ON_NEGATIVE_SIDE)
pf1.inner_cycles.push_back(Inner_cycle(se_begin, se));
}
}
Isolated_vertex_iterator iv = isolated_vertices.begin();
for(;iv != isolated_vertices.end();++iv) {
Oriented_side side = p.oriented_side(*iv);
if( side == ON_NEGATIVE_SIDE || side == ON_ORIENTED_BOUNDARY)
pf1.isolated_vertices.push_back(*iv);
if( side == ON_POSITIVE_SIDE || side == ON_ORIENTED_BOUNDARY)
pf1.isolated_vertices.push_back(*iv);
}
// std::cerr << "into " << std::endl;
// pf1.debug();
// pf2.debug();
return true;
}
void debug() {
std::cerr << "Partial_facet " << std::endl;
std::cerr << "Box " << std::endl;
std::cerr << " " << f->b.min_coord(0) << std::endl;
std::cerr << " " << f->b.min_coord(1) << std::endl;
std::cerr << " " << f->b.min_coord(2) << std::endl;
std::cerr << " " << f->b.max_coord(0) << std::endl;
std::cerr << " " << f->b.max_coord(1) << std::endl;
std::cerr << " " << f->b.max_coord(2) << std::endl;
Outer_cycle_iterator oc = outer_cycles_begin();
for(; oc != outer_cycles_end(); ++oc) {
std::cerr << "Outer cycle " << std::endl;
SHalfedge_around_facet_circulator sb(oc->first), se(oc->second);
CGAL_For_all(sb,se) {
std::cerr << " " << sb->source()->source()->point() << std::endl;
}
}
Inner_cycle_iterator ic = inner_cycles_begin();
for(; ic != inner_cycles_end(); ++ic) {
std::cerr << "Inner cycle " << std::endl;
SHalfedge_around_facet_circulator sb(ic->first), se(ic->second);
CGAL_For_all(sb,se) {
std::cerr << " " << sb->source()->source()->point() << std::endl;
}
}
}
};
#endif
/*{\Mcreation 3}*/ /*{\Mcreation 3}*/
/*{\Mtext |\Mname| is default and copy constructible. Note that copy /*{\Mtext |\Mname| is default and copy constructible. Note that copy

View File

@ -1851,29 +1851,6 @@ protected:
CGAL_forall_halffacets(fi,snc()) { CGAL_forall_halffacets(fi,snc()) {
if(is_standard(fi) || ninety) { if(is_standard(fi) || ninety) {
fi->plane() = fi->plane().transform( aff); fi->plane() = fi->plane().transform( aff);
#ifdef CGAL_NEF3_FACET_WITH_BOX
typedef typename Halffacet::Box Box;
bool first = true;
Halffacet_cycle_iterator cycle_it = fi->facet_cycles_begin();
if( cycle_it.is_shalfedge() ) {
SHalfedge_iterator edge_it(cycle_it);
SHalfedge_around_facet_circulator
start( edge_it ), end( edge_it );
CGAL_For_all( start, end ) {
const Point_3& p = start->source()->source()->point();
typename Kernel::FT q[3];
q[0] = p.x();
q[1] = p.y();
q[2] = p.z();
if(first) {
fi->b = Box(q,q);
first = false;
} else
fi->b.extend(q);
}
} else
CGAL_error_msg( "is facet first cycle a SHalfloop?");
#endif
} }
} }

View File

@ -151,10 +151,10 @@ bool read_point_set(const std::string& fname, CGAL::Point_set_3<Point, Vector>&
{ {
return read_point_set(fname, ps, parameters::all_default()); return read_point_set(fname, ps, parameters::all_default());
} }
/// \endcond
} // namespace IO } // namespace IO
/// \endcond
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -742,9 +742,9 @@ Comparison between different sizes of neighbor radius.
\subsubsection Point_set_processing_3WLOP_parallel_performance Parallel Performance \subsubsection Point_set_processing_3WLOP_parallel_performance Parallel Performance
A parallel version of WLOP is provided and requires the executable to be linked against the A parallel version of WLOP is provided and requires the executable to be linked against the
<a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
To control the number of threads used, the user may use the tbb::task_scheduler_init class. To control the number of threads used, the user may use the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
for more details. We provide below a speed-up chart generated using the parallel version of the WLOP algorithm. The machine used is a PC running Windows 7 64-bits with a 4-core i7-4700HQ@2.40GHz CPU with 8GB of RAM. for more details. We provide below a speed-up chart generated using the parallel version of the WLOP algorithm. The machine used is a PC running Windows 7 64-bits with a 4-core i7-4700HQ@2.40GHz CPU with 8GB of RAM.
\cgalFigureBegin{Point_set_processing_3figWLOP_parallel_performance, parallel_WLOP_performance.jpg} \cgalFigureBegin{Point_set_processing_3figWLOP_parallel_performance, parallel_WLOP_performance.jpg}
@ -787,9 +787,9 @@ Comparison for two smoothing methods: Left: Input, 250K points, normal-color map
Performance: Performance:
A parallel version of bilateral smoothing is provided and requires the executable to be linked against the A parallel version of bilateral smoothing is provided and requires the executable to be linked against the
<a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
The number of threads used is controlled through the tbb::task_scheduler_init class. The number of threads used is controlled through the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> for more details. We provide below a speed-up chart generated using the parallel version of the bilateral smoothing algorithm. The machine used is a PC running Windows 7 64-bits with a 4-core i7-4700HQ@2.40GHz CPU with 8GB of RAM. See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a> for more details. We provide below a speed-up chart generated using the parallel version of the bilateral smoothing algorithm. The machine used is a PC running Windows 7 64-bits with a 4-core i7-4700HQ@2.40GHz CPU with 8GB of RAM.
\cgalFigureBegin{Point_set_processing_3Bilateral_smoothing_parallel_performance, parallel_bilateral_smooth_point_set_performance.jpg} \cgalFigureBegin{Point_set_processing_3Bilateral_smoothing_parallel_performance, parallel_bilateral_smooth_point_set_performance.jpg}
Parallel bilateral smoothing speed-up, compared to the sequential version of the algorithm. Parallel bilateral smoothing speed-up, compared to the sequential version of the algorithm.

View File

@ -178,9 +178,9 @@ compute_max_spacing(
For more details, please see section 4 in \cgalCite{ear-2013}. For more details, please see section 4 in \cgalCite{ear-2013}.
A parallel version of this function is provided and requires the executable to be A parallel version of this function is provided and requires the executable to be
linked against the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. linked against the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
To control the number of threads used, the user may use the tbb::task_scheduler_init class. To control the number of threads used, the user may use the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
for more details. for more details.
\pre Normals must be unit vectors \pre Normals must be unit vectors

View File

@ -341,9 +341,9 @@ compute_density_weight_for_sample_point(
For more details, please refer to \cgalCite{wlop-2009}. For more details, please refer to \cgalCite{wlop-2009}.
A parallel version of WLOP is provided and requires the executable to be A parallel version of WLOP is provided and requires the executable to be
linked against the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. linked against the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
To control the number of threads used, the user may use the tbb::task_scheduler_init class. To control the number of threads used, the user may use the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
for more details. for more details.
\tparam ConcurrencyTag enables sequential versus parallel algorithm. Possible values are `Sequential_tag`, \tparam ConcurrencyTag enables sequential versus parallel algorithm. Possible values are `Sequential_tag`,

View File

@ -1064,9 +1064,9 @@ double approximate_Hausdorff_distance(
* `tm1` and `np1` as parameter. * `tm1` and `np1` as parameter.
* *
* A parallel version is provided and requires the executable to be * A parallel version is provided and requires the executable to be
* linked against the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. * linked against the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
* To control the number of threads used, the user may use the `tbb::task_scheduler_init` class. * To control the number of threads used, the user may use the `tbb::task_scheduler_init` class.
* See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> * See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
* for more details. * for more details.
* *
* @tparam Concurrency_tag enables sequential versus parallel algorithm. * @tparam Concurrency_tag enables sequential versus parallel algorithm.

View File

@ -209,7 +209,7 @@ The current implementation incorporates two open source solvers: \ref thirdparty
with reasonably simple structure. with reasonably simple structure.
In case you are reconstructing more complex objects, you may need to consider more efficient open source In case you are reconstructing more complex objects, you may need to consider more efficient open source
solvers (e.g., <a href = "https://projects.coin-or.org/Cbc">CBC</a>) or even commercial solvers (e.g., solvers (e.g., <a href = "https://projects.coin-or.org/Cbc">CBC</a>) or even commercial solvers (e.g.,
<a href = "http://www.gurobi.com/">Gurobi</a>, <a href = "https://www.ibm.com/analytics/cplex-optimizer">CPLEX</a>). <a href = "https://www.gurobi.com/">Gurobi</a>, <a href = "https://www.ibm.com/analytics/cplex-optimizer">CPLEX</a>).
The following table gives a rough idea of the performance of some solvers. The following table gives a rough idea of the performance of some solvers.
| Model | Problem Size <br>variables/constraints | Gurobi | CBC | SCIP | GLPK | LP_SOLVE | | Model | Problem Size <br>variables/constraints | Gurobi | CBC | SCIP | GLPK | LP_SOLVE |

View File

@ -48,8 +48,8 @@ include(${CGAL_USE_FILE})
find_package( find_package(
Qt5 QUIET Qt5 QUIET
COMPONENTS OpenGL Script COMPONENTS OpenGL Script Widgets
OPTIONAL_COMPONENTS ScriptTools WebSockets) OPTIONAL_COMPONENTS ScriptTools WebSockets Network)
set_package_properties( set_package_properties(
Qt5 PROPERTIES Qt5 PROPERTIES
@ -217,7 +217,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.") STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.")
endif() endif()
cgal_add_compilation_test(demo_framework) #compilation_of__demo_framework is defined in polyhedron_demo_macros.cmake
# Let's define `three_EXPORT` during the compilation of `demo_framework`, # Let's define `three_EXPORT` during the compilation of `demo_framework`,
# in addition of `demo_framework_EXPORT` (defined automatically by # in addition of `demo_framework_EXPORT` (defined automatically by
# CMake). That is to deal with the visibility of symbols of # CMake). That is to deal with the visibility of symbols of
@ -241,23 +241,11 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
target_link_libraries(point_dialog PUBLIC Qt5::OpenGL Qt5::Gui Qt5::Script target_link_libraries(point_dialog PUBLIC Qt5::OpenGL Qt5::Gui Qt5::Script
Qt5::Widgets) Qt5::Widgets)
add_custom_target(all_scene_items)
if(BUILD_TESTING)
cgal_add_compilation_test(all_scene_items)
set_property(
TEST compilation_of__all_scene_items
APPEND
PROPERTY DEPENDS compilation_of__demo_framework)
set_property(TEST compilation_of__all_scene_items APPEND PROPERTY TIMEOUT
1700)
endif(BUILD_TESTING)
macro(add_item item_name) macro(add_item item_name)
add_library(${item_name} SHARED ${ARGN}) add_library(${item_name} SHARED ${ARGN})
target_link_libraries( target_link_libraries(
${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt5::OpenGL Qt5::Gui ${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt5::OpenGL Qt5::Gui
Qt5::Script Qt5::Widgets) Qt5::Script Qt5::Widgets)
add_dependencies(all_scene_items ${item_name})
add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${item_name}) add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${item_name})
endmacro(add_item) endmacro(add_item)
@ -434,9 +422,9 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
add_to_cached_list(CGAL_EXECUTABLE_TARGETS CGAL_PMP) add_to_cached_list(CGAL_EXECUTABLE_TARGETS CGAL_PMP)
#WS Server #WS Server
if(TARGET Qt5::WebSockets) if(TARGET Qt5::WebSockets AND TARGET Qt5::Network)
add_executable(WS_server Server_ws.cpp) add_executable(WS_server Server_ws.cpp)
target_link_libraries(WS_server PUBLIC Qt5::WebSockets) target_link_libraries(WS_server PUBLIC Qt5::WebSockets Qt5::Widgets Qt5::Network)
message( message(
STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.") STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.")
endif() endif()

View File

@ -7,5 +7,5 @@ polyhedron_demo_plugin(camera_positions_plugin
${cameraUI_FILES} ${cameraUI_FILES}
KEYWORDS Viewer) KEYWORDS Viewer)
target_link_libraries( camera_positions_plugin PUBLIC demo_framework) add_dependencies(camera_positions_plugin demo_framework)
target_link_libraries(camera_positions_plugin PUBLIC demo_framework) target_link_libraries(camera_positions_plugin PUBLIC demo_framework)

View File

@ -47,6 +47,12 @@ if(TARGET CGAL::Eigen3_support)
scene_color_ramp scene_color_ramp
CGAL::Eigen3_support) CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__classification_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
if(TARGET CGAL::Boost_serialization_support AND TARGET CGAL::Boost_iostreams_support) if(TARGET CGAL::Boost_serialization_support AND TARGET CGAL::Boost_iostreams_support)
target_link_libraries(classification_plugin PUBLIC target_link_libraries(classification_plugin PUBLIC
CGAL::Boost_serialization_support CGAL::Boost_serialization_support

View File

@ -8,3 +8,10 @@ target_link_libraries(
polyhedron_demo_plugin(kernel_plugin Kernel_plugin) polyhedron_demo_plugin(kernel_plugin Kernel_plugin)
target_link_libraries(kernel_plugin PUBLIC scene_surface_mesh_item) target_link_libraries(kernel_plugin PUBLIC scene_surface_mesh_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__convex_hull_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -37,3 +37,9 @@ target_link_libraries(
basic_generator_plugin basic_generator_plugin
PUBLIC scene_surface_mesh_item scene_points_with_normal_item PUBLIC scene_surface_mesh_item scene_points_with_normal_item
scene_polylines_item) scene_polylines_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__create_obb_mesh_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -52,6 +52,17 @@ if(TARGET CGAL::Eigen3_support)
DESCRIPTION "A large scale non-linear optimization library." DESCRIPTION "A large scale non-linear optimization library."
PURPOSE "Can be used as a solver in the smoothing plugin.") PURPOSE "Can be used as a solver in the smoothing plugin.")
target_link_libraries(extrude_plugin PUBLIC CGAL::Eigen3_support) target_link_libraries(extrude_plugin PUBLIC CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__extrude_plugin
compilation_of__fairing_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
set_tests_properties(
compilation_of__hole_filling_plugin
compilation_of__smoothing_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else() else()
message( message(
STATUS STATUS
@ -153,3 +164,15 @@ polyhedron_demo_plugin(engrave_text_plugin Engrave_text_plugin
target_link_libraries( target_link_libraries(
engrave_text_plugin PUBLIC scene_surface_mesh_item scene_selection_item engrave_text_plugin PUBLIC scene_surface_mesh_item scene_selection_item
scene_polylines_item) scene_polylines_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__join_and_split_plugin
compilation_of__selection_plugin
compilation_of__triangulate_facets_plugin
compilation_of__isotropic_remeshing_plugin
compilation_of__random_perturbation_plugin
compilation_of__engrave_text_plugin
compilation_of__degenerated_faces_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -15,6 +15,13 @@ if(NOT CGAL_DISABLE_GMP)
target_link_libraries( target_link_libraries(
parameterization_plugin PUBLIC scene_surface_mesh_item scene_textured_item parameterization_plugin PUBLIC scene_surface_mesh_item scene_textured_item
scene_selection_item CGAL::Eigen3_support) scene_selection_item CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__parameterization_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else() else()
message( message(
STATUS STATUS
@ -27,6 +34,11 @@ if(NOT CGAL_DISABLE_GMP)
${segmentationUI_FILES}) ${segmentationUI_FILES})
target_link_libraries(mesh_segmentation_plugin PUBLIC scene_surface_mesh_item) target_link_libraries(mesh_segmentation_plugin PUBLIC scene_surface_mesh_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__mesh_segmentation_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui)
polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES})

View File

@ -4,6 +4,13 @@ if(EIGEN3_FOUND AND "${EIGEN3_VERSION}" VERSION_GREATER "3.1.90")
polyhedron_demo_plugin(edit_plugin Edit_polyhedron_plugin Deform_mesh.ui) polyhedron_demo_plugin(edit_plugin Edit_polyhedron_plugin Deform_mesh.ui)
target_link_libraries(edit_plugin PUBLIC scene_surface_mesh_item target_link_libraries(edit_plugin PUBLIC scene_surface_mesh_item
scene_edit_item scene_selection_item) scene_edit_item scene_selection_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__edit_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else() else()
message( message(
STATUS STATUS

View File

@ -2127,4 +2127,15 @@ void Viewer::onTextMessageSocketReceived(QString message)
#endif #endif
const QVector3D& Viewer::scaler()const { return d->scaler; } const QVector3D& Viewer::scaler()const { return d->scaler; }
void Viewer::showEntireScene()
{
CGAL::QGLViewer::showEntireScene();
CGAL::Bbox_3 bbox = CGAL::Three::Three::scene()->bbox();
CGAL::qglviewer::Vec vmin(((float)bbox.xmin()+offset().x)*d->scaler.x(), ((float)bbox.ymin()+offset().y)*d->scaler.y(), ((float)bbox.zmin()+offset().z)*d->scaler.z()),
vmax(((float)bbox.xmax()+offset().x)*d->scaler.x(), ((float)bbox.ymax()+offset().y)*d->scaler.y(), ((float)bbox.zmax()+offset().z)*d->scaler.z());
camera()->setPivotPoint((vmin+vmax)*0.5);
camera()->setSceneBoundingBox(vmin, vmax);
camera()->fitBoundingBox(vmin, vmax);
}
#include "Viewer.moc" #include "Viewer.moc"

View File

@ -139,6 +139,7 @@ public Q_SLOTS:
void onTextMessageSocketReceived(QString message); void onTextMessageSocketReceived(QString message);
#endif #endif
void scaleScene(); void scaleScene();
void showEntireScene()Q_DECL_OVERRIDE;
protected: protected:
void paintEvent(QPaintEvent *)Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *)Q_DECL_OVERRIDE;
void paintGL()Q_DECL_OVERRIDE; void paintGL()Q_DECL_OVERRIDE;

View File

@ -28,18 +28,33 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
PROPERTY LIBRARY_OUTPUT_DIRECTORY PROPERTY LIBRARY_OUTPUT_DIRECTORY
"${CGAL_POLYHEDRON_DEMO_PLUGINS_DIR}") "${CGAL_POLYHEDRON_DEMO_PLUGINS_DIR}")
cgal_add_compilation_test(${plugin_name}) cgal_add_compilation_test(${plugin_name})
if(BUILD_TESTING)
set_property(TEST compilation_of__${plugin_name}
APPEND PROPERTY DEPENDS compilation_of__all_scene_items)
endif()
add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} )
# Link with Qt # Link with Qt
target_link_libraries( ${plugin_name} PUBLIC ${QT_LIBRARIES} ) target_link_libraries( ${plugin_name} PUBLIC ${QT_LIBRARIES} )
# Link with the demo_framework # Link with the demo_framework
if(TARGET demo_framework) if(TARGET demo_framework)
target_link_libraries( ${plugin_name} PUBLIC demo_framework) target_link_libraries( ${plugin_name} PUBLIC demo_framework)
add_dependencies(${plugin_name} demo_framework)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
if(NOT TARGET compilation_of__demo_framework)
# This custom target is useless. It is used only as a flag to
# detect that the test has already been created.
add_custom_target(compilation_of__demo_framework)
add_dependencies( compilation_of__demo_framework demo_framework )
add_test(NAME "compilation_of__demo_framework"
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "demo_framework" --config "$<CONFIG>")
set_property(TEST "compilation_of__demo_framework"
APPEND PROPERTY LABELS "CGAL_build_system")
set_property(TEST "compilation_of__demo_framework"
PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture")
set_property(TEST "compilation_of__demo_framework"
APPEND PROPERTY DEPENDS "compilation_of__CGAL_Qt5_moc_and_resources")
endif()
endif()
else() else()
target_link_libraries( ${plugin_name} PUBLIC Polyhedron_demo_framework) target_link_libraries( ${plugin_name} PUBLIC Polyhedron_demo_framework)
add_dependencies(${plugin_name} Polyhedron_demo_framework)
endif() endif()
# Link with CGAL # Link with CGAL
target_link_libraries( ${plugin_name} PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) target_link_libraries( ${plugin_name} PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} )

View File

@ -135,7 +135,7 @@ namespace cpp98 {
/*! /*!
\ingroup STLAlgos \ingroup STLAlgos
Replacement for <a href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle">`std::random_shuffle()`</a> Replacement for <a href="https://en.cppreference.com/w/cpp/algorithm/random_shuffle">`std::random_shuffle()`</a>
which was deprecated in C++14, and removed by C++17. which was deprecated in C++14, and removed by C++17.
In the \stl it was replaced by `std::shuffle()`. In the \stl it was replaced by `std::shuffle()`.
@ -149,7 +149,7 @@ random_shuffle(RandomAccessIterator begin, RandomAccessIterator end,
/*! /*!
\ingroup STLAlgos \ingroup STLAlgos
Replacement for <a href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle">`std::random_shuffle()`</a> Replacement for <a href="https://en.cppreference.com/w/cpp/algorithm/random_shuffle">`std::random_shuffle()`</a>
which was deprecated in C++14, and removed by C++17. which was deprecated in C++14, and removed by C++17.
In the \stl it was replaced by `std::shuffle()`. In the \stl it was replaced by `std::shuffle()`.

View File

@ -98,7 +98,7 @@ The class `Concurrent_compact_container<T, Allocator>`
provides the same features, but enables concurrency-safe provides the same features, but enables concurrency-safe
`insert` and `erase` operations. Other operations are not concurrency-safe. `insert` and `erase` operations. Other operations are not concurrency-safe.
It requires the program to be linked against It requires the program to be linked against
the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
\section stl_multi Multiset with Extended Functionality \section stl_multi Multiset with Extended Functionality

View File

@ -179,7 +179,7 @@ namespace internal {
template <class T, class Alloc> template <class T, class Alloc>
std::size_t hash_value(const In_place_list_iterator<T,Alloc>& i) std::size_t hash_value(const In_place_list_iterator<T,Alloc>& i)
{ {
T* ptr = &*i; T* ptr = i.operator->();
return reinterpret_cast<std::size_t>(ptr)/ sizeof(T); return reinterpret_cast<std::size_t>(ptr)/ sizeof(T);
} }
@ -187,7 +187,7 @@ template <class T, class Alloc>
template <class T, class Alloc> template <class T, class Alloc>
std::size_t hash_value(const In_place_list_const_iterator<T,Alloc>& i) std::size_t hash_value(const In_place_list_const_iterator<T,Alloc>& i)
{ {
const T* ptr = &*i; const T* ptr = i.operator->();
return reinterpret_cast<std::size_t>(ptr)/ sizeof(T); return reinterpret_cast<std::size_t>(ptr)/ sizeof(T);
} }
@ -792,7 +792,7 @@ namespace std {
std::size_t operator()(const CGAL::internal::In_place_list_iterator<T, Alloc>& i) const std::size_t operator()(const CGAL::internal::In_place_list_iterator<T, Alloc>& i) const
{ {
const T* ptr = &*i; const T* ptr = i.operator->();
return reinterpret_cast<std::size_t>(ptr)/ sizeof(T); return reinterpret_cast<std::size_t>(ptr)/ sizeof(T);
} }
}; };
@ -803,7 +803,7 @@ namespace std {
std::size_t operator()(const CGAL::internal::In_place_list_const_iterator<T, Alloc>& i) const std::size_t operator()(const CGAL::internal::In_place_list_const_iterator<T, Alloc>& i) const
{ {
const T* ptr = &*i; const T* ptr =i.operator->();
return reinterpret_cast<std::size_t>(ptr)/ sizeof(T); return reinterpret_cast<std::size_t>(ptr)/ sizeof(T);
} }
}; };

View File

@ -76,26 +76,11 @@ class Object
template <class T> template <class T>
bool assign(T &t) const bool assign(T &t) const
{ {
if(obj) { const T* res = boost::any_cast<T>(obj.get());
#ifdef CGAL_USE_ANY_BAD_CAST if (!res) return false;
try {
t = boost::any_cast<T>(*obj);
return true;
} catch(...) {
return false;
}
#else
const T* res = boost::any_cast<T>(&(*obj));
if (res){
t = *res; t = *res;
return true; return true;
} }
return false;
#endif
} else {
return false;
}
}
bool bool
empty() const empty() const
@ -174,19 +159,13 @@ template <class T>
inline inline
const T * object_cast(const Object * o) const T * object_cast(const Object * o)
{ {
if(o->obj)
return boost::any_cast<T>((o->obj).get()); return boost::any_cast<T>((o->obj).get());
else
return nullptr;
} }
template <class T> template <class T>
inline inline
T object_cast(const Object & o) T object_cast(const Object & o)
{ {
if(!o.obj)
throw Bad_object_cast();
const T * result = boost::any_cast<T>((o.obj).get()); const T * result = boost::any_cast<T>((o.obj).get());
if (!result) if (!result)
throw Bad_object_cast(); throw Bad_object_cast();

View File

@ -1,5 +1,3 @@
#!/bin/bash
#!/bin/bash #!/bin/bash
#usage : script [-c -l -n -s -k] testsuite_dir #usage : script [-c -l -n -s -k] testsuite_dir
@ -23,7 +21,7 @@ export TAR="tar"
export GUNZIP="gunzip" export GUNZIP="gunzip"
export COMPRESSOR="gzip" export COMPRESSOR="gzip"
export CONSOLE_OUTPUT="y" export CONSOLE_OUTPUT="y"
export CGAL_HOME=`pwd` export CGAL_HOME=$(pwd | sed -E 's/\/cygdrive\/([a-z])\//\U\1:\//')
export USE_TARGZ="y" export USE_TARGZ="y"
export USE_TARBZ="n" export USE_TARBZ="n"
export CGAL_RELEASE="" export CGAL_RELEASE=""
@ -284,6 +282,8 @@ else
CGAL_DIR=`readlink "${CGAL_HOME}/CGAL-I"` CGAL_DIR=`readlink "${CGAL_HOME}/CGAL-I"`
fi fi
CGAL_DIR=$(echo "$CGAL_DIR" | sed -E 's/\/cygdrive\/([a-z])\//\U\1:\//')
CGAL_RELEASE_ID=$(cat last_release_id) CGAL_RELEASE_ID=$(cat last_release_id)
for HOST in ${BUILD_HOSTS}; do for HOST in ${BUILD_HOSTS}; do
if [ "$HOST" != "localhost" ]; then if [ "$HOST" != "localhost" ]; then

View File

@ -326,22 +326,3 @@ if [ -n "$DO_PUBLIC" ]; then
rm -f "$HTML_DIR/CGAL-last-public" rm -f "$HTML_DIR/CGAL-last-public"
ln -s "${release_name}-public" "$HTML_DIR/CGAL-last-public" ln -s "${release_name}-public" "$HTML_DIR/CGAL-last-public"
fi fi
if [ -n "$DO_PUBLIC" ]; then
if docker version > /dev/null; then
# Re-extract the full version of CGAL, with examples/, and doc_html/
rm -rf ./${public_release_name}
tar -xf "${HTML_DIR}/${release_name}-public/${public_release_name}.tar.xz"
# Build the Windows installer
docker pull cgal/cgal-nsis-dockerfile
docker create -v `realpath ${DESTINATION}/${public_release_name}`:/mnt/cgal_release:ro,z \
-v ${SOURCES_DIR}:/mnt/cgal_sources:ro,z \
cgal/cgal-nsis-dockerfile
container_id=`docker ps -q -l`
docker start -a ${container_id}
docker cp ${container_id}:/nsis_release/${public_release_name}-Setup.exe "${HTML_DIR}/${release_name}-public/"
docker rm ${container_id}
else
echo "Cannot use Docker, the Windows installer will not be created" >&2
fi
fi

View File

@ -259,8 +259,8 @@ run_test_on_platform()
cd "${CGAL_BINARY_DIR}" cd "${CGAL_BINARY_DIR}"
log "${ACTUAL_LOGFILE}.test.${PLATFORM}" "Testing on host ${HOST} and platform ${PLATFORM}" log "${ACTUAL_LOGFILE}.test.${PLATFORM}" "Testing on host ${HOST} and platform ${PLATFORM}"
if [ -f "${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup" ]; then if [ -f "${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup" ]; then
source "${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup" source "${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup"
else else
INIT_FILE="${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}.cmake" INIT_FILE="${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}.cmake"
fi fi
@ -294,14 +294,15 @@ run_test_on_platform()
#unsets the limit of 1024 bits for the logs through ssh #unsets the limit of 1024 bits for the logs through ssh
echo "SET(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 1000000000)" > CTestCustom.cmake echo "SET(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 1000000000)" > CTestCustom.cmake
echo "SET(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 1000000000)" >> CTestCustom.cmake echo "SET(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 1000000000)" >> CTestCustom.cmake
CTEST_OPTS="-T Start -T Test --timeout 1200 -j${NUMBER_OF_PROCESSORS} ${DO_NOT_TEST:+-E execution___of__} "
CTEST_OPTS="-T Start -T Test --timeout 1200 ${DO_NOT_TEST:+-E execution___of__}"
if uname | grep -q "CYGWIN"; then if uname | grep -q "CYGWIN"; then
CTEST_OPTS="-C ${CONFIG_TYPE} ${CTEST_OPTS} -V" CTEST_OPTS="-C ${CONFIG_TYPE} ${CTEST_OPTS}"
fi fi
if [ -z "${SHOW_PROGRESS}" ]; then if [ -z "${SHOW_PROGRESS}" ]; then
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} ${KEEP_TESTS:+-FC .}> tmp.txt ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} -j${NUMBER_OF_PROCESSORS} ${KEEP_TESTS:+-FC .}>tmp.txt
else else
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} ${KEEP_TESTS:+-FC .} |tee tmp.txt ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} -j${NUMBER_OF_PROCESSORS} ${KEEP_TESTS:+-FC .}|tee tmp.txt
fi fi
##################### #####################
## GET RESULTS ## ## GET RESULTS ##
@ -321,7 +322,9 @@ run_test_on_platform()
echo "TESTER_NAME ${CGAL_TESTER}" >> "$RESULT_FILE" echo "TESTER_NAME ${CGAL_TESTER}" >> "$RESULT_FILE"
echo "TESTER_ADDRESS ${TESTER_ADDRESS}" >> "$RESULT_FILE" echo "TESTER_ADDRESS ${TESTER_ADDRESS}" >> "$RESULT_FILE"
echo "CGAL_TEST_PLATFORM ${PLATFORM}" >> "$RESULT_FILE" echo "CGAL_TEST_PLATFORM ${PLATFORM}" >> "$RESULT_FILE"
grep -e "^-- USING " "${CGAL_BINARY_DIR}/installation.log" >> $RESULT_FILE grep -e "^-- USING " "${CGAL_BINARY_DIR}/installation.log"|sort -u >> $RESULT_FILE
#Use sed to get the content of DEBUG or RELEASE CXX FLAGS so that Multiconfiguration platforms do provide their CXXXFLAGS to the testsuite page (that greps USING CXXFLAGS to get info)
sed -i -E 's/(^-- USING )(DEBUG|RELEASE) (CXXFLAGS)/\1\3/' $RESULT_FILE
echo "------------" >> "$RESULT_FILE" echo "------------" >> "$RESULT_FILE"
#if git branch, create empty scm file for python script #if git branch, create empty scm file for python script
if [ -n "${SCRIPTS_DIR}" ]; then if [ -n "${SCRIPTS_DIR}" ]; then

View File

@ -19,7 +19,7 @@ function(add_Snap_rounding_tests name)
cgal_add_test(${name} TEST_NAME ${test_name} ARGUMENTS ${data_dir}/${file} cgal_add_test(${name} TEST_NAME ${test_name} ARGUMENTS ${data_dir}/${file}
${data_dir}/output_${file}) ${data_dir}/output_${file})
add_test(NAME "${test_name}_compare_results" add_test(NAME "${test_name}_compare_results"
COMMAND ${CMAKE_COMMAND} -E compare_files COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol
${data_dir}/output_${file} ${data_dir}/gold_${file}) ${data_dir}/output_${file} ${data_dir}/gold_${file})
cgal_setup_test_properties("${test_name}_compare_results") cgal_setup_test_properties("${test_name}_compare_results")
set_property( set_property(

View File

@ -72,7 +72,7 @@ public:
/// @{ /// @{
/*! /*!
\brief Solves the linear program. \brief solves the linear program.
Number of values in `solution` equals to the number `n` of values in the vector `x`. Number of values in `solution` equals to the number `n` of values in the vector `x`.

View File

@ -46,8 +46,6 @@ public:
/*! /*!
Sets the entries `Pij` and `Pji` of `qp` to `value`. Sets the entries `Pij` and `Pji` of `qp` to `value`.
Note that you should define only the upper triangular part of the matrix!
*/ */
void set_P(const std::size_t i, const std::size_t j, const FT value) { } void set_P(const std::size_t i, const std::size_t j, const FT value) { }
@ -83,7 +81,7 @@ public:
/// @{ /// @{
/*! /*!
\brief Solves the quadratic program. \brief solves the quadratic program.
Number of values in `solution` equals to the number `n` of values in the vector `x`. Number of values in `solution` equals to the number `n` of values in the vector `x`.

View File

@ -21,15 +21,11 @@ Library (MKL)</a>.
For mixed integer programs (either constrained or unconstrained), For mixed integer programs (either constrained or unconstrained),
we provide models using the \ref thirdpartySCIP and \ref thirdpartyGLPK we provide models using the \ref thirdpartySCIP and \ref thirdpartyGLPK
libraries. It is also possible to derive new models from other libraries.
high performance libraries such as <a href = "https://projects.coin-or.org/Cbc">CBC</a> or
<a href = "http://www.gurobi.com/">Gurobi</a>.
For linear and quadratic programs, we provide a model using the built-in For linear and quadratic programs, \cgal provides the built-in
\ref PkgQPSolver "CGAL Linear and Quadratic Programming Solver" and a model using \ref PkgQPSolver "CGAL Linear and Quadratic Programming Solver"
the external \ref thirdpartyOSQP library. It is also possible to derive new models and we also provide a model using the \ref thirdpartyOSQP library.
from other quadratic programming libraries such as
<a href = "http://pages.cs.wisc.edu/~swright/ooqp/">OOQP</a> for example.
\section SectionSolverDiagonalize Matrix Diagonalization \section SectionSolverDiagonalize Matrix Diagonalization

View File

@ -19,20 +19,18 @@ if(TARGET CGAL::Eigen3_support)
target_link_libraries(diagonalize_matrix PUBLIC CGAL::Eigen3_support) target_link_libraries(diagonalize_matrix PUBLIC CGAL::Eigen3_support)
endif() endif()
create_single_source_cgal_program("mixed_integer_program.cpp")
create_single_source_cgal_program("osqp_quadratic_program.cpp")
find_package(OSQP QUIET) find_package(OSQP QUIET)
include(CGAL_OSQP_support) include(CGAL_OSQP_support)
if(TARGET CGAL::OSQP_support) if(TARGET CGAL::OSQP_support)
create_single_source_cgal_program("osqp_quadratic_program.cpp")
target_link_libraries(osqp_quadratic_program PUBLIC CGAL::OSQP_support) target_link_libraries(osqp_quadratic_program PUBLIC CGAL::OSQP_support)
message("OSQP found and used") message("OSQP found and used")
else() else()
message(STATUS "NOTICE: OSQP was not found. Complete OSQP examples won't be available.") message(STATUS "NOTICE: OSQP was not found. OSQP examples won't be available.")
endif() endif()
@ -41,6 +39,7 @@ include(CGAL_SCIP_support)
if(TARGET CGAL::SCIP_support) if(TARGET CGAL::SCIP_support)
create_single_source_cgal_program("mixed_integer_program.cpp")
target_link_libraries(mixed_integer_program PUBLIC CGAL::SCIP_support) target_link_libraries(mixed_integer_program PUBLIC CGAL::SCIP_support)
message("SCIP found and used") message("SCIP found and used")
@ -51,6 +50,7 @@ else()
if(TARGET CGAL::GLPK_support) if(TARGET CGAL::GLPK_support)
create_single_source_cgal_program("mixed_integer_program.cpp")
target_link_libraries(mixed_integer_program PUBLIC CGAL::GLPK_support) target_link_libraries(mixed_integer_program PUBLIC CGAL::GLPK_support)
message("GLPK found and used") message("GLPK found and used")

View File

@ -32,9 +32,6 @@ typedef CGAL::GLPK_mixed_integer_program_traits<double> M
#endif #endif
#if defined(CGAL_USE_GLPK) || defined(CGAL_USE_SCIP)
typedef typename MIP_Solver::Variable Variable; typedef typename MIP_Solver::Variable Variable;
typedef typename MIP_Solver::Linear_objective Linear_objective; typedef typename MIP_Solver::Linear_objective Linear_objective;
typedef typename MIP_Solver::Linear_constraint Linear_constraint; typedef typename MIP_Solver::Linear_constraint Linear_constraint;
@ -99,15 +96,3 @@ int main()
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
#else
int main(int , char**)
{
std::cerr << "This test requires either GLPK or SCIP.\n";
return EXIT_SUCCESS;
}
#endif // defined(CGAL_USE_GLPK) || defined(CGAL_USE_SCIP)

View File

@ -21,16 +21,11 @@
#include <vector> #include <vector>
#include <iostream> #include <iostream>
#include <CGAL/Simple_cartesian.h> #include <CGAL/Simple_cartesian.h>
#if defined(CGAL_USE_OSQP)
#include <CGAL/OSQP_quadratic_program_traits.h> #include <CGAL/OSQP_quadratic_program_traits.h>
#endif
using Kernel = CGAL::Simple_cartesian<double>; using Kernel = CGAL::Simple_cartesian<double>;
using FT = typename Kernel::FT; using FT = typename Kernel::FT;
#if defined(CGAL_USE_OSQP)
int main(void) { int main(void) {
const std::size_t n = 2; // number of variables const std::size_t n = 2; // number of variables
@ -68,10 +63,3 @@ int main(void) {
} }
std::cout << std::endl; std::cout << std::endl;
} }
#else
int main(void) {
std::cout << "This example requires the OSQP library." << std::endl;
return EXIT_SUCCESS;
}
#endif // defined(CGAL_USE_OSQP)

View File

@ -274,7 +274,7 @@ namespace CGAL {
/// `CGAL::SCIP_mixed_integer_program_traits`. Alternatively, use /// `CGAL::SCIP_mixed_integer_program_traits`. Alternatively, use
/// `CGAL::Mixed_integer_program_traits` as a base to derive a new model /// `CGAL::Mixed_integer_program_traits` as a base to derive a new model
/// (using e.g., <a href = "https://projects.coin-or.org/Cbc"> CBC </a>, /// (using e.g., <a href = "https://projects.coin-or.org/Cbc"> CBC </a>,
/// <a href = "http://www.gurobi.com/"> Gurobi </a> for better /// <a href = "https://www.gurobi.com/"> Gurobi </a> for better
/// performance). /// performance).
/// ///
/// \cond SKIP_IN_MANUAL /// \cond SKIP_IN_MANUAL

View File

@ -414,7 +414,7 @@ branches of each internal node can be computed in parallel, by calling
`Kd_tree::build<CGAL::Parallel_tag>()`. On a quad-core processor, the `Kd_tree::build<CGAL::Parallel_tag>()`. On a quad-core processor, the
parallel construction is experimentally 2 to 3 times faster than the parallel construction is experimentally 2 to 3 times faster than the
sequential version, depending on the point cloud. The parallel version sequential version, depending on the point cloud. The parallel version
requires the executable to be linked against the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. requires the executable to be linked against the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
One query on the `kd` tree is purely sequential, but several queries One query on the `kd` tree is purely sequential, but several queries
can be done in parallel. can be done in parallel.

View File

@ -370,7 +370,7 @@ The `3MF`, using the file extension `.3mf`, is an open source file format create
It is an XML-based format that aims to enhance the \ref IOStreamSTL by adding means to include It is an XML-based format that aims to enhance the \ref IOStreamSTL by adding means to include
extra information such as colors. extra information such as colors.
A precise specification of the format is available at <a href="http://www.3mf.io/specification/">3mf.io</a>; A precise specification of the format is available at <a href="https://3mf.io/specification/">3mf.io</a>;
note that only versions `1.x` are currently supported in \cgal. note that only versions `1.x` are currently supported in \cgal.
<table class="iotable"> <table class="iotable">

View File

@ -405,7 +405,7 @@ and when iterating over elements they will not be enumerated in the insertion or
\section sectionSurfaceMeshHistory Implementation History \section sectionSurfaceMeshHistory Implementation History
This package is derived from an early version of Daniel Sieger and Mario Botsch package This package is derived from an early version of Daniel Sieger and Mario Botsch package
<a href="http://graphics.uni-bielefeld.de/publications/imr11/"><em>%Surface_mesh</em></a> <em>Surface_mesh</em>
\cgalCite{sieger2011design}, \cgalCite{sieger2011design},
which is inspired from the design of <a href="https://www.openmesh.org/">OpenMesh</a> and the \cgal package which is inspired from the design of <a href="https://www.openmesh.org/">OpenMesh</a> and the \cgal package
\ref PkgPolyhedron. \ref PkgPolyhedron.

View File

@ -86,8 +86,14 @@ with open_file_create_dir(result_file_name.format(dir=os.getcwd(),
print(" {result} {name} in {time} s : {value} ".format(result = "successful " if (t['Status'] == 'passed') else "ERROR: ", name = t['Name'], value = t['ExitValue'] if(t['ExitValue'] != "") else "SUCCESS" , time = t['ExecutionTime']), file=error) print(" {result} {name} in {time} s : {value} ".format(result = "successful " if (t['Status'] == 'passed') else "ERROR: ", name = t['Name'], value = t['ExitValue'] if(t['ExitValue'] != "") else "SUCCESS" , time = t['ExecutionTime']), file=error)
if t['Status'] != 'passed': if t['Status'] != 'passed':
result_for_label='n' result_for_label='n'
elif t['Output'] != None and re.search(r'(^|[^a-zA-Z_,:-])warning', t['Output'], flags=re.IGNORECASE): elif t['Output'] != None:
for m in re.finditer(r'(.*([^a-zA-Z_,:-])([^\d]\s)warning).*?(\[|\n)', t['Output'], flags=re.IGNORECASE):
n = re.search(r'cmake|cgal', m.group(0), flags=re.IGNORECASE)
if n:
result_for_label='w' result_for_label='w'
break;
else:
result_for_label='t'
with io.open("{}/ProgramOutput.{}".format(label, t['Name']), mode="w", encoding="utf-8") as f: with io.open("{}/ProgramOutput.{}".format(label, t['Name']), mode="w", encoding="utf-8") as f:
print("{}/ProgramOutput.{}".format(label, t['Name'])) print("{}/ProgramOutput.{}".format(label, t['Name']))

View File

@ -26,15 +26,15 @@
*/ */
enum RenderingMode enum RenderingMode
{ {
Points = 0, //! Renders only points without lighting. Points = 0, //!< Renders only points without lighting.
PointsPlusNormals, //!Renders points and normals. PointsPlusNormals, //!< Renders points and normals.
Wireframe, //!Renders only edges. Wireframe, //!< Renders only edges.
Flat, //!Renders only faces, with a lighting per face. Flat, //!< Renders only faces, with a lighting per face.
FlatPlusEdges, //!Renders flat faces and edges. FlatPlusEdges, //!< Renders flat faces and edges.
Gouraud, //!Renders only faces, with a lighting per vertex. Gouraud, //!< Renders only faces, with a lighting per vertex.
GouraudPlusEdges, //!Renders faces with a lighting per vertex, and edges. GouraudPlusEdges, //!< Renders faces with a lighting per vertex, and edges.
ShadedPoints, //!Renders only points with lighting. ShadedPoints, //!< Renders only points with lighting.
NumberOfRenderingMode //!Number of values in this enum. NumberOfRenderingMode //!< Number of values in this enum.
}; };

View File

@ -287,6 +287,8 @@ public:
//! A vector indicating the scaling factors to apply to the scene when displaying it. //! A vector indicating the scaling factors to apply to the scene when displaying it.
//! It can be useful when a scene is very large along one of it's coordinates, making it hard to visualize it. //! It can be useful when a scene is very large along one of it's coordinates, making it hard to visualize it.
virtual const QVector3D& scaler() const = 0; virtual const QVector3D& scaler() const = 0;
virtual void showEntireScene() = 0;
}; // end class Viewer_interface }; // end class Viewer_interface
} }
} }

View File

@ -1,3 +1,3 @@
@INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS}
PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - 2D Triangulation" PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - 2D Triangulations"

View File

@ -1,4 +1,4 @@
/// \defgroup PkgTriangulation2Ref 2D Triangulation Reference /// \defgroup PkgTriangulation2Ref 2D Triangulations Reference
/// \defgroup PkgTriangulation2Concepts Concepts /// \defgroup PkgTriangulation2Concepts Concepts
/// \ingroup PkgTriangulation2Ref /// \ingroup PkgTriangulation2Ref
@ -24,7 +24,7 @@
/*! /*!
\addtogroup PkgTriangulation2Ref \addtogroup PkgTriangulation2Ref
\todo check generated documentation \todo check generated documentation
\cgalPkgDescriptionBegin{2D Triangulation,PkgTriangulation2} \cgalPkgDescriptionBegin{2D Triangulations,PkgTriangulation2}
\cgalPkgPicture{cdt2d-small.png} \cgalPkgPicture{cdt2d-small.png}
\cgalPkgSummaryBegin \cgalPkgSummaryBegin
\cgalPkgAuthor{Mariette Yvinec} \cgalPkgAuthor{Mariette Yvinec}

View File

@ -411,9 +411,9 @@ range of points will be performed in parallel, and the individual
insert/remove operations will be optionally thread-safe. insert/remove operations will be optionally thread-safe.
Parallel algorithms require the program to be linked against Parallel algorithms require the program to be linked against
the <a href="https://www.threadingbuildingblocks.org">Intel TBB library</a>. the <a href="https://github.com/oneapi-src/oneTBB">Intel TBB library</a>.
To control the number of threads used, the user may use the tbb::task_scheduler_init class. To control the number of threads used, the user may use the tbb::task_scheduler_init class.
See the <a href="https://www.threadingbuildingblocks.org/documentation">TBB documentation</a> See the <a href="https://software.intel.com/content/www/us/en/develop/documentation/onetbb-documentation/top.html">TBB documentation</a>
for more details. for more details.
\section Triangulation3secexamples Examples \section Triangulation3secexamples Examples

View File

@ -1,4 +1,4 @@
/// \defgroup PkgTriangulationOnSphere2Ref 2D Triangulation on Sphere Reference /// \defgroup PkgTriangulationOnSphere2Ref 2D Triangulation on the Sphere Reference
/// \defgroup PkgTriangulationOnSphere2Concepts Concepts /// \defgroup PkgTriangulationOnSphere2Concepts Concepts
/// \ingroup PkgTriangulationOnSphere2Ref /// \ingroup PkgTriangulationOnSphere2Ref
@ -12,7 +12,7 @@
/*! /*!
\addtogroup PkgTriangulationOnSphere2Ref \addtogroup PkgTriangulationOnSphere2Ref
\cgalPkgDescriptionBegin{2D Triangulations on Sphere,PkgTriangulationOnSphere2} \cgalPkgDescriptionBegin{2D Triangulations on the Sphere,PkgTriangulationOnSphere2}
\cgalPkgPicture{triangulation_on_sphere.png} \cgalPkgPicture{triangulation_on_sphere.png}
\cgalPkgSummaryBegin \cgalPkgSummaryBegin
\cgalPkgAuthors{Mael Rouxel-Labbé, Monique Teillaud, and Claudia Werner} \cgalPkgAuthors{Mael Rouxel-Labbé, Monique Teillaud, and Claudia Werner}
@ -26,7 +26,7 @@
\cgalPkgDependsOn{\ref PkgTDS2} \cgalPkgDependsOn{\ref PkgTDS2}
\cgalPkgBib{cgal:rtw-tos2} \cgalPkgBib{cgal:rtw-tos2}
\cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgLicense{\ref licensesGPL "GPL"}
\cgalPkgDemo{Delaunay Triangulation, delaunay_Triangulation_on_sphere_2.zip} \cgalPkgDemo{2D Triangulations on the sphere,triangulation_on_sphere_2.zip}
\cgalPkgShortInfoEnd \cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd \cgalPkgDescriptionEnd

View File

@ -32,7 +32,7 @@ Given a set \f$ \mathcal{P}\f$ of points on \f$ \mathbb{S(c, r)}\f$, a <em>two-d
of \f$ \mathcal{P}\f$ can be described as a two-dimensional simplicial complex that is pure, of \f$ \mathcal{P}\f$ can be described as a two-dimensional simplicial complex that is pure,
connected, and without singularity whose vertices are exactly the points in \f$ \mathcal{P}\f$ connected, and without singularity whose vertices are exactly the points in \f$ \mathcal{P}\f$
(see the complete definition in the package (see the complete definition in the package
\link Section_2D_Triangulations_Definitions 2D Triangulations\endlink). \ref Section_2D_Triangulations_Definitions "2D Triangulations").
In \f$ \mathbb{R}^2\f$, a <em>Delaunay</em> triangulation is a two-dimension triangulation In \f$ \mathbb{R}^2\f$, a <em>Delaunay</em> triangulation is a two-dimension triangulation
that satisfies the <em>empty circle property</em> (also called <em>Delaunay property</em>): that satisfies the <em>empty circle property</em> (also called <em>Delaunay property</em>):
@ -65,7 +65,7 @@ as an orientation test does not stand if points do not lie in a convex position.
This gap between the theoretical and the practical settings was addressed by Caroli et al. \cgalCite{cgal:ccplr-redtp-10} : This gap between the theoretical and the practical settings was addressed by Caroli et al. \cgalCite{cgal:ccplr-redtp-10} :
the solution is to use a <em>regular</em> triangulation, which is a generalization of the Delaunay triangulation the solution is to use a <em>regular</em> triangulation, which is a generalization of the Delaunay triangulation
to sets of <em>weighted points</em> to sets of <em>weighted points</em>
(see \link Section_2D_Triangulations_Regular 2D Regular Triangulations\endlink for more information). (see \ref Section_2D_Triangulations_Regular "2D Regular Triangulations" for more information).
A weighted point \f$(p,w)\f$ of \f$ \mathbb{R}^2\f$ can naturally be seen as as a circle with center \f$ p\f$ A weighted point \f$(p,w)\f$ of \f$ \mathbb{R}^2\f$ can naturally be seen as as a circle with center \f$ p\f$
and radius \f$ r\f$ such that \f$ r^2 = w\f$ and similarly to Delaunay triangulations and the definition and radius \f$ r\f$ such that \f$ r^2 = w\f$ and similarly to Delaunay triangulations and the definition
of regular triangulations in \f$ \mathbb{R}^2\f$ can be naturally extended to circles on \f$ \mathbb{S}\f$. of regular triangulations in \f$ \mathbb{R}^2\f$ can be naturally extended to circles on \f$ \mathbb{S}\f$.