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_faces,       --- number of blend faces
                                                    --- created
PK_FACE_t              **const blend_faces,         --- blend faces
PK_TOPOL_array_t       **const unders,              --- underlying 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.


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


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 the "Face-face
Blending" chapter of 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.

Please also refer to the Parasolid Functional Description Chapter
Face-face Blending, Master Faces section.



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.



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 all new blend sheet bodies created,
               or nil if the blend has been attached.

face_blends  will consist of an array of n_blends blend faces.

unders       will consist of a parallel array of n_blends integers
               which contain the ( possibly dead ) tags of the underlying
               topology used to determine the equivalent blend face in
               blend_faces. Each array will consist of the tag of the
               face in the left wall, then the tag of the face in the
               right wall, then any other data that determined the geometry
               of the blend face, such as a cliff edge or tangent hold line.



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



fault consists of  PK_fxf_error_t structure containing the fields:

 fault    a success status token of type PK_fxf_fault_t
 n_topols the number of topological entities associated with the fault
 topols   an array of topological entities associated with the fault
 n_points the number of vectors associated with the fault
 points   an array of vectors associated with the fault
 n_dists  the number of distance values associated with the fault
 dists    an array of distance values associated with the fault

The possible returns are

 PK_fxf_fault_no_fault_c      The requested blend succeeded.

 PK_fxf_fault_sheet_c         The blend has not been attached,
                              nor have the walls been trimmed
                              but blend sheet bodies have been created.
                              This token is only returned if
                              PK_FACE_make_blend was called with walls set to
                              PK_blend_walls_both_c or PK_blend_walls_attach_c
                              represents a partial success.
                              The associated data is a vector in points
                              and topological tags in topols
                              These indicate the region where the blend could
                              not be attached.

 PK_fxf_fault_unknown_c       The blend could not be created.

 PK_fxf_fault_insufficient_c  The user has supplied insufficient data
                              to define a blend.

 PK_fxf_fault_inconsistent_c  The user has supplied inconsistent data.

 PK_fxf_fault_wall_c          The user has supplied an invalid wall of faces.
                              The associated data in topols is the invalid
                              array of faces.

 PK_fxf_fault_range_c         The user has supplied an invalid range
                              definition.

 PK_fxf_fault_thl_c           The user has supplied invalid tangent hold
                              line data.
                              The associated value in topols is the invalid
                              tangent hold line data.

 PK_fxf_fault_cliff_c         The user has supplied invalid cliff edge data.
                              The associated value in topols is the invalid
                              cliff edge data.

 PK_fxf_fault_curved_c        A face in a wall is too tightly curved
                              for the blend to fit.
                              The associated value in topols is the face in
                              question.

 PK_fxf_fault_small_c         A blend range is too small.
                              The associated value in dists is the suggested
                              larger range for the blend.

 PK_fxf_fault_large_c         A blend range is too large.
                              The associated value in dists is the suggested
                              smaller range for the blend.

 PK_fxf_fault_left_c          left_sense is incorrect.

 PK_fxf_fault_right_c         right_sense is incorrect.

 PK_fxf_fault_both_c          Both left_sense and right_sense are
                              incorrect.

 PK_fxf_fault_sheet_clash_c   The blend sheet(s) intersect one another
                              and hence could not be attached.
                              The associated data is a vector in points
                              and topological tags in topols
                              These indicate which sheet(s) clashed
                              and the point at which they clashed.

 PK_fxf_fault_wall_clash_c    The blend, which has been attached,
                              has combined two bodies and has
                              produced a face-face inconsistency elsewhere
                              in the model.
                              The associated value in topols is an array
                              containing the tags of a pair of clashing faces.

 PK_fxf_fault_face_face_c     The blend,which has been attached,
                              has caused a face-face inconsistency.
                              The associated value in topols is an array
                              containing the tags of a pair of clashing faces.

 PK_fxf_fault_self_int_c      The blend contains face(s) with self
                              intersecting geometry.
                              The associated value in topols is an array
                              containing the tags of the blend faces with
                              self-intersecting surfaces.

 PK_fxf_fault_rho_value_c     The user has supplied invalid rho values
                              in the rho law function.

 PK_fxf_fault_asymmetric_c    The user has supplied asymmetric ranges
                              which are inconsistent with the underlying
                              geometry.

 PK_fxf_fault_chl_c           The user has supplied invalid conic hold
                              line data.
                              The associated value in topols is the invalid
                              conic hold line data.

 PK_fxf_fault_bad_spine_c     The user has supplied an invalid parameter spine.
                              An associated value may be returned in
                              points, representing a point where the spine
                              is unsuitable.

 PK_fxf_fault_bad_ribs_c      The user has supplied invalid rib controls.