Merge branch 'master' into Mesh-3-edge-distance-criterium-aclement

This commit is contained in:
Laurent Rineau 2023-11-16 14:53:25 +01:00 committed by GitHub
commit 7b8c90ec3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
188 changed files with 122820 additions and 109991 deletions

View File

@ -1,6 +1,6 @@
/*!
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept
Two types `A` and `B` are a model of the `ExplicitInteroperable`
@ -27,4 +27,3 @@ class ExplicitInteroperable {
public:
}; /* end ExplicitInteroperable */

View File

@ -1,6 +1,6 @@
/*!
\ingroup PkgAlgebraicFoundationsFractionsConcepts
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept
A type is considered as a `Fraction`, if there is a reasonable way to
@ -17,4 +17,3 @@ class Fraction {
public:
}; /* end Fraction */

View File

@ -1,6 +1,6 @@
/*!
\ingroup PkgAlgebraicFoundationsConcepts
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept
A model of the concept `FromDoubleConstructible` is required
@ -27,4 +27,3 @@ FromDoubleConstructible(const double& d);
/// @}
}; /* end FromDoubleConstructible */

View File

@ -1,6 +1,6 @@
/*!
\ingroup PkgAlgebraicFoundationsConcepts
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept
A model of the concept `FromIntConstructible` is required
@ -28,4 +28,3 @@ FromIntConstructible(int& i);
/// @}
}; /* end FromIntConstructible */

View File

@ -1,6 +1,6 @@
/*!
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts
\ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept
Two types `A` and `B` are a model of the concept
@ -29,4 +29,3 @@ class ImplicitInteroperable {
public:
}; /* end ImplicitInteroperable */

View File

@ -1,19 +1,16 @@
#ifndef CGAL_APOLLONIUS_GRAPH_2_TEST_H
#define CGAL_APOLLONIUS_GRAPH_2_TEST_H
#include <cassert>
#include <CGAL/enum.h>
#include <CGAL/use.h>
#include <CGAL/Vector_2.h> // this is done in order to avoid error
// when the Segment_2_Segment_2_intersection.h file is included from
// the Triangulation_euclidean_traits_2.h file.
#include <CGAL/Apollonius_graph_2.h>
#include <CGAL/Apollonius_graph_hierarchy_2.h>
#include <CGAL/Apollonius_graph_traits_2.h>
#include <CGAL/Apollonius_graph_filtered_traits_2.h>
//#include <CGAL/new_traits/Apollonius_graph_new_filtered_traits_2.h>
#include <cassert>
#include <CGAL/enum.h>
#include <CGAL/use.h>
#include <CGAL/Random.h>
#include "IO/Null_output_stream.h"
@ -839,24 +836,29 @@ bool test_algo_generic(InputStream& is)
// file I/O methods
//--------------------------------------------------------------------
{
std::ofstream ofs("ag_testsuite.tmp");
std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
std::cout << "writing to " << fname << std::endl;
std::ofstream ofs(fname);
assert( ofs );
ag.file_output(ofs);
ofs.close();
std::ifstream ifs("ag_testsuite.tmp");
std::ifstream ifs(fname);
assert( ifs );
ag.file_input(ifs);
ifs.close();
assert( ag.is_valid() );
}
{
std::ofstream ofs("ag_testsuite.tmp");
std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
std::cout << "writing to " << fname << std::endl;
std::ofstream ofs(fname);
assert( ofs );
ofs << ag;
ofs.close();
std::ifstream ifs("ag_testsuite.tmp");
std::ifstream ifs(fname);
assert( ifs );
ifs >> ag;
ifs.close();

View File

@ -5651,10 +5651,24 @@ must model the basic concept `ArrangementBasicTopologyTraits`. A model
of this basic concept holds the (\dcel) data structure used to
represent the arrangement cells (i.e., vertices, edges, and facets)
and the incidence relations between them. At this point we do not
expose the concepts that refine the basic concept. The package
contains one topology traits, namely,
`Arr_spherical_topology_traits_2`. It can serve as a topology traits
for an arrangement embedded on a sphere. More precisely, for an
expose the concepts that refine the basic concept. The package
contains three topology traits class templates, namely,
`Arr_bounded_planar_topology_traits_2`,
`Arr_unb_planar_topology_traits_2`, and
`Arr_spherical_topology_traits_2`. The first two are internally used
to define any instance of the class template
`Arrangement_2<GeometryTraits_2, Dcel>`. In particular, an instance
`Arrangement_2<Geometry_traits_2, Dcel_>` is derived from the instance
`Arrangement_on_surface_2<Geometry_traits_2,Topology_traits>`, where
the `Topology_traits` type is selected based on the provided geometry
traits `Geometry_traits_2`, or more precisely, on the boundary
conditions defined by the geometry traits. If all sides of the
boundary of the parameter space are closed, the instance
`Arr_bounded_planar_topology_traits_2<Geometry_traits_2,Dcel_>` is
selected; otherwise the instance
`Arr_unb_planar_topology_traits_2<Geometry_traits_2,Dcel_>` is
selected. The third topology traits serves as a topology traits for
an arrangement embedded on a sphere. More precisely, for an
arrangement embedded on a sphere defined over a parameter space, the
left and right boundary sides of which are identified, and the top and
bottom boundary sides are contracted.

View File

@ -26,45 +26,37 @@ one of the integral types above.
*/
template< typename Coefficient >
template <typename Coefficient>
class Arr_algebraic_segment_traits_2 {
public:
/// \name Types
/// @{
/*!
Value to specify whether a point should be in the interior
of a segment, or its minimal point,
or its maximal point in lexicographic order.
*/
/*! Value to specify whether a point should be in the interior of a segment, or
* its minimal point, or its maximal point in lexicographic order.
*/
enum Site_of_point { POINT_IN_INTERIOR = 0, MIN_ENDPOINT = -1, MAX_ENDPOINT = 1 };
/*!
the type for bivariate polynomials,
with innermost coefficient type `Coefficient`.
Constitutes a model of the concept `Polynomial_d`
with two variables.
\sa `CGAL::Polynomial_d`
*/
/*! the type for bivariate polynomials, with innermost coefficient type
* `Coefficient`. Constitutes a model of the concept `Polynomial_d` with two
* variables.
*
* \sa `CGAL::Polynomial_d`
*/
typedef unspecified_type Polynomial_2;
/*!
model for the concept
`AlgebraicKernel_1`
*/
/*! model for the concept `AlgebraicKernel_1`
*/
typedef unspecified_type Algebraic_kernel_1;
/*!
represents coordinates of points.
Typedef from `Algebraic_kernel_1::Algebraic_real_1`
*/
/*! represents coordinates of points.
* Typedef from `Algebraic_kernel_1::Algebraic_real_1`
*/
typedef unspecified_type Algebraic_real_1;
/*!
Typedef from `Algebraic_kernel_1::Bound`
*/
/*! Typedef from `Algebraic_kernel_1::Bound`
*/
typedef unspecified_type Bound;
/// @}
@ -74,46 +66,41 @@ typedef unspecified_type Bound;
/*!
*/
*/
Construct_curve_2 construct_curve_2_object() const;
/*!
*/
*/
Construct_point_2 construct_point_2_object() const;
/*!
*/
*/
Construct_x_monotone_segment_2 construct_x_monotone_segment_2_object() const;
/// @}
/*!
*/
*/
class Construct_curve_2 {
public:
/// \name Object Creation Functors
/// @{
/*!
Returns a `Curve_2` object that represents the curve defined by
the polynomial `p`
*/
/*! Returns a `Curve_2` object that represents the curve defined by the
* polynomial `p`
*/
Curve_2 operator() (Polynomial_2 p);
/*!
Returns a `Curve_2` object specified by `s`.
The passed string represents the defining polynomial of the curve
and must be given in a MAPLE-readable format using "x" as first
and "y" as second variable, e.g.,
"(x^3*y-2*x)*(-6*x-y^3*x^6)"
for integer coefficients, and "3/2*x*y^4-5/7*x^2+3/1"
for rational coefficients.
*/
/*! Returns a `Curve_2` object specified by `s`. The passed string represents
* the defining polynomial of the curve and must be given in a MAPLE-readable
* format using "x" as first and "y" as second variable, e.g.,
* \f$(x^3*y-2*x)*(-6*x-y^3*x^6)\f$ for integer coefficients, and
* \f$3/2*x*y^4-5/7*x^2+3/1\f$ for rational coefficients.
*/
Curve_2 operator() (std::string s);
/// @}
@ -122,49 +109,42 @@ Curve_2 operator() (std::string s);
/*!
*/
*/
class Construct_point_2 {
public:
/// \name Object Creation Functors
/// @{
/*!
Returns a `Point_2` object that represents the `arcno`-th
point in the fiber of `cv` at \f$ x\f$-coordinate `x`,
counted from the bottom, starting with zero.
\pre (`cv` must not have a vertical line at `x`,
and \f$ 0\leq arcno < c\f$, where \f$ c\f$ is the number of points
in the fiber of `cv` at `x`.)
*/
/*! Returns a `Point_2` object that represents the `arcno`-th
* point in the fiber of `cv` at \f$ x\f$-coordinate `x`,
* counted from the bottom, starting with zero.
* \pre (`cv` must not have a vertical line at `x`,
* and \f$ 0\leq arcno < c\f$, where \f$ c\f$ is the number of points
* in the fiber of `cv` at `x`.)
*/
Point_2 operator() (Algebraic_real_1 x, Curve_2 cv, int arcno);
/*!
Returns a `Point_2` object that represents the
point on `xcv` at \f$ x\f$-coordinate `x`
\pre (`x` is in the \f$ x\f$-range of `xcv`.)
*/
/*! Returns a `Point_2` object that represents the
* point on `xcv` at \f$ x\f$-coordinate `x`
* \pre (`x` is in the \f$ x\f$-range of `xcv`.)
*/
Point_2 operator() (Algebraic_real_1 x, X_monotone_curve_2 xcv);
/*!
Returns a `Point_2` object that represents (x,y)
*/
/*! Returns a `Point_2` object that represents (x,y)
*/
Point_2 operator() (Algebraic_real_1 x, Algebraic_real_1 y);
/*!
Returns a `Point_2` object that represents (x,y)
*/
/*! Returns a `Point_2` object that represents (x,y)
*/
Point_2 operator() (Coefficient x, Coefficient y);
/*!
Returns a `Point_2` object that represents (x,y)
*/
/*! Returns a `Point_2` object that represents (x,y)
*/
Point_2 operator() (Bound x, Bound y);
/*!
Returns a `Point_2` object that represents (x,y)
*/
/*! Returns a `Point_2` object that represents (x,y)
*/
Point_2 operator() (int x, int y);
/// @}
@ -173,91 +153,86 @@ Point_2 operator() (int x, int y);
/*!
*/
*/
class Construct_x_monotone_segment_2 {
public:
/// \name Object Creation Functors
/// @{
/*!
Writes a sequence of `X_monotone_curve_2` objects (terminal
segments) into `out`. These terminal segments compose an
\f$ x\f$-monotone (or vertical) segment of the curve `cv` that
starts in `end_min`, and ends in `end_max`.
\pre (`end_min` must have a unique \f$ x\f$-monotone segment
to its right, or `end_max` must have a unique
\f$ x\f$-monotone segment to its left. Furthermore,
`end_min` and `end_max` must be connected
by an \f$ x\f$-monotone segment of `cv`)
*/
template<class OutputIterator> OutputIterator
operator() (Curve_2 cv, Point_2 end_min, Point_2 end_max,
OutputIterator out);
/*! inserts a sequence of `X_monotone_curve_2` objects (terminal segments) into
* an output container given through an output iterator. These terminal segments
* compose an \f$x\f$-monotone (or vertical) segment of a given curve that
* starts in `end_min`, and ends in `end_max`.
*
* \param cv The input curve.
* \param end_min The starting point.
* \param end_max The ending point.
* \param oi The output iterator that points at the output container.
* \return The past-the-end iterator of the output container.
*
* \pre `end_min` must have a unique \f$x\f$-monotone segment to its right, or
* `end_max` must have a unique \f$x\f$-monotone segment to its left.
* Furthermore, `end_min` and `end_max` must be connected by an
* \f$x\f$-monotone segment of `cv`)
*/
template <typename OutputIterator>
OutputIterator operator() (Curve_2 cv, Point_2 end_min, Point_2 end_max,
OutputIterator oi);
/*!
Writes a sequence of `X_monotone_curve_2` objects into `out`.
These segments form an \f$ x\f$-monotone (or vertical)
segment of the curve `cv`.
/*! inserts a sequence of `X_monotone_curve_2` objects into an output container
* given through an output iterator. These segments form an \f$x\f$-monotone
* (or vertical) segment of the curve `cv`.
*
* If `site_of_p==POINT_IN_INTERIOR`, the maximal segment is
* returned that contains `p` in its interior.
*
* returned that contains `p` as its left endpoint.
*
* returned that contains `p` as its left endpoint.
*
* \pre (If `site_of_p==POINT_IN_INTERIOR`, `p`
* must be an interior point of an \f$x\f$-monotone or a vertical
* segment.
* must either have a unique \f$x\f$-monotone segment to the right,
* or a vertical segment from `p` upwards.
* must either have a unique \f$x\f$-monotone segment to the left,
* or a vertical segment from `p` downwards.)
*/
template <typename OutputIterator>
OutputIterator operator() (Curve_2 cv, Point_2 p, Site_of_point site_of_p,
OutputIterator out);
If `site_of_p==POINT_IN_INTERIOR`, the maximal segment is
returned that contains `p` in its interior.
returned that contains `p` as its left endpoint.
returned that contains `p` as its left endpoint.
\pre (If `site_of_p==POINT_IN_INTERIOR`, `p`
must be an interior point of an \f$ x\f$-monotone or a vertical
segment.
must either have a unique \f$ x\f$-monotone segment to the right,
or a vertical segment from `p` upwards.
must either have a unique \f$ x\f$-monotone segment to the left,
or a vertical segment from `p` downwards.)
*/
template<class OutputIterator> OutputIterator
operator() (Curve_2 cv, Point_2 p,
Site_of_point site_of_p,
OutputIterator out);
/*!
Writes a sequence of `X_monotone_curve_2` objects into `out`.
These segments form a straight-line segment connecting
the points `p` and `q`. If `p` and `q` share the
same \f$ x\f$-coordinate, the constructed vertical segment consists of
only one `X_monotone_curve_2` object and can be computed
efficiently. In the non-vertical case,
the construction is only possible if `p` and `q`
have both rational x- and y-coordinates.
\pre (`p` must not be equal to `q`.)
*/
template<class OutputIterator> OutputIterator
operator() (Point_2 p, Point_2 q,
OutputIterator out);
/*! inserts a sequence of `X_monotone_curve_2` objects into an output container
* given through an output iterator. These segments form a straight-line
* segment connecting the points `p` and `q`. If `p` and `q` share the same
* \f$x\f$-coordinate, the constructed vertical segment consists of only one
* `X_monotone_curve_2` object and can be computed efficiently. In the
* non-vertical case, the construction is only possible if `p` and `q` have both
* rational x- and y-coordinates.
*
* \pre (`p` must not be equal to `q`.)
*/
template <typename OutputIterator>
OutputIterator operator() (Point_2 p, Point_2 q, OutputIterator out);
/// @}
}; /* end Arr_algebraic_segment_traits_2::Construct_x_monotone_segment_2 */
/*!
Models the `ArrangementTraits_2::Curve_2` concept.
Represents algebraic curves. Internally, the type stores
topological-geometric information about the particular curve.
In order to use internal caching, instances should only be created
using the `Construct_curve_2` functor of the traits class.
*/
/*! Models the `ArrangementTraits_2::Curve_2` concept.
* Represents algebraic curves. Internally, the type stores
* topological-geometric information about the particular curve.
* In order to use internal caching, instances should only be created
* using the `Construct_curve_2` functor of the traits class.
*/
class Curve_2 {
public:
/// \name Modifiers
/// @{
/*!
returns the defining polynomial of the curve.
/*! returns the defining polynomial of the curve.
*/
Polynomial_2 polynomial () const;
@ -265,124 +240,105 @@ Polynomial_2 polynomial () const;
}; /* end Arr_algebraic_segment_traits_2::Curve_2 */
/*!
/*! Models the `ArrangementBasicTraits_2::Point_2` concept.
* Represents points in \f$ \mathbb{R}^2\f$. Intersection points of algebraic
* curves are in general non-rational, so we need a data structure that is
* capable of representing arbitrary points with algebraic coordinates.
*
* The traits class represents algebraic coordinates by the type
* `Algebraic_real_1`, which is a model of the `AlgebraicReal_1` concept.
* A point \f$ p\f$ is stored by a triple \f$ (x,cv,arcno)\f$,
* where \f$ x\f$ is the \f$ x\f$-coordinate of a point, \f$ cv\f$ is an instance
* of `Curve_2` that contains the point, (and has no vertical line at \f$ x\f$),
* and \f$ arcno\f$ is an `int`, denoting that \f$ p\f$ is met as the
* \f$arcno\f$-th point when shooting a vertical ray at \f$ x\f$, starting from
* \f$-\infty\f$ (where counting starts with \f$ 0\f$).
*
* In addition to the methods listed below, the copy constructor and assignment
* operator for `Point_2` objects are also supported.
*
* The functor `Construct_point_2` constructs `Point_2` instances.
*/
Models the `ArrangementBasicTraits_2::Point_2` concept.
Represents points in \f$ \mathbb{R}^2\f$. Intersection points of algebraic curves
are in general non-rational, so we need a data structure that is capable
of representing arbitrary points with algebraic coordinates.
The traits class represents algebraic coordinates by the type
`Algebraic_real_1`, which is a model of the `AlgebraicReal_1`
concept.
A point \f$ p\f$ is stored by a triple \f$ (x,cv,arcno)\f$,
where \f$ x\f$ is the \f$ x\f$-coordinate of a point, \f$ cv\f$ is an instance
of `Curve_2` that contains the point, (and has no vertical line at \f$ x\f$),
and \f$ arcno\f$ is an `int`, denoting that \f$ p\f$ is met as the \f$ arcno\f$-th
point when shooting a vertical ray at \f$ x\f$, starting from \f$ -\infty\f$
(where counting starts with \f$ 0\f$).
In addition to the methods listed below, the copy constructor and assignment
operator for `Point_2` objects are also supported.
The functor `Construct_point_2` constructs `Point_2` instances.
*/
class Point_2 {
public:
/// \name Modifiers
/// @{
/*!
returns the \f$ x\f$-coordinate of `p`.
*/
/*! returns the \f$ x\f$-coordinate of `p`.
*/
Algebraic_real_1 x () const;
/*!
returns the \f$ y\f$-coordinates of `p`.
<B>Attention:</B> As described above, points are not stored
by their \f$ y\f$-coordinate in `Algebraic_real_1` representation. In fact,
this representation must be computed on demand, and might become quite
costly for points defined by high-degree polynomials. Therefore, it is
recommended to avoid to call this function as much as possible.
*/
/*! returns the \f$ y\f$-coordinates of `p`.
*
* <B>Attention:</B> As described above, points are not stored
* by their \f$ y\f$-coordinate in `Algebraic_real_1` representation. In fact,
* this representation must be computed on demand, and might become quite
* costly for points defined by high-degree polynomials. Therefore, it is
* recommended to avoid to call this function as much as possible.
*/
Algebraic_real_1 y () const;
/*!
returns a `Curve_2` instance that `p`is part of.
*/
/*! returns a `Curve_2` instance that `p`is part of.
*/
Curve_2 curve () const;
/*!
returns the arc number of `p`.
*/
/*! returns the arc number of `p`.
*/
int arcno () const;
/*!
returns double-approximations of the \f$ x\f$- and \f$ y\f$-coordinates.
*/
/*! returns double-approximations of the \f$ x\f$- and \f$ y\f$-coordinates.
*/
std::pair<double,double> to_double () const;
/// @}
}; /* end Arr_algebraic_segment_traits_2::Point_2 */
/*!
Models the `ArrangementBasicTraits_2::X_monotone_curve_2` concept.
Represents terminal segments of an algebraic curves,
that means vertical segments or \f$ x\f$-monotone segments with no critical
\f$ x\f$-coordinate in the interior of their \f$ x\f$-range.
Terminal segments might either be bounded or unbounded.
By definition, each interior point of
a non-vertical segment has the same arc number (see the documentation of
type `Point_2` above, which is called the <I>arc number</I> of the segment
(note the arc number at the endpoints might differ).
Such segments are represented internally by a 4-tuple \f$ (p,q,cv,arcno)\f$,
where \f$ p\f$ and \f$ q\f$ are the endpoints, \f$ cv\f$ is the <I>supporting curve</I>
that the segment belongs to, and arcno is the arc number of the segment.
Arbitrary (weakly) \f$ x\f$-monotone segments are presented by a range
of `X_monotone_curve_2` instances, whose union equals the segment.
The functor `Construct_x_monotone_segment_2` allows their construction.
To construct all (maximal) terminal segments of a curve,
use the `Make_x_monotone_2` functor supplied by the traits class.
*/
/*! Models the `ArrangementBasicTraits_2::X_monotone_curve_2` concept.
* Represents terminal segments of an algebraic curves, that means vertical
* segments or \f$ x\f$-monotone segments with no critical \f$ x\f$-coordinate
* in the interior of their \f$ x\f$-range. Terminal segments might either be
* bounded or unbounded. By definition, each interior point of a non-vertical
* segment has the same arc number (see the documentation of type `Point_2`
* above, which is called the <I>arc number</I> of the segment (note the arc
* number at the endpoints might differ). Such segments are represented
* internally by a 4-tuple \f$ (p,q,cv,arcno)\f$, where \f$ p\f$ and \f$ q\f$
* are the endpoints, \f$ cv\f$ is the <I>supporting curve</I> that the segment
* belongs to, and arcno is the arc number of the segment.
*
* Arbitrary (weakly) \f$ x\f$-monotone segments are presented by a range
* of `X_monotone_curve_2` instances, whose union equals the segment.
* The functor `Construct_x_monotone_segment_2` allows their construction.
* To construct all (maximal) terminal segments of a curve,
* use the `Make_x_monotone_2` functor supplied by the traits class.
*/
class X_monotone_curve_2 {
public:
/// \name Modifiers
/// @{
/*!
returns the supporting algebraic curve of `s`.
*/
/*! returns the supporting algebraic curve of `s`.
*/
Curve_2 curve () const;
/*!
returns whether `s` is a vertical segment.
*/
/*! returns whether `s` is a vertical segment.
*/
bool is_vertical () const;
/*!
returns whether `s` has a finite endpoint on the left
*/
/*! returns whether `s` has a finite endpoint on the left
*/
bool is_finite (CGAL::Arr_curve_end ce) const;
/*!
\pre (The corresponding curve end is finite)
*/
/*! \pre (The corresponding curve end is finite)
*/
Point_2 curve_end (CGAL::Arr_curve_end ce) const;
/*!
returns the arc number of the segment.
\pre (The segment is non-vertical)
*/
/*! returns the arc number of the segment.
* \pre (The segment is non-vertical)
*/
int arcno () const;
/*!
@ -395,8 +351,6 @@ Algebraic_real_1 x () const;
}; /* end Arr_algebraic_segment_traits_2::X_monotone_curve_2 */
}; /* end Arr_algebraic_segment_traits_2 */
} /* end namespace CGAL */

View File

@ -1,36 +1,38 @@
namespace CGAL {
/*!
\ingroup PkgArrangementOnSurface2PointLocation
Performs a batched point-location operation on a
given arrangement. It accepts a range of query points, and locates each
point in the arrangement. The query results are returned through the output
iterator. Each query result is given as a pair of the query point and an
object representing the arrangement feature that contains it, namely a
discriminated union container of the bounded types `Face_const_handle`,
`Halfedge_const_handle`, and `Vertex_const_hanlde`. The resulting
pairs in the output sequence are sorted in increasing \f$ xy\f$-lexicographical
order of the query points. The function returns a past-the-end iterator of
the output sequence.
\cgalHeading{Requirements}
<UL>
<LI>`InputIterator::value_type` must be `Arrangement_2::Point_2`.
<LI>`OutputIterator::value_type` must be convertible to
`std::pair<Arrangement_2::Point_2, Arr_point_location_result<Arrangement_2>::%Type>`.
</UL>
\sa `CGAL::Arr_point_location_result<Arrangement>`
*/
template<typename Traits, typename Dcel,
/*! \ingroup PkgArrangementOnSurface2PointLocation
*
* performs a batched point-location operation on a given arrangement. It
* accepts a collection of query points, locates each point in a given
* arrangement, and inserts the query results into an output container given
* through an output iterator. Each query result is given as a pair of the query
* point and an object representing the arrangement feature that contains it,
* namely a discriminated union container of the types `Face_const_handle`,
* `Halfedge_const_handle`, and `Vertex_const_hanlde`. The resulting pairs in
* the output container are sorted in increasing \f$xy\f$-lexicographical order
* of the query points.
*
* \param arr The arrangement.
* \param begin The begin iterator of the container of input points.
* \param end The past-the-end iterator of the container of input points.
* \param oi The output iterator that points at the output container.
* \return The past-the-end iterator of the output container.
*
* \cgalHeading{Requirements}
*
* \pre The value type of `InputIterator` must be convertible to
* `Arrangement_2::Point_2`.
* \pre Dereferencing `oi` must yield an object convertible to
* `std::pair<Arrangement_2::Point_2, Arr_point_location_result<Arrangement_2>::%Type>`.
*
* \sa `CGAL::Arr_point_location_result<Arrangement>`
*
*/
template <typename Traits, typename Dcel,
typename InputIterator, typename OutputIterator>
OutputIterator locate (const Arrangement_2<Traits,Dcel>& arr,
InputIterator points_begin,
InputIterator points_end,
OutputIterator oi);
OutputIterator locate (const Arrangement_2<Traits, Dcel>& arr,
InputIterator begin,
InputIterator end,
OutputIterator oi);
} /* namespace CGAL */

View File

@ -467,20 +467,23 @@ public:
*/
Approximate_point_2 operator()(const Point_2& p) const;
/*! Obtain a polyline that approximates an \f$x\f$-monotone curve. The
* polyline is defined by a range of approximate points beginning at
* `oi`. The type `OutputIterator` must dereference the type
* `Approximate_point_2`. The first and last points in the range are always
* the endpoints of the given arc `xcv`. The operator returns a
* past-the-end iterator of the destination range.
* \param oi An output iterator for the resulting polyline.
* \param error The error bound of the polyline approximation. This is
* the Hausdorff distance between the arc and the polyline
* that approximates the arc.
/*! approximates a given \f$x\f$-monotone curve. It computes a sequence of
* approximate points that represent an approximate polyline, and inserts
* them into an output container given through an output iterator. The
* first and last points in the sequence are always approximations of the
* endpoints of the given arc.
*
* \param oi An output iterator for the output container.
* \param error The error bound of the polyline approximation. This is the
* Hausdorff distance between the arc and the polyline that
* approximates the arc.
* \param xcv The exact \f$x\f$-monotone arc.
* \param l2r A Boolean flag that indicates whether the arc direction is
* left to right.
* \return The past-the-end iterator of the output iterator.
* left to right.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield an object of type
* `Arr_conic_traits_2::Approximate_point_2`.
*/
template <typename OutputIterator>
OutputIterator operator()(OutputIterator oi, double error,
@ -521,7 +524,7 @@ public:
Trim_2 trim_2_object() const;
/*! Obtain an `Approximate_2` functor. */
Trim_2 approximate_2_object() const;
Approximate_2 approximate_2_object() const;
/// @}

View File

@ -1,27 +1,28 @@
namespace CGAL {
/*!
\ingroup PkgArrangementOnSurface2PointLocation
A unary metafunction to determine the return type of a point-location
or vertical ray-shoot query.
\tparam Arrangement must be an instance of the `CGAL::Arrangement_2<Traits,Dcel>` class template.
\sa `ArrangementPointLocation_2`
\sa `ArrangementVerticalRayShoot_2`
\sa `CGAL::Arr_naive_point_location<Arrangement>`
\sa `CGAL::Arr_walk_along_line_point_location<Arrangement>`
\sa `CGAL::Arr_landmarks_point_location<Arrangement,Generator>`
\sa `CGAL::Arr_trapezoid_ric_point_location<Arrangement>`
*/
template <class Arrangement>
/*! \ingroup PkgArrangementOnSurface2PointLocation
*
* A unary metafunction to determine the return type of a point-location or
* vertical ray-shoot query.
*
* \tparam Arrangement must be an instance of the
* `CGAL::Arrangement_on_surface_2<GeometryTraits,Topology>` class template.
*
* \sa `ArrangementPointLocation_2`
* \sa `ArrangementVerticalRayShoot_2`
* \sa `CGAL::Arr_naive_point_location<Arrangement>`
* \sa `CGAL::Arr_walk_along_line_point_location<Arrangement>`
* \sa `CGAL::Arr_landmarks_point_location<Arrangement,Generator>`
* \sa `CGAL::Arr_trapezoid_ric_point_location<Arrangement>`
*/
template <typename Arrangement>
struct Arr_point_location_result
{
/*! The type of the arrangement feature that is the result of a
* point-location query or a vertical ray-shoot query, namely,
* `std::variant<Arrangement::Vertex_const_handle, Arrangement::Halfedge_const_handle, Arrangement::Face_const_handle>`
* `std::variant<Arrangement_on_surface_2::Vertex_const_handle, Arrangement_on_surface_2::Halfedge_const_handle, Arrangement_on_surface_2::Face_const_handle>`
*/
typedef unspecified_type Type;
}; /* end Arr_point_location_result */
} /* end namespace CGAL */

View File

@ -238,17 +238,22 @@ namespace CGAL {
const Point_2& tgt) const;
};
/*! Subdivide a given subcurve into x-monotone subcurves and insert them
* into a given output iterator.
/*! Subdivide a given subcurve into \f$x\f$-monotone subcurves and
* isolated points, and insert them into an output container. An object in
* the output container is represented by a discriminated union container
* that holds either a point or an \f$x\f$-monotone curve.
*/
class Make_x_monotone_2 {
public:
/*!
* \pre if `cv` is not empty then it must be continuous and well-oriented.
/*! performs the subdivision.
*
* \param cv the subcurve.
* \param oi an output iterator for the result. Its value type is a variant
* that wraps Point_2 or an X_monotone_curve_2 objects.
* \return the past-the-end iterator.
* \param oi The output iterator that points at the output container.
* \return the past-the-end iterator of the output container.
*
* \pre if `cv` is not empty, then it must be continuous and well-oriented.
* \pre Dereferencing `oi` must yield a polymorphic object of type
* `std::variant<`\link Arr_polycurve_traits_2::Point_2 `Point_2` \endlink, `X_monotone_curve_2>`.
*/
template <typename OutputIterator>
OutputIterator operator()(const Curve_2& cv, OutputIterator oi) const;

View File

@ -2,51 +2,51 @@ namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Funcs
*
* Produces the symbolic vertical decomposition of a given arrangement,
* performing a batched vertical ray-shooting query from all arrangement
* vertices, such that every vertex is associated with a pair of objects, one
* corresponds to the arrangement feature that lies below it, and the other
* corresponds to the feature that lies above it. The output of this function
* can be readily used for inserting vertical walls and physically decomposing
* the arrangement into pseudo-trapezoids. To do this, it is convenient to
* process the vertices in an ascending \f$ xy\f$-lexicographic order. The
* visible objects are therefore returned through an output iterator, which
* pairs each finite arrangement vertex with the two features it "sees", such
* that the vertices are given in ascending \f$ xy\f$-lexicographic order.
* produces the symbolic vertical decomposition of a given arrangement. More
* precisely, this function performs a batched vertical ray-shooting query from
* every arrangement vertex, and pairs each vertex with a pair of polymorphic
* objects, one corresponds to the arrangement feature that lies below it, and
* the other corresponds to the feature that lies above it.
*
* Produces the symbolic vertical decomposition of the `arr` arrangement. More
* precisely, it performs a batched vertical ray-shooting query from all
* arrangement vertices, such that every vertex is associated with a pair of
* objects, one corresponding to the arrangement feature that lies below it,
* while the other corresponds to the feature that lies above it. The query
* results are returned through the output iterator, which pairs each finite
* arrangement vertex with a pair of objects, the first represents the feature
* below the vertex, and the second represents the feature that lies above
* it. Each object is an optional variant that wraps a handle to an arrangement
* feature. If the vertex is the top end-vertex of a vertical edge, we say that
* The finite arrangement vertices and the features they "see", if exist,
* that are, the query results, are inserted in ascending \f$xy\f$-lexicographic
* order (of the query vertex) into an output container given through an output
* iterator. If the vertex is the top end-vertex of a vertical edge, we say that
* there is no feature below it; similarly, if it is the bottom end-vertex of a
* vertical edge, we say that there is no feature above it. In these cases the
* optional object is set to be empty; otherwise it is set as follows:
* vertical edge, we say that there is no feature above it. Each feature, if
* exists, is represented by a discriminated union container that holds an
* object of one of the following types:
*
* <UL>
* <LI>`Halfedge_const_handle`, if the vertex is located above (or below) an
* edge. The given halfedge is always directed from right to left. In case
* there is no concrete edge below (or above) the vertex, and the arrangement
* is unbounded, then the object returned is a <I>fictitious</I> halfedge.
* <LI>`Face_const_handle`, in case there is no edge below (or above)
* the vertex, and the arrangement is bounded.
* <LI>`Vertex_const_handle`, in case the vertex is located vertically above
* (or below) another arrangement vertex.
* </UL> The function returns a past-the-end iterator for its output sequence.
* <LI> `Arrangement_on_surface_2::Halfedge_const_handle`, if the vertex is
* located above (or below) an edge. The given halfedge is always directed
* from right to left. In case there is no concrete edge below (or above)
* the vertex, and the arrangement is unbounded, then the object returned
* is a <I>fictitious</I> halfedge.
* <LI> `Arrangement_on_surface_2::Face_const_handle`, in case there is no edge
* below (or above) the vertex, and the arrangement is bounded.
* <LI> `Arrangement_on_surface_2::Vertex_const_handle`, in case the vertex is
* located vertically above (or below) another arrangement vertex.
* </UL>
*
* The output of this function can be readily used for inserting vertical walls
* and physically decomposing the arrangement into pseudo-trapezoids.
*
* \param arr The arrangement.
* \param oi The output iterator that points at the output container.
* \return The past-the-end iterator of the output container.
*
* \cgalHeading{Requirements}
*
* `OutputIterator::value_type` must be
* `pair<Arrangement_2::Vertex_const_handle, pair<Object, Object> >`.
*
* \pre Dereferencing `oi` must yield an object of type
* `std::pair<Arrangement_on_surface_2::Vertex_const_handle,
* std::pair<std::optional<Type,std::optional<Type>>>`,
* where `Type` is
* `std::variant<Arrangement_on_surface_2::Vertex_const_handle, Arrangement_on_surface_2::Halfedge_const_handle, Arrangement_on_surface_2::Face_const_handle>`.
*/
template<typename Traits, typename Dcel,
typename OutputIterator>
OutputIterator decompose (const Arrangement_2<Traits,Dcel>& arr,
OutputIterator oi);
template <typename Traits, typename TopologyTraits, typename OutputIterator>
OutputIterator
decompose(const Arrangement_on_surface_2<GeometryTraits,TopologyTraits>& arr,
OutputIterator oi);
} /* namespace CGAL */

View File

@ -160,12 +160,12 @@ public:
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Insert insert The function `%insert`
* inserts one or more curves or \f$ x\f$-monotone curves into a given
* arrangement, where no restrictions are imposed on the inserted curves. If an
* inserted curve is not \f$ x\f$-monotone curve, it is subdivided into \f$
* x\f$-monotone subcurves (and perhaps isolated points), which are inserted
* into the arrangement.
/*! \ingroup PkgArrangementOnSurface2Insert
* The function `%insert` inserts one or more curves or \f$ x\f$-monotone curves
* into a given arrangement, where no restrictions are imposed on the inserted
* curves. If an inserted curve is not \f$ x\f$-monotone curve, it is subdivided
* into \f$ x\f$-monotone subcurves (and perhaps isolated points), which are
* inserted into the arrangement.
*
* \cgalHeading{Requirements}
*
@ -379,37 +379,4 @@ template <typename Traits, typename Dcel>
bool remove_vertex(Arrangement_2<Traits,Dcel>& arr,
typename Arrangement_2<Traits,Dcel>::Vertex_handle v);
/*! \ingroup PkgArrangementOnSurface2Funcs
*
* Compute the zone of the given \f$ x\f$-monotone curve in the existing
* arrangement. Meaning, it output the arrangement's vertices, edges and faces
* that the \f$ x\f$-monotone curve intersects. The order of the objects is the
* order that they are discovered when traversing the \f$ x\f$-monotone curve
* from left to right.
*
* A given point-location object is used for answering point-location queries
* during the insertion process. By default, the function uses the "walk along
* line" point-location strategy - namely an instance of the class
* `Arr_walk_along_line_point_location<Arrangement_2<Traits,Dcel> >`.
*
* Compute the zone of the given \f$ x\f$-monotone curve `c` in the arrangement
* `arr`.
*
* \pre If provided, `pl` must be attached to the given arrangement `arr`.
*
* \cgalHeading{Requirements}
*
* <UL>
* <LI>The instantiated `GeomTraits` class must model the
* `ArrangementXMonotoneTraits_2` concept.
* <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept.
* </UL>
*/
template <typename Traits, typename Dcel,
typename OutputIterator, typename PointLocation>
OutputIterator zone(Arrangement_2<Traits, Dcel>& arr,
const typename Traits::X_monotone_curve_2& c,
OutputIterator oi, const PointLocation& pl);
} /* namespace CGAL */

View File

@ -34,7 +34,6 @@ namespace CGAL {
* \sa `Arr_default_dcel<Traits>`
* \sa `ArrangementBasicTraits_2`
* \sa `CGAL::overlay()`
* \sa `CGAL::is_valid()`
* Insertion Functions
@ -1014,7 +1013,7 @@ public:
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2Insert insert
/*! \ingroup PkgArrangementOnSurface2Insert
* The function `%insert` inserts one or more curves or \f$ x\f$-monotone
* curves into a given arrangement, where no restrictions are imposed on the
* inserted curves. If an inserted curve is not \f$ x\f$-monotone curve, it is
@ -1295,38 +1294,43 @@ bool remove_vertex
/*! \ingroup PkgArrangementOnSurface2Funcs
*
* Compute the zone of the given \f$ x\f$-monotone curve in the existing
* arrangement. Meaning, it output the arrangement's vertices, edges and faces
* that the \f$ x\f$-monotone curve intersects. The order of the objects is the
* order that they are discovered when traversing the \f$ x\f$-monotone curve
* from left to right.
* computes the zone of the given \f$x\f$-monotone curve in a given
* arrangement. More precisely, this function finds the arrangement vertices,
* edges ,and faces that the given \f$x\f$-monotone curve intersects, and
* inserts them in the order they are discovered when traversing the
* \f$x\f$-monotone curve from left to right into an output contaiuner given
* through an output iterator. An object in the resulting zone is represented by
* a discriminated union container that holds a vertex handle, halfedge handle,
* or a face handle.
*
* A given point-location object is used for answering point-location queries
* during the insertion process. By default, the function uses the "walk along
* line" point-location strategy - namely an instance of the class
* line" point-location strategy, namely, an instance of the class
* `Arr_walk_along_line_point_location<Arrangement_on_surface_2<GeometryTraits,
* TopologyTraits> >`.
* TopologyTraits>>`.
*
* Compute the zone of the given \f$ x\f$-monotone curve `c` in the arrangement
* `arr`.
* \param arr The given arrangement.
* \param c The \f$x\f$-monotone curve.
* \param oi The output iterator that points at the output container.
* \param pl The point-location object.
* \return The past-the-end iterator of the output container.
*
* \pre If provided, `pl` must be attached to the given arrangement `arr`.
* \pre The instantiated `GeometryTraits` class must model the
* `ArrangementXMonotoneTraits_2` concept.
* \pre The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept.
* \pre Dereferencing `oi` must yield a polymorphic object of type
* `std::variant<Arrangement_on_surface_2::Vertex_handle, Arrangement_on_surface_2::Halfedge_handle, Arrangement_on_surface_2::Face_handle>`.
*
* \cgalHeading{Requirements}
*
* <UL>
* <LI>The instantiated `GeometryTraits` class must model the
* `ArrangementXMonotoneTraits_2` concept.
* <LI>The point-location object `pl`, must model the
* `ArrangementPointLocation_2` concept.
* </UL>
*/
template <typename GeometryTraits, typename TopologyTraits,
typename OutputIterator, typename PointLocation>
OutputIterator zone
(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
const typename GeometryTraits::X_monotone_curve_2& c,
OutputIterator oi,
const PointLocation& pl);
OutputIterator
zone(Arrangement_on_surface_2<GeometryTraits, TopologyTraits>& arr,
const typename GeometryTraits::X_monotone_curve_2& c,
OutputIterator oi,
const PointLocation& pl);
} /* namespace CGAL */

View File

@ -0,0 +1,246 @@
namespace CGAL {
/*! \ingroup PkgArrangementOnSurface2TraitsClasses
*
* `CORE_algebraic_number_traits` is a traits class for CORE's algebraic
* number types.
*
* \sa `Arr_conic_traits_2<RatKernel, AlgKernel, NtTraits>`
*/
class CORE_algebraic_number_traits {
public:
/// \name Types
/// @{
//! The integer number type.
typedef CORE::BigInt Integer;
//! The rational number type.
typedef CORE::BigRat Rational;
//! The polynomial type.
typedef CORE::Polynomial<Integer> Polynomial;
//! The algebraic number type.
typedef CORE::Expr Algebraic;
/// @}
/// \name Utility Functions
/// @{
/*! obtains the numerator of a rational number.
*
* \param q The rational number.
* \return The numerator of `q`.
*/
Integer numerator(const Rational& q) const;
/*! obtains the denominator of a rational number.
*
* \param q The rational number.
* \return The denominator of `q`.
*/
Integer denominator(const Rational& q) const;
/*! converts an integer to an algebraic number.
*
* \param z The integer.
* \return The algebraic number equivalent to `z`.
*/
Algebraic convert(const Integer& z) const;
/*! converts a rational number to an algebraic number.
*
* \param q A rational number.
* \return The algebraic number equivalent to `q`.
*/
Algebraic convert(const Rational& q) const;
/*! constructs a rational number that lies strictly between two algebraic
* values.
*
* \param x1 The first algebraic value.
* \param x2 The second algebraic value.
* \pre The two values are not equal.
* \return The rational number that lies in the open interval (`x1`, `x2`).
*/
Rational rational_in_interval(const Algebraic& x1, const Algebraic& x2) const;
/*! obtains a range of double-precision floats that contains the given
* algebraic number.
*
* \param x The given number.
* \return The range of double-precision floats that contain `x`.
*/
std::pair<double, double> double_interval(const Algebraic& x) const;
/*! converts a sequence of rational coefficients to an equivalent sequence
* of integer coefficients. If the input coefficients are
* \f$q(1),\ldots,q(k)\f$, where \f$q(i) = n(i)/d(i)\f$, then the output
* coefficients will be of the form:
* \f$a(i) = \frac{n(i) \cdot \mathrm{lcm}(d(1),\ldots,d(k))}{d(i) \cdot \mathrm{gcd}(n(1),\ldots, n(k))}\f$.
* It inserts the output sequence into an output container given through an
* output iterator.
*
* \param begin The begin iterator of the rational coefficients input
* container.
* \param end The past-the-end iterator of the rational coefficients input
* container.
* \param oi The output iterator of the integer coefficients output container.
* \return The past-the-end iterator of the output container.
*
* \pre The value type of `InputIterator` is `Rational`.
* \pre Dereferencing `oi` must yield an object convertible to `Integer`.
*/
template <typename InputIterator, typename OutputIterator>
OutputIterator convert_coefficients(InputIterator begin,
InputIterator end,
OutputIterator oi) const;
/*! computes the square root of an algebraic number.
*
* \param x The number.
* \return The square root of `x`.
* \pre `x` is non-negative.
*/
Algebraic sqrt(const Algebraic& x) const;
/*! computes the roots of a quadratic equations \f$a*x^2+ b*x + c = 0\f$
* with integer coefficients, and inserts them into an output container given
* through an output iterator.
*
* \param a The coefficient of \f$x^2\f$
* \param b The coefficient of \f$x\f$
* \param c The free term.
* \param oi The output iterator of the output container of real-valued
* solutions of the quadratic equation.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield an object convertible to `Algebraic`.
*/
template <typename NT, typename OutputIterator>
OutputIterator solve_quadratic_equation(const NT& a, const NT& b, const NT& c,
OutputIterator oi) const;
/*! constructs a polynomial with integer coefficients.
*
* \param coeffs The coefficients of the input polynomial.
* \param degree The degree of the input polynomial.
* \return The polynomial.
*/
Polynomial construct_polynomial(const Integer* coeffs,
unsigned int degree) const;
/*! constructs a polynomial with integer coefficients given rational
* coefficients.
*
* \param coeffs The coefficients of the input polynomial.
* \param degree The degree of the input polynomial.
* \param poly Output: The resulting polynomial with integer coefficients.
* \param poly_denom Output: The denominator for the polynomial.
* \return Whether this polynomial is non-zero (false if the polynomial is
* zero).
*/
bool construct_polynomial(const Rational *coeffs,
unsigned int degree,
Polynomial& poly, Integer& poly_denom) const;
/*! constructs two polynomials with integer coefficients such that
* \f$P(x)/Q(x)\f$ is a rational function equivalent to the one represented
* by the two given vectors of rational coefficients. It is guaranteed that
* the GCD of \f$P(x)\f$ and \f$Q(x)\f$ is trivial.
*
* \param p_coeffs The coefficients of the input numerator polynomial.
* \param p_degree The degree of the input numerator polynomial.
* \param q_coeffs The coefficients of the input denominator polynomial.
* \param q_degree The degree of the input denominator polynomial.
* \param p_poly Output: The resulting numerator polynomial with integer
* coefficients.
* \param q_poly Output: The resulting denominator polynomial with integer
* coefficients.
* \return `true` on success; `false` if the denominator is 0.
*/
bool construct_polynomials(const Rational* p_coeffs,
unsigned int p_degree,
const Rational* q_coeffs,
unsigned int q_degree,
Polynomial& p_poly, Polynomial& q_poly) const;
/*! Compute the degree of a polynomial.
*/
int degree(const Polynomial& poly) const;
/*! evaluates a polynomial at a given \f$x\f$-value.
*
* \param poly The polynomial.
* \param x The value to evaluate at.
* \return The value of the polynomial at `x`.
*/
template <typename NT>
NT evaluate_at(const Polynomial& poly, NT& x) const;
/*! computes the derivative of the given polynomial.
*
* \param poly The polynomial \f$p(x)\f$.
* \return The derivative \f$p'(x)\f$.
*/
Polynomial derive(const Polynomial& poly) const;
/*! multiplies a polynomial by some scalar coefficient.
*
* \param poly The polynomial \f$P(x)\f$.
* \param a The scalar value.
* \return The scalar multiplication \f$a \cdot P(x)\f$.
*/
Polynomial scale(const Polynomial& poly, const Integer& a) const;
/*! performs "long division" of two polynomials: Given \f$A(x)\f$ and
* \f$B(x)\f$ compute two polynomials \f$Q(x)\f$ and \f$R(x)\f$ such that:
* \f$A(x) = Q(x) \cdot B(x) + R(x)\f$ and \f$R(x)\f$ has minimal degree.
*
* \param poly_a The first polynomial \f$A(x)\f$.
* \param poly_b The second polynomial \f$A(x)\f$.
* \param rem Output: The remainder polynomial \f$R(x)\f$.
* \return The quontient polynomial \f$Q(x)\f$.
*/
Polynomial divide(const Polynomial& poly_a,
const Polynomial& poly_b,
Polynomial& rem) const;
/*! computes the real-valued roots of a polynomial with integer coefficients,
* and inserts them in ascending order into an output container given through
* an output iterator.
*
* \param poly The input polynomial.
* \param oi The output iterator of the output container of real-valued root
* of the polynomial.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield an object convertible to `Algebraic`.
*/
template <typename OutputIterator>
OutputIterator compute_polynomial_roots(const Polynomial& poly,
OutputIterator oi) const;
/*! computes the real-valued roots of a polynomial with integer coefficients
* within a given interval, and inserts them in ascending order into an output
* container given through an output iterator.
*
* \param poly The input polynomial.
* \param x_min The left bound of the interval.
* \param x_max The right bound of the interval.
* \param oi The output iterator of the output container of the real-valued
* root of the polynomial.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield an object convertible to `Algebraic`.
*/
template <typename OutputIterator>
OutputIterator compute_polynomial_roots(const Polynomial& poly,
double x_min, double x_max,
OutputIterator oi) const;
/// @}
};
} /* end namespace CGAL */

View File

@ -16,26 +16,33 @@ public:
/// A model of this concept must provide:
/// @{
/*! computes the intersections of `xc1` and `xc2` and writes them <I>in an
* ascending lexicographic \f$xy\f$-order</I> into a range beginning at
* `oi`. The type `OutputIterator` must dereference a polymorphic object of
* type `std::variant` that wraps objects of type either type
* `pair<ArrTraits::Point_2, ArrTraits::Multiplicity>` or
* `ArrTraits::X_monotone_curve_2`. An object of the former type represents an
* intersection point with its multiplicity (in case the multiplicity is
* undefined or unknown, it should be set to \f$0\f$). An object of the latter
* type represents an overlapping subcurve of `xc1` and `xc2`. The operator
* returns a past-the-end iterator of the destination range.
/*! computes the intersections of two \f$x\f$-monotone curves and inserts the
* result in ascending \f$xy\f$-lexicographic order into an output container
* given through an output iterator. An intersection, if exists, is
* represented by a discriminated union container that holds either an
* intersection point along with its multiplicity or an overlapping
* \f$x\f$-monotone subcurve. If the multiplicity is undefined or unknown, it
* should be set to \f$0\f$.
*
* A special case may occur when the parameter space of the surface, the
* arrangement is embedded on, is identified on the left and right sides of
* the boundary. An intersection point that lies on the identification curve,
* \param xc1 The first \f$x\f$-monotone curve.
* \param xc2 The second \f$x\f$-monotone curve.
* \param oi The output iterator that points at the output container.
* \return The past-the-end iterator of the output container.
*
* A special case may occur when the left and right sides of the boundary of
* the parameter space of the surface, the arrangement is embedded on, are
* identified. An intersection point that lies on the identification curve,
* between two \f$x\f$-monotone curves that intersect at their left and right
* ends must be ignored. Consider two \f$x\f$-monotone curves that intersect
* at their left and right ends, respectively, at a point \f$p\f$ that lies on
* the identification curve. If, for example, the number of intersections
* between these two curves is greater than 1, the order of intersections is
* non-deterministic.
* nondeterministic.
*
* \pre Dereferencing `oi` must yield an object of type
* `std::optional<std::variant<std::pair<%Point_2,ArrangementXMonotoneTraits_2::Multiplicity,X_monotone_curve_2>>`,
* where `%Point_2` is a model of `ArrTraits::Point_2` and
* `X_monotone_curve_2` is a model of `ArrTraits::XMonotoneCurve_2`.
*/
template <typename OutputIterator>
OutputIterator operator()(ArrTraits::X_monotone_curve_2 xc1,

View File

@ -15,12 +15,20 @@ public:
/// A model of this concept must provide:
/// @{
/*! subdivides the input curve `c` into \f$x\f$-monotone subcurves and
* isolated points, and inserts the results into a range beginning at the given
* output iterator `oi`. The type `OutputIterator` dereferences a
* `std::variant` that wraps either an `ArrTraits::Point_2` object or an
* `ArrTraits::X_monotone_curve_2` object. The operator returns a past-the-end
* iterator for the output sequence.
/*! subdivides an input curve into \f$x\f$-monotone subcurves and isolated
* points, and inserts the results into an output container given through an
* output iterator. An object in the output container is represented by a
* discriminated union container that holds either a point or an
* \f$x\f$-monotone curve.
*
* \param c The input curve.
* \param oi The output iterator that points at the output container.
* \return The past-the-end iterator of the output container.
*
* \pre Dereferencing `oi` must yield a polymorphic object of type
* `std::variant<%Point_2, X_monotone_curve_2>`, where `%Point_2` is a model
* of `ArrTraits::Point_2` and `X_monotone_curve_2` is a model of
* `ArrTraits::XMonotoneCurve_2`.
*/
template <typename OutputIterator>
OutputIterator operator()(ArrTraits::Curve_2 c, OutputIterator oi);

View File

@ -236,6 +236,7 @@ implemented as peripheral classes or as free (global) functions.
- `CGAL::Arr_bounded_planar_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::Arr_unb_planar_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::Arr_spherical_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::CORE_algebraic_number_traits`
\cgalCRPSection{Functions}

View File

@ -23,7 +23,7 @@ int main() {
Point(1, 4), Point(4, 3), Point(6, 3), Point(3, 2), Point(5, 2), Point(1, 0)
};
std::list<Query_result> results;
locate(arr, points.begin(), points.end(), std::back_inserter(results));
CGAL::locate(arr, points.begin(), points.end(), std::back_inserter(results));
// Print the results.
for (auto it = results.begin(); it != results.end(); ++it)

View File

@ -5,7 +5,7 @@
#include <CGAL/config.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/property_map/vector_property_map.hpp>
#include <CGAL/graph_traits_Arrangement_2.h>

View File

@ -736,13 +736,13 @@ public:
swallow(is, '(');
// read values
is >> iformat(rep._m_xy);
is >> IO::iformat(rep._m_xy);
swallow(is, ',');
is >> iformat(rep._m_x);
is >> IO::iformat(rep._m_x);
swallow(is, ',');
is >> iformat(rep._m_curve);
is >> IO::iformat(rep._m_curve);
swallow(is, ',');
is >> iformat(rep._m_arcno);
is >> IO::iformat(rep._m_arcno);
swallow(is, ',');
is >> rep._m_location;

View File

@ -5,7 +5,7 @@
#include <CGAL/Arr_extended_dcel.h>
#include <CGAL/Arrangement_2.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <CGAL/graph_traits_dual_arrangement_2.h>

View File

@ -8,7 +8,7 @@
#include <CGAL/graph_traits_Arrangement_2.h>
#include <CGAL/Arr_vertex_index_map.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <CGAL/property_map.h>

View File

@ -1,7 +1,7 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/boost/graph/graph_traits_Triangulation_2.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <fstream>

View File

@ -4,7 +4,7 @@
#include <CGAL/Triangulation_vertex_base_with_id_2.h>
#include <CGAL/boost/graph/graph_traits_Delaunay_triangulation_2.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <fstream>

View File

@ -1,30 +0,0 @@
// Copyright (c) 2014 GeometryFactory (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) : Sebastien Loriot
#ifndef CGAL_BOOST_GRAPH_DIJKSTRA_SHORTEST_PATHS_H
#define CGAL_BOOST_GRAPH_DIJKSTRA_SHORTEST_PATHS_H
// This will push/pop a VC++ warning
#include <CGAL/Named_function_parameters.h>
#if defined(BOOST_MSVC)
# pragma warning(push)
# pragma warning(disable:4172) // Address warning inside boost named parameters
#endif
#include <boost/graph/dijkstra_shortest_paths.hpp>
#if defined(BOOST_MSVC)
# pragma warning(pop)
#endif
#endif // CGAL_BOOST_GRAPH_DIJKSTRA_SHORTEST_PATHS_H

View File

@ -216,7 +216,7 @@ boxes and approximated geometry, which is the case here. It saves us
the extra space that was needed for the explicit `id`-number in
the previous example.
We run the self intersection algorithm with the `report_inters`
We run the self intersection algorithm with the `report_inters()`
function as callback. This callback reports the intersecting boxes. It
uses the `handle` and the global `triangles` vector to
calculate the triangle numbers. Then it checks the triangles
@ -480,4 +480,3 @@ however, we learned too late about this implementation.
*/
} /* namespace CGAL */

View File

@ -47,12 +47,12 @@ Box_traits_d();
/*!
\ingroup PkgBoxIntersectionDFunctions
\ingroup PkgBoxIntersectionDEnums
*/
enum Setting { COMPLETE, BIPARTITE };
/*!
\ingroup PkgBoxIntersectionDFunctions
\ingroup PkgBoxIntersectionDEnums
*/
enum Topology { HALF_OPEN, CLOSED };

View File

@ -2,6 +2,9 @@
/// \defgroup PkgBoxIntersectionDConcepts Concepts
/// \ingroup PkgBoxIntersectionDRef
/// \defgroup PkgBoxIntersectionDEnums Enumerations
/// \ingroup PkgBoxIntersectionDRef
/// \defgroup PkgBoxIntersectionDClasses Classes
/// \ingroup PkgBoxIntersectionDRef
@ -43,6 +46,10 @@
- `BoxIntersectionBox_d`
- `BoxIntersectionTraits_d`
\cgalCRPSection{Enumerations}
- `CGAL::Box_intersection_d::Setting`
- `CGAL::Box_intersection_d::Topology`
\cgalCRPSection{Classes}
- `CGAL::Box_intersection_d::Box_d<NT,int D,IdPolicy>`
- `CGAL::Box_intersection_d::Box_with_handle_d<NT, int D, Handle, IdPolicy>`
@ -56,4 +63,3 @@
- `CGAL::box_self_intersection_all_pairs_d`
*/

View File

@ -4,3 +4,4 @@ STL_Extension
Algebraic_foundations
Circulator
Stream_support
Polyhedron

View File

@ -102,12 +102,14 @@ collinearC3(const FT &px, const FT &py, const FT &pz,
FT dqx = qx-rx;
FT dpy = py-ry;
FT dqy = qy-ry;
if (sign_of_determinant(dpx, dqx, dpy, dqy) != ZERO)
auto is_zero = sign_of_determinant(dpx, dqx, dpy, dqy) == ZERO;
if (certainly_not(is_zero))
return false;
FT dpz = pz-rz;
FT dqz = qz-rz;
return CGAL_AND( sign_of_determinant(dpx, dqx, dpz, dqz) == ZERO ,
sign_of_determinant(dpy, dqy, dpz, dqz) == ZERO );
return is_zero & CGAL_AND( sign_of_determinant(dpx, dqx, dpz, dqz) == ZERO ,
sign_of_determinant(dpy, dqy, dpz, dqz) == ZERO );
}
template < class FT >

View File

@ -34,11 +34,7 @@
#include <boost/bind/bind.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/random/mersenne_twister.hpp>
#if BOOST_VERSION >= 104700
# include <boost/random/uniform_int_distribution.hpp>
#else
# include <boost/random/uniform_int.hpp>
#endif
#include <boost/random/uniform_int_distribution.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/normal_distribution.hpp>
#if defined(CGAL_LINKED_WITH_BOOST_IOSTREAMS) && defined(CGAL_LINKED_WITH_BOOST_SERIALIZATION)
@ -65,17 +61,10 @@ inline void init_feature_class_data(FeatureClassDataFloat& /*data*/, int /*n_cla
}
typedef std::unordered_set<int> FeatureSet;
#if BOOST_VERSION >= 104700
typedef boost::random::uniform_int_distribution<> UniformIntDist;
typedef boost::random::normal_distribution<> NormalDist;
typedef boost::random::mt19937 RandomGen;
typedef boost::random::uniform_01<> UnitDist;
#else
typedef boost::uniform_int<> UniformIntDist;
typedef boost::normal_distribution<> NormalDist;
typedef boost::uniform_01<> UnitDist;
typedef boost::mt19937 RandomGen;
#endif
struct ForestParams {
size_t n_classes;

View File

@ -562,7 +562,7 @@ Let <I>d0</I>\f$ \in \f$ <I>D</I> be a dart. Given <I>i</I>, 1 \f$ \leq \f$ <I>i
\section Combinatorial_mapDesign Design and Implementation History
The code of this package is inspired by Moka, a 3D topological modeler mainly developed by Fr&eacute;d&eacute;ric Vidil and Guillaume Damiand (<A HREF="https://moka-modeller.sourceforge.net/">https://moka-modeller.sourceforge.net/</A>). However, Moka was based on Generalized maps (and not Combinatorial maps), and the design was not \cgal "compatible". Thus, Guillaume Damiand started to develop a totally new package by mixing ideas taken from Moka with the design of the Halfedge data structure package of \cgal. Andreas Fabri and S&eacute;bastien Loriot contributed to the design, the coding, and to the documentation of the package, and Laurent Rineau helped for the design. Emma Michel contributed to the manual. Monique Teillaud and Bernd G&auml;rtner contributed to the manual by giving useful remarks, really numerous and detailed for Monique. Ken Arroyo Ohori contributed to the two reverse orientation functions.
The code of this package is inspired by Moka, a 3D topological modeler mainly developed by Fr&eacute;d&eacute;ric Vidil and Guillaume Damiand (see https://projet.liris.cnrs.fr/moka/index.php and https://github.com/gdamiand/moka). However, Moka was based on Generalized maps (and not Combinatorial maps), and the design was not \cgal "compatible". Thus, Guillaume Damiand started to develop a totally new package by mixing ideas taken from Moka with the design of the Halfedge data structure package of \cgal. Andreas Fabri and S&eacute;bastien Loriot contributed to the design, the coding, and to the documentation of the package, and Laurent Rineau helped for the design. Emma Michel contributed to the manual. Monique Teillaud and Bernd G&auml;rtner contributed to the manual by giving useful remarks, really numerous and detailed for Monique. Ken Arroyo Ohori contributed to the two reverse orientation functions.
*/
} /* namespace CGAL */

View File

@ -148,6 +148,10 @@ namespace CGAL {
{ return mmap.mdarts.is_used(i); }
bool owns(size_type i) const
{ return mmap.mdarts.owns(i); }
size_type capacity() const
{ return mmap.mdarts.capacity(); }
size_type upper_bound() const
{ return mmap.mdarts.upper_bound(); }
private:
Self & mmap;
};
@ -444,7 +448,7 @@ namespace CGAL {
(mattribute_containers).upper_bound();
}
protected:
protected:
// Set the handle on the i th attribute
template<unsigned int i>
void basic_set_dart_attribute(Dart_descriptor dh,

View File

@ -26,7 +26,7 @@ then the default traits class of `::convex_hull_3()` is `Convex_hull_traits_3<R>
\cgalHeading{Implementation}
The algorithm implemented by these functions is the quickhull algorithm of
Barnard <I>et al.</I> \cgalCite{bdh-qach-96}.
Barber <I>et al.</I> \cgalCite{bdh-qach-96}.
*/

View File

@ -263,7 +263,7 @@ set(CGAL_DOC_DXY_DIR "${CMAKE_BINARY_DIR}/doc_dxy")
file(MAKE_DIRECTORY "${CGAL_DOC_DXY_DIR}")
#Setting the resource directory depending on the version of doxygen
set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.9.6")
set(CGAL_DOC_RESOURCE_DIR_DEFAULT "${CMAKE_CURRENT_LIST_DIR}/resources/1.10.0")
# first look if resources for the specific doxygen version is available, fallback
# on the default otherwise

View File

@ -238,9 +238,10 @@ in \cgal programs, the executables should be linked with the CMake
imported target `CGAL::LASLIB_support` provided in
`CGAL_LASLIB_support.cmake`.
The \laslib web site is <a
href="https://rapidlasso.com/lastools/">`https://rapidlasso.com/lastools/`</a>. \laslib
is usually distributed along with LAStools: for simplicity, \cgal
\laslib information can be obtained from
<a href="https://lastools.github.io/">https://lastools.github.io/</a> and
<a href="https://rapidlasso.de/product-overview/">https://rapidlasso.de/product-overview/</a>.
\laslib is usually distributed along with LAStools: for simplicity, \cgal
provides <a href="https://github.com/CGAL/LAStools">a fork with a
CMake based install procedure</a>.

View File

@ -276,8 +276,8 @@ dependencies.
\section sec-win-demo Trying CGAL algorithms using a Precompiled Demo
\cgal provides a few demos offering a graphical user interface for some \cgal algorithms.
All precompiled demos are available for download on the \ref packages page.
Two links are provided in the column on the right: the demo itself (under **Windows Demo**) and a set of dlls (under **Common Demo Dlls**)
that contains dlls files that must be placed in the same directory as the `.exe` of the demo.
A link is provided in the column on the right, to download an archive. It contains the demo executable itself,
and a set of dll files that must remain in the same directory as the `.exe` of the demo.
See for example the \ref PkgConvexHull3 package.
*/

View File

@ -100,7 +100,7 @@
, pages = "617--625"
, note = "SIGGRAPH '2005 Conference Proceedings"
, volume = 24
, url = "https://hal.inria.fr/inria-00226418"
, url = "https://inria.hal.science/inria-00226418"
, geombib = "not yet"
}
@ -157,7 +157,7 @@ Pion and Monique Teillaud and Mariette Yvinec"
@ARTICLE{cgal:bdt-hdcvd-14,
AUTHOR = {Mikhail Bogdanov and Olivier Devillers and Monique Teillaud},
JOURNAL = {Journal of Computational Geometry},
NOTE = {https://hal.inria.fr/hal-00961390},
NOTE = {https://inria.hal.science/hal-00961390},
PAGES = {56--85},
TITLE = {Hyperbolic {Delaunay} complexes and {Voronoi} diagrams made practical},
VOLUME = {5},
@ -243,7 +243,7 @@ Pion and Monique Teillaud and Mariette Yvinec"
Boissonnat}
, title = {Mesh Generation from 3D Multi-material Images}
, pages = {283--290}
, url = "https://hal.inria.fr/inria-00420228"
, url = "https://inria.hal.science/inria-00420228"
, x-international-audience = "yes"
, x-proceedings = "yes"
}
@ -257,7 +257,7 @@ Boissonnat}
, pages = "1455-14645"
, volume = 28
, year = 2009
, url = "https://hal.inria.fr/inria-00413248"
, url = "https://inria.hal.science/inria-00413248"
, x-international-audience = "yes"
, x-editorial-board = "yes"
}
@ -338,7 +338,7 @@ Boissonnat}
,title = "{PLY} - Polygon File Format"
,howpublished = {Paul Bourke}
,year = 2011
,url = "http://paulbourke.net/dataformats/ply/"
,url = "https://paulbourke.net/dataformats/ply/"
}
@ -361,7 +361,7 @@ Boissonnat}
TITLE = {Delaunay triangulations on orientable surfaces of low genus},
YEAR = {2016},
DOI = {10.4230/LIPIcs.SoCG.2016.20},
URL = {https://hal.inria.fr/hal-01276386}
URL = {https://inria.hal.science/hal-01276386}
}
@ -402,7 +402,7 @@ Boissonnat}
,school = "Universit\'e de {Nice-Sophia Antipolis}"
,address = "France"
,year = 2010
,url = "https://tel.archives-ouvertes.fr/tel-00552215/"
,url = "https://theses.hal.science/tel-00552215/"
}
@inproceedings{cgal:ccplr-redtp-10,
@ -539,13 +539,13 @@ note="Conference version: Symp. on Geometry Processing 2003"
@inproceedings{ cgal:ct-c3pt-09
, title = "Computing {3D} Periodic Triangulations"
, author = "Manuel Caroli and Monique Teillaud"
, booktitle = "Proceedings 17th European Symposium on Algorithms"
, nickname = "ESA'09"
, booktitle = "Proceedings 17th European Symposium on Algorithms"
, nickname = "ESA'09"
, series = "Lecture Notes in Computer Science"
, year = 2009
, volume = 5757
, pages = "37--48"
, note = "Full version available as INRIA Research Report 6823 \url{https://hal.inria.fr/inria-00356871}"
, note = "Full version available as INRIA Research Report 6823 \url{https://inria.hal.science/inria-00356871}"
}
@inproceedings{cgal:pt-rs-14,
@ -729,7 +729,7 @@ Mourrain and Monique Teillaud"
@article{cgal:dmsl-ssmrp-11,
author = {Digne, Julie and Morel, Jean-Michel and Souzani, Charyar-Mehdi and
Lartigue, Claire},
Lartigue, Claire},
title = {Scale Space Meshing of Raw Data Point Sets},
journal = {Computer Graphics Forum},
year = {2011},
@ -741,13 +741,13 @@ Mourrain and Monique Teillaud"
}
@inproceedings{ cgal:dp-eegpd-03
, author = "Olivier Devillers and Sylvain Pion"
, title = "Efficient Exact Geometric Predicates for {Delaunay} Triangulations"
, booktitle = "Proc. 5th Workshop Algorithm Eng. Exper."
, nickname = "ALENEX '03"
, year = 2003
, pages = "37--44"
, url = "https://hal.inria.fr/inria-00344517/"
, author = "Olivier Devillers and Sylvain Pion"
, title = "Efficient Exact Geometric Predicates for {Delaunay} Triangulations"
, booktitle = "Proc. 5th Workshop Algorithm Eng. Exper."
, nickname = "ALENEX '03"
, year = 2003
, pages = "37--44"
, url = "https://inria.hal.science/inria-00344517/"
}
@article{ cgal:dpt-wt-02
@ -766,7 +766,7 @@ Teillaud"
, author = "Olivier Devillers and Monique Teillaud"
, title = "Perturbations and Vertex Removal in a {3D Delaunay} Triangulation"
, booktitle = "Proc. 14th ACM-SIAM Sympos. Discrete Algorithms (SODA)"
, url = "https://hal.inria.fr/inria-00166710/"
, url = "https://inria.hal.science/inria-00166710/"
, year = 2003
, pages = "313-319"
}
@ -778,7 +778,7 @@ Teillaud"
, volume = 44
, year = 2011
, pages = "160--168"
, url = "https://hal.archives-ouvertes.fr/inria-00560388/"
, url = "https://theses.hal.science/inria-00560388/"
, doi = "10.1016/j.comgeo.2010.09.010"
}
@ -845,7 +845,7 @@ Teillaud"
,school = "Universit\'e de {Nice-Sophia Antipolis}"
,address = "France"
,year = 2003
,url = "https://tel.archives-ouvertes.fr/tel-00832487/"
,url = "https://theses.hal.science/tel-00832487/"
}
@ -1230,7 +1230,7 @@ Teillaud"
TITLE = {{Implementing Delaunay triangulations of the Bolza surface}},
YEAR = {2017},
DOI = {10.4230/LIPIcs.SoCG.2017.44},
URL = {https://hal.inria.fr/hal-01568002},
URL = {https://inria.hal.science/hal-01568002},
}
@inproceedings{cgal:j-lrsspp-19,
@ -1261,13 +1261,13 @@ Teillaud"
@InProceedings{ cgal:k-reisv-04,
author = {Menelaos I. Karavelas},
title = {A robust and efficient implementation for the segment
author = {Menelaos I. Karavelas},
title = {A robust and efficient implementation for the segment
{V}oronoi diagram},
booktitle = {Proc. Internat. Symp. on Voronoi diagrams in Science
and Engineering (VD2004)},
pages = {51--62},
year = {2004}
pages = {51--62},
year = {2004}
}
@article{ cgal:k-rprnm-96
@ -1341,6 +1341,29 @@ Teillaud"
year = {2012},
}
@article{cgal:lrtc-iccmps-20,
author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert and David Coeurjolly},
journal = {Computer Graphics Forum (Proceedings of Symposium on Geometry Processing)},
number = {5},
title = {Interpolated Corrected Curvature Measures for Polygonal Surfaces},
volume = {39},
month = aug,
year = {2020},
url = {https://doi.org/10.1111/cgf.14067},
doi = {10.1111/cgf.14067}
}
@article{cgal:lrt-ccm-22,
author = {Jacques-Olivier Lachaud and Pascal Romon and Boris Thibert},
journal = {Discrete & Computational Geometry},
title = {Corrected Curvature Measures},
volume = {68},
pages = {477-524},
month = jul,
year = {2022},
url = {https://doi.org/10.1007/s00454-022-00399-4}
}
@inproceedings{ cgal:lt-fmeps-98,
author = "Peter Lindstrom and Greg Turk",
title = "Fast and memory efficient polygonal simplification",
@ -1599,12 +1622,12 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio
}
@article{cgal:ml-cfsg-00
, author = "G. Medioni and M. Lee and C. Tang"
, title = "A Computational Framework for Segmentation and Grouping"
, journal = "Elsevier Science"
, year = 2000
, pages = ""
, update = "12.13 afabri"
, author = "G. Medioni and M. Lee and C. Tang"
, title = "A Computational Framework for Segmentation and Grouping"
, journal = "Elsevier Science"
, year = 2000
, pages = ""
, update = "12.13 afabri"
}
@book{ cgal:m-cst-93
@ -1887,28 +1910,28 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio
@article{cgal:btsag-asosr-16,
TITLE = {{A Survey of Surface Reconstruction from Point Clouds}},
AUTHOR = {Berger, Matthew and Tagliasacchi, Andrea and Seversky, Lee and Alliez, Pierre and Guennebaud, Gael and Levine, Joshua and Sharf, Andrei and Silva, Claudio},
URL = {https://hal.inria.fr/hal-01348404},
URL = {https://inria.hal.science/hal-01348404},
JOURNAL = {{Computer Graphics Forum}},
PUBLISHER = {{Wiley}},
PAGES = {27},
YEAR = {2016},
DOI = {10.1111/cgf.12802},
PDF = {https://hal.inria.fr/hal-01348404/file/survey-author.pdf},
PDF = {https://inria.hal.science/hal-01348404/file/survey-author.pdf},
HAL_ID = {hal-01348404},
HAL_VERSION = {v2}
}
@TechReport{ cgal:pabl-cco-07,
author = {Poudret, M. and Arnould, A. and Bertrand, Y. and Lienhardt, P.},
title = {Cartes Combinatoires Ouvertes.},
institution = {Laboratoire SIC E.A. 4103},
number = {2007-1},
month = {October},
year = {2007},
address = {F-86962 Futuroscope Cedex, France},
type = {Research Notes},
keywords = {cartes combinatoires, demi-ar{\^e}te, ar{\^e}te radiale},
author = {Poudret, M. and Arnould, A. and Bertrand, Y. and Lienhardt, P.},
title = {Cartes Combinatoires Ouvertes.},
institution = {Laboratoire SIC E.A. 4103},
number = {2007-1},
month = {October},
year = {2007},
address = {F-86962 Futuroscope Cedex, France},
type = {Research Notes},
keywords = {cartes combinatoires, demi-ar{\^e}te, ar{\^e}te radiale},
}
@article{ cgal:pc-rdp-86
@ -2293,7 +2316,7 @@ location = {Salt Lake City, Utah, USA}
, pages = "75:1-75:9"
, note = "SIGGRAPH '2009 Conference Proceedings"
, volume = "28(3)"
, url = "https://hal.inria.fr/inria-00359288"
, url = "https://inria.hal.science/inria-00359288"
, geombib = "not yet"
, x-editorial-board = {yes}
, x-proceedings = {yes}
@ -2332,7 +2355,7 @@ location = {Salt Lake City, Utah, USA}
,month = jun
,pages = {26--31}
,annote = {Inlining vector expressions and parameter passing
of expressions at compile time. Template Metaprograms.}
of expressions at compile time. Template Metaprograms.}
,update = "98.01 kettner"
}
@ -2354,7 +2377,7 @@ location = {Salt Lake City, Utah, USA}
,month = may
,pages = {36--43}
,annote = {Prime numbers at compiler time, C++ programs at
compile time, control structures, local variables.}
compile time, control structures, local variables.}
,update = "98.01 kettner"
}
@ -2422,7 +2445,7 @@ location = {Salt Lake City, Utah, USA}
@book{ cgal:w-impoo-94
,author = {Josie Wernicke}
,title = {The Inventor Mentor: Programming Object-Oriented
3D Graphics with Open Inventor, Release 2}
3D Graphics with Open Inventor, Release 2}
,publisher = {Addison-Wesley}
,year = 1994
,update = "97.04 kettner"
@ -2549,12 +2572,12 @@ url = "https://wscg.zcu.cz/wscg2003/Papers_2003/G67.pdf"
}
@InProceedings{cgal:k-vdc-06,
author = {Menelaos I. Karavelas},
title = {Voronoi diagrams in {\sc Cgal}},
author = {Menelaos I. Karavelas},
title = {Voronoi diagrams in {\sc Cgal}},
booktitle = {22nd European Symposium on Computational Geometry},
pages = {229--232},
year = {2006},
address = {Delphi, Greece},
pages = {229--232},
year = {2006},
address = {Delphi, Greece},
}
@incollection{cgal:fhktww-a-07,
@ -2607,27 +2630,27 @@ url = "https://www.boost.org/community/exception_safety.html"
}
@article{cgal:as-solri-92
, author = "F. Aurenhammer and O. Schwarzkopf"
, title = "A simple on-line randomized incremental algorithm for computing higher order {Voronoi} diagrams"
, journal = "Internat. J. Comput. Geom. Appl."
, volume = 2
, year = 1992
, pages = "363--381"
, keywords = "Voronoi diagrams, geometric transforms, dynamization"
, succeeds = "as-solri-91"
, update = "93.09 aurenhammer, 93.05 schwarzkopf"
, author = "F. Aurenhammer and O. Schwarzkopf"
, title = "A simple on-line randomized incremental algorithm for computing higher order {Voronoi} diagrams"
, journal = "Internat. J. Comput. Geom. Appl."
, volume = 2
, year = 1992
, pages = "363--381"
, keywords = "Voronoi diagrams, geometric transforms, dynamization"
, succeeds = "as-solri-91"
, update = "93.09 aurenhammer, 93.05 schwarzkopf"
}
@inproceedings{cgal:fy-okvd-01
, author = "Julia Fl{\"o}totto and Mariette Yvinec"
, title = "Order-$k$ {Voronoi} Diagrams"
, booktitle = "Abstracts 17th European Workshop Comput. Geom."
, nickname = "CG 2001"
, site = "Berlin"
, publisher = "Freie Universit{\"a}t Berlin"
, year = 2001
, pages = "109--112"
, update = "01.04 icking"
, author = "Julia Fl{\"o}totto and Mariette Yvinec"
, title = "Order-$k$ {Voronoi} Diagrams"
, booktitle = "Abstracts 17th European Workshop Comput. Geom."
, nickname = "CG 2001"
, site = "Berlin"
, publisher = "Freie Universit{\"a}t Berlin"
, year = 2001
, pages = "109--112"
, update = "01.04 icking"
}
@proceedings{cgal:jlm-isgp-98,
@ -2768,7 +2791,7 @@ author = "Pedro M.M. de Castro and Frederic Cazals and Sebastien Loriot and Moni
, volume = "40"
, number = "1"
, pages = "61-78"
, url = "https://hal.inria.fr/inria-00344310/"
, url = "https://inria.hal.science/inria-00344310/"
, doi = "10.1016/j.comgeo.2007.06.003"
, x-international-audience = "yes"
, x-editorial-board = "yes"
@ -2788,7 +2811,7 @@ author = "Pedro M.M. de Castro and Frederic Cazals and Sebastien Loriot and Moni
, title = "Complexity of {Delaunay} triangulation for points on lower-dimensional polyhedra"
, booktitle = "Proc. 18th ACM-SIAM Sympos. Discrete Algorithms"
, nickname = "SODA"
, url = "https://hal.inria.fr/inria-00182835/"
, url = "https://inria.hal.science/inria-00182835/"
, year = 2007
, pages = "1106--1113"
}
@ -2856,14 +2879,14 @@ ADDRESS = "Saarbr{\"u}cken, Germany"
}
@InCollection{grlr-sturm-habicht-98,
author = {L.~Gonzalez-Vega and T.~Recio and H.~Lombardi and M.-F.~Roy},
title = {Sturm-Habicht Sequences, Determinants and Real Roots of Univariate Polynomials},
booktitle = {Quantifier Elimination and Cylindrical Algebraic Decomposition},
pages = {300--316},
publisher = {Springer},
year = 1998,
editor = {B.F.~Caviness and J.R.~Johnson},
series = {Texts and Monographs in Symbolic Computation}
author = {L.~Gonzalez-Vega and T.~Recio and H.~Lombardi and M.-F.~Roy},
title = {Sturm-Habicht Sequences, Determinants and Real Roots of Univariate Polynomials},
booktitle = {Quantifier Elimination and Cylindrical Algebraic Decomposition},
pages = {300--316},
publisher = {Springer},
year = 1998,
editor = {B.F.~Caviness and J.R.~Johnson},
series = {Texts and Monographs in Symbolic Computation}
}
@inproceedings{Sorkine2007AsRigidAs,
@ -3213,14 +3236,14 @@ pages = "207--221"
@techreport{frey:inria-00069921,
TITLE = {{MEDIT : An interactive Mesh visualization Software}},
AUTHOR = {Frey, Pascal},
URL = {https://hal.inria.fr/inria-00069921},
URL = {https://inria.hal.science/inria-00069921},
NUMBER = {RT-0253},
PAGES = {41},
INSTITUTION = {{INRIA}},
YEAR = {2001},
MONTH = Dec,
KEYWORDS = {MESH ; VISUALIZATION ; POST-PROCESSING},
PDF = {https://hal.inria.fr/inria-00069921/file/RT-0253.pdf},
PDF = {https://inria.hal.science/inria-00069921/file/RT-0253.pdf},
HAL_ID = {inria-00069921},
HAL_VERSION = {v1}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,822 @@
# Doxyfile 1.10.0
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# Only the settings that are not the default ones are kept in this file
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME =
# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF =
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
JAVADOC_AUTOBRIEF = YES
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
QT_AUTOBRIEF = YES
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
INHERIT_DOCS = NO
# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:^^"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". Note that you cannot put \n's in the value part of an alias
# to insert newlines (in the resulting output). You can put ^^ in the value part
# of an alias to insert a newline as if a physical newline was in the original
# file. When you need a literal { or } or , in the value part of an alias you
# have to escape them by means of a backslash (\), this can lead to conflicts
# with the commands \{ and \} for these it is advised to use the version @{ and
# @} or use a double escape (\\{ and \\})
ALIASES = "cgal=%CGAL" \
"protocgal=C++gal" \
"plageo=Plageo" \
"stl=STL" \
"gmp=GMP" \
"gmpxx=GMPXX" \
"iso=ISO" \
"lisp=Lisp" \
"ieee=IEEE" \
"ascii=ASCII" \
"exacus=Exacus" \
"mpir=MPIR" \
"mpfr=MPFR" \
"leda=LEDA" \
"gcc=GCC" \
"dcel=DCEL" \
"bgl=BGL" \
"boost=Boost" \
"gnu=GNU" \
"ms=MS" \
"qt=Qt" \
"qt5=Qt5" \
"eigen=Eigen" \
"opengr=OpenGR" \
"libpointmatcher=libpointmatcher" \
"core=Core" \
"mpfi=MPFI" \
"ntl=NTL" \
"pdb=PDB" \
"esbtl=ESBTL" \
"tbb=TBB" \
"laslib=LASlib" \
"opencv=OpenCV" \
"tensorflow=TensorFlow" \
"metis=METIS" \
"zlib=zlib" \
"ceres=Ceres" \
"glpk=GLPK" \
"scip=SCIP" \
"osqp=OSQP" \
"rs=RS" \
"rs3=RS3" \
"unix=Unix" \
"api=API" \
"vtk=VTK" \
"visualstudio=Visual Studio" \
"taucs=TAUCS" \
"lapack=LAPACK" \
"blas=BLAS" \
"opennl=OpenNL" \
"cpp=C++" \
"cpp11=C++11" \
"CC=C++" \
"cgalExample{1}=<br><b>File</b> \ref \1 \include \1" \
"cgalFigureAnchor{1}=\anchor fig__\1" \
"cgalFigureRef{1}=\ref fig__\1" \
"cgalFigureBegin{2}=\anchor fig__\1 ^^ \image html \2 ^^ \image latex \2 \"\" width=15cm ^^ \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{3}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=7.5cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=7.5cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{4}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=5cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=5cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=5cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{5}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=3.75cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=3.75cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=3.75cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=3.75cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{6}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=3cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=3cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=3cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=3cm ^^ </TD> <TD> \image html \6 ^^ \image latex \6 \"\" width=3cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{7}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=2.5cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=2.5cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=2.5cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=2.5cm ^^ </TD> <TD> \image html \6 ^^ \image latex \6 \"\" width=2.5cm ^^ </TD> <TD> \image html \7 ^^ \image latex \7 \"\" width=2.5cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{8}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=2.1cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=2.1cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=2.1cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=2.1cm ^^ </TD> <TD> \image html \6 ^^ \image latex \6 \"\" width=2.1cm ^^ </TD> <TD> \image html \7 ^^ \image latex \7 \"\" width=2.1cm ^^ </TD> <TD> \image html \8 ^^ \image latex \8 \"\" width=2.1cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{9}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=1.9cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=1.9cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=1.9cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=1.9cm ^^ </TD> <TD> \image html \6 ^^ \image latex \6 \"\" width=1.9cm ^^ </TD> <TD> \image html \7 ^^ \image latex \7 \"\" width=1.9cm ^^ </TD> <TD> \image html \8 ^^ \image latex \8 \"\" width=1.9cm ^^ </TD> <TD> \image html \9 ^^ \image latex \9 \"\" width=1.9cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureBegin{10}=\anchor fig__\1 ^^ <CENTER> <TABLE border=0> <TR> <TD> \image html \2 ^^ \image latex \2 \"\" width=1.6cm ^^ </TD> <TD> \image html \3 ^^ \image latex \3 \"\" width=1.6cm ^^ </TD> <TD> \image html \4 ^^ \image latex \4 \"\" width=1.6cm ^^ </TD> <TD> \image html \5 ^^ \image latex \5 \"\" width=1.6cm ^^ </TD> <TD> \image html \6 ^^ \image latex \6 \"\" width=1.6cm ^^ </TD> <TD> \image html \7 ^^ \image latex \7 \"\" width=1.6cm ^^ </TD> <TD> \image html \8 ^^ \image latex \8 \"\" width=1.6cm ^^ </TD> <TD> \image html \9 ^^ \image latex \9 \"\" width=1.6cm ^^ </TD> <TD> \image html \10 ^^ \image latex \10 \"\" width=1.6cm ^^ </TD> </TR> </TABLE> </CENTER> \htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly ^^ \ref fig__\1" \
"cgalFigureEnd=\htmlonly[block] </div> \endhtmlonly <br>" \
"cgalFigureCaptionBegin{1}=\htmlonly[block] <div class=\"cgal_figure_caption\"> \endhtmlonly \ref fig__\1" \
"cgalFigureCaptionEnd=\htmlonly[block] </div> \endhtmlonly <br>" \
"cgalConcept=\details <div id=\"CGALConcept\"></div>^^ \brief" \
"cgalConceptNamespace=\details <div id=\"CGALConceptNS\"></div>^^ \brief" \
"cgalRefines=Refines" \
"cgalRefines{1}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd></dl>" \
"cgalRefines{2}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd></dl>" \
"cgalRefines{3}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd></dl>" \
"cgalRefines{4}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd><dt></dt><dd>@c \4</dd></dl>" \
"cgalRefines{5}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd><dt></dt><dd>@c \4</dd><dt></dt><dd>@c \5</dd></dl>" \
"cgalRefinesBare{1}=<dl><dt>@cgalRefines</dt><dd>\1</dd></dl>" \
"cgalRefinesBare{2}=<dl><dt>@cgalRefines</dt><dd>@c \1</dd><dt></dt><dd>\2</dd></dl>" \
"cgalModelsHeader=Is model of" \
"cgalModels{1}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd></dl>" \
"cgalModels{2}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd></dl>" \
"cgalModels{3}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd></dl>" \
"cgalModels{4}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd><dt></dt><dd>@c \4</dd></dl>" \
"cgalModels{5}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd><dt></dt><dd>@c \4</dd><dt></dt><dd>@c \5</dd></dl>" \
"cgalModels{6}=<dl><dt>@cgalModelsHeader</dt><dd>@c \1</dd><dt></dt><dd>@c \2</dd><dt></dt><dd>@c \3</dd><dt></dt><dd>@c \4</dd><dt></dt><dd>@c \5</dd><dt></dt><dd>@c \6</dd></dl>" \
"cgalModelsBareBegin=<dl><dt>@cgalModelsHeader</dt><dd></dd>" \
"cgalModelsBareEnd=</dl>" \
"cgalModelsBare{1}=<dt></dt><dd>\1</dd>" \
"cgalGeneralizes=\xrefitem generalizes \"Generalizes\" \"Generalization Relationships\"" \
"cgalHasModelsHeader=Has models" \
"cgalHasModelsBegin=<dl><dt>@cgalHasModelsHeader</dt><dd></dd>" \
"cgalHasModels{1}=<dt></dt><dd>`\1`</dd>" \
"cgalHasModelsBare{1}=<dt></dt><dd>\1</dd>" \
"cgalHasModelsEnd=</dl>" \
"cgalDebugBegin=\htmlonly[block] <div class=\"CGALDebug\"> <div>Debugging Support</div> \endhtmlonly ^^" \
"cgalDebugEnd=\htmlonly[block] </div> \endhtmlonly" \
"cgalDebugFunction=This is a function for debugging purpose." \
"cgalAdvancedBegin=^^ \htmlonly[block] <div class=\"CGALAdvanced\"> <div>Advanced</div> \endhtmlonly ^^" \
"cgalAdvancedEnd=\noop ^^ \htmlonly[block] </div> \endhtmlonly" \
"cgalAdvancedFunction=This is an advanced function." \
"cgalAdvancedClass=This is an advanced class." \
"cgalAdvancedType=This is an advanced type." \
"cgalAdvancedConcept=This is an advanced concept." \
"cgalRequiresCPP11=\warning This function requires a C++11 compiler." \
"cgalPkgPicture{1}=<div class=\"PkgImage\"> ^^ \image html \1 ^^</div>" \
"cgalPkgSummaryBegin=<div class=\"PkgSummary\">" \
"cgalPkgSummaryEnd=</div>" \
"cgalPkgShortInfoBegin=<div class=\"PkgShortInfo\">" \
"cgalPkgShortInfoEnd=</div>" \
"cgalPkgAuthor{1}=<div class=\"PkgAuthors\">\1</div>" \
"cgalPkgAuthors{1}=\cgalPkgAuthor{\1}" \
"cgalPkgDesc{1}=<div class=\"PkgDescription\">\1</div>" \
"cgalPkgSince{1}=<B>Introduced in:</B> \cgal \1<BR>" \
"cgalPkgDependsOn{1}=<B>Depends on:</B> \1 <BR>" \
"cgalPkgLicense{1}=<B>License:</B> \1 <BR>" \
"cgalPkgDemo{2}=<B>Windows Demo:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a><BR>" \
"cgalPkgDemo{4}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a><BR>" \
"cgalPkgDemo{6}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\6\">\5</a><BR>" \
"cgalPkgDescriptionEnd=" \
"cgalModifBegin=\htmlonly <div class=\"CGALModification\"> \endhtmlonly \xrefitem Modification \"Modifications\" \"MODIFICATIONS\"" \
"cgalModifEnd=\htmlonly </div> \endhtmlonly \latexonly END MODIFICATIONS \endlatexonly" \
"cgalPkgBib{1}=<B>BibTeX:</B> <a href=\"../Manual/how_to_cite_cgal.html#\1-${CGAL_RELEASE_YEAR_ID}\">\1-${CGAL_RELEASE_YEAR_ID}</a><BR>" \
"cgalFootnote{1}=<span class=\"footnote\">\1</span>" \
"cgalFootnoteCode{1}=<tt style='display:inline'>\1</tt>" \
"cgalAutoToc=\htmlonly[block] <div id=\"autotoc\" class=\"toc\"></div> \endhtmlonly" \
"cgalTagTrue=\link CGAL::Tag_true `CGAL::Tag_true`\endlink" \
"cgalTagFalse=\link CGAL::Tag_false `CGAL::Tag_false`\endlink" \
"cgalHeading{1}= <B>\1</B><BR>" \
"cgalClassifedRefPages=\htmlonly[block] <h2 class=\"groupheader\">Classified Reference Pages</h2> \endhtmlonly" \
"cgalCRPSection{1}=<h2>\1</h2>" \
"cgalCRPSubsection{1}=<h3>\1</h3>" \
"cgalCite{1}=<!-- -->\cite \1" \
"cgalPackageSection{2}=\htmlonly[block] <div style=\"background-color: #EEEDF2;\">\endhtmlonly \section \1 \2 ^^ \htmlonly[block] </div>\endhtmlonly" \
"cgalNamedParamsBegin=<dl class=\"params\"><dt>Optional Named Parameters</dt><dd> <table class=\"params\">" \
"cgalNamedParamsBegin{1}=<dl class=\"params\"><dt>\1</dt><dd> <table class=\"params\">" \
"cgalNamedParamsEnd=</table> </dd> </dl>" \
"cgalParamNBegin{1}=<tr><td class> \htmlonly[block] <button class=\"collapsible\">\endhtmlonly <b>\1</b> \htmlonly[block]</button> <div class=\"content\">\endhtmlonly<ul>" \
"cgalParamDescription{1}=<li>\1</li>" \
"cgalParamType{1}=<li><b>Type: </b>\1</li>" \
"cgalParamDefault{1}=<li><b>%Default: </b>\1</li>" \
"cgalParamExtra{1}=<li><b>Extra: </b>\1</li>" \
"cgalParamNEnd=</ul> \htmlonly[block] </div> \endhtmlonly </td><td></td></tr>" \
"cgalParamSectionBegin{1}=\cgalParamNBegin{\1}" \
"cgalParamSectionEnd=\cgalParamNEnd" \
"cgalParamPrecondition{1}=<li><b>Precondition: </b>\1</li>" \
"cgalBigO{1}=\f$O(\1)\f$" \
"cgalBigOLarge{1}=\f$O\left(\1\right)\f$" \
"cgalInclude{1}=`#include<\1>`"
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files). For instance to make doxygen treat .inc files
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.
EXTENSION_MAPPING = txt=C++
# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
TOC_INCLUDE_HEADINGS = 0
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = YES
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.
IDL_PROPERTY_SUPPORT = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.
SUBGROUPING = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = YES
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = YES
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = YES
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = NO
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = NO
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file. See also section "Changing the
# layout of pages" for information.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE = ${CGAL_DOC_RESOURCE_DIR}/DoxygenLayoutPackage.xml
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES = ${CGAL_DOC_BIBLIO_DIR}/cgal_manual.bib \
${CGAL_DOC_BIBLIO_DIR}/geom.bib
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = YES
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# Note the list of default checked file patterns might differ from the list of
# default file extension mappings.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
# *.vhdl, *.ucf, *.qsf and *.ice.
FILE_PATTERNS = *.cpp \
*.txt \
*.md \
*.h \
*.hpp
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# ANamespace::AClass, ANamespace::*Test
EXCLUDE_SYMBOLS = Tr \
Vb \
Cb \
Fb \
K \
Traits \
internal
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS = *.cpp \
*.h
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = YES
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.
VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.
ALPHABETICAL_INDEX = NO
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
# Doxygen stores a couple of settings persistently in the browser (via e.g.
# cookies). By default these settings apply to all HTML pages generated by
# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store
# the settings under a project specific key, such that the user preferences will
# be stored separately.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_PROJECT_COOKIE = CGAL
# 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
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = YES
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine tune the look of the index (see "Fine-tuning the output"). As an
# example, the default style sheet generated by doxygen has an example that
# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
# Since the tree basically has the same information as the tab index, you could
# consider setting DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = YES
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
# the HTML output. These images will generally look nicer at scaled resolutions.
# Possible values are: png (the default) and svg (looks nicer but requires the
# pdf2svg or inkscape tool).
# The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FORMULA_FORMAT = svg
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = YES
# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from https://www.mathjax.org before deployment. The default value is:
# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
# This tag requires that the tag USE_MATHJAX is set to YES.
${CGAL_DOC_MATHJAX_LOCATION_FULL_OPTION_LINE}
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# for MathJax version 2 (see
# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# For example for MathJax version 3 (see
# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
# MATHJAX_EXTENSIONS = ams
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS = TeX/AMSmath \
TeX/AMSsymbols
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE = ${CGAL_DOC_RESOURCE_DIR}/CGAL_mathjax.js
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
SEARCHENGINE = NO
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = NO
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = YES
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = YES
# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED = DOXYGEN_RUNNING \
"CGAL_NP_TEMPLATE_PARAMETERS=NamedParameters = CGAL::parameters::Default_named_parameters" \
"CGAL_NP_CLASS=NamedParameters" \
"CGAL_NP_TEMPLATE_PARAMETERS_1=NamedParameters1 = CGAL::parameters::Default_named_parameter" \
"CGAL_NP_CLASS_1=NamedParameters1" \
"CGAL_NP_TEMPLATE_PARAMETERS_2=NamedParameters2 = CGAL::parameters::Default_named_parameter" \
"CGAL_NP_CLASS_2=NamedParameters2" \
CGAL_DEPRECATED \
CGAL_DEPRECATED_MSG(name)=
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
EXTERNAL_GROUPS = NO
# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.
EXTERNAL_PAGES = NO
#---------------------------------------------------------------------------
# Configuration options related to diagram generator tools
#---------------------------------------------------------------------------
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: NO.
HAVE_DOT = YES
# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will
# generate a graph for each documented class showing the direct and indirect
# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
# relations will be shown as texts / links.
# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
# The default value is: YES.
CLASS_GRAPH = TEXT
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = NO
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies. See also the chapter Grouping
# in the manual.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = NO
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = YES
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = NO
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = NO
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = NO
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see:
# https://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
# png:gdiplus:gdiplus.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = svg
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
INTERACTIVE_SVG = YES
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
# graphical representation for inheritance and collaboration diagrams is used.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = NO
# Flag available on in https://github.com/CGAL/doxygen/tree/release_1_9_6_patched
# When the EXTRACT_ALL tag is set to YES and a member or class has no
# documentation, no detailed section will be produced if the
# NO_ADDITIONAL_DETAILS tag is set to YES. This tag has no effect if
# the EXTRACT_ALL tag is set to NO.
# The default value is: NO.
${CGAL_OPT_NO_ADDITIONAL_DETAILS}

View File

@ -0,0 +1,35 @@
//<![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],
},
equationNumbers: { autoNumber: "AMS" }
}
}
);
//]]>

View File

@ -0,0 +1,177 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="topics" 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

@ -0,0 +1,178 @@
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="topics" 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

@ -0,0 +1,386 @@
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

@ -0,0 +1,21 @@
<!-- HTML footer for doxygen 1.9.6-->
<!-- 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.org/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.org/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>

View File

@ -0,0 +1,128 @@
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 topics array and hijack gotoNode
// for our own evil purposes
$(document).ready(function() {
if (typeof topics !== 'undefined') {
// topics has been loaded, that means we are inside the
// documentation of a package
NAVTREE[0][2][1][1] = topics[0][1];
NAVTREE[0][2][1][2] = topics[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

@ -0,0 +1,85 @@
<!-- 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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<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=11"/>
<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"/> -->
<!--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/dynsections.js"></script>
<!--BEGIN COPY_CLIPBOARD-->
<script type="text/javascript" src="$relpath^clipboard.js"></script>
<!--END COPY_CLIPBOARD-->
<script src="$relpath$../Manual/hacks.js" type="text/javascript"></script>
$treeview
$search
$mathjax
$darkmode
<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>
<!--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="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 id="projectrow">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign">
<div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$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-->
<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

@ -0,0 +1,147 @@
<!-- 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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<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=11"/>
<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"/> -->
<!--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/dynsections.js"></script>
<!--BEGIN COPY_CLIPBOARD-->
<script type="text/javascript" src="$relpath^clipboard.js"></script>
<!--END COPY_CLIPBOARD-->
<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" />
$mathjax
$darkmode
<script src="$relpath^topics.js" type="text/javascript"></script>
$extrastylesheet
</head>
<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="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">
<span id="MSearchSelect"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()">&#160;
</span>
<input type="text" id="MSearchField" value="" placeholder="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="$relpath^../Manual/search/close.svg" alt=""/></a>
</span>
</div>
</div>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign">
<div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$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-->
<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/",'.html');
</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">
<div id="MSearchResults">
<div class="SRPage">
<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>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -0,0 +1,109 @@
(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',
'6.0-beta1',
'5.6',
'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);
}
}
});
})();

View File

@ -172,9 +172,9 @@ ALIASES = "cgal=%CGAL" \
"cgalPkgSince{1}=<B>Introduced in:</B> \cgal \1<BR>" \
"cgalPkgDependsOn{1}=<B>Depends on:</B> \1 <BR>" \
"cgalPkgLicense{1}=<B>License:</B> \1 <BR>" \
"cgalPkgDemo{2}=<B>Windows demo:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{4}=<B>Windows demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{6}=<B>Windows demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\6\">\5</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{2}=<B>Windows Demo:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a><BR>" \
"cgalPkgDemo{4}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a><BR>" \
"cgalPkgDemo{6}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\6\">\5</a><BR>" \
"cgalPkgDescriptionEnd=" \
"cgalModifBegin=\htmlonly <div class=\"CGALModification\"> \endhtmlonly \xrefitem Modification \"Modifications\" \"MODIFICATIONS\" " \
"cgalModifEnd=\htmlonly </div> \endhtmlonly \latexonly END MODIFICATIONS \endlatexonly" \

View File

@ -181,9 +181,9 @@ ALIASES = "cgal=%CGAL" \
"cgalPkgSince{1}=<B>Introduced in:</B> \cgal \1<BR>" \
"cgalPkgDependsOn{1}=<B>Depends on:</B> \1 <BR>" \
"cgalPkgLicense{1}=<B>License:</B> \1 <BR>" \
"cgalPkgDemo{2}=<B>Windows demo:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{4}=<B>Windows demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{6}=<B>Windows demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\6\">\5</a><BR><B>Common demo dlls:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/CGAL-demoDLLs.zip\">dlls</a><BR>" \
"cgalPkgDemo{2}=<B>Windows Demo:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a><BR>" \
"cgalPkgDemo{4}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a><BR>" \
"cgalPkgDemo{6}=<B>Windows Demos:</B> <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\2\">\1</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\4\">\3</a>, <a href=\"https://www.cgal.org/demo/${CGAL_CREATED_VERSION_NUM}/\6\">\5</a><BR>" \
"cgalPkgDescriptionEnd=" \
"cgalModifBegin=\htmlonly <div class=\"CGALModification\"> \endhtmlonly \xrefitem Modification \"Modifications\" \"MODIFICATIONS\"" \
"cgalModifEnd=\htmlonly </div> \endhtmlonly \latexonly END MODIFICATIONS \endlatexonly" \

View File

@ -85,7 +85,7 @@ pre_html=r"""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt
<link rel="icon" type="image/png" href="../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"/>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />
<link href="cgal_stylesheet.css" rel="stylesheet" type="text/css" />
<title>CGAL ${CGAL_CREATED_VERSION_NUM} - Manual: Acknowledging CGAL</title>
</head>
<body>

View File

@ -70,7 +70,7 @@ def clean_doc():
duplicate_files=list(package_glob('./*/jquery.js'))
duplicate_files.extend(package_glob('./*/dynsections.js'))
duplicate_files.extend(package_glob('./*/resize.js'))
duplicate_files.extend(package_glob('./*/stylesheet.css'))
duplicate_files.extend(package_glob('./*/cgal_stylesheet.css'))
# kill _all_, including the one in CGAL tabs.css files
duplicate_files.extend(glob.glob('./*/tabs.css'))
# left-over by doxygen?

View File

@ -20,7 +20,9 @@ DOXYGEN_2=$($PATH_TO_1_9_6 --version)
DO_COMPARE=TRUE
PATH_TO_SCRIPTS=${PWD}
NB_CORES="$(nproc)"
set +e
#######################################
## download and build doxygen_master ##
#######################################

View File

@ -37,7 +37,7 @@
#ifdef CGAL_ENVELOPE_USE_BFS_FACE_ORDER
#include <CGAL/Arr_face_index_map.h>
#include <CGAL/graph_traits_dual_arrangement_on_surface_2.h>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#endif
// this base divide & conquer algorithm splits the input into 2 groups,

View File

@ -2,7 +2,6 @@ Algebraic_foundations
Apollonius_graph_2
Arithmetic_kernel
Arrangement_on_surface_2
BGL
Cartesian_kernel
Circulator
Distance_2

View File

@ -293,7 +293,6 @@ namespace CGAL { namespace internal { namespace Static_filters_predicates {
double drt = (((square( drx ) + square( dry )) + square( drz )) + twt_rwt);
int cmp;
int int_tmp_result;
double eps;
double RT_tmp_result = CGAL::determinant( dpx, dpy, dpt, dqx, dqy, dqt, drx, dry, drt );
double max7 = CGAL::abs(dpz);
@ -371,217 +370,45 @@ namespace CGAL { namespace internal { namespace Static_filters_predicates {
if( max5 < aqx_rx ) max5 = aqx_rx;
double max6 = CGAL::abs(qy_ry);
if( max6 < apy_ry ) max6 = apy_ry;
if( (cmp != 0) )
{
int int_tmp_result_FFWKCAA;
double double_tmp_result;
double_tmp_result = ((px_rx * qy_ry) - (qx_rx * py_ry));
lower_bound_1 = max5;
upper_bound_1 = max5;
if( (max6 < lower_bound_1) ) lower_bound_1 = max6;
else
{
if( (max6 > upper_bound_1) ) upper_bound_1 = max6;
}
if( (lower_bound_1 < 5.00368081960964690982e-147) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
else
{
if( (upper_bound_1 > 7.23700557733225980357e+75) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
double eps = (8.88720573725927976811e-16 * (max5 * max6));
if( (double_tmp_result > eps) ) int_tmp_result_FFWKCAA = 1;
else
{
if( (double_tmp_result < -eps) )
{
int_tmp_result_FFWKCAA = -1;
}
else
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
return static_cast<result_type>(cmp * int_tmp_result_FFWKCAA);
}
int int_tmp_result_k60Ocge;
double RT_tmp_result_3SPBwDj = CGAL::determinant( dpx, dpz, dpt, dqx, dqz, dqt, drx, drz, drt );
lower_bound_1 = max1;
upper_bound_1 = max1;
if( (max7 < lower_bound_1) ) lower_bound_1 = max7;
if( (max2 < lower_bound_1) ) lower_bound_1 = max2;
//handwritten workaround to handle case where all weights are equal
//if( ((lower_bound_1 < 2.92391967062015793913e-74) || (max4 < 8.54930624023949352313e-148)) )
if( ((lower_bound_1 < 2.92391967062015793913e-74) || (max4 < 8.54930624023949352313e-148 && max4!=0)) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
int int_tmp_result_FFWKCAA;
double double_tmp_result;
double_tmp_result = ((px_rx * qy_ry) - (qx_rx * py_ry));
lower_bound_1 = max5;
upper_bound_1 = max5;
if( (max6 < lower_bound_1) ) lower_bound_1 = max6;
else
{
if( ((upper_bound_1 > 7.23700557733225980357e+75) || (max4 > 5.23742497263382350320e+151)) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
eps = (3.04426660386257731823e-14 * ((max2 * max7) * (CGAL::max)( max4, (max1 * max1) )));
if( (RT_tmp_result_3SPBwDj > eps) )
{
int_tmp_result_k60Ocge = 1;
}
else
{
if( (RT_tmp_result_3SPBwDj < -eps) )
{
int_tmp_result_k60Ocge = -1;
}
else
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
cmp = int_tmp_result_k60Ocge;
double qz_rz = (qz - rz);
double pz_rz = (pz - rz);
double max8 = CGAL::abs(qz_rz);
double apz_rz = CGAL::abs(pz_rz);
if( max8 < apz_rz ) max8 = apz_rz;
if( (cmp != 0) )
{
int int_tmp_result_k3Lzf6g;
double double_tmp_result_Gx4H;
double_tmp_result_Gx4H = ((px_rx * qz_rz) - (qx_rx * pz_rz));
lower_bound_1 = max5;
upper_bound_1 = max5;
if( (max8 < lower_bound_1) ) lower_bound_1 = max8;
else
{
if( (max8 > upper_bound_1) ) upper_bound_1 = max8;
}
if( (lower_bound_1 < 5.00368081960964690982e-147) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
else
{
if( (upper_bound_1 > 7.23700557733225980357e+75) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
eps = (8.88720573725927976811e-16 * (max5 * max8));
if( (double_tmp_result_Gx4H > eps) )
{
int_tmp_result_k3Lzf6g = 1;
}
else
{
if( (double_tmp_result_Gx4H < -eps) )
{
int_tmp_result_k3Lzf6g = -1;
}
else
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
return static_cast<result_type>(cmp * int_tmp_result_k3Lzf6g);
}
int int_tmp_result_AvrrXBP;
double RT_tmp_result_feLwnHn = CGAL::determinant( dpy, dpz, dpt, dqy, dqz, dqt, dry, drz, drt );
lower_bound_1 = max1;
upper_bound_1 = max1;
if( (max7 < lower_bound_1) ) lower_bound_1 = max7;
if( (max3 < lower_bound_1) ) lower_bound_1 = max3;
//handwritten workaround to handle case where all weights are equal
//if( ((lower_bound_1 < 2.92391967062015793913e-74) || (max4 < 8.54930624023949352313e-148)) )
if( ((lower_bound_1 < 2.92391967062015793913e-74) || (max4 < 8.54930624023949352313e-148 && max4!=0)) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
else
{
if( ((upper_bound_1 > 7.23700557733225980357e+75) || (max4 > 5.23742497263382350320e+151)) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
eps = (3.04426660386257731823e-14 * ((max3 * max7) * (CGAL::max)( max4, (max1 * max1) )));
if( (RT_tmp_result_feLwnHn > eps) )
{
int_tmp_result_AvrrXBP = 1;
}
else
{
if( (RT_tmp_result_feLwnHn < -eps) )
{
int_tmp_result_AvrrXBP = -1;
}
else
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
cmp = int_tmp_result_AvrrXBP;
int int_tmp_result_agX3WsT;
double double_tmp_result_Dw20Kqh = ((py_ry * qz_rz) - (qy_ry * pz_rz));
lower_bound_1 = max8;
upper_bound_1 = max8;
if( (max6 < lower_bound_1) )
{
lower_bound_1 = max6;
}
else
{
{
if( (max6 > upper_bound_1) ) upper_bound_1 = max6;
}
}
if( (lower_bound_1 < 5.00368081960964690982e-147) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
else
{
{
if( (upper_bound_1 > 7.23700557733225980357e+75) )
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
eps = (8.88720573725927976811e-16 * (max6 * max8));
if( (double_tmp_result_Dw20Kqh > eps) )
{
int_tmp_result_agX3WsT = 1;
}
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
double eps = (8.88720573725927976811e-16 * (max5 * max6));
if( (double_tmp_result > eps) ) int_tmp_result_FFWKCAA = 1;
else
{
if( (double_tmp_result_Dw20Kqh < -eps) )
{
int_tmp_result_agX3WsT = -1;
}
{
if( (double_tmp_result < -eps) )
{
int_tmp_result_FFWKCAA = -1;
}
else
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
return static_cast<result_type>(cmp * int_tmp_result_agX3WsT);
{
CGAL_BRANCH_PROFILER_BRANCH_2(tmp);
return Base::operator()(p,q,r,t);
}
}
}
return static_cast<result_type>(cmp * int_tmp_result_FFWKCAA);
}
else
return Base::operator()(p,q,r,t);

View File

@ -571,7 +571,7 @@ Let <I>d0</I> \f$ \in \f$ <I>D</I> be a dart. Given <I>i</I>, 0 \f$ \leq \f$ <I>
\section Generalized_mapDesign Design and Implementation History
The code of this package followed the code of Combinatorial maps and was inspired by Moka, a 3D topological modeler that uses 3D generalized maps (<A HREF="https://moka-modeller.sourceforge.net/">https://moka-modeller.sourceforge.net/</A>).
The code of this package followed the code of Combinatorial maps and was inspired by Moka, a 3D topological modeler that uses 3D generalized maps (see https://projet.liris.cnrs.fr/moka/index.php and https://github.com/gdamiand/moka).
*/
} /* namespace CGAL */

View File

@ -18,6 +18,10 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
find_package(Qt5 QUIET COMPONENTS Widgets)
include_directories(BEFORE ./include)
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
if(CGAL_Qt5_FOUND AND Qt5_FOUND)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@ -40,7 +44,8 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
add_to_cached_list(CGAL_EXECUTABLE_TARGETS Bounding_volumes)
target_link_libraries(Bounding_volumes PRIVATE CGAL::CGAL CGAL::CGAL_Qt5
Qt5::Widgets)
Qt5::Widgets
PUBLIC CGAL::Eigen3_support)
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
cgal_add_compilation_test(Bounding_volumes)
@ -53,3 +58,6 @@ else()
message("NOTICE: This demo requires CGAL and Qt5, and will not be compiled.")
endif()
else()
message("NOTICE: This demo requires CGAL and Eigen, and will not be compiled.")
endif()

View File

@ -1,6 +1,9 @@
#ifndef ELLIPSE_H
#define ELLIPSE_H
#include <Eigen/Dense>
#include <Eigen/Eigenvalues>
template <class R>
class Ellipse_2 {
@ -20,50 +23,51 @@ template <class R>
CGAL::Simple_cartesian<double>::Conic_2 co;
me.ellipse().double_conic(co);
double a11 = co.r();
double a12 = co.t()/2.0;
double a22 = co.s();
double b1 = co.u();
double b2 = co.v();
double c = co.w();
// https://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections
double A = co.r();
double B = co.t();
double C = co.s();
double D = co.u();
double E = co.v();
double F = co.w();
assert(a11*a22-a12*a12 >= 0);
assert(A * C - B*B/4 >= 0);
double delta = (a11>a22)? a11-a22 : a22-a11;
if( (delta < 0.00000000001) && (a12 == 0)){
ce = Point_2(-b1/(2*a11), -b2/(2*a11));
a_ = b_ = std::sqrt(b1*b1+b2*b2-4*a11*c)/(2*a11);
va_ = Vector_2(a_, 0);
vb_ = Vector_2(0, b_);
return;
}
Eigen::Matrix2d A33, A33i;
A33 << A, B/2, B/2, C;
A33i = A33.inverse();
double kden = 2.0*(a12*a12 - a11*a22);
double k1 = (a22*b1 - a12*b2)/kden;
double k2 = (a11*b2 - a12*b1)/kden;
ce = Point_2(k1,k2);
double mu = 1/(a11*k1*k1 + 2.0*a12*k1*k2 + a22*k2*k2 - c);
double m11 = mu*a11;
double m12 = mu*a12;
double m22 = mu*a22;
Eigen::Vector2d v;
v << -D/2 , -E/2;
double r = std::sqrt((m11-m22)*(m11-m22) + 4.0*m12*m12);
double lambda1 = ((m11+m22) + r)/2.0;
double lambda2 = ((m11+m22) - r)/2.0;
v = A33i * v;
b_ = 1.0/sqrt(lambda1);
a_ = 1.0/sqrt(lambda2);
double omega = 1.0/
std::sqrt((lambda1-m22)*(lambda1-m22) + m12*m12);
ce = Point_2(v[0],v[1]);
double u1x = - a_ * omega*m12;
double u1y = a_ * omega * (lambda1-m22);
Eigen::EigenSolver<Eigen::Matrix2d> es(A33);
double u2x = b_* omega * (lambda1-m22);
double u2y = b_* omega*m12;
Eigen::Matrix2cd ev;
ev = es.eigenvectors();
double x0 = ev.col(0)[0].real();
double y0 = ev.col(0)[1].real();
double x1 = ev.col(1)[0].real();
double y1 = ev.col(1)[1].real();
va_ = Vector_2(u1x,u1y);
vb_ = Vector_2(u2x,u2y);
double lambda1 = es.eigenvalues()[0].real();
double lambda2 = es.eigenvalues()[1].real();
Eigen::Matrix3d AQ;
AQ << A, B/2, D/2,
B/2, C, E/2,
D/2, E/2, F;
double K = AQ.determinant() / A33.determinant();
a_ = sqrt(-K/lambda1);
b_ = sqrt(-K/lambda2);
va_ = a_ * Vector_2(x0,y0);
vb_ = b_ * Vector_2(x1,y1);
}

View File

@ -0,0 +1,3 @@
0 2
2 1
0 0

View File

@ -0,0 +1,4 @@
-2 1
-2 -1
2 1
2 -1

View File

@ -0,0 +1,4 @@
-2 -1
-1 -2
1 2
2 1

View File

@ -746,17 +746,23 @@ protected:
fit->info().is_process = false;
}
// (2.2) We check if the facet is external or internal
std::queue<typename CDT::Face_handle> face_queue;
typename CDT::Face_handle face_internal = nullptr;
std::queue<typename CDT::Face_handle> face_queue, faces_internal;
if (cdt.infinite_vertex()->face()!=nullptr)
{ face_queue.push(cdt.infinite_vertex()->face()); }
{
typename CDT::Face_circulator
incident_faces(cdt.infinite_vertex()), end_incident_faces(incident_faces);
do
{ face_queue.push(incident_faces); }
while(++incident_faces!=end_incident_faces);
}
// std::cout<<"# faces PUSHED "<<face_queue.size()<<std::endl;
while(!face_queue.empty())
{
typename CDT::Face_handle fh = face_queue.front();
typename CDT::Face_handle fh=face_queue.front();
face_queue.pop();
if(!fh->info().is_process)
{
fh->info().is_process = true;
fh->info().is_process=true;
for(int i=0; i<3; ++i)
{
if(!cdt.is_constrained(std::make_pair(fh, i)))
@ -764,21 +770,16 @@ protected:
if (fh->neighbor(i)!=nullptr)
{ face_queue.push(fh->neighbor(i)); }
}
else if (face_internal==nullptr)
{
face_internal = fh->neighbor(i);
}
else
{ faces_internal.push(fh->neighbor(i)); }
}
}
}
if ( face_internal!=nullptr )
{ face_queue.push(face_internal); }
while(!face_queue.empty())
while(!faces_internal.empty())
{
typename CDT::Face_handle fh = face_queue.front();
face_queue.pop();
typename CDT::Face_handle fh=faces_internal.front();
faces_internal.pop();
if(!fh->info().is_process)
{
fh->info().is_process = true;
@ -788,7 +789,7 @@ protected:
if(!cdt.is_constrained(std::make_pair(fh, i)))
{
if (fh->neighbor(i)!=nullptr)
{ face_queue.push(fh->neighbor(i)); }
{ faces_internal.push(fh->neighbor(i)); }
}
}
}

View File

@ -8,5 +8,5 @@ is available in:
Mikhail Bogdanov, Olivier Devillers, and Monique Teillaud. Hyperbolic
Delaunay complexes and Voronoi diagrams made practical. Journal of
Computational Geometry, 5(1):5685, 2014.
URL: https://hal.inria.fr/hal-00961390,
doi:10.20382/jocg.v5i1a4.
URL: https://inria.hal.science/hal-00961390,
doi:10.20382/jocg.v5i1a4.

View File

@ -21,7 +21,7 @@ Release date: October 2023
has been removed.
#### Envelopes of Surfaces in 3D
- ** Breaking change**: Construct_projected_boundary_2 in `EnvelopeTraits_3` is now using `std::variant` instead of `Object`
- **Breaking change**: Construct_projected_boundary_2 in `EnvelopeTraits_3` is now using `std::variant` instead of `Object`
### [Combinatorial Maps](https://doc.cgal.org/6.0/Manual/packages.html#PkgCombinatorialMaps) and [Generalized Maps](https://doc.cgal.org/6.0/Manual/packages.html#PkgGeneralizedMaps)
@ -37,6 +37,11 @@ Release date: October 2023
- Added new meshing criterion `distance_bound`, an upper bound for the distance from the edge to the 1D feature.
### [Polygon Mesh Processing](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolygonMeshProcessing)
- Added the function `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()` which can be used to compute
the mean and Gaussian curvatures, as well as the principal curvature and directions.
### [2D Arrangements](https://doc.cgal.org/6.0/Manual/packages.html#PkgArrangementOnSurface2)
- Fixed a bug in the zone construction code applied to arrangements of geodesic arcs on a sphere,
when inserting an arc that lies on the identification curve.
@ -54,6 +59,10 @@ Release date: October 2023
`CGAL::Simplicial_mesh_cell_base_3`
have been modified to enable passing a geometric traits and a custom cell base class.
### [3D Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulation3)
- Added three functions `vertices()` to the class `Triangulation_3`.
Each of them returns an array containing the vertices of the given triangulation simplex.
[Release 5.6](https://github.com/CGAL/cgal/releases/tag/v5.6)
-----------

View File

@ -0,0 +1,54 @@
// Copyright (c) 2016 GeometryFactory SARL (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
//
// Warning: this file is generated, see include/CGAL/licence/README.md
#ifndef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H
#define CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H
#include <CGAL/config.h>
#include <CGAL/license.h>
#ifdef CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE
# if CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE
# if defined(CGAL_LICENSE_WARNING)
CGAL_pragma_warning("Your commercial license for CGAL does not cover "
"this release of the Polygon Mesh Processing - Interpolated Corrected Curvatures package.")
# endif
# ifdef CGAL_LICENSE_ERROR
# error "Your commercial license for CGAL does not cover this release \
of the Polygon Mesh Processing - Interpolated Corrected Curvatures package. \
You get this error, as you defined CGAL_LICENSE_ERROR."
# endif // CGAL_LICENSE_ERROR
# endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE
#else // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE
# if defined(CGAL_LICENSE_WARNING)
CGAL_pragma_warning("\nThe macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE is not defined."
"\nYou use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under "
"the terms of the GPLv3+.")
# endif // CGAL_LICENSE_WARNING
# ifdef CGAL_LICENSE_ERROR
# error "The macro CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE is not defined.\
You use the CGAL Polygon Mesh Processing - Interpolated Corrected Curvatures package under the terms of \
the GPLv3+. You get this error, as you defined CGAL_LICENSE_ERROR."
# endif // CGAL_LICENSE_ERROR
#endif // no CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_COMMERCIAL_LICENSE
#endif // CGAL_POLYGON_MESH_PROCESSING_INTERPOLATED_CORRECTED_CURVATURES_H

View File

@ -51,6 +51,7 @@ Polygon_mesh_processing/connected_components Polygon Mesh Processing - Connected
Polygon_mesh_processing/corefinement Polygon Mesh Processing - Corefinement
Polygon_mesh_processing/core Polygon Mesh Processing - Core
Polygon_mesh_processing/distance Polygon Mesh Processing - Distance
Polygon_mesh_processing/interpolated_corrected_curvatures Polygon Mesh Processing - Interpolated Corrected Curvatures
Polygon_mesh_processing/measure Polygon Mesh Processing - Geometric Measure
Polygon_mesh_processing/meshing_hole_filling Polygon Mesh Processing - Meshing and Hole Filling
Polygon_mesh_processing/orientation Polygon Mesh Processing - Orientation

View File

@ -1,7 +1,6 @@
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup kernel_classes2
The class `Aff_transformation_2` represents two-dimensional affine transformations.

View File

@ -2,7 +2,6 @@ namespace CGAL {
/*!
\ingroup kernel_classes3
\ingroup kernel_affine
The class `Aff_transformation_3` represents three-dimensional affine transformations.
The general form of an affine transformation is based on a homogeneous

View File

@ -2,7 +2,7 @@
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup PkgKernel23Ref
Tag class for affine transformations.
@ -24,7 +24,7 @@ public:
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup PkgKernel23Ref
Tag class for affine transformations.
@ -46,7 +46,7 @@ public:
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup PkgKernel23Ref
Tag class for affine transformations.
@ -68,7 +68,7 @@ public:
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup PkgKernel23Ref
Tag class for affine transformations.
@ -90,7 +90,7 @@ public:
namespace CGAL {
/*!
\ingroup kernel_affine
\ingroup PkgKernel23Ref
Tag class for affine transformations.

View File

@ -12,7 +12,7 @@ function are available.
/*!
\addtogroup do_intersect_linear_grp
\ingroup do_intersect
\ingroup do_intersect_grp
\sa `do_intersect_circular_grp`
\sa `do_intersect_spherical_grp`
@ -79,7 +79,7 @@ function are available.
/*!
\addtogroup intersection_linear_grp
\ingroup intersection
\ingroup intersection_grp
*/
/// @{

View File

@ -99,14 +99,14 @@ namespace CGAL {
{};
template<int i>
struct Attribute_const_descriptor:
public Helper::template Attribute_const_descriptor<i>
public Helper::template Attribute_const_descriptor<i>
{};
template<int i>
struct Attribute_range: public Helper::template Attribute_range<i>
{};
template<int i>
struct Attribute_const_range:
public Helper::template Attribute_const_range<i>
public Helper::template Attribute_const_range<i>
{};
typedef typename Attribute_type<0>::type Vertex_attribute;
@ -169,6 +169,10 @@ namespace CGAL {
{ return mmap.mdarts.is_used(i); }
bool owns(size_type i) const
{ return mmap.mdarts.owns(i); }
size_type capacity() const
{ return mmap.mdarts.capacity(); }
size_type upper_bound() const
{ return mmap.mdarts.upper_bound(); }
private:
Self & mmap;
};
@ -202,7 +206,7 @@ namespace CGAL {
* @return true iff the map is empty.
*/
bool is_empty() const
{ return darts().empty(); }
{ return darts().empty(); }
/// @return the number of darts.
size_type number_of_darts() const
@ -288,18 +292,18 @@ namespace CGAL {
typename Attribute_descriptor<i>::type attribute(Dart_descriptor ADart)
{
static_assert(Helper::template Dimension_index<i>::value>=0,
"attribute<i> called but i-attributes are disabled.");
"attribute<i> called but i-attributes are disabled.");
return std::get<Helper::template Dimension_index<i>::value>
(mdarts[ADart].mattribute_descriptors);
(mdarts[ADart].mattribute_descriptors);
}
template<unsigned int i>
typename Attribute_const_descriptor<i>::type
attribute(Dart_const_descriptor ADart) const
{
static_assert(Helper::template Dimension_index<i>::value>=0,
"attribute<i> called but i-attributes are disabled.");
"attribute<i> called but i-attributes are disabled.");
return std::get<Helper::template Dimension_index<i>::value>
(mdarts[ADart].mattribute_descriptors);
(mdarts[ADart].mattribute_descriptors);
}
// Copy a given attribute
@ -360,7 +364,7 @@ namespace CGAL {
{
CGAL_assertion( ah!=null_descriptor );
return std::get<Helper::template Dimension_index<i>::value>
(mattribute_containers)[ah];
(mattribute_containers)[ah];
}
template<unsigned int i>
const typename Attribute_type<i>::type&
@ -368,7 +372,7 @@ namespace CGAL {
{
CGAL_assertion( ah!=null_descriptor );
return std::get<Helper::template Dimension_index<i>::value>
(mattribute_containers)[ah];
(mattribute_containers)[ah];
}
// Get the dart of the given attribute
@ -486,14 +490,14 @@ namespace CGAL {
typename Attribute_descriptor<i>::type ah)
{
std::get<Helper::template Dimension_index<i>::value>
(mdarts[dh].mattribute_descriptors) = ah;
(mdarts[dh].mattribute_descriptors) = ah;
}
/** Link a dart with a given dart for a given dimension.
* @param adart the dart to link.
* @param adart2 the dart to link with.
* @param i the dimension.
*/
* @param adart the dart to link.
* @param adart2 the dart to link with.
* @param i the dimension.
*/
template<unsigned int i>
void dart_link_beta(Dart_descriptor adart, Dart_descriptor adart2)
{
@ -509,9 +513,9 @@ namespace CGAL {
}
/** Unlink a dart for a given dimension.
* @param adart a dart.
* @param i the dimension.
*/
* @param adart a dart.
* @param i the dimension.
*/
template<unsigned int i>
void dart_unlink_beta(Dart_descriptor adart)
{

View File

@ -43,7 +43,7 @@ read_triangle_poly_file(CDT& t, std::istream &f,
{
unsigned int j;
double x, y;
f >> j >> iformat(x) >> iformat(y);
f >> j >> IO::iformat(x) >> IO::iformat(y);
Point p(x, y);
skip_until_EOL(f); skip_comment_OFF(f);
vertices[--j] = t.insert(p);

View File

@ -1,60 +0,0 @@
namespace CGAL {
/*!
\ingroup PkgMesh3Domains
The class `Polyhedral_mesh_domain_3` implements
a domain defined by a simplicial polyhedral surface.
The input polyhedral surface must be free of intersection.
It must include (at least) one closed connected component
that defines the boundary of the domain to be meshed.
Inside this bounding component,
the input polyhedral surface may contain
several other components (closed or not)
that will be represented in the final mesh.
This class is a model of the concept `MeshDomain_3`.
\tparam Polyhedron stands for the type of the input polyhedral surface(s),
model of `FaceListGraph`.
\tparam IGT stands for a geometric traits class
providing the types and functors required to implement
the intersection tests and intersection computations
for polyhedral boundary surfaces. This parameter has to be instantiated
with a model of the concept `IntersectionGeometricTraits_3`.
\cgalModels{MeshDomain_3}
\sa `IntersectionGeometricTraits_3`
\sa `CGAL::make_mesh_3()`.
*/
template< typename Polyhedron, typename IGT, typename TriangleAccessor >
class Polyhedral_mesh_domain_3
{
public:
/// \name Creation
/// @{
/*!
Construction from a bounding polyhedral surface which must be closed, and free of intersections.
The inside of `bounding_polyhedron` will be meshed.
*/
Polyhedral_mesh_domain_3(const Polyhedron& bounding_polyhedron);
/*!
Construction from a polyhedral surface, and a bounding polyhedral surface,.
The first polyhedron must be entirely included inside `bounding_polyhedron`, which must be closed
and free of intersections.
Using this constructor allows to mesh a polyhedral surface which is not closed, or has holes.
The inside of `bounding_polyhedron` will be meshed.
*/
Polyhedral_mesh_domain_3(const Polyhedron& polyhedron,
const Polyhedron& bounding_polyhedron);
/// @}
}; /* end Polyhedral_mesh_domain_3 */
} /* end namespace CGAL */

View File

@ -1,105 +0,0 @@
namespace CGAL {
/*!
\ingroup PkgMesh3Domains
The class `Polyhedral_mesh_domain_with_features_3` implements a domain whose
boundary is a simplicial polyhedral surface.
This surface must be free of intersection.
It can either be closed,
included inside another polyhedral surface which is closed and free of intersection,
or open. In the latter case, the meshing process will only take care of the quality
of the 1D (features and boundaries) and 2D (surfaces) components of the mesh.
It is a model of the concept `MeshDomainWithFeatures_3`. It also
provides a member function to automatically detect sharp features and boundaries from
the input polyhedral surface(s).
\tparam IGT stands for a geometric traits class providing the types
and functors required to implement the intersection tests and intersection computations
for polyhedral boundary surfaces. This parameter has to be
instantiated with a model of the concept `IntersectionGeometricTraits_3`.
\cgalModels{MeshDomainWithFeatures_3}
\sa `CGAL::Mesh_domain_with_polyline_features_3<MD>`
\sa `CGAL::Polyhedral_mesh_domain_3<Polyhedron,IGT,TriangleAccessor>`
\sa `CGAL::Mesh_polyhedron_3<IGT>`
*/
template< typename IGT >
class Polyhedral_mesh_domain_with_features_3
: public CGAL::Mesh_domain_with_polyline_features_3<
CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3<IGT>::type, IGT> >
{
public:
/// \name Types
/// @{
/*!
Numerical type.
*/
typedef unspecified_type FT;
/// @}
/// \name Creation
/// @{
/*!
Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface of type `Polyhedron`.
The only requirement on type `Polyhedron` is that `CGAL::Mesh_polyhedron_3<IGT>::%type` should
be constructible from `Polyhedron`.
No feature detection is done at this level. Note that a copy of `bounding_polyhedron` will be done.
The polyhedron `bounding_polyhedron` has to be closed and free of intersections.
Its interior of `bounding_polyhedron` will be meshed.
*/
template <typename Polyhedron>
Polyhedral_mesh_domain_with_features_3(const Polyhedron& bounding_polyhedron);
/*!
Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface, and a bounding polyhedral surface.
`CGAL::Mesh_polyhedron_3<IGT>::%type` should be constructible from `Polyhedron`.
The first polyhedron should be entirely included inside `bounding_polyhedron`, which has to be closed
and free of intersections.
Using this constructor allows to mesh a polyhedral surface which is not closed, or has holes.
The inside of `bounding_polyhedron` will be meshed.
*/
template <typename Polyhedron>
Polyhedral_mesh_domain_with_features_3(const Polyhedron& polyhedron,
const Polyhedron& bounding_polyhedron);
/*!
\deprecated Constructs a `Polyhedral_mesh_domain_with_features_3` from an off file. No feature
detection is done at this level. Users must read the file into a `Polyhedron_3` and call the
constructor above.
*/
Polyhedral_mesh_domain_with_features_3(const std::string& filename);
/// @}
/// \name Operations
/// @{
/*!
Detects sharp features and boundaries of the internal bounding polyhedron (and the potential internal polyhedron)
and inserts them as features of the domain. `angle_bound` gives the maximum
angle (in degrees) between the two normal vectors of adjacent triangles.
For an edge of the polyhedron, if the angle between the two normal vectors of its
incident facets is bigger than the given bound, then the edge is considered as
a feature edge.
*/
void detect_features(FT angle_bound=60);
/*!
Detects border edges of the bounding polyhedron and inserts them as features of the domain.
This function should be called alone only, and not before or after `detect_features()`.
*/
void detect_borders();
/// @}
}; /* end Polyhedral_mesh_domain_with_features_3 */
} /* end namespace CGAL */

View File

@ -202,6 +202,7 @@ if(CGAL_ACTIVATE_CONCURRENT_MESH_3 AND TARGET CGAL::TBB_support)
target
mesh_3D_image
mesh_3D_weighted_image
mesh_3D_weighted_image_with_detection_of_features
mesh_3D_image_variable_size
mesh_3D_image_with_custom_initialization
mesh_3D_gray_image_with_custom_initialization

View File

@ -1148,9 +1148,9 @@ number_of_bad_elements_impl()
const Subdomain mc_subdomain = this->r_oracle_.is_in_domain_object()(this->r_tr_.dual(mc));
std::cerr << "*** Is in complex? c is marked in domain: " << this->r_c3t3_.is_in_complex(c)
<< " / c is really in subdomain: " << oformat(c_subdomain)
<< " / c is really in subdomain: " << IO::oformat(c_subdomain)
<< " / mc is marked in domain: " << this->r_c3t3_.is_in_complex(mc)
<< " / mc is really in subdomain: " << oformat(mc_subdomain)
<< " / mc is really in subdomain: " << IO::oformat(mc_subdomain)
<< std::endl;

View File

@ -24,6 +24,7 @@
// To avoid verbose function and named parameters call
using namespace CGAL::parameters;
template <typename Concurrency_tag>
void test()
{
@ -31,7 +32,7 @@ void test()
std::size_t nb_runs = 2;
unsigned int nb_lloyd = 2;
unsigned int nb_odt = 2;
double perturb_bound = 10.;
double perturb_bound = 7.;
double exude_bound = 15.;
// Domain

View File

@ -31,7 +31,7 @@ public:
namespace CGAL {
/*!
\ingroup PkgMinkowskiSum2Classes
\ingroup PkgMinkowskiSum2Ref
The `Hertel_Mehlhorn_convex_decomposition_2` class implements the approximation algorithm of Hertel
and Mehlhorn for decomposing a polygon into convex

View File

@ -18,9 +18,6 @@
/// \defgroup nt_cgal CGAL Number Types
/// \ingroup PkgNumberTypesRef
/// \defgroup nt_cgal CGAL Number Types
/// \ingroup PkgNumberTypesRef
/// \defgroup nt_rrational Relates Rational
/// \ingroup PkgNumberTypesRef

View File

@ -8,15 +8,4 @@
<enableAddressBar>false</enableAddressBar>
<enableFilterFunctionality>false</enableFilterFunctionality>
</assistant>
<docFiles>
<generate>
<file>
<input>Periodic_3_triangulation_3.qhp</input>
<output>Periodic_3_triangulation_3.qch</output>
</file>
</generate>
<register>
<file>Periodic_3_triangulation_3.qch</file>
</register>
</docFiles>
</QHelpCollectionProject>

View File

@ -8,15 +8,4 @@
<enableAddressBar>false</enableAddressBar>
<enableFilterFunctionality>false</enableFilterFunctionality>
</assistant>
<docFiles>
<generate>
<file>
<input>Periodic_Lloyd_3.qhp</input>
<output>Periodic_Lloyd_3.qch</output>
</file>
</generate>
<register>
<file>Periodic_Lloyd_3.qch</file>
</register>
</docFiles>
</QHelpCollectionProject>

View File

@ -134,15 +134,15 @@ bool read_XYZ(std::istream& is,
{
iss.clear();
iss.str(line);
if (iss >> iformat(x) >> iformat(y) >> iformat(z))
if (iss >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z))
{
Point point(x,y,z);
Vector normal = CGAL::NULL_VECTOR;
// ... + normal...
if (iss >> iformat(nx))
if (iss >> IO::iformat(nx))
{
// In case we could read one number, we expect that there are two more
if(iss >> iformat(ny) >> iformat(nz)){
if(iss >> IO::iformat(ny) >> IO::iformat(nz)){
normal = Vector(nx,ny,nz);
} else {
std::cerr << "Error line " << lineNumber << " of file (incomplete normal coordinates)" << std::endl;

View File

@ -39,11 +39,7 @@
#include <CGAL/property_map.h>
#include <boost/graph/adjacency_list.hpp>
#include <CGAL/boost/graph/dijkstra_shortest_paths.h> // work around a
// bug in boost
// 1.54
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/prim_minimum_spanning_tree.hpp>
#if defined(BOOST_MSVC)
@ -553,9 +549,6 @@ create_mst_graph(
For this reason it should not be called on sorted containers.
It is based on \cgalCite{cgal:hddms-srup-92}.
\warning This function may fail when Boost version 1.54 is used,
because of the following bug: https://svn.boost.org/trac/boost/ticket/9012
\pre Normals must be unit vectors
\pre `k >= 2`

View File

@ -23,6 +23,17 @@ EXCLUDE_SYMBOLS += experimental
HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/selfintersections.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/mesh_smoothing.png \
${CGAL_PACKAGE_DOC_DIR}/fig/shape_smoothing.png \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmax0.040000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-dmin0.040000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-gaussian0.040000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.020000-0.002000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.030000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.030000-0.002000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.040000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.040000-0.002000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.050000-0.000000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/bimba-mean0.050000-0.002000.jpg \
${CGAL_PACKAGE_DOC_DIR}/fig/decimate_cheese.png \
${CGAL_PACKAGE_DOC_DIR}/fig/decimate_colors.png \
${CGAL_PACKAGE_DOC_DIR}/fig/decimate_rg_joint.png

View File

@ -16,6 +16,10 @@
/// Functions to triangulate faces, and to refine and fair regions of a polygon mesh.
/// \ingroup PkgPolygonMeshProcessingRef
/// \defgroup PMP_corrected_curvatures_grp Corrected Curvature Computation
/// Functions to compute the corrected curvatures of a polygon mesh.
/// \ingroup PkgPolygonMeshProcessingRef
/// \defgroup PMP_normal_grp Normal Computation
/// Functions to compute unit normals for individual/all vertices or faces.
/// \ingroup PkgPolygonMeshProcessingRef
@ -75,7 +79,7 @@
\cgalPkgPicture{hole_filling_ico.png}
\cgalPkgSummaryBegin
\cgalPkgAuthors{Sébastien Loriot, Mael Rouxel-Labbé, Jane Tournois, and Ilker %O. Yaz}
\cgalPkgAuthors{David Coeurjolly, Jaques-Olivier Lachaud, Konstantinos Katrioplas, Sébastien Loriot, Mael Rouxel-Labbé, Hossam Saeed, Jane Tournois, and Ilker %O. Yaz}
\cgalPkgDesc{This package provides a collection of methods and classes for polygon mesh processing,
ranging from basic operations on simplices, to complex geometry processing algorithms such as
Boolean operations, remeshing, repairing, collision and intersection detection, and more.}
@ -208,6 +212,9 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage.
- \link PMP_locate_grp Nearest Face Location Queries \endlink
- \link PMP_locate_grp Random Location Generation \endlink
\cgalCRPSection{Corrected Curvatures}
- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()`
\cgalCRPSection{Normal Computation Functions}
- `CGAL::Polygon_mesh_processing::compute_face_normal()`
- `CGAL::Polygon_mesh_processing::compute_face_normals()`

View File

@ -4,7 +4,7 @@ namespace CGAL {
\anchor Chapter_PolygonMeshProcessing
\cgalAutoToc
\authors Sébastien Loriot, Mael Rouxel-Labbé, Jane Tournois, Ilker %O. Yaz
\authors David Coeurjolly, Jaques-Olivier Lachaud, Konstantinos Katrioplas, Sébastien Loriot, Mael Rouxel-Labbé, Hossam Saeed, Jane Tournois, and Ilker %O. Yaz
\image html neptun_head.jpg
\image latex neptun_head.jpg
@ -49,6 +49,7 @@ mesh, which includes point location and self intersection tests.
- \ref PMPCombinatorialRepair : repair of polygon meshes and polygon soups.
- \ref PMPGeometricRepair : repair of the geometry of polygon meshes.
- \ref PMPNormalComp : normal computation at vertices and on faces of a polygon mesh.
- \ref PMPICC : computing curvatures (mean, gaussian, principal) on a polygon mesh.
- \ref PMPSlicer : functor able to compute the intersections of a polygon mesh with arbitrary planes (slicer).
- \ref PMPConnectedComponents : methods to deal with connected
components of a polygon mesh (extraction, marks, removal, ...).
@ -935,6 +936,144 @@ not provide storage for the normals.
\cgalExample{Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp}
****************************************
\section PMPICC Computing Curvatures
This package provides methods to compute curvatures on polygonal meshes based on Interpolated
Corrected Curvatures on Polyhedral Surfaces \cgalCite{cgal:lrtc-iccmps-20}. This includes mean curvature,
Gaussian curvature, principal curvatures and directions. These can be computed on triangle meshes,
quad meshes, and meshes with n-gon faces (for n-gons, the centroid must be inside the n-gon face).
The algorithms used prove to work well in general. Also, on meshes with noise on vertex positions,
they give accurate results, under the condition that the correct vertex normals are provided.
\subsection ICCBackground Brief Background
Surface curvatures are quantities that describe the local geometry of a surface. They are important in many
geometry processing applications. As surfaces are 2-dimensional objects (embedded in 3D), they can bend
in 2 independent directions. These directions are called principal directions, and the amount of bending
in each direction is called the principal curvature: \f$ k_1 \f$ and \f$ k_2 \f$ (denoting max and min
curvatures). Curvature is usually expressed as scalar quantities like the mean curvature \f$ H \f$ and
the Gaussian curvature \f$ K \f$ which are defined in terms of the principal curvatures.
The algorithms are based on the two papers \cgalCite{cgal:lrt-ccm-22} and \cgalCite{cgal:lrtc-iccmps-20}. They
introduce a new way to compute curvatures on polygonal meshes. The main idea in \cgalCite{cgal:lrt-ccm-22} is
based on decoupling the normal information from the position information, which is useful for dealing with
digital surfaces, or meshes with noise on vertex positions. \cgalCite{cgal:lrtc-iccmps-20} introduces some
extensions to this framework, as it uses linear interpolation on the corrected normal vector field
to derive new closed form equations for the corrected curvature measures. These <b>interpolated</b>
curvature measures are the first step for computing the curvatures. For a triangle \f$ \tau_{ijk} \f$,
with vertices \a i, \a j, \a k:
\f[
\begin{align*}
\mu^{(0)}(\tau_{ijk}) = &\frac{1}{2} \langle \bar{\mathbf{u}} \mid (\mathbf{x}_j - \mathbf{x}_i) \times (\mathbf{x}_k - \mathbf{x}_i) \rangle, \\
\mu^{(1)}(\tau_{ijk}) = &\frac{1}{2} \langle \bar{\mathbf{u}} \mid (\mathbf{u}_k - \mathbf{u}_j) \times \mathbf{x}_i + (\mathbf{u}_i - \mathbf{u}_k) \times \mathbf{x}_j + (\mathbf{u}_j - \mathbf{u}_i) \times \mathbf{x}_k \rangle, \\
\mu^{(2)}(\tau_{ijk}) = &\frac{1}{2} \langle \mathbf{u}_i \mid \mathbf{u}_j \times \mathbf{u}_k \rangle, \\
\mu^{\mathbf{X},\mathbf{Y}}(\tau_{ijk}) = & \frac{1}{2} \big\langle \bar{\mathbf{u}} \big| \langle \mathbf{Y} | \mathbf{u}_k -\mathbf{u}_i \rangle \mathbf{X} \times (\mathbf{x}_j - \mathbf{x}_i) \big\rangle
-\frac{1}{2} \big\langle \bar{\mathbf{u}} \big| \langle \mathbf{Y} | \mathbf{u}_j -\mathbf{u}_i \rangle \mathbf{X} \times (\mathbf{x}_k - \mathbf{x}_i) \big\rangle,
\end{align*}
\f]
where \f$ \langle \cdot \mid \cdot \rangle \f$ denotes the usual scalar product,
\f$ \bar{\mathbf{u}}=\frac{1}{3}( \mathbf{u}_i + \mathbf{u}_j + \mathbf{u}_k )\f$.
The first measure \f$ \mu^{(0)} \f$ is the area measure of the triangle, and the measures \f$ \mu^{(1)} \f$ and
\f$ \mu^{(2)} \f$ are the mean and Gaussian corrected curvature measures of the triangle. The last measure
\f$ \mu^{\mathbf{X},\mathbf{Y}} \f$ is the anisotropic corrected curvature measure of the triangle. The
anisotropic measure is later used to compute the principal curvatures and directions through an eigenvalue
solver.
The interpolated curvature measures are then computed for each vertex \f$ v \f$ as the sum of
the curvature measures of the faces in a ball around \f$ v \f$ weighted by the inclusion ratio of the
triangle in the ball. If the ball radius is not specified, the sum is instead computed over the incident faces
of \f$ v \f$.
To get the final curvature value for a vertex \f$ v \f$, the respective interpolated curvature measure
is divided by the interpolated area measure.
\f[
\mu^{(k)}( B ) = \sum_{\tau : \text{triangle} } \mu^{(k)}( \tau ) \frac{\mathrm{Area}( \tau \cap B )}{\mathrm{Area}(\tau)}.
\f]
\subsection ICCAPI API
The implementation is generic in terms of mesh data structure. It can be used on `Surface_mesh`,
`Polyhedron_3` and other polygonal mesh structures based on the concept `FaceGraph`.
These computations are performed using (on all vertices of the mesh) `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()`
where function named parameters are used to select the curvatures (and possibly directions) to be computed. An overload function with the same name
but taking a given vertex is also available in case the computation should be done only for that vertex.
\subsection ICCResults Results & Performance
First, \cgalFigureRef{icc_measures} illustrates various curvature measures on a triangular mesh.
\cgalFigureAnchor{icc_measures}
<center>
<table border=0>
<tr>
<td><img src="bimba-mean0.040000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-gaussian0.040000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-dmin0.040000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-dmax0.040000-0.000000.jpg" style="width:100%;"/></td>
</tr>
<tr align="center"><td>(a)</td><td>(b)</td></tr>
</table>
</center>
\cgalFigureCaptionBegin{icc_measures}
Mean curvature, Gaussian curvature, minimal principal curvature direction and maximal principal curvature direction on a mesh (ball radius set to 0.04).
\cgalFigureCaptionEnd
\cgalFigureAnchor{icc_various_ball_radii}
<center>
<table border=0>
<tr>
<td><img src="bimba-mean0.020000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.030000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.040000-0.000000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.050000-0.000000.jpg" style="width:100%;"/></td>
</tr>
<tr>
<td><img src="bimba-mean0.020000-0.002000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.030000-0.002000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.040000-0.002000.jpg" style="width:100%;"/></td>
<td><img src="bimba-mean0.050000-0.002000.jpg" style="width:100%;"/></td>
</tr>
<tr align="center"><td>(a)</td><td>(b)</td></tr>
</table>
</center>
\cgalFigureCaptionBegin{icc_various_ball_radii}
When changing the integration ball radius, we obtain a scale space of curvature measure that can be used to tackle possible noise in the input as illustrated in the second row (mean curvature only with fixed colormap ranges and ball radii in {0.02,0.03,0.04,0.05}).
\cgalFigureCaptionEnd
\ref BGLPropertyMaps are used to record the computed curvatures as shown in examples. In the following examples, for each property map, we associate
a curvature value to each vertex.
\subsection ICCExampleSM Interpolated Corrected Curvatures on a Surface Mesh Example
The following example illustrates how to
compute the curvatures on vertices
and store them in the property maps provided by the class `Surface_mesh`.
\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp}
\subsection ICCExamplePH Interpolated Corrected Curvatures on a Polyhedron Example
The following example illustrates how to
compute the curvatures on vertices
and store them in dynamic property maps as the class `Polyhedron_3` does
not provide storage for the curvatures.
\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp}
\subsection ICCExampleSV Interpolated Corrected Curvatures on a Vertex Example
The following example illustrates how to
compute the curvatures on a specific vertex.
\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp}
****************************************
\section PMPSlicer Slicer
@ -1143,6 +1282,10 @@ available on 7th of October 2020. It only uses the high level algorithm of chec
is covered by a set of prisms, where each prism is an offset for an input triangle.
That is, the implementation in \cgal does not use indirect predicates.
The interpolated corrected curvatures were implemented during GSoC 2022. This was implemented by Hossam Saeed and under
supervision of David Coeurjolly, Jaques-Olivier Lachaud, and Sébastien Loriot. The implementation is based on \cgalCite{cgal:lrtc-iccmps-20}.
<a href="https://dgtal-team.github.io/doc-nightly/moduleCurvatureMeasures.html">DGtal's implementation</a> was also
used as a reference during the project.
*/
} /* namespace CGAL */

View File

@ -19,6 +19,9 @@
\example Polygon_mesh_processing/refine_fair_example.cpp
\example Polygon_mesh_processing/mesh_slicer_example.cpp
\example Polygon_mesh_processing/isotropic_remeshing_example.cpp
\example Polygon_mesh_processing/interpolated_corrected_curvatures_SM.cpp
\example Polygon_mesh_processing/interpolated_corrected_curvatures_PH.cpp
\example Polygon_mesh_processing/interpolated_corrected_curvatures_vertex.cpp
\example Polygon_mesh_processing/delaunay_remeshing_example.cpp
\example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp
\example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Some files were not shown because too many files have changed in this diff Show More