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 {
|
||||
|
||||
/*!
|
||||
\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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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>`
|
||||
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue