Merge remote-tracking branch 'cgal/master' into HEAD

This commit is contained in:
Sébastien Loriot 2023-05-24 09:55:21 +02:00
commit 50679f5034
97 changed files with 15986 additions and 26661 deletions

View File

@ -75,7 +75,7 @@ jobs:
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
sudo pip install lxml sudo pip install lxml
sudo pip install pyquery sudo pip install pyquery
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_8_13_patched/doxygen wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_9_6_patched/doxygen
sudo mv doxygen_exe /usr/bin/doxygen sudo mv doxygen_exe /usr/bin/doxygen
sudo chmod +x /usr/bin/doxygen sudo chmod +x /usr/bin/doxygen
git config --global user.email "cgal@geometryfactory.com" git config --global user.email "cgal@geometryfactory.com"

View File

@ -139,7 +139,7 @@ typedef unspecified_type Is_numerical_sensitive;
This type specifies the return type of the predicates provided This type specifies the return type of the predicates provided
by this traits. The type must be convertible to `bool` and by this traits. The type must be convertible to `bool` and
typically the type indeed maps to `bool`. However, there are also typically the type indeed maps to `bool`. However, there are also
cases such as interval arithmetic, in which it is `Uncertain<bool>` cases such as interval arithmetic, in which it is `CGAL::Uncertain<bool>`
or some similar type. or some similar type.
*/ */
@ -300,4 +300,3 @@ typedef unspecified_type Root_of;
/// @} /// @}
}; /* end AlgebraicStructureTraits */ }; /* end AlgebraicStructureTraits */

View File

@ -17,20 +17,23 @@
#ifndef CGAL_DRAW_POLYGON_SET_2_H #ifndef CGAL_DRAW_POLYGON_SET_2_H
#define CGAL_DRAW_POLYGON_SET_2_H #define CGAL_DRAW_POLYGON_SET_2_H
#include <CGAL/draw_polygon_with_holes_2.h> #include <CGAL/Qt/Basic_viewer_qt.h>
#ifdef DOXYGEN_RUNNING #ifdef DOXYGEN_RUNNING
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup PkgDrawPolygonSet2 * \ingroup PkgDrawPolygonSet2
*
opens a new window and draws `aps`, an instance of the `CGAL::Polygon_set_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. * opens a new window and draws `aps`, an instance of the `CGAL::Polygon_set_2`
Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`. * class. A call to this function is blocking, that is the program continues as
\tparam PS an instance of the `CGAL::Polygon_set_2` class. * soon as the user closes the window. This function requires `CGAL_Qt5`, and is
\param aps the polygon set to draw. * only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. Linking with
* the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add
*/ * the definition `CGAL_USE_BASIC_VIEWER`.
* \tparam PS an instance of the `CGAL::Polygon_set_2` class.
* \param aps the polygon set to draw.
*/
template<class PS> template<class PS>
void draw(const PS& aps); void draw(const PS& aps);
@ -38,50 +41,174 @@ void draw(const PS& aps);
#endif #endif
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Polygon_set_2.h> #include <CGAL/Polygon_set_2.h>
namespace CGAL namespace CGAL {
{
template<class PS2> template <typename PolygonSet_2>
class SimplePolygonSet2ViewerQt : class Polygon_set_2_basic_viewer_qt : public Basic_viewer_qt {
public SimplePolygonWithHoles2ViewerQt<typename PS2::Polygon_with_holes_2> using Base = Basic_viewer_qt;
{ using Ps = PolygonSet_2;
typedef SimplePolygonWithHoles2ViewerQt<typename PS2::Polygon_with_holes_2> Base; using Pwh = typename Ps::Polygon_with_holes_2;
using Pgn = typename Ps::Polygon_2;
using Pnt = typename Pgn::Point_2;
public: public:
SimplePolygonSet2ViewerQt(QWidget* parent, const PS2& aps2, Polygon_set_2_basic_viewer_qt(QWidget* parent, const Ps& ps,
const char* title="Basic Polygon_set_2 Viewer") : const char* title = "Basic Polygon_set_2 Viewer",
Base(parent, title) bool draw_unbounded = false,
bool draw_vertices = false) :
Base(parent, title, draw_vertices),
m_ps(ps),
m_draw_unbounded(draw_unbounded)
{ {
std::vector<typename PS2::Polygon_with_holes_2> polygons; if (ps.is_empty()) return;
aps2.polygons_with_holes(std::back_inserter(polygons));
for (typename PS2::Polygon_with_holes_2& P: polygons) { // mimic the computation of Camera::pixelGLRatio()
Base::compute_elements(P); auto bbox = bounding_box();
CGAL::qglviewer::Vec minv(bbox.xmin(), bbox.ymin(), 0);
CGAL::qglviewer::Vec maxv(bbox.xmax(), bbox.ymax(), 0);
auto diameter = (maxv - minv).norm();
m_pixel_ratio = diameter / m_height;
}
/*! Intercept the resizing of the window.
*/
virtual void resizeGL(int width, int height) {
CGAL::QGLViewer::resizeGL(width, height);
m_width = width;
m_height = height;
CGAL::qglviewer::Vec p;
auto ratio = camera()->pixelGLRatio(p);
if (ratio != m_pixel_ratio) {
m_pixel_ratio = ratio;
add_elements();
} }
} }
/*! Compute the elements of a polygon set.
*/
virtual void add_elements() {
clear();
std::vector<Pwh> pwhs;
m_ps.polygons_with_holes(std::back_inserter(pwhs));
for (const auto& pwh : pwhs) add_elements(pwh);
}
/*! Obtain the pixel ratio.
*/
double pixel_ratio() const { return m_pixel_ratio; }
/*! Compute the bounding box.
*/
CGAL::Bbox_2 bounding_box() {
Bbox_2 bbox;
std::vector<Pwh> pwhs;
m_ps.polygons_with_holes(std::back_inserter(pwhs));
for (const auto& pwh : pwhs) {
if (! pwh.is_unbounded()) {
bbox += pwh.outer_boundary().bbox();
continue;
}
for (auto it = pwh.holes_begin(); it != pwh.holes_end(); ++it)
bbox += it->bbox();
}
return bbox;
}
protected:
/*! Compute the elements of a polygon with holes.
*/
void add_elements(const Pwh& pwh) {
if (! m_draw_unbounded && pwh.outer_boundary().is_empty()) return;
CGAL::IO::Color c(75,160,255);
face_begin(c);
const Pnt* point_in_face;
if (pwh.outer_boundary().is_empty()) {
Pgn pgn;
pgn.push_back(Pnt(-m_width, -m_height));
pgn.push_back(Pnt(m_width, -m_height));
pgn.push_back(Pnt(m_width, m_height));
pgn.push_back(Pnt(-m_width, m_height));
compute_loop(pgn, false);
point_in_face = &(pgn.vertex(pgn.size()-1));
}
else {
const auto& outer_boundary = pwh.outer_boundary();
compute_loop(outer_boundary, false);
point_in_face = &(outer_boundary.vertex(outer_boundary.size()-1));
}
for (auto it = pwh.holes_begin(); it != pwh.holes_end(); ++it) {
compute_loop(*it, true);
add_point_in_face(*point_in_face);
}
face_end();
}
void compute_loop(const Pgn& p, bool hole) {
if (hole) add_point_in_face(p.vertex(p.size()-1));
auto prev = p.vertices_begin();
auto it = prev;
add_point(*it);
add_point_in_face(*it);
for (++it; it != p.vertices_end(); ++it) {
add_point(*it); // add vertex
add_segment(*prev, *it); // add segment with previous point
add_point_in_face(*it); // add point in face
prev = it;
}
// Add the last segment between the last point and the first one
add_segment(*prev, *(p.vertices_begin()));
}
private:
//! The window width in pixels.
int m_width = CGAL_BASIC_VIEWER_INIT_SIZE_X;
//! The window height in pixels.
int m_height = CGAL_BASIC_VIEWER_INIT_SIZE_Y;
//! The ratio between pixel and opengl units (in world coordinate system).
double m_pixel_ratio = 1;
//! The polygon set to draw.
const Ps& m_ps;
//! Indicates whether to draw unbounded polygons with holes.
bool m_draw_unbounded = false;
}; };
// Specialization of draw function. // Specialization of draw function.
template<class T, class C> template<class T, class C, class D>
void draw(const CGAL::Polygon_set_2<T, C>& aps2, void draw(const CGAL::Polygon_set_2<T, C, D>& ps,
const char* title="Polygon_set_2 Basic Viewer") const char* title = "Polygon_set_2 Basic Viewer",
bool draw_vertices = false,
bool draw_unbounded = false)
{ {
#if defined(CGAL_TEST_SUITE) #if defined(CGAL_TEST_SUITE)
bool cgal_test_suite=true; bool cgal_test_suite = true;
#else #else
bool cgal_test_suite=qEnvironmentVariableIsSet("CGAL_TEST_SUITE"); bool cgal_test_suite = qEnvironmentVariableIsSet("CGAL_TEST_SUITE");
#endif #endif
if (!cgal_test_suite) if (! cgal_test_suite) {
{ using Ps = CGAL::Polygon_set_2<T, C, D>;
using Viewer = Polygon_set_2_basic_viewer_qt<Ps>;
CGAL::Qt::init_ogl_context(4,3); CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc = 1;
const char* argv[2]={"t2_viewer", nullptr}; const char* argv[2] = {"t2_viewer", nullptr};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc, const_cast<char**>(argv));
SimplePolygonSet2ViewerQt<CGAL::Polygon_set_2<T, C> > Viewer mainwindow(app.activeWindow(), ps, title, draw_unbounded, draw_vertices);
mainwindow(app.activeWindow(), aps2, title); mainwindow.add_elements();
mainwindow.show(); mainwindow.show();
app.exec(); app.exec();
} }

14550
Data/data/points_3/ocean_r.xyz Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +0,0 @@
//<![CDATA[
MathJax.Hub.Config(
{
TeX: {
Macros: {
qprel: [ "{\\gtreqless}", 0],
qpx: [ "{\\mathbf{x}}", 0],
qpl: [ "{\\mathbf{l}}", 0],
qpu: [ "{\\mathbf{u}}", 0],
qpc: [ "{\\mathbf{c}}", 0],
qpb: [ "{\\mathbf{b}}", 0],
qpy: [ "{\\mathbf{y}}", 0],
qpw: [ "{\\mathbf{w}}", 0],
qplambda: [ "{\\mathbf{\\lambda}}", 0],
ssWpoint: [ "{\\bf #1}", 1],
ssWeight: [ "{w_{#1}}", 1],
dabs: [ "{\\parallel\\! #1 \\!\\parallel}", 1],
E: [ "{\\mathrm{E}}", 0],
A: [ "{\\mathrm{A}}", 0],
R: [ "{\\mathrm{R}}", 0],
N: [ "{\\mathrm{N}}", 0],
Q: [ "{\\mathrm{Q}}", 0],
Z: [ "{\\mathrm{Z}}", 0],
ccSum: [ "{\\sum_{#1}^{#2}{#3}}", 3],
ccProd: [ "{\\prod_{#1}^{#2}{#3}}", 3],
pyr: [ "{\\operatorname{Pyr}}", 0],
aff: [ "{\\operatorname{aff}}", 0],
Ac: [ "{\\cal A}", 0],
Sc: [ "{\\cal S}", 0],
}
}
}
);
//]]>

View File

@ -1,177 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="classlist" visible="no" title="Class and Concept List" intro="Here is the list of all concepts and classes of the CGAL Library. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="examples" visible="no" title="" intro=""/>
<!-- <tab type="user" url="@ref how_to_cite_cgal" title="Acknowledging CGAL"/> -->
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<detaileddescription title=" "/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,178 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="Reference Manual" intro=""/>
<tab type="pages" visible="yes" title="Pages" intro=""/>
<tab type="classlist" visible="yes" title="Class and Concept List" intro="Here is the list of all concepts and classes of this package. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<detaileddescription title="Definition"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<!-- Disable the naming of the public types group -->
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title="Definition"/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,386 +0,0 @@
body, table, div, p, dl {
font: Lucida Grande,sans-serif;
}
.textsc {
font-variant: small-caps;
}
#projectnumber {
display: none;
}
#back-nav {
border-bottom: 1px solid;
padding: 0.5em;
background-color: #FAF9FB;
}
#back-nav h2 {
display: inline;
}
#back-nav ul
{
display: inline;
padding: 0;
margin: 0;
}
#back-nav li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}
.tparams .paramname {
font-weight: bold;
vertical-align: top;
}
h1 {
font-size: 180%;
}
h2 {
font-size: 120%;
}
.icon-namespace {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #FF0000;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-class {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #0000FF;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-concept {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #67489A;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
h1.groupheader {
font-size: 150%;
}
/* enable this to make sections more alike */
/* h2.groupheader { */
/* border-bottom: none; */
/* color: black; */
/* font-size: 100%; */
/* font-weight: bold; */
/* margin-top: 1.75em; */
/* padding-bottom: 0; */
/* padding-top: 0; */
/* width: 100%; */
/* } */
a.el {
font-weight: normal;
}
.memproto a {
font-weight: bold;
}
.PkgSummary {
width: 60%;
}
.PkgShortInfo {
width: 20%;
}
.PkgSummary, .PkgShortInfo, .PkgImage, .PkgImage .image {
display:inline-block;
padding:5px;
vertical-align:middle;
}
.PkgAuthors {
font-style: italic;
}
.PkgDescription {
padding-top: 5px;
padding-bottom: 5px;
text-align: justify;
}
/* footnote support */
blockquote sup {
position: absolute;
right: 3px;
top: 3px;
}
.footnote ol li:hover {
text-decoration: underline;
}
a.footnoteBackref, a.footnoteLink {
text-decoration: none;
}
ol.footnotesList {
margin: 0;
font-size: 0.8em;
padding-top: 5px;
}
ol.footnotesList > li {
text-indent: -1.5em;
padding-left: 1.5em;
vertical-align: top;
}
.footnoteBackReferenceGroup {
padding-right: 0.5em;
}
.footnoteBackref {
padding-right: 0.25em;
}
span.footnoteContent {
}
span.footnoteContent > p:first-child, span.footnoteContent > div:first-child {
display: inline;
}
span.footnoteContent p, span.footnoteContent div {
text-indent: 0em;
}
/* footnote support end */
dl
{
padding: 0 0 0 0;
}
dl.section, dl.hasModels, dl.debugs, dl.models, dl.refines, dl.requires
{
margin-left: 0px;
padding-left: 0px;
}
dl.section dt a, dl.hasModels dt a, dl.debugs dt a,
dl.models dt a, dl.refines dt a, dl.advanced dt a,
dl.requires dt a, dl.todo dt a, dl.bug dt a, dl.test dt a
{
font-weight: bold;
color: black;
}
div.toc {
width: auto;
}
.ui-resizable-e {
background-repeat: repeat-y;
}
div.cgal_figure_caption {
text-align: center;
}
div.cgal_video_caption {
text-align: center;
}
div.groupText {
font-style: none;
}
#projectname
{
font: 200% Tahoma, Arial,sans-serif;
}
#titlearea {
background: white;
}
#MSearchResultsWindow {
z-index: 2;
}
dl.note, dl.warning, dl.attention,
dl.pre, dl.post, dl.invariant, dl.deprecated,
dl.todo, dl.test, dl.bug
{
margin-left:-7px;
padding-left: 3px;
}
div.CGALAdvanced
{
background: #eeb;
border: 1px solid #9e9e7d;
box-shadow: 0.5ex 0.5ex #ccc;
}
div.CGALDebug
{
background: #c8a8d0;
border: 1px solid #846f8a;
box-shadow: 0.5ex 0.5ex #777;
}
dl.deprecated
{
border-left: 4px solid;
border-color: #505050;
background: #d8c0a0;
border: 1px solid #94836e;
box-shadow: 0.5ex 0.5ex #aaa;
}
div.CGALAdvanced,
div.CGALDebug,
dl.deprecated
{
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
div.CGALModification
{
background: #f85858;
border: 1px solid #000000;
box-shadow: 0.5ex 0.5ex #777;
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
.Modification
{
background: #f85858;
border: 0px;
padding-top: 0ex;
padding-bottom: 0ex;
padding-left: 0ex;
padding-right: 0ex;
margin-bottom: 0ex;
}
/* The first div in CGALAdvanced sections is the "Advanced" header */
div.CGALAdvanced > div,
div.CGALDebug > div,
dl.deprecated > dt > b > a
{
font-style: italic;
font-weight: bold;
}
/* Everything else is noise and should stay in the normal font */
div.CGALAdvanced > div ~ div,
div.CGALDebug > div ~ div,
dl.deprecated > dt ~ dt
{
font-style: normal;
font-weight: normal;
}
/* More indentation for the text body */
div.CGALAdvanced > p,
div.CGALDebug > p,
dl.deprecated > dd
{
margin-left: 0;
margin-top: 1ex;
margin-bottom: 1ex;
padding-left: 1em;
padding-right: 1em;
}
/* Adjust the top and bottom margins of div.fragment */
div.fragment {
padding: 4px;
margin: 1em 4px 1em 4px;
}
/* Make summary smaller to avoid wrapping of classes and concepts */
div.summary
{
width: auto;
}
.collapsible {
background-color: white;
color: #602020;
cursor: pointer;
padding: 3px;
width: 100%;
border: none;
text-align: left;
outline: none;
font: 14px Roboto,sans-serif;
user-select: auto;
}
.active, .collapsible:hover {
background-color: white;
}
.collapsible:after {
content: '\25B6';
color: #7A93C5;
font-weight: bold;
float: left;
margin-left: -20px;
margin-right: 5px;
}
.active:after {
content: "\25BC";
}
.content {
padding: 0 18px;
color: black;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: white;
}

View File

@ -1,25 +0,0 @@
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<!-- The footer div is not part of the default but we require it to
move the footer to the bottom of the page. -->
<div id="footer">
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby
<a href="https://www.doxygen.nl/">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="https://www.doxygen.nl/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

View File

@ -1,128 +0,0 @@
function generate_autotoc() {
var toc = $("#autotoc").append('<ul></ul>');
if(toc.length > 0) { // an autotoc has been requested
toc = toc.find('ul');
var indices = new Array();
indices[0] = 0;
indices[1] = 0;
indices[2] = 0;
$("h1, h2, h3").each(function(i) {
var current = $(this);
var levelTag = current[0].tagName.charAt(1);
var cur_id = current.attr("id");
indices[levelTag-1]+=1;
var prefix=indices[0];
if (levelTag >1) prefix+="."+indices[1];
if (levelTag >2) prefix+="."+indices[2];
current.html(prefix + " " + current.html());
for(var l = levelTag; l < 3; ++l){
indices[l] = 0;
}
if(cur_id == undefined) {
current.attr('id', 'title' + i);
current.addClass('anchor');
toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
} else {
toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
}
});
}
}
// throw a stick at the modules array and hijack gotoNode
// for our own evil purposes
$(document).ready(function() {
if (typeof modules !== 'undefined') {
// modules has been loaded, that means we are inside the
// documentation of a package
NAVTREE[0][2][1][1] = modules[0][1];
NAVTREE[0][2][1][2] = modules[0][2];
// override gotoNode from navtree.js
gotoNode = function (o,subIndex,root,hash,relpath) {
var nti = navTreeSubIndices[subIndex][root+hash];
if (!nti)
{
nti = navTreeSubIndices[subIndex][root];
}
if(nti && (nti[0] === 1 && nti[0])) {
nti.splice(1, 1);
}
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
// set-up footnote generation
$("#doc-content").append('<ol id="autoFootnotes0" class="footnotesList"></ol>');
$("body").footnotes();
generate_autotoc();
});
/*
* A jQuery plugin by Brian Holt that will search the selected blocks for
* specially-defined footnote elements. If found, these elements will be
* moved to a footnotes section and links to and from the footnotes will
* be created.
*
* See http://www.planetholt.com/articles/jQuery-Footnotes
* for full documentation.
*
* By default, footnotes will be found in SPANs with the footnote class,
* and in BLOCKQUOTEs with a TITLE attribute.
*
* Thanks to CSSNewbies.com for the general idea, which I have enhanced
* and implemented with as a jQuery plugin.
*
* Copyright 2008-2009 Brian Holt.
* Licensed under the LGPL license. See
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
*
* Version 1.2.2
*/
(function(c){c.fn.footnotes=function(d){var e=c.extend({},c.fn.footnotes.defaults,d);return this.each(function(f){b("INFO: Building footnotes for "+(f+1)+"...",e.debugMode);c(e.footnotes,this).addClass(e.autoFootnoteClass);var h=(""===e.contentBlock)?c(this):c(e.contentBlock,this),g=e.orderedList?"<ol/>":"<ul/>";c("."+e.autoFootnoteClass).each(function(l){var t=-1,n=f+"-"+l,q=c(this),j,r,s,u,p,m,o,k;if(e.singleFootnoteDestination){j=c("#"+e.destination);if(0===j.length){b("INFO: No #autoFootnotes found; adding our own",e.debugMode);j=c(g).attr("id",e.destination).addClass("footnotesList").appendTo(h)}}else{j=c("#"+e.destination+f);if(0===j.length){b("INFO: No #autoFootnotes"+f+" found; adding our own for "+(f+1),e.debugMode);j=c(g).attr("id",e.destination+f).addClass("footnotesList").appendTo(h)}}q.removeClass(e.autoFootnoteClass);r=e.fnExtractFootnote(this);t=-1;n=f+"-"+l;j.find("li > .footnoteContent").each(function(i){var v=c(this);if(v.html()===r){t=i;s=c(v.parents("li").get(0));return false}});if(-1===t){u=c("<a/>").attr("href","#cite-text-"+n).attr("name","cite-ref-"+n).attr("id","cite-ref-"+n).attr("dir","ltr").attr("title",r).text("["+(j.find("li").length+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}p=c("<li/>").attr("id","cite-text-"+n);m=c("<span/>").addClass("footnoteBackReferenceGroup").appendTo(p);c("<span/>").addClass("footnoteContent").html(r).appendTo(p);u=c("<a/>").text("^").attr("href","#cite-ref-"+n).addClass("footnoteBackref").prependTo(m);j.append(p)}else{n=f+"-"+t;m=c(c("li > .footnoteBackReferenceGroup",j).get(t));o=m.find(".footnoteBackref");k=o.length;if(0===o.length){b("ERROR: $backRefs.length == 0, which should have prevented this code path",e.debugMode)}else{if(1===o.length){c("<sup/>").text("^ ").addClass("footnoteBackref").prependTo(m);o.html("<sup>a</sup>");++k}u=c("<a/>").attr("href","#"+s.attr("id")).attr("name","cite-ref-"+n+"-"+o.length).attr("id","cite-ref-"+n+"-"+o.length).attr("title",r).text("["+(t+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}u=c("<a/>").attr("href","#cite-ref-"+n+"-"+o.length).addClass("footnoteBackref");if(k>=26){b("WARN: multiple letter functionality is probably broken when more than 26 footnotes exist",e.debugMode)}u.prepend(String.fromCharCode((k)+96));c("<sup/>").appendTo(m).append(u)}}});b("INFO: Done building footnotes for "+(f+1),e.debugMode)})};c.fn.footnotes.version=function(){return"1.2.2"};c.fn.footnotes.defaults={footnotes:"blockquote[title],span.footnote,blockquote[cite]",prependTags:"blockquote",singleFootnoteDestination:false,destination:"autoFootnotes",contentBlock:".content",autoFootnoteClass:"autoFootnote",fnExtractFootnote:a,orderedList:true,debugMode:true};function b(e,d){if(d){if(window.console&&window.console.log){window.console.log(e)}}}function a(i){var j=c(i),e,f,h,g,d;if(j.is("span.footnote")){e=c(i).html();f=/^(?:(?:&nbsp;)|\s)*\(([\S\s]+)\)(?:(?:&nbsp;)|\s)*$/;h=e.match(f);if(h&&2===h.length){e=h[1]}j.empty()}else{if(j.is("blockquote[title]")){g=j.attr("cite");e=j.attr("title");if(""!==g){d=c("<a/>").attr("href",g);if(0===c(e).length){e=d.text(e)}else{e=d.text(g).wrap("<span/>").parent().append(": "+e);j.attr("title","")}}}else{if(j.is("blockquote[cite]")){g=j.attr("cite");e=c("<a/>").attr("href",g).text(g)}}}return e}})(jQuery);
(function(){
if(window.location.href.includes("doc.cgal.org")){
var url='https://doc.cgal.org/latest/Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
else
{
var url='../Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
})();
$(document).ready(function() {
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
});

View File

@ -1,73 +0,0 @@
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
$searchbox
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,132 +0,0 @@
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<!-- Manually include treeview and search to avoid bloat and to fix
paths to the directory Manual . -->
<!-- $.treeview -->
<!-- $.search -->
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/search/searchdata.js"></script>
<script type="text/javascript" src="$relpath^../Manual/search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../Manual/search/search.js"></script>
<!-- Manually done below. -->
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
$mathjax
<script src="$relpath^../Manual/hacks.js" type="text/javascript"></script>
<script src="$relpath^modules.js" type="text/javascript"></script>
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
<!-- In a package SEARCHENGINE = false, so we cannot use $searchbox
insertion. That's why we have to do it manually here. Notice
that we also take pngs from the Manual. -->
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../Manual/search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../Manual/search/close.png" alt=""/></a>
</span>
</div>
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$.searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!-- Code below is usually inserted by doxygen when SEARCHENGINE =
true. Notice that the path to the search directory is adjusted to
the top-level.-->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search');
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,108 +0,0 @@
(function() {
'use strict';
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 current_version_local = 'master'
var all_versions = [
'master',
'5.6-beta1',
'latest',
'5.5.2',
'5.4.4',
'5.3.2',
'5.2.4',
'5.1.5',
'5.0.4',
'4.14.3',
'4.13.2',
'4.12.2',
'4.11.3',
'4.10.2',
'4.9.1',
'4.8.2',
'4.7',
'4.6.3',
'4.5.2',
'4.4',
'4.3'
];
function build_select(current_version) {
if( current_version == 'master') {
let top_elt = document.getElementById("top");
let first_element = top_elt.childNodes[0];
let new_div = document.createElement("p");
new_div.innerHTML = '⚠️ This documentation corresponds to the <a style="font-familly: monospace;" href="https://github.com/CGAL/cgal/tree/master">master</a> development branch of CGAL. It might diverge from the official releases.';
new_div.style.cssText = "background-color: #ff9800; margin: 1ex auto 1ex 1em; padding: 1ex; border-radius: 1ex; display: inline-block;"
let OK = top_elt.insertBefore(new_div, first_element);
}
var buf = ['<select>'];
$.each(all_versions, function(id) {
var version = all_versions[id];
buf.push('<option value="' + version + '"');
if (version == current_version) {
buf.push(' selected="selected">' + version);
} else {
buf.push('>' + version);
}
buf.push('</option>');
});
if ( !all_versions.includes(current_version)) {
buf.push('<option value="' + current_version + '"');
buf.push(' selected="selected">' + current_version);
buf.push('</option>');
}
buf.push('</select>');
return buf.join('');
}
function patch_url(url, new_version) {
if(url.includes("doc.cgal.org")||url.includes("cgal.geometryfactory.com")){
return url.replace(url_re, 'doc.cgal.org/' + new_version + '/');
}
else{
return url.replace(url_local, 'https://doc.cgal.org/' + new_version + '/');
}
}
function on_switch() {
var selected = $(this).children('option:selected').attr('value');
var url = window.location.href,
new_url = patch_url(url, selected);
if (new_url != url) {
window.location.href = new_url;
}
}
$(document).ready(function() {
var motherNode=$("#back-nav ul")[0];
var node = document.createElement("LI");
var spanNode = document.createElement("SPAN");
var titleNode =document.createTextNode("CGAL Version: ");
var textNode = document.createTextNode("x.y");
spanNode.setAttribute("class", "version_menu");
spanNode.appendChild(textNode);
node.appendChild(titleNode);
node.appendChild(spanNode);
motherNode.insertBefore(node, motherNode.firstChild);
$("#back-nav").css("padding-top", "0").css("padding-bottom", "0");
var match = url_re.exec(window.location.href);
if (match) {
var version = match[2];
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
else {
match = url_local.exec(window.location.href);
if (match) {
var version = current_version_local;
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
}
});
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +0,0 @@
//<![CDATA[
MathJax.Hub.Config(
{
TeX: {
Macros: {
qprel: [ "{\\gtreqless}", 0],
qpx: [ "{\\mathbf{x}}", 0],
qpl: [ "{\\mathbf{l}}", 0],
qpu: [ "{\\mathbf{u}}", 0],
qpc: [ "{\\mathbf{c}}", 0],
qpb: [ "{\\mathbf{b}}", 0],
qpy: [ "{\\mathbf{y}}", 0],
qpw: [ "{\\mathbf{w}}", 0],
qplambda: [ "{\\mathbf{\\lambda}}", 0],
ssWpoint: [ "{\\bf #1}", 1],
ssWeight: [ "{w_{#1}}", 1],
dabs: [ "{\\parallel\\! #1 \\!\\parallel}", 1],
E: [ "{\\mathrm{E}}", 0],
A: [ "{\\mathrm{A}}", 0],
R: [ "{\\mathrm{R}}", 0],
N: [ "{\\mathrm{N}}", 0],
Q: [ "{\\mathrm{Q}}", 0],
Z: [ "{\\mathrm{Z}}", 0],
ccSum: [ "{\\sum_{#1}^{#2}{#3}}", 3],
ccProd: [ "{\\prod_{#1}^{#2}{#3}}", 3],
pyr: [ "{\\operatorname{Pyr}}", 0],
aff: [ "{\\operatorname{aff}}", 0],
Ac: [ "{\\cal A}", 0],
Sc: [ "{\\cal S}", 0],
}
}
}
);
//]]>

View File

@ -1,177 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="classlist" visible="no" title="Class and Concept List" intro="Here is the list of all concepts and classes of the CGAL Library. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="examples" visible="no" title="" intro=""/>
<!-- <tab type="user" url="@ref how_to_cite_cgal" title="Acknowledging CGAL"/> -->
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<detaileddescription title=" "/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,178 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="Reference Manual" intro=""/>
<tab type="pages" visible="yes" title="Pages" intro=""/>
<tab type="classlist" visible="yes" title="Class and Concept List" intro="Here is the list of all concepts and classes of this package. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<detaileddescription title="Definition"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<!-- Disable the naming of the public types group -->
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title="Definition"/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,386 +0,0 @@
body, table, div, p, dl {
font: Lucida Grande,sans-serif;
}
.textsc {
font-variant: small-caps;
}
#projectnumber {
display: none;
}
#back-nav {
border-bottom: 1px solid;
padding: 0.5em;
background-color: #FAF9FB;
}
#back-nav h2 {
display: inline;
}
#back-nav ul
{
display: inline;
padding: 0;
margin: 0;
}
#back-nav li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}
.tparams .paramname {
font-weight: bold;
vertical-align: top;
}
h1 {
font-size: 180%;
}
h2 {
font-size: 120%;
}
.icon-namespace {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #FF0000;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-class {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #0000FF;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-concept {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #67489A;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
h1.groupheader {
font-size: 150%;
}
/* enable this to make sections more alike */
/* h2.groupheader { */
/* border-bottom: none; */
/* color: black; */
/* font-size: 100%; */
/* font-weight: bold; */
/* margin-top: 1.75em; */
/* padding-bottom: 0; */
/* padding-top: 0; */
/* width: 100%; */
/* } */
a.el {
font-weight: normal;
}
.memproto a {
font-weight: bold;
}
.PkgSummary {
width: 60%;
}
.PkgShortInfo {
width: 20%;
}
.PkgSummary, .PkgShortInfo, .PkgImage, .PkgImage .image {
display:inline-block;
padding:5px;
vertical-align:middle;
}
.PkgAuthors {
font-style: italic;
}
.PkgDescription {
padding-top: 5px;
padding-bottom: 5px;
text-align: justify;
}
/* footnote support */
blockquote sup {
position: absolute;
right: 3px;
top: 3px;
}
.footnote ol li:hover {
text-decoration: underline;
}
a.footnoteBackref, a.footnoteLink {
text-decoration: none;
}
ol.footnotesList {
margin: 0;
font-size: 0.8em;
padding-top: 5px;
}
ol.footnotesList > li {
text-indent: -1.5em;
padding-left: 1.5em;
vertical-align: top;
}
.footnoteBackReferenceGroup {
padding-right: 0.5em;
}
.footnoteBackref {
padding-right: 0.25em;
}
span.footnoteContent {
}
span.footnoteContent > p:first-child, span.footnoteContent > div:first-child {
display: inline;
}
span.footnoteContent p, span.footnoteContent div {
text-indent: 0em;
}
/* footnote support end */
dl
{
padding: 0 0 0 0;
}
dl.section, dl.hasModels, dl.debugs, dl.models, dl.refines, dl.requires
{
margin-left: 0px;
padding-left: 0px;
}
dl.section dt a, dl.hasModels dt a, dl.debugs dt a,
dl.models dt a, dl.refines dt a, dl.advanced dt a,
dl.requires dt a, dl.todo dt a, dl.bug dt a, dl.test dt a
{
font-weight: bold;
color: black;
}
div.toc {
width: auto;
}
.ui-resizable-e {
background-repeat: repeat-y;
}
div.cgal_figure_caption {
text-align: center;
}
div.cgal_video_caption {
text-align: center;
}
div.groupText {
font-style: none;
}
#projectname
{
font: 200% Tahoma, Arial,sans-serif;
}
#titlearea {
background: white;
}
#MSearchResultsWindow {
z-index: 2;
}
dl.note, dl.warning, dl.attention,
dl.pre, dl.post, dl.invariant, dl.deprecated,
dl.todo, dl.test, dl.bug
{
margin-left:-7px;
padding-left: 3px;
}
div.CGALAdvanced
{
background: #eeb;
border: 1px solid #9e9e7d;
box-shadow: 0.5ex 0.5ex #ccc;
}
div.CGALDebug
{
background: #c8a8d0;
border: 1px solid #846f8a;
box-shadow: 0.5ex 0.5ex #777;
}
dl.deprecated
{
border-left: 4px solid;
border-color: #505050;
background: #d8c0a0;
border: 1px solid #94836e;
box-shadow: 0.5ex 0.5ex #aaa;
}
div.CGALAdvanced,
div.CGALDebug,
dl.deprecated
{
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
div.CGALModification
{
background: #f85858;
border: 1px solid #000000;
box-shadow: 0.5ex 0.5ex #777;
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
.Modification
{
background: #f85858;
border: 0px;
padding-top: 0ex;
padding-bottom: 0ex;
padding-left: 0ex;
padding-right: 0ex;
margin-bottom: 0ex;
}
/* The first div in CGALAdvanced sections is the "Advanced" header */
div.CGALAdvanced > div,
div.CGALDebug > div,
dl.deprecated > dt > b > a
{
font-style: italic;
font-weight: bold;
}
/* Everything else is noise and should stay in the normal font */
div.CGALAdvanced > div ~ div,
div.CGALDebug > div ~ div,
dl.deprecated > dt ~ dt
{
font-style: normal;
font-weight: normal;
}
/* More indentation for the text body */
div.CGALAdvanced > p,
div.CGALDebug > p,
dl.deprecated > dd
{
margin-left: 0;
margin-top: 1ex;
margin-bottom: 1ex;
padding-left: 1em;
padding-right: 1em;
}
/* Adjust the top and bottom margins of div.fragment */
div.fragment {
padding: 4px;
margin: 1em 4px 1em 4px;
}
/* Make summary smaller to avoid wrapping of classes and concepts */
div.summary
{
width: auto;
}
.collapsible {
background-color: white;
color: #602020;
cursor: pointer;
padding: 3px;
width: 100%;
border: none;
text-align: left;
outline: none;
font: 14px Roboto,sans-serif;
user-select: auto;
}
.active, .collapsible:hover {
background-color: white;
}
.collapsible:after {
content: '\25B6';
color: #7A93C5;
font-weight: bold;
float: left;
margin-left: -20px;
margin-right: 5px;
}
.active:after {
content: "\25BC";
}
.content {
padding: 0 18px;
color: black;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: white;
}

View File

@ -1,21 +0,0 @@
<!-- HTML footer for doxygen 1.8.20-->
<!-- start footer part -->
<!-- The footer div is not part of the default but we require it to
move the footer to the bottom of the page. -->
<div id="footer">
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby <a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby&#160;<a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

View File

@ -1,128 +0,0 @@
function generate_autotoc() {
var toc = $("#autotoc").append('<ul></ul>');
if(toc.length > 0) { // an autotoc has been requested
toc = toc.find('ul');
var indices = new Array();
indices[0] = 0;
indices[1] = 0;
indices[2] = 0;
$("h1, h2, h3").each(function(i) {
var current = $(this);
var levelTag = current[0].tagName.charAt(1);
var cur_id = current.attr("id");
indices[levelTag-1]+=1;
var prefix=indices[0];
if (levelTag >1) prefix+="."+indices[1];
if (levelTag >2) prefix+="."+indices[2];
current.html(prefix + " " + current.html());
for(var l = levelTag; l < 3; ++l){
indices[l] = 0;
}
if(cur_id == undefined) {
current.attr('id', 'title' + i);
current.addClass('anchor');
toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
} else {
toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
}
});
}
}
// throw a stick at the modules array and hijack gotoNode
// for our own evil purposes
$(document).ready(function() {
if (typeof modules !== 'undefined') {
// modules has been loaded, that means we are inside the
// documentation of a package
NAVTREE[0][2][1][1] = modules[0][1];
NAVTREE[0][2][1][2] = modules[0][2];
// override gotoNode from navtree.js
gotoNode = function (o,subIndex,root,hash,relpath) {
var nti = navTreeSubIndices[subIndex][root+hash];
if (!nti)
{
nti = navTreeSubIndices[subIndex][root];
}
if(nti && (nti[0] === 1 && nti[0])) {
nti.splice(1, 1);
}
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
// set-up footnote generation
$("#doc-content").append('<ol id="autoFootnotes0" class="footnotesList"></ol>');
$("body").footnotes();
generate_autotoc();
});
/*
* A jQuery plugin by Brian Holt that will search the selected blocks for
* specially-defined footnote elements. If found, these elements will be
* moved to a footnotes section and links to and from the footnotes will
* be created.
*
* See http://www.planetholt.com/articles/jQuery-Footnotes
* for full documentation.
*
* By default, footnotes will be found in SPANs with the footnote class,
* and in BLOCKQUOTEs with a TITLE attribute.
*
* Thanks to CSSNewbies.com for the general idea, which I have enhanced
* and implemented with as a jQuery plugin.
*
* Copyright 2008-2009 Brian Holt.
* Licensed under the LGPL license. See
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
*
* Version 1.2.2
*/
(function(c){c.fn.footnotes=function(d){var e=c.extend({},c.fn.footnotes.defaults,d);return this.each(function(f){b("INFO: Building footnotes for "+(f+1)+"...",e.debugMode);c(e.footnotes,this).addClass(e.autoFootnoteClass);var h=(""===e.contentBlock)?c(this):c(e.contentBlock,this),g=e.orderedList?"<ol/>":"<ul/>";c("."+e.autoFootnoteClass).each(function(l){var t=-1,n=f+"-"+l,q=c(this),j,r,s,u,p,m,o,k;if(e.singleFootnoteDestination){j=c("#"+e.destination);if(0===j.length){b("INFO: No #autoFootnotes found; adding our own",e.debugMode);j=c(g).attr("id",e.destination).addClass("footnotesList").appendTo(h)}}else{j=c("#"+e.destination+f);if(0===j.length){b("INFO: No #autoFootnotes"+f+" found; adding our own for "+(f+1),e.debugMode);j=c(g).attr("id",e.destination+f).addClass("footnotesList").appendTo(h)}}q.removeClass(e.autoFootnoteClass);r=e.fnExtractFootnote(this);t=-1;n=f+"-"+l;j.find("li > .footnoteContent").each(function(i){var v=c(this);if(v.html()===r){t=i;s=c(v.parents("li").get(0));return false}});if(-1===t){u=c("<a/>").attr("href","#cite-text-"+n).attr("name","cite-ref-"+n).attr("id","cite-ref-"+n).attr("dir","ltr").attr("title",r).text("["+(j.find("li").length+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}p=c("<li/>").attr("id","cite-text-"+n);m=c("<span/>").addClass("footnoteBackReferenceGroup").appendTo(p);c("<span/>").addClass("footnoteContent").html(r).appendTo(p);u=c("<a/>").text("^").attr("href","#cite-ref-"+n).addClass("footnoteBackref").prependTo(m);j.append(p)}else{n=f+"-"+t;m=c(c("li > .footnoteBackReferenceGroup",j).get(t));o=m.find(".footnoteBackref");k=o.length;if(0===o.length){b("ERROR: $backRefs.length == 0, which should have prevented this code path",e.debugMode)}else{if(1===o.length){c("<sup/>").text("^ ").addClass("footnoteBackref").prependTo(m);o.html("<sup>a</sup>");++k}u=c("<a/>").attr("href","#"+s.attr("id")).attr("name","cite-ref-"+n+"-"+o.length).attr("id","cite-ref-"+n+"-"+o.length).attr("title",r).text("["+(t+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}u=c("<a/>").attr("href","#cite-ref-"+n+"-"+o.length).addClass("footnoteBackref");if(k>=26){b("WARN: multiple letter functionality is probably broken when more than 26 footnotes exist",e.debugMode)}u.prepend(String.fromCharCode((k)+96));c("<sup/>").appendTo(m).append(u)}}});b("INFO: Done building footnotes for "+(f+1),e.debugMode)})};c.fn.footnotes.version=function(){return"1.2.2"};c.fn.footnotes.defaults={footnotes:"blockquote[title],span.footnote,blockquote[cite]",prependTags:"blockquote",singleFootnoteDestination:false,destination:"autoFootnotes",contentBlock:".content",autoFootnoteClass:"autoFootnote",fnExtractFootnote:a,orderedList:true,debugMode:true};function b(e,d){if(d){if(window.console&&window.console.log){window.console.log(e)}}}function a(i){var j=c(i),e,f,h,g,d;if(j.is("span.footnote")){e=c(i).html();f=/^(?:(?:&nbsp;)|\s)*\(([\S\s]+)\)(?:(?:&nbsp;)|\s)*$/;h=e.match(f);if(h&&2===h.length){e=h[1]}j.empty()}else{if(j.is("blockquote[title]")){g=j.attr("cite");e=j.attr("title");if(""!==g){d=c("<a/>").attr("href",g);if(0===c(e).length){e=d.text(e)}else{e=d.text(g).wrap("<span/>").parent().append(": "+e);j.attr("title","")}}}else{if(j.is("blockquote[cite]")){g=j.attr("cite");e=c("<a/>").attr("href",g).text(g)}}}return e}})(jQuery);
(function(){
if(window.location.href.includes("doc.cgal.org")){
var url='https://doc.cgal.org/latest/Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
else
{
var url='../Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
})();
$(document).ready(function() {
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
});

View File

@ -1,73 +0,0 @@
<!-- HTML header for doxygen 1.8.20-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
$searchbox
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,132 +0,0 @@
<!-- HTML header for doxygen 1.8.20-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath^../Manual/hacks.js" type="text/javascript"></script>
<!-- Manually include treeview and search to avoid bloat and to fix
paths to the directory Manual . -->
<!-- $.treeview -->
<!-- $.search -->
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/search/searchdata.js"></script>
<script type="text/javascript" src="$relpath^../Manual/search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../Manual/search/search.js"></script>
<!-- Manually done below. -->
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
$mathjax
<script src="$relpath^modules.js" type="text/javascript"></script>
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
<!-- In a package SEARCHENGINE = false, so we cannot use $searchbox
insertion. That's why we have to do it manually here. Notice
that we also take pngs from the Manual. -->
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../Manual/search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../Manual/search/close.svg" alt=""/></a>
</span>
</div>
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$.searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!-- Code below is usually inserted by doxygen when SEARCHENGINE =
true. Notice that the path to the search directory is adjusted to
the top-level.-->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search');
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,108 +0,0 @@
(function() {
'use strict';
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 current_version_local = 'master'
var all_versions = [
'master',
'5.6-beta1',
'latest',
'5.5.2',
'5.4.4',
'5.3.2',
'5.2.4',
'5.1.5',
'5.0.4',
'4.14.3',
'4.13.2',
'4.12.2',
'4.11.3',
'4.10.2',
'4.9.1',
'4.8.2',
'4.7',
'4.6.3',
'4.5.2',
'4.4',
'4.3'
];
function build_select(current_version) {
if( current_version == 'master') {
let top_elt = document.getElementById("top");
let first_element = top_elt.childNodes[0];
let new_div = document.createElement("p");
new_div.innerHTML = '⚠️ This documentation corresponds to the <a style="font-familly: monospace;" href="https://github.com/CGAL/cgal/tree/master">master</a> development branch of CGAL. It might diverge from the official releases.';
new_div.style.cssText = "background-color: #ff9800; margin: 1ex auto 1ex 1em; padding: 1ex; border-radius: 1ex; display: inline-block;"
let OK = top_elt.insertBefore(new_div, first_element);
}
var buf = ['<select>'];
$.each(all_versions, function(id) {
var version = all_versions[id];
buf.push('<option value="' + version + '"');
if (version == current_version) {
buf.push(' selected="selected">' + version);
} else {
buf.push('>' + version);
}
buf.push('</option>');
});
if ( !all_versions.includes(current_version)) {
buf.push('<option value="' + current_version + '"');
buf.push(' selected="selected">' + current_version);
buf.push('</option>');
}
buf.push('</select>');
return buf.join('');
}
function patch_url(url, new_version) {
if(url.includes("doc.cgal.org")||url.includes("cgal.geometryfactory.com")){
return url.replace(url_re, 'doc.cgal.org/' + new_version + '/');
}
else{
return url.replace(url_local, 'https://doc.cgal.org/' + new_version + '/');
}
}
function on_switch() {
var selected = $(this).children('option:selected').attr('value');
var url = window.location.href,
new_url = patch_url(url, selected);
if (new_url != url) {
window.location.href = new_url;
}
}
$(document).ready(function() {
var motherNode=$("#back-nav ul")[0];
var node = document.createElement("LI");
var spanNode = document.createElement("SPAN");
var titleNode =document.createTextNode("CGAL Version: ");
var textNode = document.createTextNode("x.y");
spanNode.setAttribute("class", "version_menu");
spanNode.appendChild(textNode);
node.appendChild(titleNode);
node.appendChild(spanNode);
motherNode.insertBefore(node, motherNode.firstChild);
$("#back-nav").css("padding-top", "0").css("padding-bottom", "0");
var match = url_re.exec(window.location.href);
if (match) {
var version = match[2];
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
else {
match = url_local.exec(window.location.href);
if (match) {
var version = current_version_local;
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
}
});
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +0,0 @@
//<![CDATA[
MathJax.Hub.Config(
{
TeX: {
Macros: {
qprel: [ "{\\gtreqless}", 0],
qpx: [ "{\\mathbf{x}}", 0],
qpl: [ "{\\mathbf{l}}", 0],
qpu: [ "{\\mathbf{u}}", 0],
qpc: [ "{\\mathbf{c}}", 0],
qpb: [ "{\\mathbf{b}}", 0],
qpy: [ "{\\mathbf{y}}", 0],
qpw: [ "{\\mathbf{w}}", 0],
qplambda: [ "{\\mathbf{\\lambda}}", 0],
ssWpoint: [ "{\\bf #1}", 1],
ssWeight: [ "{w_{#1}}", 1],
dabs: [ "{\\parallel\\! #1 \\!\\parallel}", 1],
E: [ "{\\mathrm{E}}", 0],
A: [ "{\\mathrm{A}}", 0],
R: [ "{\\mathrm{R}}", 0],
N: [ "{\\mathrm{N}}", 0],
Q: [ "{\\mathrm{Q}}", 0],
Z: [ "{\\mathrm{Z}}", 0],
ccSum: [ "{\\sum_{#1}^{#2}{#3}}", 3],
ccProd: [ "{\\prod_{#1}^{#2}{#3}}", 3],
pyr: [ "{\\operatorname{Pyr}}", 0],
aff: [ "{\\operatorname{aff}}", 0],
Ac: [ "{\\cal A}", 0],
Sc: [ "{\\cal S}", 0],
}
}
}
);
//]]>

View File

@ -1,177 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="classlist" visible="no" title="Class and Concept List" intro="Here is the list of all concepts and classes of the CGAL Library. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="examples" visible="no" title="" intro=""/>
<!-- <tab type="user" url="@ref how_to_cite_cgal" title="Acknowledging CGAL"/> -->
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<detaileddescription title=" "/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,178 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="Reference Manual" intro=""/>
<tab type="pages" visible="yes" title="Pages" intro=""/>
<tab type="classlist" visible="yes" title="Class and Concept List" intro="Here is the list of all concepts and classes of this package. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<detaileddescription title="Definition"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<!-- Disable the naming of the public types group -->
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title="Definition"/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,377 +0,0 @@
body, table, div, p, dl {
font: Lucida Grande,sans-serif;
}
.textsc {
font-variant: small-caps;
}
#projectnumber {
display: none;
}
#back-nav {
border-bottom: 1px solid;
padding: 0.5em;
background-color: #FAF9FB;
}
#back-nav h2 {
display: inline;
}
#back-nav ul
{
display: inline;
padding: 0;
margin: 0;
}
#back-nav li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}
.tparams .paramname {
font-weight: bold;
vertical-align: top;
}
h1 {
font-size: 180%;
}
h2 {
font-size: 120%;
}
h1.groupheader {
font-size: 150%;
}
/* enable this to make sections more alike */
/* h2.groupheader { */
/* border-bottom: none; */
/* color: black; */
/* font-size: 100%; */
/* font-weight: bold; */
/* margin-top: 1.75em; */
/* padding-bottom: 0; */
/* padding-top: 0; */
/* width: 100%; */
/* } */
a.el {
font-weight: normal;
}
.memproto a {
font-weight: bold;
}
.PkgSummary {
width: 60%;
}
.PkgShortInfo {
width: 20%;
}
.PkgSummary, .PkgShortInfo, .PkgImage, .PkgImage .image {
display:inline-block;
padding:5px;
vertical-align:middle;
}
.PkgAuthors {
font-style: italic;
}
.PkgDescription {
padding-top: 5px;
padding-bottom: 5px;
text-align: justify;
}
/* footnote support */
blockquote sup {
position: absolute;
right: 3px;
top: 3px;
}
.footnote ol li:hover {
text-decoration: underline;
}
a.footnoteBackref, a.footnoteLink {
text-decoration: none;
}
ol.footnotesList {
margin: 0;
font-size: 0.8em;
padding-top: 5px;
}
ol.footnotesList > li {
text-indent: -1.5em;
padding-left: 1.5em;
vertical-align: top;
}
.footnoteBackReferenceGroup {
padding-right: 0.5em;
}
.footnoteBackref {
padding-right: 0.25em;
}
span.footnoteContent {
}
span.footnoteContent > p:first-child, span.footnoteContent > div:first-child {
display: inline;
}
span.footnoteContent p, span.footnoteContent div {
text-indent: 0em;
}
/* footnote support end */
dl
{
padding: 0 0 0 0;
}
dl.section, dl.hasModels, dl.debugs, dl.models, dl.refines, dl.requires
{
margin-left: 0px;
padding-left: 0px;
}
dl.section dt a, dl.hasModels dt a, dl.debugs dt a,
dl.models dt a, dl.refines dt a, dl.advanced dt a,
dl.requires dt a, dl.todo dt a, dl.bug dt a, dl.test dt a
{
font-weight: bold;
color: black;
}
div.cgal_figure_caption {
text-align: center;
}
div.cgal_video_caption {
text-align: center;
}
div.groupText {
font-style: none;
}
#projectname
{
font: 200% Tahoma, Arial,sans-serif;
}
/* fix the back button by hacking the layout */
/* this becomes unnecessary with the latest doxygen, r834 */
#top {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1;
}
#footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
}
#doc-content {
/* this is the header/footer padding */
/* so the content does not hide behind them */
padding-top: 91px;
padding-bottom: 32px;
overflow: visible;
}
#side-nav {
position: fixed;
}
#titlearea {
background: white;
}
/* this adjusts the anchors inside the doc-content div by the height of */
/* the header. this is necessary because anchors are not adjusted by the */
/* height of the position: fixed top div. */
#doc-content a.anchor {
position: absolute;
padding-top: 91px;
margin-top: -91px;
}
#doc-content .anchor {
padding-top: 91px;
margin-top: -91px;
}
#MSearchResultsWindow {
z-index: 2;
}
dl.note, dl.warning, dl.attention,
dl.pre, dl.post, dl.invariant, dl.deprecated,
dl.todo, dl.test, dl.bug
{
margin-left:-7px;
padding-left: 3px;
}
div.CGALAdvanced
{
background: #eeb;
border: 1px solid #9e9e7d;
box-shadow: 0.5ex 0.5ex #ccc;
}
div.CGALDebug
{
background: #c8a8d0;
border: 1px solid #846f8a;
box-shadow: 0.5ex 0.5ex #777;
}
dl.deprecated
{
border-left: 4px solid;
border-color: #505050;
background: #d8c0a0;
border: 1px solid #94836e;
box-shadow: 0.5ex 0.5ex #aaa;
}
div.CGALAdvanced,
div.CGALDebug,
dl.deprecated
{
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
div.CGALModification
{
background: #f85858;
border: 1px solid #000000;
box-shadow: 0.5ex 0.5ex #777;
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
.Modification
{
background: #f85858;
border: 0px;
padding-top: 0ex;
padding-bottom: 0ex;
padding-left: 0ex;
padding-right: 0ex;
margin-bottom: 0ex;
}
/* The first div in CGALAdvanced sections is the "Advanced" header */
div.CGALAdvanced > div,
div.CGALDebug > div,
dl.deprecated > dt > b > a
{
font-style: italic;
font-weight: bold;
}
/* Everything else is noise and should stay in the normal font */
div.CGALAdvanced > div ~ div,
div.CGALDebug > div ~ div,
dl.deprecated > dt ~ dt
{
font-style: normal;
font-weight: normal;
}
/* More indentation for the text body */
div.CGALAdvanced > p,
div.CGALDebug > p,
dl.deprecated > dd
{
margin-left: 0;
margin-top: 1ex;
margin-bottom: 1ex;
padding-left: 1em;
padding-right: 1em;
}
/* Adjust the top and bottom margins of div.fragment */
div.fragment {
padding: 4px;
margin: 1em 4px 1em 4px;
}
/* Make summary smaller to avoid wrapping of classes and concepts */
div.summary
{
width: auto;
}
.collapsible {
background-color: white;
color: #602020;
cursor: pointer;
padding: 3px;
width: 100%;
border: none;
text-align: left;
outline: none;
font: 14px Roboto,sans-serif;
user-select: auto;
}
.active, .collapsible:hover {
background-color: white;
}
.collapsible:after {
content: '\25B6';
color: #7A93C5;
font-weight: bold;
float: left;
margin-left: -20px;
margin-right: 5px;
}
.active:after {
content: "\25BC";
}
.content {
padding: 0 18px;
color: black;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: white;
}

View File

@ -1,22 +0,0 @@
<!-- start footer part -->
<div id="footer">
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby
<a href="https://www.doxygen.nl/index.html">
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="https://www.doxygen.nl/index.html">
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/>
</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

View File

@ -1,124 +0,0 @@
function generate_autotoc() {
var toc = $("#autotoc").append('<ul></ul>');
if(toc.length > 0) { // an autotoc has been requested
toc = toc.find('ul');
var indices = new Array();
indices[0] = 0;
indices[1] = 0;
indices[2] = 0;
$("h1, h2, h3").each(function(i) {
var current = $(this);
var levelTag = current[0].tagName.charAt(1);
var cur_id = current.attr("id");
indices[levelTag-1]+=1;
var prefix=indices[0];
if (levelTag >1) prefix+="."+indices[1];
if (levelTag >2) prefix+="."+indices[2];
current.html(prefix + " " + current.html());
for(var l = levelTag; l < 3; ++l){
indices[l] = 0;
}
if(cur_id == undefined) {
current.attr('id', 'title' + i);
current.addClass('anchor');
toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
} else {
toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
}
});
}
}
// throw a stick at the modules array and hijack gotoNode
// for our own evil purposes
$(document).ready(function() {
if (typeof modules !== 'undefined') {
// modules has been loaded, that means we are inside the
// documentation of a package
NAVTREE[0][2][1][1] = modules[0][1];
NAVTREE[0][2][1][2] = modules[0][2];
// override gotoNode from navtree.js
gotoNode = function (o,subIndex,root,hash,relpath) {
var nti = navTreeSubIndices[subIndex][root+hash];
if(nti && (nti[0] === 1 && nti[0])) {
nti.splice(1, 1);
}
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
// set-up footnote generation
$("#doc-content").append('<ol id="autoFootnotes0" class="footnotesList"></ol>');
$("body").footnotes();
generate_autotoc();
});
/*
* A jQuery plugin by Brian Holt that will search the selected blocks for
* specially-defined footnote elements. If found, these elements will be
* moved to a footnotes section and links to and from the footnotes will
* be created.
*
* See http://www.planetholt.com/articles/jQuery-Footnotes
* for full documentation.
*
* By default, footnotes will be found in SPANs with the footnote class,
* and in BLOCKQUOTEs with a TITLE attribute.
*
* Thanks to CSSNewbies.com for the general idea, which I have enhanced
* and implemented with as a jQuery plugin.
*
* Copyright 2008-2009 Brian Holt.
* Licensed under the LGPL license. See
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
*
* Version 1.2.2
*/
(function(c){c.fn.footnotes=function(d){var e=c.extend({},c.fn.footnotes.defaults,d);return this.each(function(f){b("INFO: Building footnotes for "+(f+1)+"...",e.debugMode);c(e.footnotes,this).addClass(e.autoFootnoteClass);var h=(""===e.contentBlock)?c(this):c(e.contentBlock,this),g=e.orderedList?"<ol/>":"<ul/>";c("."+e.autoFootnoteClass).each(function(l){var t=-1,n=f+"-"+l,q=c(this),j,r,s,u,p,m,o,k;if(e.singleFootnoteDestination){j=c("#"+e.destination);if(0===j.length){b("INFO: No #autoFootnotes found; adding our own",e.debugMode);j=c(g).attr("id",e.destination).addClass("footnotesList").appendTo(h)}}else{j=c("#"+e.destination+f);if(0===j.length){b("INFO: No #autoFootnotes"+f+" found; adding our own for "+(f+1),e.debugMode);j=c(g).attr("id",e.destination+f).addClass("footnotesList").appendTo(h)}}q.removeClass(e.autoFootnoteClass);r=e.fnExtractFootnote(this);t=-1;n=f+"-"+l;j.find("li > .footnoteContent").each(function(i){var v=c(this);if(v.html()===r){t=i;s=c(v.parents("li").get(0));return false}});if(-1===t){u=c("<a/>").attr("href","#cite-text-"+n).attr("name","cite-ref-"+n).attr("id","cite-ref-"+n).attr("dir","ltr").attr("title",r).text("["+(j.find("li").length+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}p=c("<li/>").attr("id","cite-text-"+n);m=c("<span/>").addClass("footnoteBackReferenceGroup").appendTo(p);c("<span/>").addClass("footnoteContent").html(r).appendTo(p);u=c("<a/>").text("^").attr("href","#cite-ref-"+n).addClass("footnoteBackref").prependTo(m);j.append(p)}else{n=f+"-"+t;m=c(c("li > .footnoteBackReferenceGroup",j).get(t));o=m.find(".footnoteBackref");k=o.length;if(0===o.length){b("ERROR: $backRefs.length == 0, which should have prevented this code path",e.debugMode)}else{if(1===o.length){c("<sup/>").text("^ ").addClass("footnoteBackref").prependTo(m);o.html("<sup>a</sup>");++k}u=c("<a/>").attr("href","#"+s.attr("id")).attr("name","cite-ref-"+n+"-"+o.length).attr("id","cite-ref-"+n+"-"+o.length).attr("title",r).text("["+(t+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}u=c("<a/>").attr("href","#cite-ref-"+n+"-"+o.length).addClass("footnoteBackref");if(k>=26){b("WARN: multiple letter functionality is probably broken when more than 26 footnotes exist",e.debugMode)}u.prepend(String.fromCharCode((k)+96));c("<sup/>").appendTo(m).append(u)}}});b("INFO: Done building footnotes for "+(f+1),e.debugMode)})};c.fn.footnotes.version=function(){return"1.2.2"};c.fn.footnotes.defaults={footnotes:"blockquote[title],span.footnote,blockquote[cite]",prependTags:"blockquote",singleFootnoteDestination:false,destination:"autoFootnotes",contentBlock:".content",autoFootnoteClass:"autoFootnote",fnExtractFootnote:a,orderedList:true,debugMode:true};function b(e,d){if(d){if(window.console&&window.console.log){window.console.log(e)}}}function a(i){var j=c(i),e,f,h,g,d;if(j.is("span.footnote")){e=c(i).html();f=/^(?:(?:&nbsp;)|\s)*\(([\S\s]+)\)(?:(?:&nbsp;)|\s)*$/;h=e.match(f);if(h&&2===h.length){e=h[1]}j.empty()}else{if(j.is("blockquote[title]")){g=j.attr("cite");e=j.attr("title");if(""!==g){d=c("<a/>").attr("href",g);if(0===c(e).length){e=d.text(e)}else{e=d.text(g).wrap("<span/>").parent().append(": "+e);j.attr("title","")}}}else{if(j.is("blockquote[cite]")){g=j.attr("cite");e=c("<a/>").attr("href",g).text(g)}}}return e}})(jQuery);
(function(){
if(window.location.href.includes("doc.cgal.org")){
var url='https://doc.cgal.org/latest/Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
else
{
var url='../Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
})();
$(document).ready(function() {
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
});

View File

@ -1,107 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<link href="$relpath$../Manual/stylesheet.css" rel="stylesheet" type="text/css" />
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="$relpath$../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath$../Manual/dynsections.js"></script>
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
resizeHeight = function() {
var headerHeight = header.height();
var footerHeight = footer.height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
navtree.css({height:windowHeight + "px"});
sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
}
$(document).ready(initResizable);
</script>
$search
$mathjax
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
<!--BEGIN DISABLE_INDEX-->
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span>
<span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()">
<img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/>
</a>
</span>
</div>
<!--END DISABLE_INDEX-->
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath$$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
<!-- Manual insertion of the search function. Notice that the path to
the search directory is adjusted to the top-level. -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>

View File

@ -1,122 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<link href="$relpath$../Manual/stylesheet.css" rel="stylesheet" type="text/css" />
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="$relpath$../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath$../Manual/dynsections.js"></script>
<script type="text/javascript" src="$relpath$../Manual/resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
resizeHeight = function() {
var headerHeight = header.height();
var footerHeight = footer.height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
navtree.css({height:windowHeight + "px"});
sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
}
$(document).ready(initResizable);
</script>
<link href="../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../Manual/search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<!-- don't use the doxygen include style for mathjax to specify config parameters -->
<!-- to use the mathjax cdn use -->
<!-- <script -->
<!-- type="text/javascript" -->
<!-- src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> -->
<!-- </script> -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
$mathjax
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
<script src="$relpath$modules.js" type="text/javascript"></script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
<!--BEGIN DISABLE_INDEX-->
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../Manual/search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span>
<span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()">
<img id="MSearchCloseImg" border="0" src="../Manual/search/close.png" alt=""/>
</a>
</span>
</div>
<!--END DISABLE_INDEX-->
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath$$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td style="padding-left: 0.5em;">
<div id="projectname">$projectname</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
<!-- Manual insertion of the search function. Notice that the path to
the search directory is adjusted to the top-level. -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search');
</script>
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>

View File

@ -1,108 +0,0 @@
(function() {
'use strict';
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 current_version_local = 'master'
var all_versions = [
'master',
'5.6-beta1',
'latest',
'5.5.2',
'5.4.4',
'5.3.2',
'5.2.4',
'5.1.5',
'5.0.4',
'4.14.3',
'4.13.2',
'4.12.2',
'4.11.3',
'4.10.2',
'4.9.1',
'4.8.2',
'4.7',
'4.6.3',
'4.5.2',
'4.4',
'4.3'
];
function build_select(current_version) {
if( current_version == 'master') {
let top_elt = document.getElementById("top");
let first_element = top_elt.childNodes[0];
let new_div = document.createElement("p");
new_div.innerHTML = '⚠️ This documentation corresponds to the <a style="font-familly: monospace;" href="https://github.com/CGAL/cgal/tree/master">master</a> development branch of CGAL. It might diverge from the official releases.';
new_div.style.cssText = "background-color: #ff9800; margin: 1ex auto 1ex 1em; padding: 1ex; border-radius: 1ex; display: inline-block;"
let OK = top_elt.insertBefore(new_div, first_element);
}
var buf = ['<select>'];
$.each(all_versions, function(id) {
var version = all_versions[id];
buf.push('<option value="' + version + '"');
if (version == current_version) {
buf.push(' selected="selected">' + version);
} else {
buf.push('>' + version);
}
buf.push('</option>');
});
if ( !all_versions.includes(current_version)) {
buf.push('<option value="' + current_version + '"');
buf.push(' selected="selected">' + current_version);
buf.push('</option>');
}
buf.push('</select>');
return buf.join('');
}
function patch_url(url, new_version) {
if(url.includes("doc.cgal.org")||url.includes("cgal.geometryfactory.com")){
return url.replace(url_re, 'doc.cgal.org/' + new_version + '/');
}
else{
return url.replace(url_local, 'https://doc.cgal.org/' + new_version + '/');
}
}
function on_switch() {
var selected = $(this).children('option:selected').attr('value');
var url = window.location.href,
new_url = patch_url(url, selected);
if (new_url != url) {
window.location.href = new_url;
}
}
$(document).ready(function() {
var motherNode=$("#back-nav ul")[0];
var node = document.createElement("LI");
var spanNode = document.createElement("SPAN");
var titleNode =document.createTextNode("CGAL Version: ");
var textNode = document.createTextNode("x.y");
spanNode.setAttribute("class", "version_menu");
spanNode.appendChild(textNode);
node.appendChild(titleNode);
node.appendChild(spanNode);
motherNode.insertBefore(node, motherNode.firstChild);
$("#back-nav").css("padding-top", "0").css("padding-bottom", "0");
var match = url_re.exec(window.location.href);
if (match) {
var version = match[2];
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
else {
match = url_local.exec(window.location.href);
if (match) {
var version = current_version_local;
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
}
});
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +0,0 @@
//<![CDATA[
MathJax.Hub.Config(
{
TeX: {
Macros: {
qprel: [ "{\\gtreqless}", 0],
qpx: [ "{\\mathbf{x}}", 0],
qpl: [ "{\\mathbf{l}}", 0],
qpu: [ "{\\mathbf{u}}", 0],
qpc: [ "{\\mathbf{c}}", 0],
qpb: [ "{\\mathbf{b}}", 0],
qpy: [ "{\\mathbf{y}}", 0],
qpw: [ "{\\mathbf{w}}", 0],
qplambda: [ "{\\mathbf{\\lambda}}", 0],
ssWpoint: [ "{\\bf #1}", 1],
ssWeight: [ "{w_{#1}}", 1],
dabs: [ "{\\parallel\\! #1 \\!\\parallel}", 1],
E: [ "{\\mathrm{E}}", 0],
A: [ "{\\mathrm{A}}", 0],
R: [ "{\\mathrm{R}}", 0],
N: [ "{\\mathrm{N}}", 0],
Q: [ "{\\mathrm{Q}}", 0],
Z: [ "{\\mathrm{Z}}", 0],
ccSum: [ "{\\sum_{#1}^{#2}{#3}}", 3],
ccProd: [ "{\\prod_{#1}^{#2}{#3}}", 3],
pyr: [ "{\\operatorname{Pyr}}", 0],
aff: [ "{\\operatorname{aff}}", 0],
Ac: [ "{\\cal A}", 0],
Sc: [ "{\\cal S}", 0],
}
}
}
);
//]]>

View File

@ -1,177 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="classlist" visible="no" title="Class and Concept List" intro="Here is the list of all concepts and classes of the CGAL Library. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="examples" visible="no" title="" intro=""/>
<!-- <tab type="user" url="@ref how_to_cite_cgal" title="Acknowledging CGAL"/> -->
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<detaileddescription title=" "/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,178 +0,0 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="Reference Manual" intro=""/>
<tab type="pages" visible="yes" title="Pages" intro=""/>
<tab type="classlist" visible="yes" title="Class and Concept List" intro="Here is the list of all concepts and classes of this package. Classes are inside the namespace CGAL. Concepts are in the global namespace."/>
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<detaileddescription title="Definition"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<!-- Disable the naming of the public types group -->
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title="Definition"/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<detaileddescription title=" "/>
<authorsection visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdef>
<pagedocs/>
</memberdef>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -1,386 +0,0 @@
body, table, div, p, dl {
font: Lucida Grande,sans-serif;
}
.textsc {
font-variant: small-caps;
}
#projectnumber {
display: none;
}
#back-nav {
border-bottom: 1px solid;
padding: 0.5em;
background-color: #FAF9FB;
}
#back-nav h2 {
display: inline;
}
#back-nav ul
{
display: inline;
padding: 0;
margin: 0;
}
#back-nav li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}
.tparams .paramname {
font-weight: bold;
vertical-align: top;
}
h1 {
font-size: 180%;
}
h2 {
font-size: 120%;
}
.icon-namespace {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #FF0000;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-class {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #0000FF;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icon-concept {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #67489A;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
h1.groupheader {
font-size: 150%;
}
/* enable this to make sections more alike */
/* h2.groupheader { */
/* border-bottom: none; */
/* color: black; */
/* font-size: 100%; */
/* font-weight: bold; */
/* margin-top: 1.75em; */
/* padding-bottom: 0; */
/* padding-top: 0; */
/* width: 100%; */
/* } */
a.el {
font-weight: normal;
}
.memproto a {
font-weight: bold;
}
.PkgSummary {
width: 60%;
}
.PkgShortInfo {
width: 20%;
}
.PkgSummary, .PkgShortInfo, .PkgImage, .PkgImage .image {
display:inline-block;
padding:5px;
vertical-align:middle;
}
.PkgAuthors {
font-style: italic;
}
.PkgDescription {
padding-top: 5px;
padding-bottom: 5px;
text-align: justify;
}
/* footnote support */
blockquote sup {
position: absolute;
right: 3px;
top: 3px;
}
.footnote ol li:hover {
text-decoration: underline;
}
a.footnoteBackref, a.footnoteLink {
text-decoration: none;
}
ol.footnotesList {
margin: 0;
font-size: 0.8em;
padding-top: 5px;
}
ol.footnotesList > li {
text-indent: -1.5em;
padding-left: 1.5em;
vertical-align: top;
}
.footnoteBackReferenceGroup {
padding-right: 0.5em;
}
.footnoteBackref {
padding-right: 0.25em;
}
span.footnoteContent {
}
span.footnoteContent > p:first-child, span.footnoteContent > div:first-child {
display: inline;
}
span.footnoteContent p, span.footnoteContent div {
text-indent: 0em;
}
/* footnote support end */
dl
{
padding: 0 0 0 0;
}
dl.section, dl.hasModels, dl.debugs, dl.models, dl.refines, dl.requires
{
margin-left: 0px;
padding-left: 0px;
}
dl.section dt a, dl.hasModels dt a, dl.debugs dt a,
dl.models dt a, dl.refines dt a, dl.advanced dt a,
dl.requires dt a, dl.todo dt a, dl.bug dt a, dl.test dt a
{
font-weight: bold;
color: black;
}
div.toc {
width: auto;
}
.ui-resizable-e {
background-repeat: repeat-y;
}
div.cgal_figure_caption {
text-align: center;
}
div.cgal_video_caption {
text-align: center;
}
div.groupText {
font-style: none;
}
#projectname
{
font: 200% Tahoma, Arial,sans-serif;
}
#titlearea {
background: white;
}
#MSearchResultsWindow {
z-index: 2;
}
dl.note, dl.warning, dl.attention,
dl.pre, dl.post, dl.invariant, dl.deprecated,
dl.todo, dl.test, dl.bug
{
margin-left:-7px;
padding-left: 3px;
}
div.CGALAdvanced
{
background: #eeb;
border: 1px solid #9e9e7d;
box-shadow: 0.5ex 0.5ex #ccc;
}
div.CGALDebug
{
background: #c8a8d0;
border: 1px solid #846f8a;
box-shadow: 0.5ex 0.5ex #777;
}
dl.deprecated
{
border-left: 4px solid;
border-color: #505050;
background: #d8c0a0;
border: 1px solid #94836e;
box-shadow: 0.5ex 0.5ex #aaa;
}
div.CGALAdvanced,
div.CGALDebug,
dl.deprecated
{
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
div.CGALModification
{
background: #f85858;
border: 1px solid #000000;
box-shadow: 0.5ex 0.5ex #777;
border-radius: 1ex;
padding-top: 0.5ex;
padding-bottom: 0.25ex;
padding-left: 1ex;
padding-right: 1ex;
margin-bottom: 1ex;
}
.Modification
{
background: #f85858;
border: 0px;
padding-top: 0ex;
padding-bottom: 0ex;
padding-left: 0ex;
padding-right: 0ex;
margin-bottom: 0ex;
}
/* The first div in CGALAdvanced sections is the "Advanced" header */
div.CGALAdvanced > div,
div.CGALDebug > div,
dl.deprecated > dt > b > a
{
font-style: italic;
font-weight: bold;
}
/* Everything else is noise and should stay in the normal font */
div.CGALAdvanced > div ~ div,
div.CGALDebug > div ~ div,
dl.deprecated > dt ~ dt
{
font-style: normal;
font-weight: normal;
}
/* More indentation for the text body */
div.CGALAdvanced > p,
div.CGALDebug > p,
dl.deprecated > dd
{
margin-left: 0;
margin-top: 1ex;
margin-bottom: 1ex;
padding-left: 1em;
padding-right: 1em;
}
/* Adjust the top and bottom margins of div.fragment */
div.fragment {
padding: 4px;
margin: 1em 4px 1em 4px;
}
/* Make summary smaller to avoid wrapping of classes and concepts */
div.summary
{
width: auto;
}
.collapsible {
background-color: white;
color: #602020;
cursor: pointer;
padding: 3px;
width: 100%;
border: none;
text-align: left;
outline: none;
font: 14px Roboto,sans-serif;
user-select: auto;
}
.active, .collapsible:hover {
background-color: white;
}
.collapsible:after {
content: '\25B6';
color: #7A93C5;
font-weight: bold;
float: left;
margin-left: -20px;
margin-right: 5px;
}
.active:after {
content: "\25BC";
}
.content {
padding: 0 18px;
color: black;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: white;
}

View File

@ -1,21 +0,0 @@
<!-- HTML footer for doxygen 1.8.20-->
<!-- start footer part -->
<!-- The footer div is not part of the default but we require it to
move the footer to the bottom of the page. -->
<div id="footer">
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby <a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby&#160;<a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

View File

@ -1,128 +0,0 @@
function generate_autotoc() {
var toc = $("#autotoc").append('<ul></ul>');
if(toc.length > 0) { // an autotoc has been requested
toc = toc.find('ul');
var indices = new Array();
indices[0] = 0;
indices[1] = 0;
indices[2] = 0;
$("h1, h2, h3").each(function(i) {
var current = $(this);
var levelTag = current[0].tagName.charAt(1);
var cur_id = current.attr("id");
indices[levelTag-1]+=1;
var prefix=indices[0];
if (levelTag >1) prefix+="."+indices[1];
if (levelTag >2) prefix+="."+indices[2];
current.html(prefix + " " + current.html());
for(var l = levelTag; l < 3; ++l){
indices[l] = 0;
}
if(cur_id == undefined) {
current.attr('id', 'title' + i);
current.addClass('anchor');
toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
} else {
toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
}
});
}
}
// throw a stick at the modules array and hijack gotoNode
// for our own evil purposes
$(document).ready(function() {
if (typeof modules !== 'undefined') {
// modules has been loaded, that means we are inside the
// documentation of a package
NAVTREE[0][2][1][1] = modules[0][1];
NAVTREE[0][2][1][2] = modules[0][2];
// override gotoNode from navtree.js
gotoNode = function (o,subIndex,root,hash,relpath) {
var nti = navTreeSubIndices[subIndex][root+hash];
if (!nti)
{
nti = navTreeSubIndices[subIndex][root];
}
if(nti && (nti[0] === 1 && nti[0])) {
nti.splice(1, 1);
}
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
// set-up footnote generation
$("#doc-content").append('<ol id="autoFootnotes0" class="footnotesList"></ol>');
$("body").footnotes();
generate_autotoc();
});
/*
* A jQuery plugin by Brian Holt that will search the selected blocks for
* specially-defined footnote elements. If found, these elements will be
* moved to a footnotes section and links to and from the footnotes will
* be created.
*
* See http://www.planetholt.com/articles/jQuery-Footnotes
* for full documentation.
*
* By default, footnotes will be found in SPANs with the footnote class,
* and in BLOCKQUOTEs with a TITLE attribute.
*
* Thanks to CSSNewbies.com for the general idea, which I have enhanced
* and implemented with as a jQuery plugin.
*
* Copyright 2008-2009 Brian Holt.
* Licensed under the LGPL license. See
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
*
* Version 1.2.2
*/
(function(c){c.fn.footnotes=function(d){var e=c.extend({},c.fn.footnotes.defaults,d);return this.each(function(f){b("INFO: Building footnotes for "+(f+1)+"...",e.debugMode);c(e.footnotes,this).addClass(e.autoFootnoteClass);var h=(""===e.contentBlock)?c(this):c(e.contentBlock,this),g=e.orderedList?"<ol/>":"<ul/>";c("."+e.autoFootnoteClass).each(function(l){var t=-1,n=f+"-"+l,q=c(this),j,r,s,u,p,m,o,k;if(e.singleFootnoteDestination){j=c("#"+e.destination);if(0===j.length){b("INFO: No #autoFootnotes found; adding our own",e.debugMode);j=c(g).attr("id",e.destination).addClass("footnotesList").appendTo(h)}}else{j=c("#"+e.destination+f);if(0===j.length){b("INFO: No #autoFootnotes"+f+" found; adding our own for "+(f+1),e.debugMode);j=c(g).attr("id",e.destination+f).addClass("footnotesList").appendTo(h)}}q.removeClass(e.autoFootnoteClass);r=e.fnExtractFootnote(this);t=-1;n=f+"-"+l;j.find("li > .footnoteContent").each(function(i){var v=c(this);if(v.html()===r){t=i;s=c(v.parents("li").get(0));return false}});if(-1===t){u=c("<a/>").attr("href","#cite-text-"+n).attr("name","cite-ref-"+n).attr("id","cite-ref-"+n).attr("dir","ltr").attr("title",r).text("["+(j.find("li").length+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}p=c("<li/>").attr("id","cite-text-"+n);m=c("<span/>").addClass("footnoteBackReferenceGroup").appendTo(p);c("<span/>").addClass("footnoteContent").html(r).appendTo(p);u=c("<a/>").text("^").attr("href","#cite-ref-"+n).addClass("footnoteBackref").prependTo(m);j.append(p)}else{n=f+"-"+t;m=c(c("li > .footnoteBackReferenceGroup",j).get(t));o=m.find(".footnoteBackref");k=o.length;if(0===o.length){b("ERROR: $backRefs.length == 0, which should have prevented this code path",e.debugMode)}else{if(1===o.length){c("<sup/>").text("^ ").addClass("footnoteBackref").prependTo(m);o.html("<sup>a</sup>");++k}u=c("<a/>").attr("href","#"+s.attr("id")).attr("name","cite-ref-"+n+"-"+o.length).attr("id","cite-ref-"+n+"-"+o.length).attr("title",r).text("["+(t+1)+"]").addClass("footnoteLink");if(q.is(e.prependTags)){c("<sup/>").prependTo(this).append(u)}else{c("<sup/>").appendTo(this).append(u)}u=c("<a/>").attr("href","#cite-ref-"+n+"-"+o.length).addClass("footnoteBackref");if(k>=26){b("WARN: multiple letter functionality is probably broken when more than 26 footnotes exist",e.debugMode)}u.prepend(String.fromCharCode((k)+96));c("<sup/>").appendTo(m).append(u)}}});b("INFO: Done building footnotes for "+(f+1),e.debugMode)})};c.fn.footnotes.version=function(){return"1.2.2"};c.fn.footnotes.defaults={footnotes:"blockquote[title],span.footnote,blockquote[cite]",prependTags:"blockquote",singleFootnoteDestination:false,destination:"autoFootnotes",contentBlock:".content",autoFootnoteClass:"autoFootnote",fnExtractFootnote:a,orderedList:true,debugMode:true};function b(e,d){if(d){if(window.console&&window.console.log){window.console.log(e)}}}function a(i){var j=c(i),e,f,h,g,d;if(j.is("span.footnote")){e=c(i).html();f=/^(?:(?:&nbsp;)|\s)*\(([\S\s]+)\)(?:(?:&nbsp;)|\s)*$/;h=e.match(f);if(h&&2===h.length){e=h[1]}j.empty()}else{if(j.is("blockquote[title]")){g=j.attr("cite");e=j.attr("title");if(""!==g){d=c("<a/>").attr("href",g);if(0===c(e).length){e=d.text(e)}else{e=d.text(g).wrap("<span/>").parent().append(": "+e);j.attr("title","")}}}else{if(j.is("blockquote[cite]")){g=j.attr("cite");e=c("<a/>").attr("href",g).text(g)}}}return e}})(jQuery);
(function(){
if(window.location.href.includes("doc.cgal.org")){
var url='https://doc.cgal.org/latest/Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
else
{
var url='../Manual/menu_version.js';
var script = document.createElement("script"); // Make a script DOM node
script.src = url; // Set it's src to the provided URL
document.head.appendChild(script);
}
})();
$(document).ready(function() {
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
});

View File

@ -1,73 +0,0 @@
<!-- HTML header for doxygen 1.8.20-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
$searchbox
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,132 +0,0 @@
<!-- HTML header for doxygen 1.8.20-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath^../Manual/hacks.js" type="text/javascript"></script>
<!-- Manually include treeview and search to avoid bloat and to fix
paths to the directory Manual . -->
<!-- $.treeview -->
<!-- $.search -->
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^../Manual/search/searchdata.js"></script>
<script type="text/javascript" src="$relpath^../Manual/search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="$relpath^../Manual/search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../Manual/search/search.js"></script>
<!-- Manually done below. -->
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
$mathjax
<script src="$relpath^modules.js" type="text/javascript"></script>
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav">
<ul>
<li><a href="https://www.cgal.org/">cgal.org</a></li>
<li><a href="../Manual/index.html">Top</a></li>
<li><a href="../Manual/general_intro.html">Getting Started</a></li>
<li><a href="../Manual/tutorials.html">Tutorials</a></li>
<li><a href="../Manual/packages.html">Package Overview</a></li>
<li><a href="../Manual/how_to_cite_cgal.html">Acknowledging CGAL</a></li>
</ul>
<!-- In a package SEARCHENGINE = false, so we cannot use $searchbox
insertion. That's why we have to do it manually here. Notice
that we also take pngs from the Manual. -->
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../Manual/search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../Manual/search/close.svg" alt=""/></a>
</span>
</div>
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!-- We disable the search box because we have added it in the
back-nav for stylistic reasons. -->
<!-- <td>$.searchbox</td> -->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!-- Code below is usually inserted by doxygen when SEARCHENGINE =
true. Notice that the path to the search directory is adjusted to
the top-level.-->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search');
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,108 +0,0 @@
(function() {
'use strict';
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 current_version_local = 'master'
var all_versions = [
'master',
'5.6-beta1',
'latest',
'5.5.2',
'5.4.4',
'5.3.2',
'5.2.4',
'5.1.5',
'5.0.4',
'4.14.3',
'4.13.2',
'4.12.2',
'4.11.3',
'4.10.2',
'4.9.1',
'4.8.2',
'4.7',
'4.6.3',
'4.5.2',
'4.4',
'4.3'
];
function build_select(current_version) {
if( current_version == 'master') {
let top_elt = document.getElementById("top");
let first_element = top_elt.childNodes[0];
let new_div = document.createElement("p");
new_div.innerHTML = '⚠️ This documentation corresponds to the <a style="font-familly: monospace;" href="https://github.com/CGAL/cgal/tree/master">master</a> development branch of CGAL. It might diverge from the official releases.';
new_div.style.cssText = "background-color: #ff9800; margin: 1ex auto 1ex 1em; padding: 1ex; border-radius: 1ex; display: inline-block;"
let OK = top_elt.insertBefore(new_div, first_element);
}
var buf = ['<select>'];
$.each(all_versions, function(id) {
var version = all_versions[id];
buf.push('<option value="' + version + '"');
if (version == current_version) {
buf.push(' selected="selected">' + version);
} else {
buf.push('>' + version);
}
buf.push('</option>');
});
if ( !all_versions.includes(current_version)) {
buf.push('<option value="' + current_version + '"');
buf.push(' selected="selected">' + current_version);
buf.push('</option>');
}
buf.push('</select>');
return buf.join('');
}
function patch_url(url, new_version) {
if(url.includes("doc.cgal.org")||url.includes("cgal.geometryfactory.com")){
return url.replace(url_re, 'doc.cgal.org/' + new_version + '/');
}
else{
return url.replace(url_local, 'https://doc.cgal.org/' + new_version + '/');
}
}
function on_switch() {
var selected = $(this).children('option:selected').attr('value');
var url = window.location.href,
new_url = patch_url(url, selected);
if (new_url != url) {
window.location.href = new_url;
}
}
$(document).ready(function() {
var motherNode=$("#back-nav ul")[0];
var node = document.createElement("LI");
var spanNode = document.createElement("SPAN");
var titleNode =document.createTextNode("CGAL Version: ");
var textNode = document.createTextNode("x.y");
spanNode.setAttribute("class", "version_menu");
spanNode.appendChild(textNode);
node.appendChild(titleNode);
node.appendChild(spanNode);
motherNode.insertBefore(node, motherNode.firstChild);
$("#back-nav").css("padding-top", "0").css("padding-bottom", "0");
var match = url_re.exec(window.location.href);
if (match) {
var version = match[2];
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
else {
match = url_local.exec(window.location.href);
if (match) {
var version = current_version_local;
var select = build_select(version);
spanNode.innerHTML=select;
$('.version_menu select').bind('change', on_switch);
}
}
});
})();

File diff suppressed because it is too large Load Diff

View File

@ -470,18 +470,6 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/stylesheet.css
# If you want full control over the layout of the generated HTML pages it might # If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The # be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top

View File

@ -27,7 +27,8 @@ MathJax.Hub.Config(
aff: [ "{\\operatorname{aff}}", 0], aff: [ "{\\operatorname{aff}}", 0],
Ac: [ "{\\cal A}", 0], Ac: [ "{\\cal A}", 0],
Sc: [ "{\\cal S}", 0], Sc: [ "{\\cal S}", 0],
} },
equationNumbers: { autoNumber: "AMS" }
} }
} }
); );

View File

@ -1,4 +1,4 @@
<!-- HTML footer for doxygen 1.8.20--> <!-- HTML footer for doxygen 1.9.6-->
<!-- start footer part --> <!-- start footer part -->
<!-- The footer div is not part of the default but we require it to <!-- The footer div is not part of the default but we require it to
move the footer to the bottom of the page. --> move the footer to the bottom of the page. -->
@ -7,13 +7,13 @@ move the footer to the bottom of the page. -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
$navpath $navpath
<li class="footer">$generatedby <a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li> <li class="footer">$generatedby <a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
</ul> </ul>
</div> </div>
<!--END GENERATE_TREEVIEW--> <!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW--> <!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small> <hr class="footer"/><address class="footer"><small>
$generatedby&#160;<a href="https://www.doxygen.nl/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion $generatedby&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
</small></address> </small></address>
<!--END !GENERATE_TREEVIEW--> <!--END !GENERATE_TREEVIEW-->
</div> </div>

View File

@ -1,27 +1,38 @@
<!-- HTML header for doxygen 1.8.20--> <!-- HTML header for doxygen 1.9.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<head> <head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/> <link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen $doxygenversion"/> <meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> --> <!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<script type="text/javascript">var page_layout=1;</script>
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script> <script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script> <script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script> <script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
$treeview $treeview
$search $search
$mathjax $mathjax
$darkmode
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. --> <!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" /> <link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
$extrastylesheet $extrastylesheet
</head> </head>
<body> <body>
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav"> <div id="back-nav">
<ul> <ul>
@ -39,21 +50,19 @@ $extrastylesheet
<div id="titlearea"> <div id="titlearea">
<table cellspacing="0" cellpadding="0"> <table cellspacing="0" cellpadding="0">
<tbody> <tbody>
<tr style="height: 56px;"> <tr id="projectrow">
<!--BEGIN PROJECT_LOGO--> <!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td> <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO--> <!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME--> <!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;"> <td id="projectalign">
<div id="projectname">$projectname <div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$projectnumber</span><!--END PROJECT_NUMBER-->
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div> </div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF--> <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td> </td>
<!--END PROJECT_NAME--> <!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF--> <!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div> <div id="projectbrief">$projectbrief</div>
</td> </td>
<!--END PROJECT_BRIEF--> <!--END PROJECT_BRIEF-->

View File

@ -1,15 +1,20 @@
<!-- HTML header for doxygen 1.8.20--> <!-- HTML header for doxygen 1.9.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<head> <head>
<link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/> <link rel="icon" type="image/png" href="$relpath$../Manual/g-196x196-doc.png"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen $doxygenversion"/> <meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> --> <!-- <link href="$relpath^../Manual/tabs.css" rel="stylesheet" type="text/css"/> -->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<script type="text/javascript">var page_layout=1;</script>
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<script type="text/javascript" src="$relpath^../Manual/jquery.js"></script> <script type="text/javascript" src="$relpath^../Manual/jquery.js"></script>
<script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script> <script type="text/javascript" src="$relpath^../Manual/dynsections.js"></script>
<script src="$relpath^../Manual/hacks.js" type="text/javascript"></script> <script src="$relpath^../Manual/hacks.js" type="text/javascript"></script>
@ -36,16 +41,17 @@
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" /> <link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
<!-- This should probably be an extrastylesheet instead of hardcoded. --> <!-- This should probably be an extrastylesheet instead of hardcoded. -->
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" /> <link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
$mathjax $mathjax
$darkmode
<script src="$relpath^modules.js" type="text/javascript"></script> <script src="$relpath^modules.js" type="text/javascript"></script>
$extrastylesheet $extrastylesheet
</head> </head>
<body> <body>
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="back-nav"> <div id="back-nav">
<ul> <ul>
@ -60,18 +66,19 @@ $extrastylesheet
insertion. That's why we have to do it manually here. Notice insertion. That's why we have to do it manually here. Notice
that we also take pngs from the Manual. --> that we also take pngs from the Manual. -->
<div id="MSearchBox" class="MSearchBoxInactive"> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left"> <span class="left">
<img id="MSearchSelect" src="../Manual/search/mag_sel.svg" <span id="MSearchSelect"
onmouseover="return searchBox.OnSearchSelectShow()" onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;
alt=""/> </span>
<input type="text" id="MSearchField" value="Search" accesskey="S" <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)" onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)" onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/> onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right"> </span>
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../Manual/search/close.svg" alt=""/></a> <span class="right">
</span> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="$relpath^../Manual/search/close.svg" alt=""/></a>
</span>
</div> </div>
</div> </div>
@ -79,21 +86,19 @@ $extrastylesheet
<div id="titlearea"> <div id="titlearea">
<table cellspacing="0" cellpadding="0"> <table cellspacing="0" cellpadding="0">
<tbody> <tbody>
<tr style="height: 56px;"> <tr id="projectrow">
<!--BEGIN PROJECT_LOGO--> <!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td> <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO--> <!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME--> <!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;"> <td id="projectalign">
<div id="projectname">$projectname <div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$projectnumber</span><!--END PROJECT_NUMBER-->
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div> </div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF--> <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td> </td>
<!--END PROJECT_NAME--> <!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF--> <!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div> <div id="projectbrief">$projectbrief</div>
</td> </td>
<!--END PROJECT_BRIEF--> <!--END PROJECT_BRIEF-->
@ -113,7 +118,7 @@ $extrastylesheet
true. Notice that the path to the search directory is adjusted to true. Notice that the path to the search directory is adjusted to
the top-level.--> the top-level.-->
<script type="text/javascript"> <script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search'); var searchBox = new SearchBox("searchBox", "../Manual/search/",'.html');
</script> </script>
<!-- window showing the filter options --> <!-- window showing the filter options -->
<div id="MSearchSelectWindow" <div id="MSearchSelectWindow"
@ -123,9 +128,16 @@ var searchBox = new SearchBox("searchBox", "../Manual/search",false,'Search');
</div> </div>
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div> </div>
<!--END TITLEAREA--> <!--END TITLEAREA-->

File diff suppressed because it is too large Load Diff

View File

@ -243,7 +243,7 @@ removes some unneeded files, and performs minor repair on some glitches.''')
os.chdir(args.output) os.chdir(args.output)
#workaround CGAL link on the main page #workaround CGAL link on the main page
re_replace_in_file("<a class=\"elRef\" href=\"../Circular_kernel_3/namespaceCGAL.html\">CGAL</a>", "CGAL", "./Manual/index.html") re_replace_in_file("<a class=\"elRef\" href=\"../.+/namespaceCGAL.+html\">CGAL</a>", "CGAL", "./Manual/index.html")
#workaround issue with operator<< in pyquery #workaround issue with operator<< in pyquery
all_pages=glob.glob('*/*.html') all_pages=glob.glob('*/*.html')

View File

@ -88,6 +88,8 @@ public:
result_type result_type
operator()(const Args&... args) const operator()(const Args&... args) const
{ {
#ifndef CGAL_EPICK_NO_INTERVALS
CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp); CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp);
// Protection is outside the try block as VC8 has the CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG // Protection is outside the try block as VC8 has the CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG
{ {
@ -103,6 +105,7 @@ public:
CGAL_BRANCH_PROFILER_BRANCH(tmp); CGAL_BRANCH_PROFILER_BRANCH(tmp);
Protect_FPU_rounding<!Protection> p(CGAL_FE_TONEAREST); Protect_FPU_rounding<!Protection> p(CGAL_FE_TONEAREST);
CGAL_expensive_assertion(FPU_get_cw() == CGAL_FE_TONEAREST); CGAL_expensive_assertion(FPU_get_cw() == CGAL_FE_TONEAREST);
#endif // CGAL_EPICK_NO_INTERVALS
return ep(c2e(args)...); return ep(c2e(args)...);
} }
}; };
@ -154,6 +157,7 @@ public:
result_type result_type
operator()(const Args&... args) const operator()(const Args&... args) const
{ {
#ifndef CGAL_EPICK_NO_INTERVALS
CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp); CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp);
// Protection is outside the try block as VC8 has the CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG // Protection is outside the try block as VC8 has the CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG
{ {
@ -169,7 +173,7 @@ public:
CGAL_BRANCH_PROFILER_BRANCH(tmp); CGAL_BRANCH_PROFILER_BRANCH(tmp);
Protect_FPU_rounding<!Protection> p(CGAL_FE_TONEAREST); Protect_FPU_rounding<!Protection> p(CGAL_FE_TONEAREST);
CGAL_expensive_assertion(FPU_get_cw() == CGAL_FE_TONEAREST); CGAL_expensive_assertion(FPU_get_cw() == CGAL_FE_TONEAREST);
#endif // CGAL_EPICK_NO_INTERVALS
return call(args...); return call(args...);
} }
}; };

View File

@ -137,6 +137,12 @@ extracted from labeled images.
straight skeletons of polygons with holes. The output is a closed, combinatorially 2-manifold straight skeletons of polygons with holes. The output is a closed, combinatorially 2-manifold
surface triangle mesh. surface triangle mesh.
### [2D Regularized Boolean Set Operations](https://doc.cgal.org/5.6/Manual/packages.html#PkgBooleanSetOperations2)
- Exposed all required member functions of the `GeneralPolygonWithHoles_2` concept (e.g., `clear_outer_boundary()`, `clear_holes()`, and `clear()`).
### [Polygon](https://doc.cgal.org/5.6/Manual/packages.html#PkgPolygon2)
- Fixed the function `draw(const CGAL::Polygon_with_holes_2<T, C>& pwh, const char* title)` to enable the correct drawing of unbounded polygons with holes.
[Release 5.5](https://github.com/CGAL/cgal/releases/tag/v5.5) [Release 5.5](https://github.com/CGAL/cgal/releases/tag/v5.5)
----------- -----------

View File

@ -27,11 +27,9 @@
#if defined(__has_include) && ( ! defined _MSC_VER || _MSC_VER > 1900) #if defined(__has_include) && ( ! defined _MSC_VER || _MSC_VER > 1900)
# if CGAL_USE_GMP && ! __has_include(<gmp.h>) # if CGAL_USE_GMP && ! __has_include(<gmp.h>)
# pragma CGAL_WARNING("<gmp.h> cannot be found. Less efficient number types will be used instead. Define CGAL_NO_GMP=1 if that is on purpose.")
# undef CGAL_USE_GMP # undef CGAL_USE_GMP
# undef CGAL_USE_MPFR # undef CGAL_USE_MPFR
# elif CGAL_USE_MPFR && ! __has_include(<mpfr.h>) # elif CGAL_USE_MPFR && ! __has_include(<mpfr.h>)
# pragma CGAL_WARNING("<mpfr.h> cannot be found and the GMP support in CGAL requires it. Less efficient number types will be used instead. Define CGAL_NO_GMP=1 if that is on purpose.")
# undef CGAL_USE_GMP # undef CGAL_USE_GMP
# undef CGAL_USE_MPFR # undef CGAL_USE_MPFR
# endif // CGAL_USE_MPFR and no <mpfr.h> # endif // CGAL_USE_MPFR and no <mpfr.h>

View File

@ -196,3 +196,17 @@ if (NOT TARGET CGAL::CGAL_Basic_viewer)
INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt5) INTERFACE_LINK_LIBRARIES CGAL::CGAL_Qt5)
endif() endif()
#warning: the order in this list has to match the enum in Exact_type_selector
set(CGAL_CMAKE_EXACT_NT_BACKEND_OPTIONS GMP_BACKEND GMPXX_BACKEND BOOST_GMP_BACKEND BOOST_BACKEND LEDA_BACKEND MP_FLOAT_BACKEND Default)
set(CGAL_CMAKE_EXACT_NT_BACKEND "Default" CACHE STRING "Setting for advanced users that what to change the default number types used in filtered kernels. Some options might not be working depending on how you configured your build.")
set_property(CACHE CGAL_CMAKE_EXACT_NT_BACKEND PROPERTY STRINGS ${CGAL_CMAKE_EXACT_NT_BACKEND_OPTIONS})
if ( NOT "${CGAL_CMAKE_EXACT_NT_BACKEND}" STREQUAL "Default" )
list(FIND CGAL_CMAKE_EXACT_NT_BACKEND_OPTIONS ${CGAL_CMAKE_EXACT_NT_BACKEND} DEB_VAL)
set_property(
TARGET CGAL
APPEND PROPERTY
INTERFACE_COMPILE_DEFINITIONS "CMAKE_OVERRIDDEN_DEFAULT_ENT_BACKEND=${DEB_VAL}"
) # do not use set_target_properties to avoid overwritting
endif()

View File

@ -30,6 +30,7 @@ template <class R_>
class Iso_cuboid_3 : public R_::Kernel_base::Iso_cuboid_3 class Iso_cuboid_3 : public R_::Kernel_base::Iso_cuboid_3
{ {
typedef typename R_::RT RT; typedef typename R_::RT RT;
typedef typename R_::FT FT;
typedef typename R_::Point_3 Point_3; typedef typename R_::Point_3 Point_3;
typedef typename R_::Aff_transformation_3 Aff_transformation_3; typedef typename R_::Aff_transformation_3 Aff_transformation_3;
@ -84,8 +85,9 @@ public:
max_hx, max_hy, max_hz)) {} max_hx, max_hy, max_hz)) {}
Iso_cuboid_3(const Bbox_3& bbox) Iso_cuboid_3(const Bbox_3& bbox)
: Rep(typename R::Construct_iso_cuboid_3()(Return_base_tag(), bbox.xmin(), bbox.ymin(), bbox.zmin(), : Rep(typename R::Construct_iso_cuboid_3()(Return_base_tag(),
bbox.xmax(), bbox.ymax(), bbox.zmax())) {} typename R::Construct_point_3()(FT(bbox.xmin()), FT(bbox.ymin()), FT(bbox.zmin())),
typename R::Construct_point_3()(FT(bbox.xmax()), FT(bbox.ymax()), FT(bbox.zmax())))) {}
decltype(auto) decltype(auto)
min BOOST_PREVENT_MACRO_SUBSTITUTION () const min BOOST_PREVENT_MACRO_SUBSTITUTION () const

View File

@ -78,7 +78,9 @@ public:
: Rep(typename R::Construct_iso_rectangle_2()(Return_base_tag(), min_hx, min_hy, max_hx, max_hy, hw)) {} : Rep(typename R::Construct_iso_rectangle_2()(Return_base_tag(), min_hx, min_hy, max_hx, max_hy, hw)) {}
Iso_rectangle_2(const Bbox_2& bbox) Iso_rectangle_2(const Bbox_2& bbox)
: Rep(typename R::Construct_iso_rectangle_2()(Return_base_tag(), bbox.xmin(), bbox.ymin(), bbox.xmax(), bbox.ymax())) {} : Rep(typename R::Construct_iso_rectangle_2()(Return_base_tag(),
typename R::Construct_point_2()(FT(bbox.xmin()), FT(bbox.ymin())),
typename R::Construct_point_2()(FT(bbox.xmax()), FT(bbox.ymax())))) {}
decltype(auto) decltype(auto)
min BOOST_PREVENT_MACRO_SUBSTITUTION () const min BOOST_PREVENT_MACRO_SUBSTITUTION () const

View File

@ -18,25 +18,10 @@
#define CGAL_PRECISE_NUMBERS_H #define CGAL_PRECISE_NUMBERS_H
#include <CGAL/config.h> #include <CGAL/config.h>
#if defined CGAL_USE_GMPXX #include <CGAL/Exact_integer.h>
# include <CGAL/gmpxx.h> #include <CGAL/Exact_rational.h>
typedef mpz_class Precise_integer;
typedef mpq_class Precise_rational; using Precise_integer = CGAL::Exact_integer;
#elif defined CGAL_USE_LEDA using Precise_rational = CGAL::Exact_rational;
# include <CGAL/leda_integer.h>
# include <CGAL/leda_rational.h>
typedef leda_integer Precise_integer;
typedef leda_rational Precise_rational;
#elif defined CGAL_USE_GMP
# include <CGAL/Gmpz.h>
# include <CGAL/Gmpq.h>
typedef CGAL::Gmpz Precise_integer;
typedef CGAL::Gmpq Precise_rational;
#else
# include <CGAL/MP_Float.h>
# include <CGAL/Quotient.h>
typedef CGAL::MP_Float Precise_integer;
typedef CGAL::Quotient<CGAL::MP_Float> Precise_rational;
#endif
#endif // CGAL_PRECISE_NUMBERS_H #endif // CGAL_PRECISE_NUMBERS_H

View File

@ -14,20 +14,10 @@
// //
// Author(s) : Laurent Rineau // Author(s) : Laurent Rineau
#include <CGAL/config.h> #ifndef CGAL_EXACT_INTEGER_H
#include <CGAL/boost_mp.h> #define CGAL_EXACT_INTEGER_H
#if CGAL_USE_GMPXX
# include <CGAL/gmpxx.h> #include <CGAL/Number_types/internal/Exact_type_selector.h>
#elif CGAL_USE_GMP
# include <CGAL/Gmpz.h>
#elif CGAL_USE_LEDA
# include <CGAL/leda_integer.h>
#elif CGAL_USE_CORE
# include <CGAL/CORE_BigInt.h>
#elif defined CGAL_USE_BOOST_MP
#else
# error CGAL is configured with none of GMP, LEDA, Boost.Multiprecision and CORE. <CGAL/Exact_integer.h> cannot be used.
#endif
namespace CGAL { namespace CGAL {
@ -50,29 +40,10 @@ typedef unspecified_type Exact_integer;
#else // not DOXYGEN_RUNNING #else // not DOXYGEN_RUNNING
#if BOOST_VERSION > 107900 && defined(CGAL_USE_BOOST_MP) typedef internal::Exact_ring_selector<int>::Type Exact_integer;
// use boost-mp by default
typedef BOOST_cpp_arithmetic_kernel::Integer Exact_integer;
#else // BOOST_VERSION > 107900
#ifdef CGAL_USE_GMPXX
typedef mpz_class Exact_integer;
#elif defined(CGAL_USE_GMP)
#if defined(CGAL_USE_BOOST_MP)
typedef BOOST_gmp_arithmetic_kernel::Integer Exact_integer;
#else
typedef Gmpz Exact_integer;
#endif
#elif defined(CGAL_USE_LEDA)
typedef leda_integer Exact_integer;
#elif defined(CGAL_USE_BOOST_MP)
typedef BOOST_cpp_arithmetic_kernel::Integer Exact_integer;
#elif defined(CGAL_USE_CORE)
typedef CORE::BigInt Exact_integer;
#else
#error "ERROR: Cannot determine a BigInt type!"
#endif // CGAL_USE_CORE
#endif // BOOST_VERSION > 107800
#endif // not DOXYGEN_RUNNING #endif // not DOXYGEN_RUNNING
} /* end namespace CGAL */ } /* end namespace CGAL */
#endif // CGAL_EXACT_INTEGER_H

View File

@ -25,6 +25,7 @@
#include <CGAL/Lazy_exact_nt.h> #include <CGAL/Lazy_exact_nt.h>
#include <CGAL/boost_mp.h> #include <CGAL/boost_mp.h>
#ifdef CGAL_USE_GMP #ifdef CGAL_USE_GMP
# include <CGAL/Gmpz.h> # include <CGAL/Gmpz.h>
# include <CGAL/Gmpq.h> # include <CGAL/Gmpq.h>
@ -49,28 +50,59 @@ class Expr;
namespace CGAL { namespace internal { namespace CGAL { namespace internal {
// Two classes which tell the preferred "exact number types" corresponding to a type. // Two classes which tell the preferred "exact number types" corresponding to a type.
// Exact_ring_selector<double> and Exact_field_selector<double> are used by EPICK as exact number type
// to answer predicates at the end of the filtering chain of predicates and EPECK uses
// Exact_field_selector<double> for as its exact number type.
// The default template chooses mpq_class, Gmpq, leda_rational, or Quotient<MP_Float>. // Warning, the order in this list must match the one in Installation/lib/cmake/CGALConfig.cmake
// It should support the built-in types. enum ENT_backend_choice
template < typename > {
struct Exact_field_selector GMP_BACKEND,
GMPXX_BACKEND,
BOOST_GMP_BACKEND,
BOOST_BACKEND,
LEDA_BACKEND,
MP_FLOAT_BACKEND
};
#if BOOST_VERSION > 107900 && defined(CGAL_USE_BOOST_MP) template <ENT_backend_choice>
// use boost-mp by default struct Exact_NT_backend;
// Boost
{ typedef BOOST_cpp_arithmetic_kernel::Rational Type; }; #ifdef CGAL_USE_GMP
#else // BOOST_VERSION > 107900 template <>
#ifdef CGAL_USE_GMPXX struct Exact_NT_backend<GMP_BACKEND>
{ typedef mpq_class Type; }; : public GMP_arithmetic_kernel
#elif defined(CGAL_USE_GMP) {
#if defined(CGAL_USE_BOOST_MP) #ifdef CGAL_HAS_MPZF
{ typedef BOOST_gmp_arithmetic_kernel::Rational Type; }; typedef Mpzf Ring_for_float;
#else #else
{ typedef Gmpq Type; }; typedef Gmpzf Ring_for_float;
#endif #endif
#elif defined(CGAL_USE_LEDA) };
{ typedef leda_rational Type; }; #endif
#elif defined(CGAL_USE_BOOST_MP)
#ifdef CGAL_USE_GMPXX
template <>
struct Exact_NT_backend<GMPXX_BACKEND>
: public GMPXX_arithmetic_kernel
{
typedef Exact_NT_backend<GMP_BACKEND>::Ring_for_float Ring_for_float;
};
#endif
#if defined (CGAL_USE_BOOST_MP) && defined(CGAL_USE_GMP)
template <>
struct Exact_NT_backend<BOOST_GMP_BACKEND>
: public BOOST_gmp_arithmetic_kernel
{
typedef Exact_NT_backend<GMP_BACKEND>::Ring_for_float Ring_for_float;
};
#endif
#ifdef CGAL_USE_BOOST_MP
template <>
struct Exact_NT_backend<BOOST_BACKEND>
{
// See the discussion in https://github.com/CGAL/cgal/pull/3614 // See the discussion in https://github.com/CGAL/cgal/pull/3614
// This is disabled for now because cpp_rational is even slower than Quotient<MP_Float>. Quotient<cpp_int> will be a good candidate after some polishing. // This is disabled for now because cpp_rational is even slower than Quotient<MP_Float>. Quotient<cpp_int> will be a good candidate after some polishing.
// In fact, the new version of cpp_rational from here: https://github.com/boostorg/multiprecision/pull/366 // In fact, the new version of cpp_rational from here: https://github.com/boostorg/multiprecision/pull/366
@ -78,28 +110,69 @@ struct Exact_field_selector
// while Quotient does not. Though, we can still use it if needed. // while Quotient does not. Though, we can still use it if needed.
#if BOOST_VERSION <= 107800 #if BOOST_VERSION <= 107800
// See this comment: https://github.com/CGAL/cgal/pull/5937#discussion_r721533675 // See this comment: https://github.com/CGAL/cgal/pull/5937#discussion_r721533675
{ typedef Quotient<boost::multiprecision::cpp_int> Type; }; typedef Quotient<boost::multiprecision::cpp_int> Rational;
#else #else
{ typedef BOOST_cpp_arithmetic_kernel::Rational Type; }; typedef BOOST_cpp_arithmetic_kernel::Rational Rational;
#endif #endif
#else typedef boost::multiprecision::cpp_int Integer;
{ typedef Quotient<MP_Float> Type; }; typedef cpp_float Ring_for_float;
};
#endif #endif
#endif // BOOST_VERSION > 107900
// By default, a field is a safe choice of ring. #ifdef CGAL_USE_LEDA
template < typename T > template <>
struct Exact_ring_selector : Exact_field_selector < T > { }; struct Exact_NT_backend<LEDA_BACKEND>
: public LEDA_arithmetic_kernel
{
typedef leda_rational Ring_for_float;
};
#endif
template <>
struct Exact_NT_backend<MP_FLOAT_BACKEND>
: public MP_Float_arithmetic_kernel
{
typedef MP_Float Ring_for_float;
};
#ifndef CMAKE_OVERRIDDEN_DEFAULT_ENT_BACKEND
constexpr ENT_backend_choice Default_exact_nt_backend =
#ifdef CGAL_USE_GMPXX
GMPXX_BACKEND;
#elif defined(CGAL_USE_GMP)
#if defined(CGAL_USE_BOOST_MP)
BOOST_GMP_BACKEND;
#else
GMP_BACKEND;
#endif
#elif BOOST_VERSION > 107900 && defined(CGAL_USE_BOOST_MP)
BOOST_BACKEND;
#elif defined(CGAL_USE_LEDA)
LEDA_BACKEND;
#else
MP_FLOAT_BACKEND;
#endif
#else
constexpr ENT_backend_choice Default_exact_nt_backend = static_cast<ENT_backend_choice>(CMAKE_OVERRIDDEN_DEFAULT_ENT_BACKEND);
#endif
template < typename >
struct Exact_field_selector
{
using Type = typename Exact_NT_backend<Default_exact_nt_backend>::Rational;
};
template < typename >
struct Exact_ring_selector
{
using Type = typename Exact_NT_backend<Default_exact_nt_backend>::Integer;
};
template <> template <>
struct Exact_ring_selector<double> struct Exact_ring_selector<double>
#ifdef CGAL_HAS_MPZF {
{ typedef Mpzf Type; }; using Type = typename Exact_NT_backend<Default_exact_nt_backend>::Ring_for_float;
#elif defined(CGAL_HAS_THREADS) || !defined(CGAL_USE_GMP) };
{ typedef MP_Float Type; };
#else
{ typedef Gmpzf Type; };
#endif
template <> template <>
struct Exact_ring_selector<float> : Exact_ring_selector<double> { }; struct Exact_ring_selector<float> : Exact_ring_selector<double> { };
@ -133,6 +206,10 @@ struct Exact_ring_selector<Gmpzf>
template <> template <>
struct Exact_field_selector<Gmpq> struct Exact_field_selector<Gmpq>
{ typedef Gmpq Type; }; { typedef Gmpq Type; };
template <>
struct Exact_ring_selector<Gmpq>
{ typedef Gmpq Type; };
#endif #endif
#ifdef CGAL_USE_GMPXX #ifdef CGAL_USE_GMPXX
@ -147,6 +224,10 @@ struct Exact_ring_selector< ::mpz_class>
template <> template <>
struct Exact_field_selector< ::mpq_class> struct Exact_field_selector< ::mpq_class>
{ typedef ::mpq_class Type; }; { typedef ::mpq_class Type; };
template <>
struct Exact_ring_selector< ::mpq_class>
{ typedef ::mpq_class Type; };
#endif #endif
#ifdef CGAL_USE_LEDA #ifdef CGAL_USE_LEDA
@ -162,6 +243,10 @@ template <>
struct Exact_field_selector<leda_rational> struct Exact_field_selector<leda_rational>
{ typedef leda_rational Type; }; { typedef leda_rational Type; };
template <>
struct Exact_ring_selector<leda_rational>
{ typedef leda_rational Type; };
template <> template <>
struct Exact_field_selector<leda_real> struct Exact_field_selector<leda_real>
{ typedef leda_real Type; }; { typedef leda_real Type; };
@ -171,6 +256,28 @@ struct Exact_field_selector<leda_real>
template <> template <>
struct Exact_field_selector<CORE::Expr> struct Exact_field_selector<CORE::Expr>
{ typedef CORE::Expr Type; }; { typedef CORE::Expr Type; };
template <>
struct Exact_ring_selector<CORE::Expr>
{ typedef CORE::Expr Type; };
#endif
#ifdef CGAL_USE_BOOST_MP
template <>
struct Exact_field_selector<Exact_NT_backend<BOOST_BACKEND>::Integer>
{ typedef Exact_NT_backend<BOOST_BACKEND>::Rational Type; };
template <>
struct Exact_ring_selector<Exact_NT_backend<BOOST_BACKEND>::Integer>
{ typedef Exact_NT_backend<BOOST_BACKEND>::Integer Type; };
template <>
struct Exact_field_selector<Exact_NT_backend<BOOST_BACKEND>::Rational>
{ typedef Exact_NT_backend<BOOST_BACKEND>::Rational Type; };
template <>
struct Exact_ring_selector<Exact_NT_backend<BOOST_BACKEND>::Rational>
{ typedef Exact_NT_backend<BOOST_BACKEND>::Rational Type; };
#endif #endif
template < typename ET > template < typename ET >

View File

@ -897,6 +897,7 @@ template< > class Real_embeddable_traits< Quotient<boost::multiprecision::cpp_in
} //namespace CGAL } //namespace CGAL
#include <CGAL/BOOST_MP_arithmetic_kernel.h> #include <CGAL/BOOST_MP_arithmetic_kernel.h>
#include <CGAL/cpp_float.h>
#endif // BOOST_VERSION #endif // BOOST_VERSION
#endif #endif

View File

@ -0,0 +1,581 @@
// Copyright (c) 2023 GeometryFactory (France), INRIA Saclay - Ile de France (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL$
// $Id$
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Andreas Fabri, Marc Glisse
#ifndef CGAL_CPP_FLOAT_H
#define CGAL_CPP_FLOAT_H
//#define CGAL_DEBUG_CPPF
#include <CGAL/boost_mp.h>
#include <CGAL/assertions.h>
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
namespace CGAL {
namespace internal {
// Only used with an argument known not to be 0.
inline int low_bit (boost::uint64_t x) {
#if defined(_MSC_VER)
unsigned long ret;
_BitScanForward64(&ret, x);
return (int)ret;
#elif defined(__xlC__)
return __cnttz8 (x);
#else
// Assume long long is 64 bits
return __builtin_ctzll (x);
#endif
}
inline int high_bit (boost::uint64_t x) {
#if defined(_MSC_VER)
unsigned long ret;
_BitScanReverse64(&ret, x);
return (int)ret;
#elif defined(__xlC__)
// Macro supposedly not defined on z/OS.
return 63 - __cntlz8 (x);
#else
return 63 - __builtin_clzll (x);
#endif
}
} // namespace internal
#if 0 // needs C++20
template <class T>
void fmt(const T& t)
{
std::cout << std::format("{:b}", t) << std::endl;
}
#endif
// It would have made sense to make this
// boost::multiprecision::number<some_new_backend>, but we keep that
// for later when we contribute to boost::mp
class cpp_float {
#ifdef CGAL_DEBUG_CPPF
boost::multiprecision::cpp_rational rat;
#endif
typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<512> > Mantissa;
Mantissa man;
int exp; /* The number man (an integer) * 2 ^ exp */
public:
cpp_float()
:
#ifdef CGAL_DEBUG_CPPF
rat(),
#endif
man(), exp()
{}
cpp_float(short i)
:
#ifdef CGAL_DEBUG_CPPF
rat(i),
#endif
man(i),exp(0)
{}
cpp_float(int i)
:
#ifdef CGAL_DEBUG_CPPF
rat(i),
#endif
man(i),exp(0)
{}
cpp_float(long i)
:
#ifdef CGAL_DEBUG_CPPF
rat(i),
#endif
man(i),exp(0)
{}
#ifdef CGAL_DEBUG_CPPF
cpp_float(const Mantissa& man, int exp, const boost::multiprecision::cpp_rational& rat)
: rat(rat), man(man),exp(exp)
{}
#else
cpp_float(const Mantissa& man, int exp)
: man(man), exp(exp)
{
CGAL_HISTOGRAM_PROFILER("size (man/exp)", static_cast<int>(man.backend().size()));
}
#ifndef CGAL_DEBUG_CPPF
template <typename Expression>
cpp_float(const Expression& man, int exp)
:man(man), exp(exp)
{
CGAL_HISTOGRAM_PROFILER("size (expression/exp)", static_cast<int>(this->man.backend().size()));
}
#endif
#endif
cpp_float(double d)
#ifdef CGAL_DEBUG_CPPF
: rat(d)
#endif
{
// std::cout << "\ndouble = " << d << std::endl;
using boost::uint64_t;
union {
#ifdef CGAL_LITTLE_ENDIAN
struct { uint64_t man:52; uint64_t exp:11; uint64_t sig:1; } s;
#else /* CGAL_BIG_ENDIAN */
//WARNING: untested!
struct { uint64_t sig:1; uint64_t exp:11; uint64_t man:52; } s;
#endif
double d;
} u;
u.d = d;
uint64_t m;
uint64_t dexp = u.s.exp;
CGAL_assertion_msg(dexp != 2047, "Creating an cpp_float from infinity or NaN.");
if (dexp == 0) {
if (d == 0) { exp=0; return; }
else { // denormal number
m = u.s.man;
++dexp;
}
} else {
m = (1LL << 52) | u.s.man;
}
int idexp = (int)dexp;
idexp -= 1023;
// std::cout << "m = " << m << std::endl;
// std::cout << "idexp = " << idexp << std::endl;
int shifted = internal::low_bit(m);
m >>= shifted;
int nbits = internal::high_bit(m);
// std::cout << "nbits = " << nbits << std::endl;
exp = idexp - nbits;
man = m;
if(u.s.sig){
man.backend().negate();
}
#ifdef CGAL_DEBUG_CPPF
assert(rat.sign() == man.sign());
#endif
// std::cout << "m = " << m << " * 2^" << exp << std::endl;
// fmt(m);
CGAL_HISTOGRAM_PROFILER("size when constructed from double", static_cast<int>(man.backend().size()));
}
friend std::ostream& operator<<(std::ostream& os, const cpp_float& m)
{
return os << m.to_double();
#if 0 // dehug output
return os << m.man << " * 2 ^ " << m.exp << " ( " << m.to_double() << ") "
#ifdef CGAL_DEBUG_CPPF
<< " " << m.rat
#endif
;
#endif
}
friend std::istream& operator>>(std::istream& is, cpp_float& m)
{
double d;
is >> d;
m = cpp_float(d);
return is;
}
friend cpp_float operator-(cpp_float const&x)
{
#ifdef CGAL_DEBUG_CPPF
return cpp_float(-x.man,x.exp, -x.rat);
#else
return cpp_float(-x.man,x.exp);
#endif
}
cpp_float& operator*=(const cpp_float& other)
{
#ifdef CGAL_DEBUG_CPPF
rat *= other.rat;
#endif
man *= other.man;
exp += other.exp;
return *this;
}
friend
cpp_float operator*(const cpp_float& a, const cpp_float&b){
#ifdef CGAL_DEBUG_CPPF
return cpp_float(a.man*b.man, a.exp+b.exp, a.rat * b.rat);
#else
return cpp_float(a.man*b.man, a.exp+b.exp);
#endif
}
// Marc Glisse commented on github:
// We can sometimes end up with a mantissa that has quite a few zeros at the end,
// but the cases where the mantissa is too long by more than 1 limb should be negligible,
// and normalizing so the mantissa is always odd would have a cost.
cpp_float operator+=(const cpp_float& other)
{
#ifdef CGAL_DEBUG_CPPF
rat += other.rat;
#endif
int shift = exp - other.exp;
if(shift > 0){
man = (man << shift) + other.man;
exp = other.exp;
}else if(shift < 0){
man = man + (other.man << -shift);
}else{
man += other.man;
}
return *this;
}
#ifdef CGAL_DEBUG_CPPF
friend
cpp_float operator+(const cpp_float& a, const cpp_float&b){
int shift = a.exp - b.exp;
if(shift > 0){
return cpp_float((a.man << shift) + b.man, b.exp, a.rat+b.rat);
}else if(shift < 0){
return cpp_float(a.man + (b.man << -shift), a.exp, a.rat+b.rat);
}
return cpp_float(a.man + b.man, a.exp, a.rat+b.rat);
}
#else
friend
cpp_float operator+(const cpp_float& a, const cpp_float&b){
int shift = a.exp - b.exp;
CGAL_HISTOGRAM_PROFILER("shift+", CGAL::abs(shift));
if(shift > 0){
return cpp_float((a.man << shift) + b.man, b.exp);
}else if(shift < 0){
return cpp_float(a.man + (b.man << -shift), a.exp);
}
return cpp_float(a.man + b.man, a.exp);
}
#endif
cpp_float operator-=(const cpp_float& other)
{
#ifdef CGAL_DEBUG_CPPF
rat -= other.rat;
#endif
int shift = exp - other.exp;
if(shift > 0){
man <<= shift;
man -= other.man;
exp = other.exp;
}else if(shift < 0){
man -= (other.man << -shift);
}else{
man -= other.man;
}
return *this;
}
#ifdef CGAL_DEBUG_CPPF
friend
cpp_float operator-(const cpp_float& a, const cpp_float&b){
int shift = a.exp - b.exp;
if(shift > 0){
return cpp_float((a.man << shift) - b.man, b.exp, a.rat-b.rat);
}else if(shift < 0){
return cpp_float(a.man - (b.man << -shift), a.exp, a.rat-b.rat);
}
return cpp_float(a.man - b.man, a.exp, a.rat-b.rat);
}
#else
friend
cpp_float operator-(const cpp_float& a, const cpp_float&b){
int shift = a.exp - b.exp;
CGAL_HISTOGRAM_PROFILER("shift-", CGAL::abs(shift));
if(shift > 0){
return cpp_float((a.man << shift) - b.man, b.exp);
}else if(shift < 0){
return cpp_float(a.man - (b.man << -shift), a.exp);
}
return cpp_float(a.man - b.man, a.exp);
}
#endif
bool is_positive() const
{
return CGAL::is_positive(man);
}
bool is_negative() const
{
return CGAL::is_negative(man);
}
// Would it make sense to compare the sign of the exponent?
// to distinguish the interval between ]-1,1[ from the rest.
friend bool operator<(const cpp_float& a, const cpp_float& b)
{
if(((! a.is_positive()) && b.is_positive())
|| (a.is_negative() && b.is_zero()))return true;
if(((! b.is_positive()) && a.is_positive())
|| (b.is_negative() && a.is_zero()))return false;
#ifdef CGAL_DEBUG_CPPF
bool qres = a.rat < b.rat;
#endif
cpp_float d = b-a;
#ifdef CGAL_DEBUG_CPPF
assert(qres == d.is_positive());
#endif
return d.is_positive();
}
friend bool operator>(cpp_float const&a, cpp_float const&b){
return b<a;
}
friend bool operator>=(cpp_float const&a, cpp_float const&b){
return !(a<b);
}
friend bool operator<=(cpp_float const&a, cpp_float const&b){
return !(a>b);
}
friend bool operator==(cpp_float const&a, cpp_float const&b){
#ifdef CGAL_DEBUG_CPPF
bool qres = a.rat == b.rat;
#endif
int shift = a.exp - b.exp;
CGAL_HISTOGRAM_PROFILER("shift==", CGAL::abs(shift));
if(shift > 0){
Mantissa ac = a.man << shift;
#ifdef CGAL_DEBUG_CPPF
assert( qres == (ac == b.man));
#endif
return ac == b.man;
}else if(shift < 0){
Mantissa bc = b.man << -shift;
#ifdef CGAL_DEBUG_CPPF
assert(qres == (a.man == bc));
#endif
return a.man == bc;
}
#ifdef CGAL_DEBUG_CPPF
assert(qres == (a.man == b.man));
#endif
return a.man==b.man;
}
Comparison_result compare(const cpp_float& other) const
{
if(*this < other) return SMALLER;
if(*this > other) return LARGER;
return EQUAL;
}
friend bool operator!=(cpp_float const&a, cpp_float const&b){
return !(a==b);
}
double to_double() const
{
if(exp == 0){
return CGAL::to_double(man);
}
if(exp > 0){
Mantissa as(man);
as <<= exp;
return CGAL::to_double(as);
}
Mantissa pow(1);
pow <<= -exp;
boost::multiprecision::cpp_rational r(man, pow);
return CGAL::to_double(r);
}
std::pair<double,double> to_interval() const
{
if(exp == 0){
return CGAL::to_interval(man);
}
if(exp > 0){
Mantissa as = man << exp;
return CGAL::to_interval(as);
}
Mantissa pow(1);
pow <<= -exp;
boost::multiprecision::cpp_rational r(man, pow);
return CGAL::to_interval(r);
}
bool is_zero () const {
return CGAL::is_zero(man);
}
bool is_one () const {
if(! is_positive()) return false;
int msb = static_cast<int>(boost::multiprecision::msb(man));
if (msb != -exp) return false;
int lsb = static_cast<int>(boost::multiprecision::lsb(man));
return (msb == lsb);
}
CGAL::Sign sign () const
{
return CGAL::sign(man);
}
std::size_t size() const
{
return man.backend().size();
}
};
template <> struct Algebraic_structure_traits< cpp_float >
: public Algebraic_structure_traits_base< cpp_float, Integral_domain_without_division_tag > {
typedef Tag_true Is_exact;
typedef Tag_false Is_numerical_sensitive;
struct Is_zero
: public CGAL::cpp98::unary_function< Type, bool > {
bool operator()( const Type& x ) const {
return x.is_zero();
}
};
struct Is_one
: public CGAL::cpp98::unary_function< Type, bool > {
bool operator()( const Type& x ) const {
return x.is_one();
}
};
struct Gcd
: public CGAL::cpp98::binary_function< Type, Type, Type > {
Type operator()(
const Type& /* x */,
const Type& /* y */ ) const {
assert(false);
return Type(); // cpp_float_gcd(x, y);
}
};
struct Square
: public CGAL::cpp98::unary_function< Type, Type > {
Type operator()( const Type& x ) const {
return x*x ; // cpp_float_square(x);
}
};
struct Integral_division
: public CGAL::cpp98::binary_function< Type, Type, Type > {
Type operator()(
const Type& /* x */,
const Type& /* y */ ) const {
assert(false);
return Type(); // x / y;
}
};
struct Sqrt
: public CGAL::cpp98::unary_function< Type, Type > {
Type operator()( const Type& /* x */) const {
assert(false);
return Type(); // cpp_float_sqrt(x);
}
};
struct Is_square
: public CGAL::cpp98::binary_function< Type, Type&, bool > {
bool operator()( const Type& /* x */, Type& /* y */ ) const {
// TODO: avoid doing 2 calls.
assert(false);
return true;
}
bool operator()( const Type& /* x */) const {
assert(false);
return true;
}
};
};
template <> struct Real_embeddable_traits< cpp_float >
: public INTERN_RET::Real_embeddable_traits_base< cpp_float , CGAL::Tag_true > {
struct Sgn
: public CGAL::cpp98::unary_function< Type, ::CGAL::Sign > {
::CGAL::Sign operator()( const Type& x ) const {
return x.sign();
}
};
struct To_double
: public CGAL::cpp98::unary_function< Type, double > {
double operator()( const Type& x ) const {
return x.to_double();
}
};
struct Compare
: public CGAL::cpp98::binary_function< Type, Type, Comparison_result > {
Comparison_result operator()(
const Type& x,
const Type& y ) const {
return x.compare(y);
}
};
struct To_interval
: public CGAL::cpp98::unary_function< Type, std::pair< double, double > > {
std::pair<double, double> operator()( const Type& x ) const {
return x.to_interval();
}
};
};
CGAL_DEFINE_COERCION_TRAITS_FOR_SELF(cpp_float)
CGAL_DEFINE_COERCION_TRAITS_FROM_TO(short ,cpp_float)
CGAL_DEFINE_COERCION_TRAITS_FROM_TO(int ,cpp_float)
CGAL_DEFINE_COERCION_TRAITS_FROM_TO(long ,cpp_float)
CGAL_DEFINE_COERCION_TRAITS_FROM_TO(float ,cpp_float)
CGAL_DEFINE_COERCION_TRAITS_FROM_TO(double ,cpp_float)
} // namespace CGAL
#endif // CGAL_CPP_FLOAT_H

View File

@ -11,6 +11,7 @@ find_package(CGAL REQUIRED COMPONENTS Core)
include_directories(BEFORE include) include_directories(BEFORE include)
create_single_source_cgal_program("bench_interval.cpp") create_single_source_cgal_program("bench_interval.cpp")
create_single_source_cgal_program("cpp_float.cpp")
create_single_source_cgal_program("constant.cpp") create_single_source_cgal_program("constant.cpp")
create_single_source_cgal_program("CORE_BigFloat.cpp") create_single_source_cgal_program("CORE_BigFloat.cpp")
create_single_source_cgal_program("CORE_BigInt.cpp") create_single_source_cgal_program("CORE_BigInt.cpp")

View File

@ -0,0 +1,116 @@
#ifdef CGAL_DO_NOT_USE_BOOST_MP
#include <iostream>
int main()
{
std::cout << "The class CGAL::cpp_float is not tested on this platform" << std::endl;
return 0;
}
#else
#include <CGAL/cpp_float.h>
template<class NT>
void test1(){
NT z;
NT a=3;
NT b=4.5;
NT c=2*(a+b)+-a*5;
assert(CGAL::sign(c)==0);
NT e=.0003;
NT f=1e-90;
assert(CGAL::to_double(b) == 4.5);
std::pair<double,double> p=CGAL::to_interval(b);
assert(p.first<=4.5 && p.second >= 4.5);
assert(a<b && CGAL::compare(b,a)>0);
assert(z<f && CGAL::compare(z,f)<0 && CGAL::compare(f,z)>0);
assert(z==z && CGAL::compare(z,z)==0);
assert(CGAL::square(b)*4==81);
assert(CGAL::is_zero(c));
assert(!CGAL::is_zero(a));
assert(!CGAL::is_one(a));
assert(CGAL::is_one(a-2));
assert(e-e==0);
}
int main()
{
test1<CGAL::cpp_float>();
double d = -0;
CGAL::cpp_float zero(d);
assert(! CGAL::is_positive(zero));
assert(! CGAL::is_negative(zero));
assert(CGAL::is_zero(zero));
CGAL::cpp_float m(0);
std::cout << m << std::endl;
CGAL::cpp_float m0(23.0);
CGAL::cpp_float m1(5.0);
CGAL::cpp_float m2(5.125);
CGAL::cpp_float m3(2.5);
CGAL::cpp_float m4(0.625);
CGAL::cpp_float m5(0.5);
CGAL::cpp_float m6(-0.625);
CGAL::is_positive(m5);
CGAL::is_negative(m6);
assert(m < m5);
assert(m6 < m);
assert(! (m5 < m));
assert(! (m < m6));
assert(! (m6 < m6));
assert(m4 > m5);
assert(-m4 < -m5);
assert(-m4 == -m4);
assert(-m4 != -m5);
assert(-m5 != -m4);
CGAL::cpp_float m15 = m1 + m5;
m15 = m15 - m5;
assert(m15 == m1);
assert(! (m15 < m1));
assert(! (m1 < m15));
m15 = m15 - m15;
std::cout << m15 << std::endl;
assert(m15.is_zero());
m1 *= m5;
m0 += m4;
std::cout << m0 << std::endl;
CGAL::cpp_float one(1);
assert(one.is_one());
one += m4;
one -= m4;
std::cout << one << std::endl;
assert(one.is_one());
return 0;
}
#endif

View File

@ -18,19 +18,15 @@ public:
/// \name Types /// \name Types
/// @{ /// @{
/*! the polygon type used to represent the outer boundary and each hole. //! the polygon type used to represent the outer boundary and each hole.
*/
typedef unspecified_type Polygon_2; typedef unspecified_type Polygon_2;
/*! a bidirectional iterator /*! a bidirectional iterator over the polygonal holes.
* over the polygonal holes. Its value type is `Polygon_2`. * Its value type is `Polygon_2`.
*/ */
typedef unspecified_type Hole_const_iterator; typedef unspecified_type Hole_const_iterator;
//! range type for iterating over holes.
/*!
range type for iterating over holes.
*/
typedef unspecified_type Holes_container; typedef unspecified_type Holes_container;
/// @} /// @}
@ -54,10 +50,18 @@ GeneralPolygonWithHoles_2(Polygon_2 & outer,
/// \name Predicates /// \name Predicates
/// @{ /// @{
/*! returns `true` if the outer boundary is empty, and `false` otherwise. /*! returns `true` if the outer boundary is empty and `false` otherwise.
*/ */
bool is_unbounded(); bool is_unbounded();
/*! returns `true` if the polygon with holes has holes and `false` otherwise.
*/
bool has_holes();
/*! returns the number of holes.
*/
Size number_of_holes();
/// @} /// @}
/// \name Access Functions /// \name Access Functions
@ -77,12 +81,36 @@ Hole_const_iterator holes_begin() const;
*/ */
Hole_const_iterator holes_end() const; Hole_const_iterator holes_end() const;
/*! returns the range of holes.
/*! */
returns the range of holes.
*/
const Holes_container& holes() const; const Holes_container& holes() const;
/// @} /// @}
/// \name Modifiers
/// @{
/*! adds a given polygon as a hole.
* \pre the hole must be clockwise oriented.
*/
void add_hole(const Polygon_2& hole);
/*! erases the specified hole.
*/
void erase_hole(Hole_iterator hit);
/*! clears the output boundary.
*/
void clear_outer_boundary();
/*! removes all the holes.
*/
void clear_holes();
/*! removes the outer boundary and all holes.
*/
void clear();
/// @}
}; /* end GeneralPolygonWithHoles_2 */ }; /* end GeneralPolygonWithHoles_2 */

View File

@ -12,7 +12,8 @@
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
// //
// //
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il> // Author(s): Baruch Zukerman <baruchzu@post.tau.ac.il>
// Efi Fogel <efifogel@gmail.com>
#ifndef CGAL_GENERAL_POLYGON_WITH_HOLES_2_H #ifndef CGAL_GENERAL_POLYGON_WITH_HOLES_2_H
#define CGAL_GENERAL_POLYGON_WITH_HOLES_2_H #define CGAL_GENERAL_POLYGON_WITH_HOLES_2_H
@ -107,6 +108,10 @@ public:
void erase_hole(Hole_iterator hit) { m_holes.erase(hit); } void erase_hole(Hole_iterator hit) { m_holes.erase(hit); }
void clear_outer_boundary() { m_pgn.clear(); }
void clear_holes() { m_holes.clear(); }
bool has_holes() const { return (!m_holes.empty()); } bool has_holes() const { return (!m_holes.empty()); }
Size number_of_holes() const { return static_cast<Size>(m_holes.size()); } Size number_of_holes() const { return static_cast<Size>(m_holes.size()); }

View File

@ -23,103 +23,149 @@
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup PkgDrawPolygonWithHoles2 * \ingroup PkgDrawPolygonWithHoles2
*
* opens a new window and draws `aph`, an instance of the
* `CGAL::Polygon_with_holes_2` class. A call to this function is blocking, that
* is the program continues as soon as the user closes the window. This function
* requires `CGAL_Qt5`, and is only available if the macro
* `CGAL_USE_BASIC_VIEWER` is defined. Linking with the cmake target
* `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition
* `CGAL_USE_BASIC_VIEWER`.
* \tparam PH an instance of the `CGAL::Polygon_with_holes_2` class.
* \param aph the polygon with holes to draw.
*/
opens a new window and draws `aph`, an instance of the `CGAL::Polygon_with_holes_2` class. A call to this function is blocking, that is the program continues as soon as the user closes the window. This function requires `CGAL_Qt5`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. template <typename PH>
Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt5` and add the definition `CGAL_USE_BASIC_VIEWER`.
\tparam PH an instance of the `CGAL::Polygon_with_holes_2` class.
\param aph the polygon with holes to draw.
*/
template<class PH>
void draw(const PH& aph); void draw(const PH& aph);
} /* namespace CGAL */ } /* namespace CGAL */
#endif #endif
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h> #include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Polygon_with_holes_2.h> #include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Random.h>
namespace CGAL namespace CGAL {
{
// Viewer class for Polygon_with_holes_2 // Viewer class for Polygon_with_holes_2
template<class P2> template <typename PolygonWidthHoles_2>
class SimplePolygonWithHoles2ViewerQt : public Basic_viewer_qt class Pwh_2_basic_viewer_qt : public Basic_viewer_qt {
{ using Base = Basic_viewer_qt;
typedef Basic_viewer_qt Base; using Pwh = PolygonWidthHoles_2;
typedef typename P2::General_polygon_2::Point_2 Point; using Pgn = typename Pwh::Polygon_2;
using Pnt = typename Pgn::Point_2;
public: public:
/// Construct the viewer without drawing anything. /// Construct the viewer.
/// @param parent the active window to draw
/// @param pwh the polygon to view
/// @param title the title of the window /// @param title the title of the window
SimplePolygonWithHoles2ViewerQt(QWidget* parent, Pwh_2_basic_viewer_qt(QWidget* parent, const Pwh& pwh,
const char* title="Basic Polygon_with_holes_2 Viewer") : const char* title = "Basic Polygon_with_holes_2 Viewer") :
Base(parent, title, true, true, true, false, false) Base(parent, title, true, true, true, false, false),
m_pwh(pwh)
{ {
clear(); if (pwh.is_unbounded() && (0 == pwh.number_of_holes())) return;
// mimic the computation of Camera::pixelGLRatio()
auto bbox = bounding_box();
CGAL::qglviewer::Vec minv(bbox.xmin(), bbox.ymin(), 0);
CGAL::qglviewer::Vec maxv(bbox.xmax(), bbox.ymax(), 0);
auto diameter = (maxv - minv).norm();
m_pixel_ratio = diameter / m_height;
} }
/// Construct the viewer. /*! Intercept the resizing of the window.
/// @param ap2 the polygon to view */
/// @param title the title of the window virtual void resizeGL(int width, int height) {
SimplePolygonWithHoles2ViewerQt(QWidget* parent, const P2& ap2, CGAL::QGLViewer::resizeGL(width, height);
const char* title="Basic Polygon_with_holes_2 Viewer") : m_width = width;
// First draw: vertices; edges, faces; multi-color; no inverse normal m_height = height;
Base(parent, title, true, true, true, false, false) CGAL::qglviewer::Vec p;
{ auto ratio = camera()->pixelGLRatio(p);
m_pixel_ratio = ratio;
add_elements();
}
/*! Obtain the pixel ratio.
*/
double pixel_ratio() const { return m_pixel_ratio; }
/*! Compute the bounding box.
*/
CGAL::Bbox_2 bounding_box() {
if (! m_pwh.is_unbounded()) return m_pwh.outer_boundary().bbox();
Bbox_2 bbox;
for (auto it = m_pwh.holes_begin(); it != m_pwh.holes_end(); ++it)
bbox += it->bbox();
return bbox;
}
/*! Compute the elements of a polygon with holes.
*/
void add_elements() {
clear(); clear();
compute_elements(ap2); CGAL::IO::Color c(75,160,255);
face_begin(c);
const Pnt* point_in_face;
if (m_pwh.outer_boundary().is_empty()) {
Pgn pgn;
double x = (double)m_width * 0.5 * m_pixel_ratio;
double y = (double)m_height * 0.5 * m_pixel_ratio;
pgn.push_back(Pnt(-x, -y));
pgn.push_back(Pnt(x, -y));
pgn.push_back(Pnt(x, y));
pgn.push_back(Pnt(-x, y));
compute_loop(pgn, false);
point_in_face = &(pgn.vertex(pgn.size()-1));
}
else {
const auto& outer_boundary = m_pwh.outer_boundary();
compute_loop(outer_boundary, false);
point_in_face = &(outer_boundary.vertex(outer_boundary.size()-1));
}
for (auto it = m_pwh.holes_begin(); it != m_pwh.holes_end(); ++it) {
compute_loop(*it, true);
add_point_in_face(*point_in_face);
}
face_end();
} }
protected: protected:
void compute_one_loop_elements(const typename P2::General_polygon_2& p, bool hole) /*! Compute the face
{ */
if (hole) void compute_loop(const Pgn& p, bool hole) {
{ add_point_in_face(p.vertex(p.size()-1)); } if (hole) add_point_in_face(p.vertex(p.size()-1));
typename P2::General_polygon_2::Vertex_const_iterator prev; auto prev = p.vertices_begin();
for (typename P2::General_polygon_2::Vertex_const_iterator i=p.vertices_begin(); auto it = prev;
i!=p.vertices_end(); ++i) add_point(*it);
{ add_point_in_face(*it);
add_point(*i); // Add vertex for (++it; it != p.vertices_end(); ++it) {
if (i!=p.vertices_begin()) add_segment(*prev, *it); // add segment with previous point
{ add_segment(*prev, *i); } // Add segment with previous point add_point(*it);
add_point_in_face(*i); // Add point in face add_point_in_face(*it); // add point in face
prev=i; prev = it;
} }
// Add the last segment between the last point and the first one // Add the last segment between the last point and the first one
add_segment(*prev, *(p.vertices_begin())); add_segment(*prev, *(p.vertices_begin()));
} }
void compute_elements(const P2& p2) virtual void keyPressEvent(QKeyEvent* e) {
{
if (p2.outer_boundary().is_empty()) return;
CGAL::IO::Color c(75,160,255);
face_begin(c);
compute_one_loop_elements(p2.outer_boundary(), false);
for (typename P2::Hole_const_iterator it=p2.holes_begin(); it!=p2.holes_end(); ++it)
{
compute_one_loop_elements(*it, true);
add_point_in_face(p2.outer_boundary().vertex(p2.outer_boundary().size()-1));
}
face_end();
}
virtual void keyPressEvent(QKeyEvent *e)
{
// Test key pressed: // Test key pressed:
// const ::Qt::KeyboardModifiers modifiers = e->modifiers(); // const ::Qt::KeyboardModifiers modifiers = e->modifiers();
// if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::NoButton)) { ... } // if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::NoButton)) { ... }
// Call: * compute_elements() if the model changed, followed by // Call: * add_elements() if the model changed, followed by
// * redraw() if some viewing parameters changed that implies some // * redraw() if some viewing parameters changed that implies some
// modifications of the buffers // modifications of the buffers
// (eg. type of normal, color/mono) // (eg. type of normal, color/mono)
@ -128,27 +174,41 @@ protected:
// Call the base method to process others/classicals key // Call the base method to process others/classicals key
Base::keyPressEvent(e); Base::keyPressEvent(e);
} }
private:
//! The window width in pixels.
int m_width = CGAL_BASIC_VIEWER_INIT_SIZE_X;
//! The window height in pixels.
int m_height = CGAL_BASIC_VIEWER_INIT_SIZE_Y;
//! The ratio between pixel and opengl units (in world coordinate system).
double m_pixel_ratio = 1;
//! The polygon with holes to draw.
const Pwh& m_pwh;
}; };
// Specialization of draw function. // Specialization of draw function.
template<class T, class C> template<class T, class C>
void draw(const CGAL::Polygon_with_holes_2<T, C>& ap2, void draw(const CGAL::Polygon_with_holes_2<T, C>& pwh,
const char* title="Polygon_with_holes_2 Basic Viewer") const char* title = "Polygon_with_holes_2 Basic Viewer")
{ {
#if defined(CGAL_TEST_SUITE) #if defined(CGAL_TEST_SUITE)
bool cgal_test_suite=true; bool cgal_test_suite = true;
#else #else
bool cgal_test_suite=qEnvironmentVariableIsSet("CGAL_TEST_SUITE"); bool cgal_test_suite = qEnvironmentVariableIsSet("CGAL_TEST_SUITE");
#endif #endif
if (!cgal_test_suite) if (! cgal_test_suite) {
{ using Pwh = CGAL::Polygon_with_holes_2<T, C>;
using Viewer = Pwh_2_basic_viewer_qt<Pwh>;
CGAL::Qt::init_ogl_context(4,3); CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc = 1;
const char* argv[2]={"t2_viewer", nullptr}; const char* argv[2] = {"t2_viewer", nullptr};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc, const_cast<char**>(argv));
SimplePolygonWithHoles2ViewerQt<CGAL::Polygon_with_holes_2<T, C> > Viewer mainwindow(app.activeWindow(), pwh, title);
mainwindow(app.activeWindow(), ap2, title); mainwindow.add_elements();
mainwindow.show(); mainwindow.show();
app.exec(); app.exec();
} }

View File

@ -1,5 +1,6 @@
// #define CGAL_COREFINEMENT_POLYHEDRA_DEBUG // #define CGAL_COREFINEMENT_POLYHEDRA_DEBUG
// #define CGAL_COREFINEMENT_DEBUG // #define CGAL_COREFINEMENT_DEBUG
#define CGAL_USE_DERIVED_SURFACE_MESH
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Surface_mesh.h> #include <CGAL/Surface_mesh.h>
@ -13,9 +14,17 @@
#include <CGAL/iterator.h> #include <CGAL/iterator.h>
#include <CGAL/array.h> #include <CGAL/array.h>
#include <CGAL/Testsuite/DerivedSurfaceMesh.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Surface_mesh<Kernel::Point_3> Surface_mesh; typedef Kernel::Point_3 Point_3;
#ifdef CGAL_USE_DERIVED_SURFACE_MESH
typedef CGAL::Testsuite::DerivedSurfaceMesh<Point_3> Surface_mesh;
#else
typedef CGAL::Surface_mesh<Point_3> Surface_mesh;
#endif
namespace PMP = CGAL::Polygon_mesh_processing; namespace PMP = CGAL::Polygon_mesh_processing;
namespace CFR = PMP::Corefinement; namespace CFR = PMP::Corefinement;

View File

@ -1090,7 +1090,7 @@ QString Io_image_plugin::nameFilters() const
"Analyze files (*.hdr *.img *.img.gz) ;; " "Analyze files (*.hdr *.img *.img.gz) ;; "
"Stanford Exploration Project files (*.H *.HH) ;; " "Stanford Exploration Project files (*.H *.HH) ;; "
"NRRD image files (*.nrrd) ;; " "NRRD image files (*.nrrd) ;; "
"NIFTI image files (*.nii)"); "NIFTI image files (*.nii *.nii.gz)");
} }
bool Io_image_plugin::canLoad(QFileInfo) const bool Io_image_plugin::canLoad(QFileInfo) const
@ -1146,7 +1146,9 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene)
} }
// read a NIFTI file // read a NIFTI file
if(fileinfo.suffix() == "nii") if(fileinfo.suffix() == "nii"
|| ( fileinfo.suffix() == "gz"
&& fileinfo.fileName().endsWith(QString(".nii.gz"), Qt::CaseInsensitive)))
{ {
#ifdef CGAL_USE_VTK #ifdef CGAL_USE_VTK
vtkNew<vtkNIFTIImageReader> reader; vtkNew<vtkNIFTIImageReader> reader;

View File

@ -705,6 +705,9 @@ create_histogram(const T3& triangulation, double& min_value, double& max_value)
cit != triangulation.finite_cells_end(); cit != triangulation.finite_cells_end();
++cit) ++cit)
{ {
if(cit->subdomain_index() == 0)
continue;
#ifdef CGAL_MESH_3_DEMO_DONT_COUNT_TETS_ADJACENT_TO_SHARP_FEATURES_FOR_HISTOGRAM #ifdef CGAL_MESH_3_DEMO_DONT_COUNT_TETS_ADJACENT_TO_SHARP_FEATURES_FOR_HISTOGRAM
if (triangulation.in_dimension(cit->vertex(0)) <= 1 if (triangulation.in_dimension(cit->vertex(0)) <= 1
|| triangulation.in_dimension(cit->vertex(1)) <= 1 || triangulation.in_dimension(cit->vertex(1)) <= 1

View File

@ -59,7 +59,7 @@ inline void set_use_assertions(bool b)
} }
} }
#else #elif !defined(CGAL_USER_DEFINED_USE_ASSERTIONS)
namespace CGAL{ namespace CGAL{
inline void set_use_assertions(bool){} inline void set_use_assertions(bool){}

View File

@ -0,0 +1,33 @@
// Copyright (c) 2023 GeometryFactory Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL$
// $Id$
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Andreas Fabri
#ifndef CGAL_TESTSUITE_DERIVED_SURFACE_MESH_H
#define CGAL_TESTSUITE_DERIVED_SURFACE_MESH_H
namespace CGAL { namespace Testsuite {
template <typename P>
struct DerivedSurfaceMesh: public CGAL::Surface_mesh<P> {
typedef CGAL::Surface_mesh<P> Base;
std::string name;
};
} // namespace Testsuite
} // namespace CGAL
#define CGAL_GRAPH_TRAITS_INHERITANCE_TEMPLATE_PARAMS typename P
#define CGAL_GRAPH_TRAITS_INHERITANCE_CLASS_NAME CGAL::Testsuite::DerivedSurfaceMesh<P>
#define CGAL_GRAPH_TRAITS_INHERITANCE_BASE_CLASS_NAME CGAL::Surface_mesh<P>
#include <CGAL/boost/graph/graph_traits_inheritance_macros.h>
#endif //CGAL_TESTSUITE_DERIVED_SURFACE_MESH_H

View File

@ -8,6 +8,26 @@ project(Triangulation_3)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Boost and its components
find_package(Boost REQUIRED)
if(NOT Boost_FOUND)
message(
STATUS "This project requires the Boost library, and will not be compiled.")
return()
endif()
# include for local directory
# include for local package
# Creating entries for all C++ files with "main" routine
# ##########################################################
create_single_source_cgal_program("ocean.cpp")
create_single_source_cgal_program("incident_edges.cpp") create_single_source_cgal_program("incident_edges.cpp")
create_single_source_cgal_program("simple_2.cpp") create_single_source_cgal_program("simple_2.cpp")
create_single_source_cgal_program("simple.cpp") create_single_source_cgal_program("simple.cpp")

View File

@ -0,0 +1,20 @@
#include <fstream>
#include <CGAL/Random.h>
int main()
{
int N=100;
std::cout.precision(17);
CGAL::Random rng;
for(int i = 0; i < N; ++i){
double x = rng.get_double(-1.0, 1.0);
double y = rng.get_double(-1.0, 1.0);
for(int j = 0; j < N; j++){
std::cout << x << " " << y << " " << rng.get_double(-1.0, 1.0) << std::endl;
}
}
return 0;
}

View File

@ -1,6 +1,6 @@
//#define CGAL_PROFILE //#define CGAL_PROFILE
#define CGAL_USE_SSE2_FABS //#define CGAL_USE_SSE2_FABS
#define CGAL_USE_SSE2_MAX //#define CGAL_USE_SSE2_MAX
//#define CGAL_MSVC_USE_STD_FABS // use this one with precise //#define CGAL_MSVC_USE_STD_FABS // use this one with precise
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
@ -11,25 +11,31 @@
#include <CGAL/Timer.h> #include <CGAL/Timer.h>
#include <iostream> #include <iostream>
#include <string>
#include <fstream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_3<K> DT; typedef CGAL::Delaunay_triangulation_3<K> DT;
typedef DT::Point Point_3; typedef DT::Point Point_3;
typedef CGAL::Timer Timer; typedef CGAL::Timer Timer;
int main() int main(int argc, char* argv[])
{ {
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("points_3/ocean_r.xyz");
std::ifstream in(filename.c_str());
std::vector<Point_3> points; std::vector<Point_3> points;
Point_3 p; Point_3 p, q;
while(std::cin >> p){ while(in >> p ){
points.push_back(p); points.push_back(p);
} }
std::cout << points.size() << " points read\n";
Timer timer; Timer timer;
timer.start(); timer.start();
size_t N = 0; size_t N = 0;
for(int i = 0; i < 5; i++){ for(int i = 0; i < 1; i++){
DT dt; DT dt;
dt.insert(points.begin(), points.end()); dt.insert(points.begin(), points.end());
N += dt.number_of_cells(); N += dt.number_of_cells();

View File

@ -141,6 +141,25 @@ public:
typedef typename Gt::Plane_3 Plane; typedef typename Gt::Plane_3 Plane;
typedef typename Gt::Object_3 Object; typedef typename Gt::Object_3 Object;
#ifdef CGAL_LINKED_WITH_TBB
// For parallel methods, one store a hint (a `Vertex_handle`).
// We need to have a copy of the point of that vertex as a cache, because
// calls to `hint->point()` might not be thread-safe.
struct Vertex_handle_and_point {
Vertex_handle_and_point(Vertex_handle v) : vh(v), wpt(v->point())
{}
Vertex_handle_and_point& operator=(Vertex_handle v)
{
vh = v;
wpt = v->point();
return *this;
}
Vertex_handle vh;
Weighted_point wpt;
};
using Hint = tbb::enumerable_thread_specific<Vertex_handle_and_point>;
#endif // CGAL_LINKED_WITH_TBB
//Tag to distinguish Delaunay from regular triangulations //Tag to distinguish Delaunay from regular triangulations
typedef Tag_true Weighted_tag; typedef Tag_true Weighted_tag;
@ -400,7 +419,7 @@ public:
++i; ++i;
} }
tbb::enumerable_thread_specific<Vertex_handle> tls_hint(hint->vertex(0)); Hint tls_hint(hint->vertex(0));
tbb::parallel_for(tbb::blocked_range<size_t>(i, num_points), tbb::parallel_for(tbb::blocked_range<size_t>(i, num_points),
Insert_point<Self>(*this, points, tls_hint)); Insert_point<Self>(*this, points, tls_hint));
@ -532,7 +551,7 @@ private:
++i; ++i;
} }
tbb::enumerable_thread_specific<Vertex_handle> tls_hint(hint->vertex(0)); Hint tls_hint(hint->vertex(0));
tbb::parallel_for(tbb::blocked_range<size_t>(i, num_points), tbb::parallel_for(tbb::blocked_range<size_t>(i, num_points),
Insert_point_with_info<Self>(*this, points, infos, indices, tls_hint)); Insert_point_with_info<Self>(*this, points, infos, indices, tls_hint));
@ -1399,13 +1418,13 @@ protected:
RT& m_rt; RT& m_rt;
const std::vector<Weighted_point>& m_points; const std::vector<Weighted_point>& m_points;
tbb::enumerable_thread_specific<Vertex_handle>& m_tls_hint; Hint& m_tls_hint;
public: public:
// Constructor // Constructor
Insert_point(RT& rt, Insert_point(RT& rt,
const std::vector<Weighted_point>& points, const std::vector<Weighted_point>& points,
tbb::enumerable_thread_specific<Vertex_handle>& tls_hint) Hint& tls_hint)
: m_rt(rt), m_points(points), m_tls_hint(tls_hint) : m_rt(rt), m_points(points), m_tls_hint(tls_hint)
{} {}
@ -1417,7 +1436,9 @@ protected:
"early withdrawals / late withdrawals / successes [Delaunay_tri_3::insert]"); "early withdrawals / late withdrawals / successes [Delaunay_tri_3::insert]");
#endif #endif
Vertex_handle& hint = m_tls_hint.local(); auto& vertex_hint_and_point = m_tls_hint.local();
Vertex_handle& hint = vertex_hint_and_point.vh;
Weighted_point& hint_point_mem = vertex_hint_and_point.wpt;
Vertex_validity_checker<typename RT::Triangulation_data_structure> vertex_validity_check; Vertex_validity_checker<typename RT::Triangulation_data_structure> vertex_validity_check;
for(size_t i_point = r.begin() ; i_point != r.end() ; ++i_point) for(size_t i_point = r.begin() ; i_point != r.end() ; ++i_point)
@ -1431,14 +1452,12 @@ protected:
// the hint. // the hint.
if(!vertex_validity_check(hint, m_rt.tds())) if(!vertex_validity_check(hint, m_rt.tds()))
{ {
hint = m_rt.finite_vertices_begin(); vertex_hint_and_point = m_rt.finite_vertices_begin();
continue; continue;
} }
// We need to make sure that while are locking the position P1 := hint->point(), 'hint' // We need to make sure that while are locking the position P1 := hint->point(), 'hint'
// does not get its position changed to P2 != P1. // does not get its position changed to P2 != P1.
const Weighted_point hint_point_mem = hint->point();
if(m_rt.try_lock_point(hint_point_mem) && m_rt.try_lock_point(p)) if(m_rt.try_lock_point(hint_point_mem) && m_rt.try_lock_point(p))
{ {
// Make sure that the hint is still valid (so that we can safely take hint->cell()) and // Make sure that the hint is still valid (so that we can safely take hint->cell()) and
@ -1447,7 +1466,7 @@ protected:
if(!vertex_validity_check(hint, m_rt.tds()) || if(!vertex_validity_check(hint, m_rt.tds()) ||
hint->point() != hint_point_mem) hint->point() != hint_point_mem)
{ {
hint = m_rt.finite_vertices_begin(); vertex_hint_and_point = m_rt.finite_vertices_begin();
m_rt.unlock_all_elements(); m_rt.unlock_all_elements();
continue; continue;
} }
@ -1463,7 +1482,7 @@ protected:
if(could_lock_zone) if(could_lock_zone)
{ {
hint = (v == Vertex_handle() ? c->vertex(0) : v); vertex_hint_and_point = (v == Vertex_handle() ? c->vertex(0) : v);
m_rt.unlock_all_elements(); m_rt.unlock_all_elements();
success = true; success = true;
#ifdef CGAL_CONCURRENT_TRIANGULATION_3_PROFILING #ifdef CGAL_CONCURRENT_TRIANGULATION_3_PROFILING
@ -1502,7 +1521,7 @@ protected:
const std::vector<Weighted_point>& m_points; const std::vector<Weighted_point>& m_points;
const std::vector<Info>& m_infos; const std::vector<Info>& m_infos;
const std::vector<std::size_t>& m_indices; const std::vector<std::size_t>& m_indices;
tbb::enumerable_thread_specific<Vertex_handle>& m_tls_hint; Hint& m_tls_hint;
public: public:
// Constructor // Constructor
@ -1510,7 +1529,7 @@ protected:
const std::vector<Weighted_point>& points, const std::vector<Weighted_point>& points,
const std::vector<Info>& infos, const std::vector<Info>& infos,
const std::vector<std::size_t>& indices, const std::vector<std::size_t>& indices,
tbb::enumerable_thread_specific<Vertex_handle>& tls_hint) Hint& tls_hint)
: m_rt(rt), m_points(points), m_infos(infos), m_indices(indices), : m_rt(rt), m_points(points), m_infos(infos), m_indices(indices),
m_tls_hint(tls_hint) m_tls_hint(tls_hint)
{} {}
@ -1523,7 +1542,9 @@ protected:
"early withdrawals / late withdrawals / successes [Delaunay_tri_3::insert]"); "early withdrawals / late withdrawals / successes [Delaunay_tri_3::insert]");
#endif #endif
Vertex_handle& hint = m_tls_hint.local(); auto& vertex_hint_and_point = m_tls_hint.local();
Vertex_handle& hint = vertex_hint_and_point.vh;
Weighted_point& hint_point_mem = vertex_hint_and_point.wpt;
Vertex_validity_checker<typename RT::Triangulation_data_structure> vertex_validity_check; Vertex_validity_checker<typename RT::Triangulation_data_structure> vertex_validity_check;
for(size_t i_idx = r.begin() ; i_idx != r.end() ; ++i_idx) for(size_t i_idx = r.begin() ; i_idx != r.end() ; ++i_idx)
@ -1538,14 +1559,12 @@ protected:
// the hint. // the hint.
if(!vertex_validity_check(hint, m_rt.tds())) if(!vertex_validity_check(hint, m_rt.tds()))
{ {
hint = m_rt.finite_vertices_begin(); vertex_hint_and_point = m_rt.finite_vertices_begin();
continue; continue;
} }
// We need to make sure that while are locking the position P1 := hint->point(), 'hint' // We need to make sure that while are locking the position P1 := hint->point(), 'hint'
// does not get its position changed to P2 != P1. // does not get its position changed to P2 != P1.
const Weighted_point hint_point_mem = hint->point();
if(m_rt.try_lock_point(hint_point_mem) && m_rt.try_lock_point(p)) if(m_rt.try_lock_point(hint_point_mem) && m_rt.try_lock_point(p))
{ {
// Make sure that the hint is still valid (so that we can safely take hint->cell()) and // Make sure that the hint is still valid (so that we can safely take hint->cell()) and
@ -1554,7 +1573,7 @@ protected:
if(!vertex_validity_check(hint, m_rt.tds()) || if(!vertex_validity_check(hint, m_rt.tds()) ||
hint->point() != hint_point_mem) hint->point() != hint_point_mem)
{ {
hint = m_rt.finite_vertices_begin(); vertex_hint_and_point = m_rt.finite_vertices_begin();
m_rt.unlock_all_elements(); m_rt.unlock_all_elements();
continue; continue;
} }
@ -1572,12 +1591,12 @@ protected:
{ {
if(v == Vertex_handle()) if(v == Vertex_handle())
{ {
hint = c->vertex(0); vertex_hint_and_point = c->vertex(0);
} }
else else
{ {
v->info() = m_infos[i_point]; v->info() = m_infos[i_point];
hint = v; vertex_hint_and_point = v;
} }
m_rt.unlock_all_elements(); m_rt.unlock_all_elements();