PK_change_edge_geom_data_t   

struct PK_change_edge_geom_data_s
    {
    int                            n_edge_arrays; --- number of arrays of edges
                                                  --- with geom_data
                                                  --- supplied (0)
    const PK_EDGE_array_t         *edge_arrays;   --- arrays of edges for which
                                                  --- the data has been
                                                  --- provided to control the
                                                  --- geometry created (NULL)
    const PK_change_edge_method_t *methods;       --- array of edge control
                                                  --- methods (NULL)
    const PK_EDGE_step_t          *steps;         --- array of controls for
                                                  --- step face creation (NULL)
                                                  --- [PF]
    const PK_VECTOR_t             *directions;    --- array of directions
                                                  --- (NULL)
    const PK_ENTITY_t             *entities;      --- array containing the
                                                  --- entity to be used when
                                                  --- defining the geometry of
                                                  --- the associated edges
                                                  --- (NULL)
    const PK_LOGICAL_t            *reversals;     --- array of logicals
                                                  --- indicating whether the
                                                  --- direction of the
                                                  --- associated edges should
                                                  --- be reversed (NULL)
    const double                  *offsets;       --- array of signed distances
                                                  --- by which the associated
                                                  --- entity in 'entities'
                                                  --- should be offset (NULL)
    const PK_TRANSF_t             *transforms;    --- array of transforms to be
                                                  --- applied to the associated
                                                  --- entity in 'entities'
                                                  --- (NULL)
    const double                  *tolerances;    --- array of tolerances
                                                  --- desired for the
                                                  --- associated edges in the
                                                  --- 'edge_arrays' (NULL)
    const PK_replace_use_t        *replace_uses;  --- array of controls on how
                                                  --- the associated entity in
                                                  --- 'entities' should be used
                                                  --- (NULL) [PF]
    };

typedef struct PK_change_edge_geom_data_s PK_change_edge_geom_data_t;



This structure is part of the PK_FACE_change_o_t options structure. It contains
data to control the geometry created for the given arrays of edges.


Specific Errors:
    PK_ERROR_bad_value         (MILD)    Member of 'replace_uses' set to
                                         PK_replace_use_existing_c.

    PK_ERROR_bad_combination   (MILD)    Incompatible options specified as
                                         follows:
                                         - a member of 'entities' is a
                                           PK_CURVE_t, or a member of 'methods'
                                           was set as
                                           PK_change_edge_method_proj_c, and a
                                           non-zero corresponding 'offsets'
                                           value has been supplied.
                                         - a member of 'entities' is a
                                           PK_SURF_t or PK_FACE_t, or a member
                                           of 'methods' is not
                                           PK_change_edge_method_entity_c
                                           and the corresponding 'replace_uses'
                                           value is not PK_replace_use_yes_c.
                                         - at least one of the 'edge_arrays'
                                           contains an edge that is not one of
                                           the edges of the 'faces' handed into
                                           PK_FACE_change.
                                         - a member of 'entities' is a
                                           PK_SURF_t or PK_FACE_t and the
                                           corresponding 'methods' value is not
                                           PK_change_edge_method_entity_c.
                                         - a member of 'entities' is a
                                           PK_CURVE_t and the corresponding
                                           'methods' value is
                                           PK_change_edge_method_ruled_c.
                                         - a member of 'steps' is
                                           PK_EDGE_step_method_c and the
                                           corresponding 'methods' is
                                           PK_change_edge_method_proj_c.
                                         - a member of 'steps' is
                                           PK_EDGE_step_method_c and the
                                           corresponding 'methods' is
                                           PK_change_edge_method_entity_c
                                           and the corresponding member of
                                           'entities' is not a PK_SURF_t.
                                         - at least one of the
                                           'edge_arrays' contains a
                                           non-manifold edge and one or
                                           more of the following are true:
                                           * the corresponding 'replace_uses'
                                             value is not PK_replace_use_yes_c.
                                           * the corresponding 'methods' is not
                                             PK_change_edge_method_entity_c.
                                           * the corresponding member of
                                             'entities' is a PK_SURF_t or
                                             PK_FACE_t

    PK_ERROR_wrong_transf      (MILD)    A member of 'transforms' contains
                                         scale, shear, perspective or
                                         reflection components.

    PK_ERROR_unsuitable_entity (MILD)    The 'entities' array has been supplied
                                         and contains an entity other than
                                         PK_CURVE_t, PK_SURF_t or PK_FACE_t.
                                         A member of 'entities' is a PK_FACE_t
                                         and at least one of the associated
                                         edges lies in this face.
                                         A member of 'entities' is a PK_SURF_t
                                         and at least one of the associated
                                         edges lies in a face whose geometry is
                                         this surface.

    PK_ERROR_not_implemented   (MILD)    At least one of the 'edge_arrays'
                                         contains a non-laminar edge and one or
                                         more of the following are true:
                                         - the corresponding entity is a
                                           PK_SURF_t or PK_FACE_t.
                                         - the corresponding method is not
                                           PK_change_edge_method_entity_c.
                                         - the corresponding entity is a
                                           PK_CURVE_t and an adjacent face
                                           has a patch operation and the
                                           supplied curve is not coincident to
                                           an edge supplied in 'patch_edges'.
                                         - the edge has multiple adjacent faces
                                           with patch operations using same
                                           sheet entity.
                                         At least one of the 'edge_arrays'
                                         contains a laminar edge whose adjacent
                                         face has a patch operation, and the
                                         corresponding entity is a PK_CURVE_t
                                         or PK_ENTITY_null.

    PK_ERROR_bad_orientation   (SERIOUS) Two laminar edges which share a common
                                         two edge vertex have the same entity
                                         supplied, but the reversals associated
                                         with the edges would result in the
                                         edges having inconsistent
                                         orientations.


Used in:

PK_FACE_change_o_t


Description of fields:



'n_edge_arrays'         Number of arrays of edges supplied. Length of
                        'edge_arrays' and the length of any of the parallel
                        arrays if specified.  The parallel arrays are the
                        'methods', 'steps', 'directions', 'entities',
                        'reversals', 'offsets', 'transforms', 'tolerances' and
                        'replace_uses' arrays.

                        The default value is 0.


'edge_arrays'           Arrays of the edges.

                        Note that edges which will be mixed after the operation
                        must be supplied in 'edge_arrays', if any adjacent
                        face which is being changed has a bend operation.

                        The array default value is NULL.


'methods'               Array of PK_change_edge_method_t values used to define
                        the method for controlling the geometry of the
                        corresponding edges and, if 'steps' option is set to
                        PK_EDGE_step_method_c, of any associated step faces.

                        PK_change_edge_method_entity_c:
                            Attempt to use the supplied entity in the
                            'entities' array to define the new edge geometry,
                            or, if no entity is supplied, to use the existing
                            edge geometry.

                        PK_change_edge_method_swept_c:
                            The existing edge curve or supplied entity curve
                            should be swept in the corresponding direction
                            specified in the 'directions' array. The new edge
                            geometry is defined by the intersection of this
                            swept surface with the new face geometry. Any
                            offsets and transformations supplied will be
                            applied to the swept surface before it is
                            intersected with the new face geometry.

                        PK_change_edge_method_ruled_c:
                            The existing edge curve should be swept along the
                            normals of the original face to generate a ruled
                            surface. The new edge geometry is defined by the
                            intersection of this surface with the new face
                            geometry. Any offsets and transformations supplied
                            will be applied to the swept surface before it is
                            intersected with the new face geometry.

                        PK_change_edge_method_proj_c:
                            The existing edge curve or supplied entity curve
                            should be projected onto the corresponding new
                            face along the normals of the new face.

                        The default value is NULL indicating that the
                        operation should use the PK_change_edge_method_entity_c
                        method.

                        Note: if the method is not
                        PK_change_edge_method_entity_c then the associated
                        edges must be laminar unless a step face is requested
                        by associated 'steps' option.

                        See here for more information


'steps'                 Array of PK_EDGE_step_t values used to control
                        the creation of step faces for the corresponding edges.
                        This option will override any operation specific
                        step option.

                        PK_EDGE_step_default_c:
                           Indicates the data is only used to control the
                           geometry of the edges, and will not override any
                           operation specific step option.

                        PK_EDGE_step_auto_c:
                           Create step faces along the edges with Parasolid
                           internally creating the step face surface geometry.

                        PK_EDGE_step_method_c:
                           Create step faces along the edges with the step face
                           surface geometry being derived from the associated
                           'methods' option.

                           If 'methods' option is set to
                           PK_change_edge_method_entity_c, then only an entity
                           of type surface is supported.

                           The 'methods' option PK_change_edge_method_proj_c is
                           not supported.

                        PK_EDGE_step_no_c:
                           Will prevent the creation of a step face along
                           the corresponding edges.

                        The default value is NULL indicating that the
                        operation will use PK_EDGE_step_default_c.

                        For values of PK_EDGE_step_auto_c and
                        PK_EDGE_step_method_c, there may be cases where a step
                        face is not required, such as an edge with both faces
                        having the same transformation.  These cases will not
                        result in an error, but no step face will be created.

                        Note: only the value of PK_EDGE_step_default_c is
                              supported for non-manifold and mixed edges.

                        See here for more information


'directions'            If PK_change_edge_method_swept_c is specified, this
                        array defines the direction of sweeping. For other
                        methods the 'directions' array is ignored.


'entities'              Array of user provided entities used when defining
                        curves for the associated array of edges.  Each member
                        of 'entities' must be one of the following types:

                        PK_ENTITY_null  this_indicates that the geometry of the
                                        edges in the corresponding edge array
                                        is expected to be preserved.

                        PK_CURVE_t      edges in the corresponding edge array
                                        are expected to have geometry that lies
                                        within tolerance of this curve after
                                        the operation.

                        PK_SURF_t       edges in the corresponding edge array
                                        are expected to have geometry that lies
                                        within tolerance of this surface after
                                        the operation.

                        PK_FACE_t       edges in the corresponding edge array
                                        are expected to have geometry that lies
                                        within tolerance of this face after
                                        the operation.

                        If the entity is a PK_CURVE_t, the associated edges
                        will go in the direction of the curve.

                        If the entity is a PK_SURF_t or PK_FACE_t, the
                        associated edges will go in the direction of the cross
                        product of the normal of the first face of the edge and
                        the normal of the entity.  The first face of the edge
                        is defined to be the face of the fin of the edge
                        returned by PK_EDGE_ask_first_fin.

                        The default value is NULL indicating that all edges in
                        the 'edge_arrays' are expected to have their geometry
                        preserved.

                        Note: if the entity is a PK_FACE_t or a PK_SURF_t then
                        the associated edges must be laminar unless a step face
                        is requested by associated 'steps' option.

                        If the entity is a PK_FACE_t this must not be the face
                        that any of the associated edges already lie in.

                        If the entity is a PK_SURF_t this must not be the
                        surface of any face that any of the associated edges
                        already lie in.

                        If the entity is a PK_FACE_t or a PK_SURF_t then
                        the associated method must be
                        PK_change_edge_method_entity_c.

                        If the entity is a PK_CURVE_t then the associated
                        method must not be PK_change_edge_method_ruled_c


'reversals'             A PK_LOGICAL_t array indicating whether the associated
                        edges should go in the opposite direction to that
                        described above.

                        This value is ignored if the 'entities' array is NULL
                        or if the corresponding entity in 'entities' is set to
                        PK_ENTITY_null.

                        The default value is NULL indicating that none of the
                        'entities' should be reversed.


'offsets'               Array of signed distances by which the corresponding
                        entity in the 'entities' array will be offset, oriented
                        in the direction of the entity normal.

                        If the method in 'methods' is set as either
                        PK_change_edge_method_swept_c or
                        PK_change_edge_method_ruled_c then the surface
                        generated by sweeping either the entity curve or the
                        original edge curve (when the entity is PK_ENTITY_null)
                        will be offset in the direction of the swept surface
                        normal. In such cases the positive direction is defined
                        by the cross product of the fin direction and the
                        original face normal (the first face of the edge -
                        defined as the face associated with the fin returned
                        by PK_EDGE_ask_first_fin).

                        An offset may only be supplied for entities of type
                        PK_SURF_t and PK_FACE_t, or for methods
                        PK_change_edge_method_swept_c and
                        PK_change_edge_method_ruled_c.

                        The default value is NULL indicating that none of the
                        'entities' or swept surfaces should be offset.

                        If any of the 'entities' or swept surfaces cannot be
                        offset PK_local_status_cant_offset_c will be returned.



'transforms'            Array of transforms to be applied to the corresponding
                        entity in the 'entities' array or to the corresponding
                        original edge curve if the entity is PK_ENTITY_null.

                        If the method in the 'methods' array is either
                        PK_change_edge_method_swept_c or
                        PK_change_edge_method_ruled_c then the transform
                        will be applied to the surface generated by
                        sweeping either the entity curve or the original edge
                        curve (when the entity is PK_ENTITY_null).

                        If the method in the 'methods' array is
                        PK_change_edge_method_proj_c then the transform
                        will be applied to the entity or original edge curve
                        before the projection is applied.

                        Each transform must be either PK_ENTITY_null
                        (indicating that the entity should not be transformed),
                        or a transform containing only translation and rotation
                        components. Scaling, shearing, perspective and
                        reflection components are not allowed.

                        The default value is NULL indicating that none of the
                        'entities' should be transformed.


'tolerances'            Array of tolerances associated with the corresponding
                        edges in the 'edge_array'.  A value of 0.0 indicates
                        that the associated edges are to be treated as
                        accurate.  A value of -1 indicates that the original
                        edge tolerances should be used.

                        The corresponding edges in the resulting body will
                        not necessarily have this tolerance; if possible
                        the edge will be made accurate, otherwise, if a value
                        smaller than the supplied tolerance is found this is
                        used.  In some cases the tolerance may need to be
                        greater than this supplied tolerance.  In these cases
                        the operation tolerance will be used to determine if a
                        suitable value exists.

                        The default value is NULL indicating that their
                        original tolerances should be used for all edges.

                        Note: This value is ignored for facet edges or when the
                              associated entity is a PK_SURF_t or PK_FACE_t.

                        Note: Edges which will be mixed after the operation
                              must have a tolerance of at least 5 times the
                              session precision.


'replace_uses'          Array of PK_replace_use_t values used to control the
                        behaviour for the corresponding edges in cases where:
                            - the corresponding entity is PK_ENTITY_null or no
                              'entities' have been supplied but it is not
                              possible to use the edges' existing geometry
                            - the corresponding entity is a PK_CURVE_t but it
                              is not possible for the edges in the resulting
                              body to have geometry that lies within tolerance
                              of this curve
                            - the corresponding entity is a PK_SURF_t but it
                              is not possible for the edges in the resulting
                              body to have geometry that lies on this surface.
                            - the corresponding entity is a PK_FACE_t but it
                              is not possible for the edges in the resulting
                              body to have geometry that lies on the surface
                              of this face (after any associated
                              PK_FACE_change operation has been applied).
                            - the corresponding method is either
                              PK_change_edge_method_swept_c,
                              PK_change_edge_method_ruled_c or
                              PK_change_edge_method_proj but it is not
                              possible for the edges in the resulting body to
                              have geometry that lies within tolerance of the
                              generated curve.

                        PK_replace_use_attempt_c Attempt to use the geometry
                                                 indicated by the corresponding
                                                 entity or method but create a
                                                 new curve if this cannot be
                                                 used.

                        PK_replace_use_yes_c     Return a fault if the geometry
                                                 indicated by the corresponding
                                                 entity or method cannot be
                                                 used.

                        Note: the value PK_replace_use_attempt_c is not
                              implemented for entities of type PK_SURF_t and
                              PK_FACE_t, or for any method other than
                              PK_change_edge_method_entity_c. It is also not
                              implemented for non-manifold edges.

                        Note: the value PK_replace_use_existing_c is not
                              implemented for any entity.

                        Note: the value PK_replace_use_yes_c must be used for
                              edges which will be mixed after the operation,
                              if any adjacent face which is being changed has
                              a bend operation.

                        The default value is NULL indicating that the
                        operation should return a fault if the indicated
                        geometry cannot be used.


If a member of 'entities' is of type PK_FACE_t and is one of the faces handed
into PK_FACE_change, then the face used to define the associated edges will be
the face after the PK_FACE_change operation has been applied.  Similarly any
transform or offset associated with that entity will be applied after the
PK_FACE_change operation.