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

View File

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

View File

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

View File

@ -39,10 +39,9 @@ diagram cell is unique.
\cgalCRPSection{Classes} \cgalCRPSection{Classes}
- `CGAL::Envelope_diagram_2<EnvTraits>` - `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_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>` - `CGAL::Env_surface_data_traits_3<Traits,XyData,SData,Cnv>`
*/ */

View File

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

View File

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