SWIENT   

Equivalent PK functions: PK_BODY_spin
PK_FACE_spin
PK_VERTEX_spin

SWIENT ( swung, point, direct, angle, latrls, extent, nlatrl, state, ifail )
============================================================================

  Swing entity

Receives:
  KI_tag_list_topology     *swung          --- body, vertex, face or list of
                                           --- faces to swing
  KI_vec_position           point          --- point on axis of rotation
  KI_vec_axis               direct         --- direction of axis of rotation
  KI_dbl_angle             *angle          --- angle of swing (in radians)

Returns:
  KI_tag_list_topology     *latrls         --- lateral edge or face(s)
  KI_tag_list_topology     *extent         --- extruded vertex or edge(s)
  KI_int_nitems            *nlatrl         --- number of laterals
  KI_cod_rtlo              *state          --- state of the body after the swing
                                           ---   RTLOOK => Valid
                                           ---   RTLONG => Negated
                                           ---   RTLOSX => Self-intersecting
  KI_cod_error             *ifail          --- failure code

Specific errors:
  KI_su_self_intersect      Swing would produce a self intersecting surface
  KI_impossible_swing       Swing would produce a self intersecting surface
                            Cannot determine swung geometry
  KI_non_manifold           Cannot swing body with non-manifold boundary
  KI_bad_angle              Angle must be in the range -2pi <= angle <= 2pi
                            Full swing impossible in this context
  KI_unsuitable_entity      Body unsuitable for swing
  KI_wrong_entity           Swing entity not a body, vertex or face

Description:
  The entity to be swung is moved along an arc specified by the axis leaving
  lateral entities in its wake. Entities which may be swung, the laterals they
  produce and the type of the resulting body are identified in the following
  table.

      Swung Entities        |         Laterals         |       Result
  ===========================================================================
  Minimal body              |   One edge               |      Wire body
                            |                          |
  End vertex of wire body   |   One edge               |      Wire body
                            |                          |
  Wire body                 |   One or more faces      |      Sheet body
                            |                          |
  Sheet body                |   One or more faces      |      Solid body
                            |                          |
  One or more faces of a    |   One or more faces      |      Solid body
  solid body                |                          |
                            |                          |
  General body              |   One or more faces      |      General body
                            |       and edges          |
  ============================================================================

  For every entry in 'latrls', there is a corresponding entry in 'extent'. This
  list contains the topological entities extruded to create the lateral entities
  For every lateral face there is a swung edge from the original body and for
  every lateral edge there is a swung vertex.

  Suitable Swing Entities:

     . Any minimal body not coincident with the axis of rotation.
     . End vertices (in contradistinction to interior vertices) of wires not
       coincident with the axis of rotation.
     . Any wire body, either an open or closed loop of edges.
     . Any sheet body whose boundary is manifold.
     . Any group of manifold faces of a solid body. Entire shells must
       not be contained within the list.
     . Any general body with only one region and no edges with more than
       two faces.

  Attempting to swing an entity which is not one of the above will give rise
  to one of the ifails KI_wrong_entity, KI_unsuitable_entity or KI_non_manifold
  as appropriate.

  Permissible Swings:

     . An entity may not be swung through more than 2pi or less than -2pi.
       It is not possible to perform full swings (where the angle is 2pi or
       -2pi) on faces of a solid or end vertices of a wire.
     . For a wire body none of the edges may be coincident with the axis, nor
       are they allowed to intersect the axis at any points other than at the
       ends of the wire.
     . For full swings of a sheet body the axis may not intersect the sheet at a
       single point, but it may be coincident with any edges of the sheet.
     . When the General topology session flag is enabled, full spins of single
       faced sheet bodies with "point contacts", at vertices, on the spin axis
       will be allowed.  The result will be a general body with non_manifold
       vertices for every "point contact".
     . For partial swings of a sheet body or faces from a solid body the
       restriction is that the axis may not intersect with any edges
       tangentially.  One special case is allowed when the curve of the edge is
       a circle orthogonal and tangential to the swing axis.
     . Bodies of revolution are created using a full swing. The spun entities
       (the vertex of a minimal body, the edges of a wire, or the faces of a
       sheet) are not deleted.

  An entity which has an edge whose attached curve is of the type TYCUIN (ie
  intersection curve), TYCUFG (ie foreign geometry), TYCUSP (ie sp-curve),
  or TYCUCP (ie constant parameter curve) cannot be swung. However tolerant
  edges and sheet bodies, which have curves of type TYCUSP (ie sp-curves)
  attached to their fins, can be swung.

  After a swing any coincident topology will not be fused or united.

  In general this procedure may give rise to self-intersecting body
  boundaries, which could cause unpredictable errors later.


  Any new surfaces created are analytic surfaces if possible. If it is
  not possible to use an analytic surface then the type of the new
  surface will depend on SLIPGS (see SEINTP and OUINTP). If the creation
  of generated surfaces is off, then any new non-analytic surfaces will
  be B-surfaces; if it is on, then they will be swung surfaces.

  If local checking is on, (see SEINTP and OUINTP) consistency checks will be
  made on newly created topological and geometrical entities, and the state
  of the body returned. A state of RTLOOK indicates the body is valid. A state
  of RTLONG indicates that the result body was originally "inside out" but has
  been negated, and is now "positive" (has positive volume) and valid. A state
  of RTLOSX indicates the body is self-intersecting and further modelling
  operations on it may fail.

  If the interface parameter for local checking is switched off, the state
  returned will be RTLOOK regardless.

  A self-intersecting body can be returned even if the ifail is zero.

  For general bodies, the body is copied, the copy is transformed,
  corresponding vertices on the body and its copy are joined with
  lateral edges, and corresponding edges are joined with lateral faces.
  All the lateral entities are returned, both edges and faces.  The
  state of RTLONG is never returned since this has no meaning for
  general bodies.