 |
PK_FACE_make_blend |
|
PK_ERROR_code_t PK_FACE_make_blend
(
--- received arguments ---
int n_left_wall_faces, --- number of faces in
--- left wall
const PK_FACE_t left_wall_faces[], --- faces in left wall
int n_right_wall_faces, --- number of faces in
--- right wall
const PK_FACE_t right_wall_faces[], --- faces in right wall
PK_LOGICAL_t left_sense, --- blend direction
--- from left wall
PK_LOGICAL_t right_sense, --- blend direction
--- from right wall
const PK_FACE_make_blend_o_t *options, --- options structure
--- returned arguments ---
int *const n_sheet_bodies, --- number of sheet bodies
--- created
PK_BODY_t **const sheet_bodies, --- sheet bodies
int *const n_blend_topols, --- number of blend
--- topologies created
PK_TOPOL_t **const blend_topols, --- blend topologies
PK_TOPOL_array_t **const unders, --- originating topology
--- of each blend face
PK_blend_rib_r_t *const ribs, --- ribs returned (if any)
PK_fxf_error_t *const fault --- fault found (if any)
)
This function makes a blend of the given faces.
This function does not support facet geometry [NF]
Specific Errors:
PK_ERROR_not_in_same_partition faces are not all in the same partition
PK_ERROR_fxf_blend_failed could not create blends
PK_ERROR_bad_partition user supplied partition is invalid (MILD)
PK_ERROR_instanced_body the faces in the left and right walls are
from different bodies, and the right wall
faces belong to a body that is instanced
(MILD)
PK_ERROR_facet_geometry The faces in one of the walls are from a
body with facet geometry (MILD)
This function creates one or more blends between the two sets of faces
provided. The user specifies whether the blend will be attached to the
bodies involved or returned as a separate sheet body. The user may also
specify whether cross sections of the surfaces, "ribs", are returned
instead of or as well as blends. For further details see
Face-face Blending in the Functional Description.
The function receives:
'left_wall_faces' an array of the faces which make up the left wall.
These faces must all lie in the same shell of the same
body.
'right_wall_faces' an array of the faces which make up the right wall.
These faces must all lie in the same shell of the same
body.
The two walls do not need to lie in the same body. If the blend does not
contact either the first face in 'left_wall_faces' or the first face in
'right_wall_faces' (or both), then PK_FACE_make_blend will fail.
It is possible to make a cliffedge blend between a wall of faces and
the edges of a wire body. This is termed a "wire-face" blend. To make
a wire-face blend, provide no faces for one of the walls, and instead
provide edges from a smooth connected manifold oriented wire body as
'cliff_edges' in the 'constraints' sub-structure of the option
structure.
See Master faces for more information.
'left_sense' a logical determining which side of 'left_wall_faces'
the blend lies. The blend lies in the direction of the
face normals if 'left_sense' is false.
'right_sense' a logical determining which side of 'right_wall_faces'
the blend lies. The blend lies in the direction of the
face normals if 'right_sense' is false.
For wire-face blends the sense logical for the wire side is with respect to
the cross-product of the other body's face normals and the wire edge tangents.
See Blend sense for more information.
Further options can be supplied to the function in the PK_FACE_make_blend_o_t
option structure.
If PK_FACE_make_blend has successfully created a blend, then:
'sheet_bodies' will consist of an array of length 'n_sheet_bodies'
containing any new blend sheet bodies created,
or NULL if the blend has been attached.
'blend_topols' will consist of an array of 'n_blend_topols' blend
topologies. In general this topology will consist of the
faces of the blend. If the result is a sheet body and the
field 'track_edges' is set to PK_blend_track_edges_laminar_c
in the options structure, the laminar edges of the sheet
body will also be returned.
If the 'run_out' option is set to PK_blend_run_out_angle_c
then any edges where the blend has stopped due to the run_out
condition having been met will also be returned. These will
be either:
* The edges between the blend face and capping face.
* The edges at the end of the blend face (if the capping
face has been consumed by tolerances on the part).
* The vertex at the end of the blend face (if the edges
have also consumed by tolerances on the part).
'unders' will consist of a parallel array of 'n_blend_topols'
arrays of integers. Each array will contain the
( possibly dead ) tags of the originating topology or
geometry used to determine the equivalent blend face in
'blend_topols'. In general this will be the tags of the left
and right wall faces and any other data that determined the
geometry of the blend face, such as a cliff edge or
tangent holdline.
For capping faces the array will contain the tag/tags
of the appropriate original entities from which they
were derived. For capping faces derived from
user-supplied limiting topology/geometry the array will
contain the tag of the relevant user-supplied entity.
For other capping faces the tag/tags of the topology
used to determine the cap face will be returned.
If the 'run_out' option is set to PK_blend_run_out_angle_c
then the array associated with any capping faces, edges
or vertices derived from a run_out will contain -1, if
the topology is at the start of a sheet, or -2, if it is
at the end of a sheet.
When updating v21.0 parts and older: For capping
faces derived from a limit plane the array will contain
the tag of the relevant limit plane. For capping faces
other than limit planes, the array will instead contain
-1, if the face is at the start of a sheet, or -2, if
it is the end cap of a sheet.
If the result is a sheet body and the field 'track_edges'
is set to PK_blend_track_edges_laminar_c in the options
structure, additional tracking information will be
returned associated with the laminar edges of the sheet
body. For laminar edges the array may contain faces,
edges or planes.
'ribs' consists of PK_blend_rib_r_t structure containing the fields:
'n_ribs' the number of curves and points in the 'ribs' array (may be 0)
'rib_indices' an array of integers uniquely identifying each rib
'rib_parms' an array of parameters of each rib, with values
in the range of the 'parameter' curve
'ribs' an array of curves and points which are cross sections of the
blend surfaces
See Generating blend ribs and
How ribs are returned for more information.
'fault' consists of a PK_fxf_error_t structure containing the status of the
blending operation and any associated data.