mirror of https://github.com/CGAL/cgal
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:
parent
8f7d10a300
commit
6350815604
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
|
|
@ -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>`
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue