RMFASO   

Equivalent PK functions: PK_FACE_remove_to_solid_bodies

RMFASO ( faces, actpar, actoff, parnts, nprnts, sprnts, offspg, nofspg, 
========================================================================
         sofspg, ifail )
         ===============

  Remove faces into new solids

Receives:
  KI_tag_list_face         *faces          --- faces to be removed
  KI_cod_sllo              *actpar         --- action to mend holes on parents
                                           ---   SLLOCP => cap
                                           ---   SLLOGR => grow
                                           ---   SLLORB => leave rubber
  KI_cod_sllo              *actoff         --- action to mend holes on offspring
                                           ---   SLLOCP => cap
                                           ---   SLLOGR => grow
                                           ---   SLLOGP => grow from parent
                                           ---   SLLORB => leave rubber

Returns:
  KI_tag_list_body         *parnts         --- parent body fragments
  KI_int_nitems            *nprnts         --- number of parent fragments
  KI_tag_list_int          *sprnts         --- state of parent fragments
                                           ---   RTLOOK => Valid
                                           ---   RTLONG => Negated
                                           ---   RTLOSX => Self-Intersecting
  KI_tag_list_body         *offspg         --- offspring bodies
  KI_int_nitems            *nofspg         --- number of offspring
  KI_tag_list_int          *sofspg         --- state of offspring
                                           ---   RTLOOK => Valid
                                           ---   RTLONG => Negated
                                           ---   RTLOSX => Self-Intersecting
  KI_cod_error             *ifail          --- failure code

Specific errors:
  KI_wire_body              Unable to make solid from wire body
  KI_all_faces_in_body      Cannot remove all faces from body
  KI_dont_make_solid        Unable to make solid from faces
  KI_cant_heal_wound        Can't heal wound - impossible geometry
  KI_non_manifold           Cannot heal wound with non-manifold boundary
  KI_not_in_same_shell      Faces not all from the same shell
  KI_unsuitable_entity      Mixed body
  KI_general_body           general body unsuitable for sweep

Description:
  The 'faces', which must all belong to the same body, are separated from it,
  and used to make one or more new bodies. The new bodies formed from 'faces'
  are termed "offspring", and the original body, which may become fragmented,
  "parent fragments".

  The faces must not form the shell of a sheet body. If they form an inner shell
  (ie void) of a solid, that shell is removed into a solid. If the faces do not
  form a shell, holes left in the parent fragments by the removal of 'faces' are
  "healed" according to the action code 'actpar'. All holes are healed with the
  same type of action. Similarly, 'faces' are formed into solid offspring by
  healing holes in them according to the action 'actoff'. The action "cap"
  causes a new face to be created for a hole with a surface which fits the edges
  of the hole. The action "grow" causes the faces around the hole to be extended
  until the hole is covered. The action "grow from parent" has the same effect
  as "grow" in parent fragments, however in offspring it causes a  hole to be
  covered with an inverse of the "patch" made by extending faces around the
  corresponding hole in the parent. It is not necessary for 'actpar' to be
  "grow" when 'actoff' is "grow from parent". The action "leave rubber" covers
  each hole with a rubber face.

  Restrictions on growing:
    Edges of faces adjacent to a wound which do not form part of the loop of
    edges around the wound, but have a vertex on it, will not be allowed to
    contract back from that point.  The "shrinkage" option implemented in
    DELFAS does not work for this routine.

    Each closed loop around a face or group of faces is healed independently.
    If the only solution would require more than one loop to be healed together
    it will not be found.

    The wound left by removing all the faces in a shell or body cannot be
    healed.

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

  If local checking is on (see SEINTP and OUINTP), and the action is not leave
  rubber, 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. It is the
  responsibility of the calling routine to make any necessary reparation.

  If the session parameter for local checking is switched off or the action is
  leave rubber, the state returned will be RTLOOK regardless.

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

  This function is not supported for faces on general bodies.