PK_BODY_fill_hole_o_t   

struct PK_BODY_fill_hole_o_s
    {
    int                       o_t_version;
                                         --- version number
    PK_fill_hole_method_t     method;    --- method to use to fill hole
                                         --- ( PK_fill_hole_trim_to_hole_c )
                                         --- [PF]
    PK_BODY_t                 fill_sheet;--- sheet body to patch hole
                                         --- ( PK_ENTITY_null ) [NF]
    PK_check_fa_fa_t          check_fa_fa;
                                         --- check for face-face
                                         --- inconsistencies
                                         --- ( PK_check_fa_fa_yes_c )
    PK_LOGICAL_t              attach_sheet;
                                         --- attach created sheet
                                         --- ( PK_LOGICAL_true )
    PK_fill_hole_preference_t fill_preference;
                                         --- preferred way of filling hole
                                         --- ( PK_fill_hole_smooth_c ) [PF]
    PK_continuity_t           smoothness;--- allows control over the level of
                                         --- continuity with adjacent faces
                                         --- that is required by fill hole
                                         --- (PK_continuity_g1_c)
    PK_EDGE_array_t           non_smooth_edges;
                                         --- array of boundary edges that do
                                         --- not have to be G1 smooth
                                         --- ( NULL, 0 )
    PK_fill_hole_non_smooth_t non_g1_behaviour;
                                         --- behaviour if boundary faces do not
                                         --- meet necessary G1 smoothness
                                         --- conditions
                                         --- ( PK_fill_hole_non_smooth_fail_c )
    PK_EDGE_array_t           non_g2_smooth_edges;
                                         --- array of boundary edges that do
                                         --- not have to be G2 smooth
                                         --- ( NULL, 0 )
    PK_fill_hole_non_smooth_t non_g2_behaviour;
                                         --- behaviour if boundary faces do not
                                         --- meet necessary G2 smoothness
                                         --- conditions
                                         --- ( PK_fill_hole_non_smooth_fail_c )
    PK_fill_hole_update_t     update;    --- update version
                                         --- ( PK_fill_hole_update_default_c )
    PK_fill_hole_topol_t      patch_topology;
                                         --- provides control over how to
                                         --- split the resultant patch into
                                         --- faces
                                         --- ( PK_fill_hole_topol_multiple_c )
                                         --- [NF]
    PK_fill_hole_body_type_t  body_type; --- preferred type of resulting body
                                         --- ( PK_fill_hole_body_type_orig_c )
    PK_BODY_array_t           supporting_bodies;
                                         --- array of bodies which are used to
                                         --- either split the hole into smaller
                                         --- component holes, or control the
                                         --- shape of the patch
                                         --- ( NULL, 0 ) [NF]
    PK_fill_hole_imprint_t    imprint_supporting_bodies;
                                         --- whether to always imprint the
                                         --- supporting bodies
                                         --- ( PK_fill_hole_imprint_sharp_c )
                                         --- [NF]
    int                       n_clamps;  --- number of clamps to be applied to
                                         --- the supporting bodies.
                                         --- ( 0 ) [NF]
    const PK_fill_hole_deriv_conds_t
                             *clamps;    --- array of clamps to be applied to
                                         --- the supporting bodies.
                                         --- ( NULL ) [NF]
    const int                *clamp_indices;
                                         --- array of clamp indices
                                         --- ( NULL ) [NF]
    PK_fill_hole_patch_eds_t  internal_smoothness;
                                         --- whether the internal edges of the
                                         --- created patch are required to be
                                         --- G1 smooth or not.
                                         --- ( PK_fill_hole_patch_eds_sharp_c )
                                         --- [NF]
    PK_fill_hole_opt_t        optimise;  --- how to optimise the algorithm
                                         --- ( PK_fill_hole_opt_quality_c )
                                         --- [NF]
    int                       n_supporting_point_sets;
                                         --- Number of sets of point data
                                         --- supplied to control the shape
                                         --- of the patch
                                         --- ( 0 ) [NF]
    PK_fill_hole_point_data_t
                             *supporting_point_sets;
                                         --- Array of point data sets supplied
                                         --- to control the shape of the patch.
                                         --- ( NULL ) [NF]
    PK_fill_hole_track_t      tracking_control;
                                         --- Controls the tracking returned.
                                         --- ( PK_fill_hole_track_default_c )
    };
typedef struct PK_BODY_fill_hole_o_s PK_BODY_fill_hole_o_t;



This structure contains optional controls for PK_BODY_fill_hole

Used in:

PK_BODY_fill_hole


The fields are as follows:

'method'           Method to use to fill the hole. Permitted values are:
                   PK_fill_hole_trim_to_hole_c      trim 'fill_sheet' to the
                                                    boundary of the hole
                   PK_fill_hole_trim_to_sheet_c     trim target bodies to the
                                                    laminar edges of
                                                    'fill_sheet'
                   PK_fill_hole_create_patch_c      create a fill sheet to
                                                    match the boundary of the
                                                    hole
                   PK_fill_hole_extend_adjacent_c   patch hole by growing
                                                    neighbouring faces to cover
                                                    the hole

                   Note that the values PK_fill_hole_trim_to_sheet_c,
                   PK_fill_hole_trim_to_hole_c and
                   PK_fill_hole_extend_adjacent_c are not supported for
                   facet geometry.

                   The default value is PK_fill_hole_trim_to_hole_c.
                   If a general body is supplied then 'method' cannot be set to
                   PK_fill_hole_trim_to_sheet_c.

'fill_sheet'       Sheet body to patch over the hole. Not required for method
                   PK_fill_hole_create_patch_c.

'check_fa_fa'      Whether to check for face-face inconsistencies. Permitted
                   values are:
                   PK_check_fa_fa_yes_c  perform face-face checking
                   PK_check_fa_fa_no_c   do not perform any face-face checking
                   The default value is PK_check_fa_fa_yes_c.

'attach_sheet'     Whether to attach the fill sheet to the body or not.
                   The default value is PK_LOGICAL_true.
                   This may only be set to PK_LOGICAL_false if the 'method'
                   option is set to PK_fill_hole_create_patch_c;
                   with any other method the error PK_ERROR_bad_option_data
                   is returned.

'fill_preference'  Preferences for a fill solution. Permitted values are
                   from PK_fill_hole_preference_t (see separate documentation).

                   Note that the values PK_fill_hole_prefer_plane_c and
                   PK_fill_hole_plane_only_c are not supported for facet
                   geometry.

                   The default value is PK_fill_hole_smooth_c.

'smoothness'       Where smoothness to adjacent faces is required (as specified
                   by the 'fill_preference' option), this controls the level of
                   smoothness. Allowed values are PK_continuity_g1_c and
                   PK_continuity_g2_c. This option may only be set to
                   PK_continuity_g2_c if:
                     o 'method' is set to PK_fill_hole_create_patch_c,
                     o 'optimise' is set to PK_fill_hole_opt_quality_c, and
                     o 'fill_preference' is set to PK_fill_hole_smooth_c or
                       PK_fill_hole_prefer_plane_c.
                   The default value is PK_continuity_g1_c.

'non_smooth_edges' Array of boundary edges for which G1 smoothness to adjoining
                   faces is not required. If 'non_smooth_edges' is not empty,
                   then 'fill_preference' must be set to PK_fill_hole_smooth_c
                   and 'method' must be PK_fill_hole_create_patch_c.

'non_g1_behaviour' If 'smoothness' is set to PK_continuity_g1_c, then this
                   option controls what happens if the boundary edges, faces
                   and supporting bodies do not meet visibly G1 smoothly.
                   The default value is PK_fill_hole_non_smooth_fail_c.

'non_g2_smooth_edges'
                   Array of boundary edges for which G2 smoothness to adjoining
                   faces is not required. Instead these edges will be
                   constrained to be G1 smooth to adjoining faces. If
                   'non_g2_smooth_edges' is not empty, then 'fill_preference'
                   must be set to PK_fill_hole_smooth_c, 'smoothness' must be
                   set to PK_continuity_g2_c and 'method' must be
                   PK_fill_hole_create_patch_c. An edge may not be supplied in
                   both 'non_smooth_edges' and 'non_g2_smooth_edges'.

'non_g2_behaviour' If 'smoothness' is set to PK_continuity_g2_c, then this
                   option controls what happens if the boundary edges, faces
                   and supporting bodies do not meet visibly G2 smoothly.
                   The default value is PK_fill_hole_non_smooth_fail_c.

'update'           The default value allows applications to take advantage of
                   the latest enhancements to the hole filling algorithm. To
                   maintain consistency when rebuilding models created in a
                   previous version of Parasolid, a non-default value should
                   be specified.

'patch_topology'   If 'method' is PK_fill_hole_create_patch_c then this option
                   provides some control over how the sheet body that is
                   created will be divided into faces. If 'method' is not
                   PK_fill_hole_create_patch_c then this option has no effect.
                   The default value is PK_fill_hole_topol_multiple_c.

'body_type'        This option controls the body type of the resulting body in
                   successful fill hole operations. If possible, the body type
                   will be changed to the specified type. If the supplied body
                   is a general body this option must be set to its default
                   value of PK_fill_hole_body_type_orig_c.
                   The default value is PK_fill_hole_body_type_orig_c.

'supporting_bodies'
                   If 'method' is PK_fill_hole_create_patch_c then this option
                   enables the user to provide an array of supporting bodies
                   that are used to control the shape of the created patch.

                   The supporting bodies remain unchanged after the operation.

                   'Supporting_bodies' must be one of:
                     - an array of wire bodies;
                     - a single acorn body; or
                     - a general wire body.
                   Supporting bodies will affect the function in the
                   following ways:

                   - Wire Bodies
                     If 'supporting_bodies' consists entirely of wire bodies,
                     these wire bodies are used to split the hole into smaller
                     component holes which are easier to fill. The wire bodies
                     must not intersect each other and each wire body must be
                     composed of a single chain of edges with the start and
                     end vertices of the chain coincident within tolerance to
                     existing vertices of the boundary edges of the hole. For
                     supporting body vertices on the hole boundary, if a
                     boundary edge at that vertex is laminar, and the boundary
                     edge is required to be G1 smooth to the adjacent face,
                     then the tangent of the supporting body's edge must lie in
                     the tangent plane of that face at the vertex. If G2
                     smoothness is required, then the supporting body edge
                     should also be G2 smooth with the adjacent face.

                   - Acorn Body
                     If 'supporting_bodies' comprises a single acorn body,
                     then the surface of the created patch will pass through
                     the location of the acorn body. There must be one, and
                     only one, vertex in the acorn body. In this case, a planar
                     clamp may be applied to the surface of the patch at the
                     location of the acorn body by using the 'clamps' option.

                   - General Wire Body
                     If 'supporting_bodies' consists of a single general wire
                     body, the created patch will be a single face that lies
                     within tolerance of the supporting body. The supporting
                     body must have the following properties:
                       - it must not be disjoint; and
                       - a vertex of the supporting body must tolerantly
                         coincide with a vertex on the hole boundary.
                     The supporting body and the hole boundary together
                     describe a "grid" that defines the shape of the patch.
                     Each vertex of this grid must meet the following
                     smoothness requirements:
                       - at each grid vertex with two edges, the tangents of
                         the two edges must be collinear;
                       - at each grid vertex with more than two edges, the
                         tangents of all the edges must be coplanar; and
                       - at each grid vertex on the hole boundary, if a
                         boundary edge at that vertex is laminar, and the
                         boundary edge is required to be G1 smooth to the
                         adjacent face, then the tangents of all the supporting
                         body edges must lie in the tangent plane of that face
                         at the vertex. If G2 smoothness is required, then the
                         supporting body edges should also be G2 smooth with
                         the adjacent face.

 See Using supporting bodies to control the shape of a patch.

'imprint_supporting_bodies'
                   If 'supporting_bodies' are supplied, then this option
                   controls when the supporting bodies should be imprinted onto
                   the resultant faces.
                   The returned 'tracking' structure will contain topology
                   tracking information for each edge that is imprinted:
                     o The 'original_topols' will contain an edge from the
                       supporting body.
                     o The 'product_topols' will contain the corresponding
                       imprinted edge on the resultant body.
                   Note that if 'supporting_bodies' consists of a single acorn
                   body, the acorn body will always be imprinted.
                   The default value is PK_fill_hole_imprint_sharp_c.

 See Tracking imprinted edges.

'n_clamps'         The number of supporting bodies for which clamping should
                   be attempted. (0)

'clamps'           An array of length equal to 'n_clamps' giving details of the
                   clamp to be applied to the supporting body given by
                   'clamp_indices'.

                   Currently, only acorn supporting bodies can have clamps
                   applied, and they must be planar clamps.
                   (NULL)

'clamp_indices'    An array of length equal to 'n_clamps' giving the index of
                   the supporting body (as given in 'supporting_bodies') that
                   has the clamp condition given by the corresponding entry in
                   'clamps'.

                   Currently, only the index of an acorn supporting body
                   may be supplied. (NULL)

'internal_smoothness'
                   This option controls whether those edges internal to the
                   created patch (i.e. not on the boundary) are required to be
                   G1 smooth or not.
                   The default value is PK_fill_hole_patch_eds_sharp_c.

'optimise'         Whether the algorithm should be optimised for performance or
                   improved quality.
                   The default value is PK_fill_hole_opt_quality_c.

'n_supporting_point_sets'
                   The number of supporting point sets to be supplied.
                   The default value is 0.

'supporting_point_sets'
                   If 'method' is PK_fill_hole_create_patch_c then this option
                   is used to supply an array of point data sets to control the
                   shape of the patch created to fill the hole.
                   A patch created will go through the given sets of points
                   within the supplied tolerance with surface normals
                   constrained to a given set of normals if such normals are
                   supplied.
                   The default value represent no point data set being
                   supplied.

`tracking_control  If 'tracking_control' is set to PK_fill_hole_track_default_c
                   then the tracking returned consists of
                     1) A single track record of type PK_TOPOL_track_create_c
                        with no originating topologies and product topologies
                        consisting of all faces of a created patch (whether
                        attached or not).
                     2) A track record for each edge of a supporting body that
                        is imprinted on the created patch (whether attached or
                        not). This record is of type PK_TOPOL_track_create_c,
                        has originating topologies consisting of the supporting
                        body edge and product topologies consisting of the
                        corresponding imprinted edge.

                   If 'tracking_control' is set to
                   PK_fill_hole_track_bdry_edges_c then additional tracking
                   records are returned. These records map the user supplied
                   boundary edges to the corresponding topologies on the
                   unattached created patch. These records are of type
                   PK_TOPOL_track_create_c. For this value 'attach_sheet' must
                   be set to PK_LOGICAL_false and 'method' must be set to
                   PK_fill_hole_create_patch_c.