OUGESU ( surfac, sftype, ntypes, codes, ncode, ints, reals, geoms, singc,
==========================================================================
nsingc, singp, singo, nsingp, sense, ifail )
============================================
Output generated surface
Receives:
KI_tag_surface *surfac --- surface to output
Returns:
KI_tag_list_int *sftype --- type and subtypes of surface
KI_int_nitems *ntypes --- number of entries in 'sftype'
KI_tag_list_int *codes --- codes formatting return data
KI_int_nitems *ncode --- number of format codes
<KI_tag_list_int> *ints --- integer data
<KI_tag_list_dbl> *reals --- real data
<KI_tag_list_geometry> *geoms --- underlying geometries
<KI_tag_list_curve> *singc --- list of singular curves
<KI_int_nitems> *nsingc --- number of singular curves
<KI_tag_list_dbl> *singp --- singularities
<KI_tag_list_curve> *singo --- owners of singularities
<KI_int_nitems> *nsingp --- number of singularities
KI_cod_logical *sense --- surface sense
KI_cod_error *ifail --- failure indicator
Specific errors:
KI_wrong_sub_type not a surface supported by this routine
Description:
This routine outputs a swept or spun surface. Information about the surface
is returned in the form of several lists, some of which may be null for some
surface types:
a) a list of codes which enable the data from the integer, real and
geometry lists to be interpreted
b) lists of integers and reals giving specific details about the surface
c) a list of underlying geometries, from which the surface is generated
d) lists of singular curves and points
The surface type and the sense of the surface are also returned.
Each type of surface is output to a fixed format, so it is possible to
interpret the integer, real and geometric data solely from a knowledge of the
surface type. However, it may be necessary to read the codes to decide whether
a particular piece of data has been output for a particular surface.
Conversely, the data can be interpreted completely from an understanding
of the various codes, without looking at the surface type.
The surface type, which is a token from the range TYSU00, is returned in the
list 'sftype'. In version 2.0, only one element of the list is used, so
'ntypes' always has the value 1.
The surface may have point or curve singularities (creases) and these are
returned in separate lists. The surface normal and curvature cannot be
calculated at either type of singularity. An example of a point singularity
occurs when a swung curve meets the swing axis. A curve singularity is formed
when a curve with a singularity (such as an intersection curve that meets
itself at a terminator) is swept or swung. Curve singularities are returned
as tags of curves in the list 'singc'; 'nsingc' is the number of singular
curves. Point singularities are returned in the list 'nsingp' and the number
of singular points is 'nsingp'. The argument 'singo' (owners of singular
points) is not used at present, and is always null.
Each surface has a default normal direction, but this may be reversed. The
'sense' argument is set to KI_true if the surface normal is in the default
direction, KI_false otherwise. The default direction varies according to
the surface type, and is described in the information for each surface below.
Data returned for Swept Surface
===============================
A swept surface is one that is generated by sweeping a planar curve in
a straight line normal to the plane. The real and geometry lists are used
to output data defining a swept surface. The real list contains the sweep
direction, and the curve that is swept to form the surface (the section
curve) is in the geometry list. If the curve has singularities, then these
will be swept into singular curves (which will actually be straight lines).
'sftype': TYSUSE
'sbtype': -
'ncode': 2
'nsingc': corresponds to number of singularities on section curve
'nsingp': 0
length of 'ints' list: 0
length of 'reals' list: 3
length of 'geoms' list: 1
default normal direction: cross product of section curve tangent
and sweep direction
'codes' || list | data | start | length
-------------------------------------------------------------------
|| | | |
OUFODR || 'reals' | sweep direction | 1 | 3
|| | | |
OUFOCU || 'geoms' | curve to be swept | 1 | 1
|| | | |
Data returned for Swung Surface
===============================
A swung surface is generated by swinging a planar curve about an axis in
its plane. The real and geometry lists are used to output data defining
a swung surface. The real list contains the swing axis, and the curve
that is swung to form the surface (the profile curve) is in the geometry
list. If the curve has singularities, then these will be swung into
singular curves (which will actually be circles). There may also be point
singularities where the profile curve meets the axis. The profile may be
bounded by two endpoints; this will be necessary if it intersects the axis.
Note that the tokens in 'codes' are used to indicate whether bounds are
present in the 'reals' list, but that the 'reals' list will always have
the same length whether or not bounds are present.
'sftype': TYSUSU
'sbtype': -
'ncode': 4
'nsingc': corresponds to number of singularities on profile curve
'nsingp': 0, 1 or 2
length of 'ints' list: 0
length of 'reals' list: 12
length of 'geoms' list: 1
default normal direction: cross product of the profile curve tangent and
the swing direction; the swing direction is
clockwise when viewed down the swing axis
'codes' || list | data | start | length
-------------------------------------------------------------------
|| | | |
OUFOAX || 'reals' | point and direction | 1 | 6
|| | for swing axis | |
|| | | |
OUFOPV || 'reals' | start position of | 7 | 3
|| | valid region on curve | |
|| | | |
OUFONP || 'reals' | no start position | 7 | 3
|| | | |
OUFOPV || 'reals' | end position of | 10 | 3
|| | valid region on curve | |
|| | | |
OUFONP || 'reals' | no end position | 10 | 3
|| | | |
OUFOCU || 'geoms' | curve to be swung | 1 | 1
|| | | |