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