SCRIBE   

Equivalent PK functions: PK_BODY_imprint_curve
PK_FACE_imprint_curve
PK_REGION_imprint_curve

SCRIBE ( topol, curve, startp, endp, newedg, nedges, newfac, nfaces, ifail )
============================================================================

  Scribe line on a face, a region or a wire body

Receives:
  KI_tag_topology          *topol          --- face, region or body to scribe curve on
  KI_tag_curve             *curve          --- curve to scribe
  KI_vec_position           startp         --- start position
  KI_vec_position           endp           --- end position

Returns:
  KI_tag_list_edge         *newedg         --- list of new edges
  KI_int_nitems            *nedges         --- number of new edges
 <KI_tag_list_face>        *newfac         --- list of new faces, if any
 <KI_int_nitems>           *nfaces         --- number of new faces
  KI_cod_error             *ifail          --- failure indicator

Specific errors:
  KI_missing_geom           given face has no surface
  KI_general_body           given region is from general body
  KI_non_manifold           body would become general
  KI_not_in_region          no new edges created
  KI_bad_sharing            attempt to illegally share curve
  KI_not_on_curve           start or end point not on curve
  KI_bad_end_points         curve not defined between 'startp' and 'endp'
  KI_not_on_surface         curve does not lie on surface of face
  KI_not_on_face            no new edges created
  KI_crossing_face          curve crosses face
  KI_crossing_edge          curve crosses edge
  KI_unsuitable_entity      Topology is not a face, a region, or a wire body
                            Mixed body
                            cant do intersect
  KI_bad_basis_surf         SP-curve basis surface differs from face surface
  KI_invalid_geometry       curve does not pass checks
  KI_not_in_same_partition  Topol and curve are in different partitions

Description:

  The given curve, between the start and end points, is inscribed on
  'topol'.

  If 'topol' is a face, each section of the curve that lies in the
  interior of the face gives rise to a new edge or edges: this may have
  the effect of dividing the face into several pieces, all but one of
  which will be new faces. The face must have a surface attached to it,
  or the ifail KI_missing_geometry will be returned.

  If 'topol' is a region, each section of the curve that lies in the
  interior of the region gives rise to a new edge or edges. Under
  certain circumstances a new face will also be made; see below.

  If 'topol' is a body, it must be a wire body or a minimal body and the
  curve will be scribed as if the region (which is unique in this case)
  of the body had been given.

  If 'topol' is of any other type, the ifail KI_unsuitable_entity will
  be returned.

  If the curve is a B-curve (TYCUPA) then it must be capable of passing
  the checks imposed by CHCKEN. The self intersection check is only
  performed if SLIPSI not zero (see SEINTP). The composite geometry
  checks are only performed if SLIPCO (see SEINTP) is set to 0.

  A list of the new edges created will be returned in 'newedg'. If new
  faces are created, they are returned in the list 'newfac'; if no new
  faces are created, 'newfac' will be the null tag.

  The start and end points must lie on the curve or the ifail
  KI_not_on_curve will be returned. If they are in the same position the
  complete closed curve is scribed. If they are not, the start point
  must precede the end point or the ifail KI_bad_end_points will be
  returned. If the curve is a trimmed curve the bounds are ignored,
  though valid vectors should still be supplied.

  If a trimmed curve is supplied, it will be deleted and the underlying
  curve attached to the resulting edge or fin.

  If local checking is on (see SEINTP), the result body is checked for
  edge-edge and edge-face inconsistencies between the new edges and the
  rest of the body. If any edge fails these checks one of the ifails
  KI_crossing_edge or KI_crossing_face will be returned.


  Scribe may be used in the following cases:

  Region of a minimal body or a minimal body):
    If the start and end points differ, an open wire body will
    result. If they are the same, the result depends on the setting of
    SLIPGT (see SEINTP):

      if SLIPGT is zero, the result will be a sheet body with a single
      face without a surface attached; the face will lie on the left of
      the new edge, which will go in the direction of the curve.

      if SLIPGT is one, the result will be a closed wire body.

    The position of the point of the single vertex of the body is irrelevant.


  Region of a wire body or a wire body:
    If SLIPGT is zero:

      The start and end points must be different, and one or both must
      be an end vertex of the (open) wire or the ifail KI_non_manifold
      will be returned. If it joins the end vertices of a wire, then the
      result is a sheet body with a single face without a surface
      attached; the face will lie on the left of the new edge, which
      will go in the direction of the curve.  The new edges may not
      touch or cross the interior of an edge of the wire or the ifail
      KI_crossing_edge will be returned. The new edges may not touch or
      cross an interior vertex of the wire or the ifail KI_non_manifold
      will be returned.

    If SLIPGT is one:

      The bounded curve may or may not cross the existing vertices of
      the body.  It may not be coincident with the existing edges of the
      body, or cross them except at the vertices or the ifail
      KI_crossing_edge will be returned.

    This operation will in some cases (ie unless the rules which apply
    when SLIPGT is zero are followed) result in a non-manifold or
    disconnected body; if it does, the body type will change to general.


  Any region of a sheet, solid, or general body:
    SLIPGT must be set to one, or one of the ifails KI_non_manifold or
    KI_general_body will be returned.

    If the curve, between the start and end points, does not lie in the
    region, the ifail KI_not_in_region will be returned.

    The bounded curve may or may not cross the existing vertices of the
    body. It may not coincide with existing edges or faces of the body,
    or cross them except at the vertices or one of the ifails
    KI_crossing_edge or KI_crossing_face will be returned.

    One or more wireframe edges will be created in the given region. If
    the region is in a sheet or solid body, this operation will always
    result in a non-manifold or disconnected body, and so the body type
    of a sheet or solid body will change to general. If the region is in
    a general body the operation may result in a wire body, in which
    case the body type will change to wire. The operation may involve
    the creation of a new shell in the given region, or even the merging
    of two of its existing shells.


  A non-rubber face of a sheet, solid or general body:
    The curve must lie in the surface of the face or the ifail
    KI_not_on_surface will be returned. At least one new edge must be
    created by the scribe, or the ifail KI_not_on_face will be
    returned. If new faces are created, the old face will lie on the
    right of one of the scribed edges, which will all go in the
    direction of the curve.


  Scribing SP-curves is supported, providing they reference the surface of
  the face being scribed or a copy of this surface.