 |
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'.