PK_BODY_taper   

PK_ERROR_code_t              PK_BODY_taper
(
--- received arguments ---
const PK_BODY_t              body,           --- body to be tapered
int                          n_refs_above,   --- number of reference
                                             --- entities above parting
                                             --- body
const PK_ENTITY_t            refs_above[],   --- reference entities
                                             --- above parting body
int                          n_refs_below,   --- number of reference
                                             --- entities below parting
                                             --- body
const PK_ENTITY_t            refs_below[],   --- reference entities
                                             --- below parting body
const PK_BODY_t              parting_body,   --- parting body
PK_VECTOR1_t                 direction,      --- draw direction
double                       angle_above,    --- taper angle above
double                       angle_below,    --- taper angle below
const PK_BODY_taper_o_t     *options,        --- options

--- returned arguments ---
PK_TOPOL_track_r_t    *const tracking,       --- tracking information
PK_TOPOL_local_r_t    *const results         --- status information
)


This function applies two-sided tapering to the 'body' parted
by the 'parting_body'.

This function does not support facet geometry [NF]


Specific Errors:
    PK_ERROR_unsuitable_topology    only solid bodies and solid
                                    or sheet parting bodies are
                                    supported (MILD)

    PK_ERROR_wrong_entity_in_array  given references are not from
                                    same body or non-default tapering
                                    method entities not given as
                                    references (MILD)

    PK_ERROR_bad_reference          invalid reference entity (MILD)

    PK_ERROR_impossible_taper       taper conditions cannot be
                                    satisfied (SERIOUS)

    PK_ERROR_not_implemented        unavailable functionality is
                                    called (MILD)

    PK_ERROR_taper_failed           PK_BODY_taper suffered an
                                    internal algorithmic failure
                                    (SERIOUS)



For more information about this method of tapering see
here in the Parasolid
Functional Description.

The 'body' is divided by the 'parting_body' into "above" and "below"
halves with respect to the draw 'direction'. Taper faces are then
constructed and replace existing faces between given references on
each half and the 'parting_body'. See
here for more information.

Surfaces of new taper faces are defined by the 'direction' and
'angle_above' or 'angle_below' for "above" and "below" halves
respectively. These surfaces originate at 'refs_above' and 'refs_below'
and propagate to the intersection with the 'parting_body'.

Edge references on either side can form a single chain or multiple
chains.  If there are references on both sides and 'mitre_at_parting'
is set to PK_LOGICAL_true, then both sides must have the same number of
chains. See
here for more
information.

Default tapering method can be defined for all references with
'default_method' option field. It is possible to override the default
method for each reference entity using 'methods' and 'method_refs'
arrays of the option structure. If 'default_method' is set to
PK_taper_method_isocline_c, it is recommended that the isocline reference
edges are generated by calling PK_FACE_imprint_cus_isoclin with the value
of 'isocline_split' set to PK_isocline_split_convexity_c.
See here for more information.


If resulting tapered faces from two halves do not meet at the
'parting_body' then  the function will do the following depending on
'miter_at_parting' option field:

Non-mitered solution ('miter_at_parting' is PK_LOGICAL_false)

* Any gaps between misaligned "above" and "below" halves at the
  'parting_body' will be filled using faces of the 'parting_body'.

Mitered solution ('miter_at_parting' is PK_LOGICAL_true)

* Extra material will be added to one or both halves to make sure they
  meet at the 'parting_body'. Depending on the value of the 'miter_type'
  option, mitered faces can either be bound by the supplied reference
  edges, or tangential to the body, or a combination of the two. This
  results in varied taper angle for some of the new faces.

The function allows for one-sided solutions as described in
here. In this case only one
set of references should be given. The function will construct new
taper surfaces from the given references to the intersection with
the 'parting_body'.