This concept defines the minimal set of geometric predicates and
operations needed to compute the envelope of a set of arbitrary
surfaces in . 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 -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 -plane.
EnvelopeTraits_3::Make_xy_monotone_3
|
|
provides the operator (templated by the OutputIterator type) :
- OutputIterator operator() (Surface_3 S, bool is_lower, OutputIterator oi)
which subdivides the given surface S into -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 -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.
|
|
EnvelopeTraits_3::Construct_projected_boundary_2
|
|
provides the operator (templated by the OutputIterator type) :
- OutputIterator operator() (Xy_monotone_surface_3 s, OutputIterator oi)
which computes all planar -monotone curves and possibly isolated planar
points that form the projection of the boundary of the given -monotone
surface onto the -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 -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 -plane lies below or above this -monotone curve,
respectively. In degenerate case, namely when the surface itself is vertical,
and its projection onto the plane is -dimensional, the Oriented_side
value is ON_ORIENTED_BOUNDARY. The operator returns a past-the-end
iterator for the output sequence.
|
|
EnvelopeTraits_3::Construct_projected_intersections_2
|
|
provides the operator (templated by the OutputIterator type) :
- OutputIterator operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2, OutputIterator oi)
which computes the projection of the intersections of the
-monotone surfaces s1 and s2 onto the -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 ) 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.
|
|
EnvelopeTraits_3::Compare_z_at_xy_3
|
|
provides the operators :
- Comparison_result operator() (Point_2 p, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative -order of the two given -monotone
surfaces at the -coordinates of the point p, with the
precondition that both surfaces are defined over p. Namely, it
returns the comparison result of and .
- Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative -order of the two given -monotone
surfaces over the interior of a given -monotone curve , with the
precondition that is fully contained in the -definition range
of both and , and that the surfaces do not intersect over
. The functor should therefore return the comparison result of
and for some point in the interior of .
- Comparison_result operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative -order of the two given unbounded
-monotone surfaces, which are defined over the entire -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
and for some planar point .
This operator is required iff the category tag Has_boundary_category
is defined as Tag_true.
|
|
EnvelopeTraits_3::Compare_z_at_xy_above_3
|
|
provides the operator :
- Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative -order of the two given -monotone
surfaces immediately above their projected intersection curve
(a planar point is above an -monotone curve if it
is in the -range of , and lies to its left when the curve is
traversed from its -lexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined ``above'' , and their relative -order is the same for
some small enough neighborhood of points above .
|
|
EnvelopeTraits_3::Compare_z_at_xy_below_3
|
|
provides the operator :
- Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative -order of the two given -monotone
surfaces immediately below their projected intersection curve
(a planar point is below an -monotone curve if it
is in the -range of , and lies to its right when the curve is
traversed from its -lexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined ``below'' , and their relative -order is the same for
some small enough neighborhood of points below .
|