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 $$xymonotone 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 $$xymonotone surfaces that are irrelevant to the
lowerenvelope (resp. upperenvelope) computation may be discarded.
The valuetype of OutputIterator is Xy_monotone_surface_3.
The operator returns a pasttheend 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 $$xmonotone curves and possibly isolated planar
points that form the projection of the boundary of the given $$xymonotone
surface $$s onto the $$xyplane, and inserts them into the output iterator.
The valuetype 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 $$xmonotone 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 $$xyplane lies below or above this $$xmonotone curve,
respectively. In degenerate case, namely when the surface itself is vertical,
and its projection onto the plane is $$1dimensional, the Oriented_side
value is ON_ORIENTED_BOUNDARY. The operator returns a pasttheend
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
$$xymonotone surfaces s1 and s2 onto the $$xyplane,
and inserts them into the output iterator.
The valuetype 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 $$0) 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 pasttheend 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 $$zorder of the two given $$xymonotone
surfaces at the $$xycoordinates of the point p, with the
precondition that both surfaces are defined over p. Namely, it
returns the comparison result of $$s_{1}(p) and $$s_{2}(p).
 Comparison_result operator() (X_monotone_curve_2 c, Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative $$zorder of the two given $$xymonotone
surfaces over the interior of a given $$xmonotone curve $$c, with the
precondition that $$c is fully contained in the $$xydefinition range
of both $$s_{1} and $$s_{2}, and that the surfaces do not intersect over
$$c. The functor should therefore return the comparison result of
$$s_{1}(p') and $$s_{2}(p') for some point $$p' in the interior of $$c.
 Comparison_result operator() (Xy_monotone_surface_3 s1, Xy_monotone_surface_3 s2)
which determines the relative $$zorder of the two given unbounded
$$xymonotone surfaces, which are defined over the entire $$xyplane and
have no boundary, with the precondition that the surfaces do not intersect
at all.
The functor should therefore return the comparison result of
$$s_{1}(p) and $$s_{2}(p) for some planar point $$p ^{2}.
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 $$zorder of the two given $$xymonotone
surfaces immediately above their projected intersection curve
$$c (a planar point $$p is above an $$xmonotone curve $$c if it
is in the $$xrange of $$c, and lies to its left when the curve is
traversed from its $$xylexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined ``above'' $$c, and their relative $$zorder is the same for
some small enough neighborhood of points above $$c.


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 $$zorder of the two given $$xymonotone
surfaces immediately below their projected intersection curve
$$c (a planar point $$p is below an $$xmonotone curve $$c if it
is in the $$xrange of $$c, and lies to its right when the curve is
traversed from its $$xylexicographically smaller endpoint to its
larger endpoint). We have the precondition that both surfaces are
defined ``below'' $$c, and their relative $$zorder is the same for
some small enough neighborhood of points below $$c.
