Passed the base class of Env_plane_traits_3 as a template parameter with a default value (being the 2D arrangement linear traits). Similarly, passed the base class of Env_triangle_traits_3 as a template parameter with a default value (being the 2D arrangement segment traits).

This commit is contained in:
Efi Fogel 2024-01-31 00:00:55 +02:00
parent 8f7d10a300
commit 6350815604
6 changed files with 268 additions and 277 deletions

View File

@ -1,39 +1,43 @@
namespace CGAL {
/*!
\ingroup PkgEnvelope3Ref
The traits class `Env_plane_traits_3` models the `EnvelopeTraits_3` concept,
and is used for the construction of lower and upper envelopes of planes
and half planes in the space. It is parameterized by a \cgal-kernel model,
which is parameterized in turn by a number type. The number type should
support exact rational arithmetic, to avoid numerical errors and
robustness problems. In particular, the number type should support the
arithmetic operations \f$ +\f$, \f$ -\f$, \f$ \times\f$, and \f$ \div\f$ without loss of
precision. For optimal performance, we recommend instantiating the traits
class with the predefined
`Exact_predicates_exact_constructions_kernel` provided by \cgal.
Using this kernel guarantees exactness and robustness, while it incurs
only a minor overhead (in comparison to working with a fast, inexact number
type) for most inputs.
Note that an entire plane has no boundaries, and the projection of a
half-plane is an (unbounded) line. Naturally, rays and segments may occur as
a result of overlaying projections of several half planes. Indeed,
`Env_plane_traits_3` inherits from the `Arr_linear_traits_2<Kernel>` traits
class, and extends it by adding operations on planes and half planes.
The nested `Xy_monotone_surface_3` and `Surface_3` types refer
to the same type. They are constructible from a `Kernel::Plane_3`
in case of an entire plane, or from `Kernel::Plane_3` and
`Kernel::Line_2` in case of a half-plane. The line orientation
determines which half is considered.
\cgalModels{EnvelopeTraits_3}
/*! \ingroup PkgEnvelope3Ref
*
* The traits class template `Env_plane_traits_3` models the `EnvelopeTraits_3`
* concept, and is used for the construction of lower and upper envelopes of
* planes and half planes in the space. When the template is instantiated, the
* template parameter `Kernel` must be substituted by a \cgal-kernel model, the
* number type of which should support exact rational arithmetic, to avoid
* numerical errors and robustness problems. In particular, the number type
* should support the arithmetic operations \f$ +\f$, \f$ -\f$, \f$ \times\f$,
* and \f$ \div\f$ without loss of precision. For optimal performance, we
* recommend instantiating the traits class with the predefined
* `Exact_predicates_exact_constructions_kernel` provided by \cgal. Using this
* kernel guarantees exactness and robustness, while it incurs only a minor
* overhead (in comparison to working with a fast, inexact number type) for most
* inputs.
*
* The second template parameter, namely `ArrLinearTraits`, should be
* substituted by a 2D arrangement geometry traits class that supports unbounded
* linear objects, i.e, lines, rays, and segments. By default it is substituted
* by `Arr_linear_traits_2<Kernel>`.
*
* Note that an entire plane has no boundaries, and the projection of a
* half-plane is an (unbounded) line. Naturally, rays and segments may occur as
* a result of overlaying projections of several half planes. Indeed,
* `Env_plane_traits_3` inherits from the traits class that substitutes
* `ArrLinearTraits`, and extends it by adding operations on planes and half
* planes. The nested `Xy_monotone_surface_3` and `Surface_3` types refer to
* the same type. They are constructible from a `Kernel::Plane_3` in case of an
* entire plane, or from `Kernel::Plane_3` and `Kernel::Line_2` in case of a
* half-plane. The line orientation determines which half is considered.
*
* \cgalModels{EnvelopeTraits_3}
*/
template< typename Kernel >
class Env_plane_traits_3 : public Arr_linear_traits_2<Kernel> {
template <typename Kernel,
typename ArrLinearTraits = Arr_linear_traits_2<Kernel>>
class Env_plane_traits_3 : public ArrLinearTraits {
public:
}; /* end Env_plane_traits_3 */
} /* end namespace CGAL */

View File

@ -1,42 +1,46 @@
namespace CGAL {
/*!
\ingroup PkgEnvelope3Ref
The traits class `Env_triangle_traits_3` models the `EnvelopeTraits_3`
concept, and is used for the construction of lower and upper envelopes
of triangles in the space. It is parameterized by a \cgal-kernel,
which is parameterized in turn by a number type. The number type should
support exact rational arithmetic, to avoid numerical errors and
robustness problems. In particular, the number type should support
the arithmetic operations \f$ +\f$, \f$ -\f$, \f$ \times\f$, and \f$ \div\f$ without loss
of precision. For optimal performance, we recommend instantiating the
traits class with the predefined
`Exact_predicates_exact_constructions_kernel` provided by \cgal.
Using this kernel guarantees exactness and robustness, while it incurs
only a minor overhead (in comparison to working with a fast, inexact number
type) for most inputs.
Note that when we project the boundary of a triangle, or the intersection
of two triangles, onto the \f$ xy\f$-plane, we obtain line segments. Indeed,
`Env_triangle_traits_3` inherits from the `Arr_segment_traits_2<Kernel>` traits
class, and extends it by adding operations on 3D objects, namely spacial
triangles. Note that the traits class does <I>not</I> define
`Kernel::Triangle_3` as its surface (and \f$ xy\f$-monotone surface) type,
as one may expect. This is because the traits class needs to store extra
data with the triangles in order to efficiently operate on them.
Nevertheless, the nested `Xy_monotone_surface_3` and `Surface_3`
types are however constructible from a `Kernel::Triangle_3`
instance and are also convertible to a `Kernel::Triangle_3` object.
Both types, `Xy_monotone_surface_3` and `Surface_3`, refer to the
same class, as <I>every</I> triangle is (weakly) \f$ xy\f$-monotone).
\cgalModels{EnvelopeTraits_3}
/*! \ingroup PkgEnvelope3Ref
*
* The traits class template `Env_triangle_traits_3` models the
* `EnvelopeTraits_3` concept, and is used for the construction of lower and
* upper envelopes of triangles in the space. When the template is instantiated,
* the template parameter `Kernel` must be substituted by a \cgal-kernel model,
* the number type of which should support exact rational arithmetic, to avoid
* numerical errors and robustness problems. In particular, the number type
* should support the arithmetic operations \f$ +\f$, \f$ -\f$, \f$ \times\f$,
* and \f$ \div\f$ without loss of precision. For optimal performance, we
* recommend instantiating the traits class with the predefined
* `Exact_predicates_exact_constructions_kernel` provided by \cgal. Using this
* kernel guarantees exactness and robustness, while it incurs only a minor
* overhead (in comparison to working with a fast, inexact number type) for most
* inputs.
*
* The second template parameter, namely `ArrSegmentTraits`, should be
* substituted by a 2D arrangement geometry traits class that supports
* segments. By default it is substituted by `Arr_segment_traits_2<Kernel>`.
*
* Note that when we project the boundary of a triangle, or the intersection of
* two triangles, onto the \f$ xy\f$-plane, we obtain line segments. Indeed,
* `Env_triangle_traits_3` inherits from the traits class that substitutes
* `ArrSegmentTraits`, and extends it by adding operations on 3D objects, namely
* spacial triangles. Note that the traits class does <I>not</I> define
* `Kernel::Triangle_3` as its surface (and \f$ xy\f$-monotone surface) type, as
* one may expect. This is because the traits class needs to store extra data
* with the triangles in order to efficiently operate on them. Nevertheless,
* the nested `Xy_monotone_surface_3` and `Surface_3` types are however
* constructible from a `Kernel::Triangle_3` instance and are also convertible
* to a `Kernel::Triangle_3` object. Both types, `Xy_monotone_surface_3` and
* `Surface_3`, refer to the same class, as <I>every</I> triangle is (weakly)
* \f$ xy\f$-monotone).
*
* \cgalModels{EnvelopeTraits_3}
*/
template< typename Kernel >
class Env_triangle_traits_3 : public Arr_segment_traits_2<Kernel> {
template <typename Kernel,
typename ArrSegmentTraits = Arr_segment_traits_2<Kernel>>
class Env_triangle_traits_3 : public ArrSegmentTraits {
public:
}; /* end Env_triangle_traits_3 */
} /* end namespace CGAL */

View File

@ -1,28 +1,25 @@
/*!
\ingroup PkgEnvelope3Concepts
\cgalConcept
This concept defines the minimal set of geometric predicates and
operations needed to compute the envelope of a set of arbitrary
surfaces in \f$ \mathbb{R}^3\f$. It refines the
`ArrangementXMonotoneTraits_2` concept. In addition to the
`Point_2` and `X_monotone_curve_2` types and the
`Has_boundary_category` category tag listed in the base concept,
it also lists the `Surface_3` and `Xy_monotone_surface_3`
types, which represent arbitrary surfaces and \f$ xy\f$-monotone surfaces,
respectively, and some constructions and predicates on these types.
Note however, that these operations usually involve the projection of
3D objects onto the \f$ xy\f$-plane.
\cgalRefines{ArrangementXMonotoneTraits_2}
\cgalHasModelsBegin
\cgalHasModels{CGAL::Env_triangle_traits_3<Kernel>}
\cgalHasModels{CGAL::Env_sphere_traits_3<ConicTraits>}
\cgalHasModels{CGAL::Env_plane_traits_3<Kernel>}
\cgalHasModels{CGAL::Env_surface_data_traits_3<Traits,XyData,SData,Cnv>}
\cgalHasModelsEnd
/*! \ingroup PkgEnvelope3Concepts
* \cgalConcept
*
* This concept defines the minimal set of geometric predicates and operations
* needed to compute the envelope of a set of arbitrary surfaces in \f$
* \mathbb{R}^3\f$. It refines the `ArrangementXMonotoneTraits_2` concept. In
* addition to the `Point_2` and `X_monotone_curve_2` types and the
* `Has_boundary_category` category tag listed in the base concept, it also
* lists the `Surface_3` and `Xy_monotone_surface_3` types, which represent
* arbitrary surfaces and \f$ xy\f$-monotone surfaces, respectively, and some
* constructions and predicates on these types. Note however, that these
* operations usually involve the projection of 3D objects onto the \f$
* xy\f$-plane.
*
* \cgalRefines{ArrangementXMonotoneTraits_2}
*
* \cgalHasModelsBegin
* \cgalHasModels{CGAL::Env_triangle_traits_3<Kernel, ArrLinearTraits>}
* \cgalHasModels{CGAL::Env_sphere_traits_3<ConicTraits>}
* \cgalHasModels{CGAL::Env_plane_traits_3<Kernel, ArrLinearTraits>}
* \cgalHasModels{CGAL::Env_surface_data_traits_3<Traits,XyData,SData,Cnv>}
* \cgalHasModelsEnd
*/
class EnvelopeTraits_3 {
@ -31,13 +28,11 @@ public:
/// \name Types
/// @{
/*!
represents an arbitrary surface in \f$ \mathbb{R}^3\f$.
/*! represents an arbitrary surface in \f$ \mathbb{R}^3\f$.
*/
typedef unspecified_type Surface_3;
/*!
represents a weakly \f$ xy\f$-monotone surface in \f$ \mathbb{R}^3\f$.
/*! represents a weakly \f$ xy\f$-monotone surface in \f$ \mathbb{R}^3\f$.
*/
typedef unspecified_type Xy_monotone_surface_3;
@ -46,128 +41,124 @@ typedef unspecified_type Xy_monotone_surface_3;
/// \name Functor Types
/// @{
/*!
provides the operator (templated by the `OutputIterator` type) :
<UL>
<LI>`OutputIterator operator() (Surface_3 S, bool is_lower, OutputIterator oi)`
<BR>
which subdivides the given surface `S` into \f$ xy\f$-monotone parts
and inserts them into the output iterator. The value of
`is_lower` indicates whether we compute the lower or the upper
envelope, so that \f$ xy\f$-monotone surfaces that are irrelevant to the
lower-envelope (resp. upper-envelope) computation may be discarded.
The value-type of `OutputIterator` is `Xy_monotone_surface_3`.
The operator returns a past-the-end iterator for the output sequence.
</UL>
/*! provides the operator (templated by the `OutputIterator` type) :
* <UL>
* <LI>`OutputIterator operator() (Surface_3 S, bool is_lower, OutputIterator oi)`
* <BR>
* which subdivides the given surface `S` into \f$ xy\f$-monotone parts
* and inserts them into the output iterator. The value of
* `is_lower` indicates whether we compute the lower or the upper
* envelope, so that \f$ xy\f$-monotone surfaces that are irrelevant to the
* lower-envelope (resp. upper-envelope) computation may be discarded.
* The value-type of `OutputIterator` is `Xy_monotone_surface_3`.
* The operator returns a past-the-end iterator for the output sequence.
* </UL>
*/
typedef unspecified_type Make_xy_monotone_3;
/*!
provides the operator (templated by the `OutputIterator` type) :
<UL>
<LI>`OutputIterator operator() (Xy_monotone_surface_3 s, OutputIterator oi)`
<BR>
which computes all planar \f$ x\f$-monotone curves and possibly isolated planar
points that form the projection of the boundary of the given \f$ xy\f$-monotone
surface \f$ s\f$ onto the \f$ xy\f$-plane, and inserts them into the output iterator.
The value-type of `OutputIterator` is `Object`, where `Object`
wraps either a `Point_2`, or a
`pair<X_monotone_curve_2, Oriented_side>`. In the former case, the
object represents an isolated point of the projected boundary. In the latter,
more general, case the object represents an \f$ x\f$-monotone boundary curve
along with an enumeration value which is either `ON_NEGATIVE_SIDE`
or `ON_POSITIVE_SIDE`, indicating whether whether the projection of the
surface onto the \f$ xy\f$-plane lies below or above this \f$ x\f$-monotone curve,
respectively. In degenerate case, namely when the surface itself is vertical,
and its projection onto the plane is \f$ 1\f$-dimensional, the `Oriented_side`
value is `ON_ORIENTED_BOUNDARY`. The operator returns a past-the-end
iterator for the output sequence.
</UL>
/*! provides the operator (templated by the `OutputIterator` type) :
* <UL>
* <LI>`OutputIterator operator() (Xy_monotone_surface_3 s, OutputIterator oi)`
* <BR>
* which computes all planar \f$ x\f$-monotone curves and possibly isolated
* planar points that form the projection of the boundary of the given
* \f$ xy\f$-monotone surface \f$ s\f$ onto the \f$ xy\f$-plane, and inserts
* them into the output iterator.
* The value-type of `OutputIterator` is `Object`, where `Object` wraps either
* a `Point_2`, or a `pair<X_monotone_curve_2, Oriented_side>`. In the former
* case, the object represents an isolated point of the projected boundary. In
* the latter, more general, case the object represents an \f$ x\f$-monotone
* boundary curve along with an enumeration value which is either
* `ON_NEGATIVE_SIDE` or `ON_POSITIVE_SIDE`, indicating whether whether the
* projection of the surface onto the \f$ xy\f$-plane lies below or above this
* \f$ x\f$-monotone curve, respectively. In degenerate case, namely when the
* surface itself is vertical, and its projection onto the plane is
* \f$ 1\f$-dimensional, the `Oriented_side` value is `ON_ORIENTED_BOUNDARY`.
* The operator returns a past-the-end iterator for the output sequence.
* </UL>
*/
typedef unspecified_type Construct_projected_boundary_2;
/*!
provides the operator (templated by the `OutputIterator` type) :
<UL>
<LI>`OutputIterator operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2, OutputIterator oi)`
<BR>
which computes the projection of the intersections of the
\f$ xy\f$-monotone surfaces `s1` and `s2` onto the \f$ xy\f$-plane,
and inserts them into the output iterator.
The value-type of `OutputIterator` is `Object`, where
each `Object` either wraps a `pair<X_monotone_curve_2,Multiplicity>`
instance, which represents a projected intersection curve with its
multiplicity (in case the multiplicity is undefined or not known, it
should be set to \f$ 0\f$) or an `Point_2` instance, representing the
projected image of a degenerate intersection (the projection of an
isolated intersection point, or of a vertical intersection curve).
The operator returns a past-the-end iterator for the output sequence.
</UL>
/*! provides the operator (templated by the `OutputIterator` type) :
* <UL>
* <LI>`OutputIterator operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2, OutputIterator oi)`
* <BR>
* which computes the projection of the intersections of the
* \f$ xy\f$-monotone surfaces `s1` and `s2` onto the \f$ xy\f$-plane,
* and inserts them into the output iterator.
* The value-type of `OutputIterator` is `Object`, where
* each `Object` either wraps a `pair<X_monotone_curve_2,Multiplicity>`
* instance, which represents a projected intersection curve with its
* multiplicity (in case the multiplicity is undefined or not known, it
* should be set to \f$ 0\f$) or an `Point_2` instance, representing the
* projected image of a degenerate intersection (the projection of an
* isolated intersection point, or of a vertical intersection curve).
* The operator returns a past-the-end iterator for the output sequence.
* </UL>
*/
typedef unspecified_type Construct_projected_intersections_2;
/*!
provides the operators :
<UL>
<LI> `Comparison_result operator() (Point_2 p, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
<BR>
which determines the relative \f$ z\f$-order of the two given \f$ xy\f$-monotone
surfaces at the \f$ xy\f$-coordinates of the point `p`, with the
precondition that both surfaces are defined over `p`. Namely, it
returns the comparison result of \f$ s_1(p)\f$ and \f$ s_2(p)\f$.
<LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
<BR>
which determines the relative \f$ z\f$-order of the two given \f$ xy\f$-monotone
surfaces over the interior of a given \f$ x\f$-monotone curve \f$ c\f$, with the
precondition that \f$ c\f$ is fully contained in the \f$ xy\f$-definition range
of both \f$ s_1\f$ and \f$ s_2\f$, and that the surfaces do not intersect over
\f$ c\f$. The functor should therefore return the comparison result of
\f$ s_1(p')\f$ and \f$ s_2(p')\f$ for some point \f$ p'\f$ in the interior of \f$ c\f$.
<LI>`Comparison_result operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
<BR>
which determines the relative \f$ z\f$-order of the two given unbounded
\f$ xy\f$-monotone surfaces, which are defined over the entire \f$ xy\f$-plane and
have no boundary, with the precondition that the surfaces do not intersect
at all.
The functor should therefore return the comparison result of
\f$ s_1(p)\f$ and \f$ s_2(p)\f$ for some planar point \f$ p \in\mathbb{R}^2\f$.
This operator is required iff the category tag `Has_boundary_category`
is defined as `Tag_true`.
</UL>
/*! provides the operators :
* <UL>
* <LI> `Comparison_result operator() (Point_2 p, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
* <BR>
* which determines the relative \f$ z\f$-order of the two given
* \f$ xy\f$-monotone surfaces at the \f$ xy\f$-coordinates of the point `p`,
* with the precondition that both surfaces are defined over `p`. Namely, it
* returns the comparison result of \f$ s_1(p)\f$ and \f$ s_2(p)\f$.
* <LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
* <BR>
* which determines the relative \f$ z\f$-order of the two given
* \f$ xy\f$-monotone surfaces over the interior of a given \f$ x\f$-monotone
* curve \f$ c\f$, with the precondition that \f$ c\f$ is fully contained in
* the \f$ xy\f$-definition range of both \f$ s_1\f$ and \f$ s_2\f$, and that
* the surfaces do not intersect over \f$ c\f$. The functor should therefore
* return the comparison result of \f$ s_1(p')\f$ and \f$ s_2(p')\f$ for some
* point \f$ p'\f$ in the interior of \f$ c\f$.
* <LI>`Comparison_result operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
* <BR>
* which determines the relative \f$ z\f$-order of the two given unbounded
* \f$ xy\f$-monotone surfaces, which are defined over the entire
* \f$ xy\f$-plane and have no boundary, with the precondition that the
* surfaces do not intersect at all. The functor should therefore return the
* comparison result of \f$ s_1(p)\f$ and \f$ s_2(p)\f$ for some planar point
* \f$ p \in\mathbb{R}^2\f$. This operator is required iff the category tag
* `Has_boundary_category` is defined as `Tag_true`.
* </UL>
*/
typedef unspecified_type Compare_z_at_xy_3;
/*!
provides the operator :
<UL>
<LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
<BR>
which determines the relative \f$ z\f$-order of the two given \f$ xy\f$-monotone
surfaces immediately above their projected intersection curve
\f$ c\f$ (a planar point \f$ p\f$ is <I>above</I> an \f$ x\f$-monotone curve \f$ c\f$ if it
is in the \f$ x\f$-range of \f$ c\f$, and lies to its left when the curve is
traversed from its \f$ xy\f$-lexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined "above" \f$ c\f$, and their relative \f$ z\f$-order is the same for
some small enough neighborhood of points above \f$ c\f$.
</UL>
/*! provides the operator :
* <UL>
* <LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
* <BR>
* which determines the relative \f$ z\f$-order of the two given
* \f$ xy\f$-monotone surfaces immediately above their projected intersection
* curve \f$ c\f$ (a planar point \f$ p\f$ is <I>above</I> an
* \f$ x\f$-monotone curve \f$ c\f$ if it is in the \f$ x\f$-range of
* \f$ c\f$, and lies to its left when the curve is traversed from its
* \f$ xy\f$-lexicographically smaller endpoint to its larger endpoint). We
* have the precondition that both surfaces are defined "above" \f$ c\f$, and
* their relative \f$ z\f$-order is the same for some small enough
* neighborhood of points above \f$ c\f$.
* </UL>
*/
typedef unspecified_type Compare_z_at_xy_above_3;
/*!
provides the operator :
<UL>
<LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
<BR>
which determines the relative \f$ z\f$-order of the two given \f$ xy\f$-monotone
surfaces immediately below their projected intersection curve
\f$ c\f$ (a planar point \f$ p\f$ is <I>below</I> an \f$ x\f$-monotone curve \f$ c\f$ if it
is in the \f$ x\f$-range of \f$ c\f$, and lies to its right when the curve is
traversed from its \f$ xy\f$-lexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined "below" \f$ c\f$, and their relative \f$ z\f$-order is the same for
some small enough neighborhood of points below \f$ c\f$.
</UL>
/*! provides the operator :
* <UL>
* <LI>`Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)`
* <BR>
* which determines the relative \f$ z\f$-order of the two given
* \f$ xy\f$-monotone surfaces immediately below their projected intersection
* curve \f$ c\f$ (a planar point \f$ p\f$ is <I>below</I> an
* \f$ x\f$-monotone curve \f$ c\f$ if it is in the \f$ x\f$-range of
* \f$ c\f$, and lies to its right when the curve is traversed from its
* \f$ xy\f$-lexicographically smaller endpoint to its larger endpoint). We
* have the precondition that both surfaces are defined "below" \f$ c\f$, and
* their relative \f$ z\f$-order is the same for some small enough
* neighborhood of points below \f$ c\f$.
* </UL>
*/
typedef unspecified_type Compare_z_at_xy_below_3;
@ -176,18 +167,15 @@ typedef unspecified_type Compare_z_at_xy_below_3;
/// \name Creation
/// @{
/*!
default constructor.
/*! default constructor.
*/
EnvelopeTraits_3();
/*!
copy constructor.
/*! copy constructor.
*/
EnvelopeTraits_3(EnvelopeTraits_3 other);
/*!
assignment operator.
/*! assignment operator.
*/
EnvelopeTraits_3 operator=(other);
@ -197,32 +185,26 @@ EnvelopeTraits_3 operator=(other);
/// @{
/*!
*/
Make_xy_monotone_3 make_xy_monotone_3_object();
/*!
*/
Construct_projected_boundary_2 construct_projected_boundary_2_object();
/*!
*/
Construct_projected_intersections_2 construct_projected_intersections_2_object();
/*!
*/
Compare_z_at_xy_3 compare_z_at_xy_3_object();
/*!
*/
Compare_z_at_xy_above_3 compare_z_at_xy_above_3_object();
/*!
*/
Compare_z_at_xy_below_3 compare_z_at_xy_below_3_object();

View File

@ -39,10 +39,9 @@ diagram cell is unique.
\cgalCRPSection{Classes}
- `CGAL::Envelope_diagram_2<EnvTraits>`
- `CGAL::Env_triangle_traits_3<Kernel>`
- `CGAL::Env_triangle_traits_3<Kernel, ArrLinearTraits>`
- `CGAL::Env_sphere_traits_3<ConicTraits>`
- `CGAL::Env_plane_traits_3<Kernel>`
- `CGAL::Env_plane_traits_3<Kernel, ArrLinearTraits>`
- `CGAL::Env_surface_data_traits_3<Traits,XyData,SData,Cnv>`
*/

View File

@ -28,8 +28,9 @@
namespace CGAL {
template <typename Kernel_>
class Env_plane_traits_3 : public Arr_linear_traits_2<Kernel_> {
template <typename Kernel_,
typename ArrLinearTraits = Arr_linear_traits_2<Kernel_>>
class Env_plane_traits_3 : public ArrLinearTraits {
public:
using Kernel = Kernel_;
using FT = typename Kernel::FT;

View File

@ -34,8 +34,9 @@ namespace CGAL {
template <typename Kernel_> class Env_triangle_3;
// this traits class supports both triagles and segments in 3d
template <typename Kernel_>
class Env_triangle_traits_3 : public Arr_segment_traits_2<Kernel_> {
template <typename Kernel_,
typename ArrSegmentTraits = Arr_segment_traits_2<Kernel_>>
class Env_triangle_traits_3 : public ArrSegmentTraits {
public:
using Traits_2 = Arr_segment_traits_2<Kernel_>;
using Point_2 = typename Traits_2::Point_2;