 |
PK_BODY_boolean_o_t |
|
struct PK_BODY_boolean_o_s
{
int o_t_version; --- version number
PK_boolean_function_t function; --- which boolean operation
--- (PK_boolean_unite_c)
const PK_boolean_config_o_t
*configuration; --- target and tool
--- configuration (NULL)
const PK_boolean_select_topolset_o_t
*selected_topolset;--- topolsets to select (NULL)
const PK_boolean_match_o_t
*matched_region; --- regions to match (NULL)
PK_LOGICAL_t merge_imprinted; --- (PK_LOGICAL_false)
PK_LOGICAL_t prune_in_solid; --- DEPRECATED
--- (PK_LOGICAL_false)
PK_LOGICAL_t prune_in_void; --- (PK_LOGICAL_false)
PK_boolean_fence_t fence; --- (PK_boolean_fence_none_c)
PK_LOGICAL_t allow_disjoint; --- (PK_LOGICAL_false)
PK_LOGICAL_t selective_merge; --- (PK_LOGICAL_false)
PK_boolean_check_fa_t check_fa; --- (PK_boolean_check_fa_yes_c)
double default_tol; --- (1.0E-5)
double max_tol; --- (0.0)
PK_LOGICAL_t tracking; --- (PK_LOGICAL_false)
PK_LOGICAL_t merge_attributes; --- (PK_LOGICAL_false)
PK_LOGICAL_t keep_target_edges;--- (PK_LOGICAL_false)
PK_imprint_complete_t imprint_complete_targ;
--- whether to complete
--- imprint on target body
--- (PK_imprint_complete_no_c)
PK_imprint_complete_t imprint_complete_tool;
--- whether to complete
--- imprint on tool body
--- (PK_imprint_complete_no_c)
PK_boolean_material_t target_material_side;
--- material side for target
--- (PK_boolean_material_default_c)
PK_boolean_material_t tool_material_side;
--- material side for tools
--- (PK_boolean_material_default_c)
PK_boolean_prefer_t resulting_body_type;
--- the preferred type of the
--- resulting body
--- (PK_boolean_prefer_original_c)
PK_boolean_no_effect_t
flag_no_effect; --- level of reporting of
--- boolean operations where
--- there has been no effect upon
--- the target body.
--- (PK_boolean_no_effect_basic_c)
PK_nm_edge_repair_t nm_edge_repair; --- whether to ignore non-manifold
--- edge failure and repair
--- (PK_nm_edge_repair_no_c) [NF]
double blend_radius; --- blend radius associated with
--- nm_edge_repair (1.0E-5) [NF]
PK_boolean_track_type_t
tracking_type; --- level of edge tracking
--- reporting for boolean
--- operations.
--- (PK_boolean_track_type_basic_c)
PK_track_regions_t track_regions; --- level of region tracking
--- reporting for boolean
--- operations.
--- (PK_track_regions_no_c)
const PK_FACE_overflow_data_o_t
*target_face_overflow;
--- how to process overflow from
--- target body onto tool body at
--- laminar edge of target body.
--- (NULL) [NF]
const PK_FACE_overflow_data_o_t
*tool_face_overflow;
--- how to process overflow from
--- tool body onto target body at
--- laminar edge of tool body.
--- (NULL) [NF]
PK_LOGICAL_t imprint_overlapping;
--- whether to imprint boundaries
--- of overlapping areas
--- (PK_LOGICAL_false)
PK_boolean_update_t update; --- update switch
--- ( PK_boolean_update_default_c )
PK_LOGICAL_t merge_in_solid; --- whether any topologies which
--- become surrounded by solid
--- should be merged out
--- (PK_LOGICAL_false)
PK_TOPOL_dimension_t merge_in_solid_dimension;
--- highest dimension of
--- topologies to be merged out of
--- solid
--- (PK_TOPOL_dimension_any_c)
PK_LOGICAL_t merge_in_face; --- whether any redundant
--- topologies within or between
--- faces should be merged out
--- (PK_LOGICAL_false)
PK_TOPOL_dimension_t merge_in_face_dimension;
--- highest dimension of
--- topologies to be merged out
--- of faces
--- (PK_TOPOL_dimension_any_c)
PK_LOGICAL_t merge_in_edge; --- whether any redundant
--- vertices between edges
--- should be merged out
--- (PK_LOGICAL_false)
PK_boolean_impose_t impose_bodies; --- allows the target to impose
--- on the tools or vice versa
--- (PK_boolean_impose_no_c)
PK_merge_tools_t merge_tools; --- how to merge interacting
--- tools in multi-tool Booleans
--- (PK_merge_tools_no_c)
};
typedef struct PK_BODY_boolean_o_s PK_BODY_boolean_o_t;
This option structure is supplied to a boolean operation for bodies.
Used in:
PK_BODY_boolean
PK_BODY_boolean_2
See also here for more information.
Description of fields:
'function' Indicates whether an intersect, unite or subtract
operation is to be performed, permitted values are
PK_boolean_intersect_c
PK_boolean_subtract_c
PK_boolean_unite_c
'configuration' Describes the configuration of target and tool
bodies.
See here for more
information.
'selected_topolset' Describes topolsets selected to be excluded from or
included in the boolean operation.
A topolset is selected by specifying a 'selector'
topology which lies within that topolset. Selector
topologies can be solid regions, faces, edges, or
vertices. The selected topolsets can be excluded or
included by setting 'target_select' and 'tool_select'
to the appropriate values.
See the documentation of
PK_boolean_select_topolset_o_t for more information.
'matched_region' Describes matched regions between the target and tool
bodies.
See PK_boolean_match_o_t and here for more
information.
'merge_imprinted' Merge all mergeable imprinted edges created and/or
located by the boolean operation. Note that an
existing edge can be considered an imprinted edge
if it forms part of the intersection between faces
from the target and tool.
'prune_in_solid' This option is deprecated and has been superseded by
'merge_in_solid', 'merge_in_face',
'merge_in_solid_dimension' and
'merge_in_face_dimension'.
'prune_in_void' Prune void regions of the result. Any faces, edges
or vertices in the result body which are completely
surrounded by void regions will be deleted, so long
as the result body contains some pieces of a higher
dimension (for example, a sheet face will only be
deleted if the result body contains at least one
solid region).
This option is only allowed when general topology
is enabled.
(PK_LOGICAL_false)
'fence' To determine which resultant bodies are returned when
performing solid/sheet (trimming) or sheet/solid
(punching) boolean operations.
Permitted values are :
PK_boolean_fence_front_c
PK_boolean_fence_back_c
PK_boolean_fence_none_c
See here for more
information.
'allow_disjoint' If generalised topology is disabled:
If this option is set to PK_LOGICAL_true,
the result of the boolean will usually be
a single body which may contain disjoint
manifold components.
This option is ignored when a solid target
and sheet tool body are specified for a subtract
operation and the 'fence' option is specified
with a value of PK_boolean_fence_none_c, the
'target_material_side' and 'tool_material_side'
options are set to PK_boolean_material_default_c
and the 'resulting_body_type' option is set to
PK_boolean_prefer_original_c.
If general topology is enabled this option
is ignored. The result will always be a single
body which may contain disjoint components.
'selective_merge' If this is set to PK_LOGICAL_true, the merge phase
will avoid mergeing imprinted edges that existed
and were mergeable before the start of the boolean.
This flag has no effect if 'merge_imprinted' is not
set to PK_LOGICAL_true.
See here for more
information.
'check_fa' The value of this determines if face checking is
performed during the operation, permitted values
are :
PK_boolean_check_fa_no_c
PK_boolean_check_fa_yes_c
The default is 'PK_boolean_check_fa_yes_c'.
If the face checking is switched off, the boolean
operation may produce an invalid body without
raising an error. However, in some cases, if face
checking is switched on the performance of the
boolean operation may be reduced.
NOTE: This option is inoperative for PK_BODY_boolean.
'default_tol' The default tolerance to which the boolean
operation, if it has to, may approximate entities
or assume that entities are coincident. This value
should be set to a value that is related to the
tolerance to which the application is creating
approximations.
If this field is set to zero (0.0), it is assumed
that the decision to set tolerances on entities is
being left to the modeller.
'max_tol' This value specifies the maximum tolerance which may
be applied to any entity involved in the boolean
operation.
If this field is set to zero (0.0), the default, then
it assumed that no upper limit has been set on the
tolerance of any entity.
If the field is not set to zero (0.0), then it must be
set to a value that is greater than the value of the
'default_tol' field.
'tracking' Request additional topological data on the result
of the boolean, this is specific to the function
being called. Within this function this option
can be used to return additional tracking data
when using a single, non-disjoint tool body.
'merge_attributes' If this is set to PK_LOGICAL_true, then any situation
in which two coincident faces are combined to result
in a face in a result body, will be treated as a
'merge' event from the point of view of attribute
processing and attribute callbacks. If it is set to
PK_LOGICAL_false, which is the default, then such a
situation will be treated as the deletion of one of
the faces.
This option only has an effect if general topology
is disabled. If it is enabled, then combining two
coincident faces is always treated as a 'merge'
event.
'keep_target_edges' This option controls which edge survives when a
target edge and a tool edge coincide in a boolean. If
both faces adjacent to the tool edge survive, then the
tool edge will also survive. Otherwise, the result
depends on the setting of the option:
PK_LOGICAL_true:
The target edge survives, unless the target edge
is a new edge imprinted during the boolean, and
the tool edge is an original edge - in this case,
the tool edge survives.
PK_LOGICAL_false (the default):
The older edge (i.e. the one with the smaller tag)
survives.
This option only has an effect if general topology
is disabled. If it is enabled, then the target edge
will always survive, even if it is a newly imprinted
edge.
'imprint_complete_targ' This option controls whether to complete the imprint
on the target body so that the end vertices of the
imprint lie on any edge or laminar edge of the target
body. This imprint completion is carried out during
the imprinting phase of the face boolean algorithm
(the phases of which are essentially the same as in
the body boolean algorithm described in
PK_BODY_boolean_2).
If this is set to PK_imprint_complete_no_c (the
default) the imprint is not completed. Otherwise the
incomplete imprint is completed by intersecting the
target body with a plane orthogonal to the target at
the end vertices of the incomplete imprint.
Depending on the value of this option, the imprint
will be completed along the direction of this plane
until it either:
- meets any edge belonging to the target body
(PK_imprint_complete_edge_c), or
- meets any laminar edge belonging to the target
body (PK_imprint_complete_laminar_c)
N.B. The value PK_imprint_complete_faceset_c only
applies to the face boolean algorithm, so it may not
be used here.
If the PK function supports imprint completion on
general bodies, and general topology is enabled in
the session, then imprint completion will stop where
the imprint meets a general edge, in addition to the
behaviour described above. The completion will also
stop where the imprint meets a general vertex, unless
it can be continued on the same "manifold piece" of
the body, as described in
PK_BODY_make_manifold_bodies.
Both the target and tool bodies must be manifold sheet
bodies unless general topology is enabled in the
session.
A complete imprint that self-intersects will be
trimmed at the point of self-intersection.
Imprint completion on the target faces will only
occur from laminar edges of the tool.
Restriction: The orientation of the plane is currently
restricted to that which would be produced by
PK_imprint_extend_tangent_c.
See here for more information.
'imprint_complete_tool' This option controls whether to complete the imprint
on the tool body in a manner similar to that
described for 'imprint_complete_targ' above.
See here for more information.
'target_material_side' This option allows the material side of the target
faces to be specified when determining which faces
survive the given Boolean.
PK_boolean_material_inside_c:
All faces are treated as if their face normals
point away from solid material.
This allows a sheet body to be treated locally as
the boundary of a solid; treatment of faces from
solid bodies will be unchanged.
PK_boolean_material_none_c:
All faces are treated as if they have no solid
material on either side.
This allows a solid body to be treated locally as
a sheet; treatment of faces from sheet bodies will
be unchanged.
PK_boolean_material_outside_c:
All faces are treated as if their face normals
point into solid material.
This allows a sheet body to be treated locally as
the boundary of a solid; solid bodies will be
negated.
PK_boolean_material_default_c (the default):
Faces from solid bodies have normals pointing away
from solid material; faces from sheet bodies will
have material on neither side.
This option is only supported if general topology is
disabled.
The 'target_material_side' and 'tool_material_side'
options must be set to PK_boolean_material_default_c
if there is more than one tool body.
See here for more information.
'tool_material_side' This option allows the material side of the tool
faces to be specified when determining which faces
survive the given Boolean.
PK_boolean_material_inside_c:
All faces are treated as if their face normals
point away from solid material.
This allows a sheet body to be treated locally as
the boundary of a solid; treatment of faces from
solid bodies will be unchanged.
PK_boolean_material_none_c:
All faces are treated as if they have no solid
material on either side.
This allows a solid body to be treated locally as
a sheet; treatment of faces from sheet bodies will
be unchanged.
PK_boolean_material_outside_c:
All faces are treated as if their face normals
point into solid material.
This allows a sheet body to be treated locally as
the boundary of a solid; solid bodies will be
negated.
PK_boolean_material_default_c (the default):
Faces from solid bodies have normals pointing away
from solid material; faces from sheet bodies will
have material on neither side.
This option is only supported if general topology is
disabled.
The 'target_material_side' and 'tool_material_side'
options must be set to PK_boolean_material_default_c
if there is more than one tool body.
See here for more information.
'resulting_body_type' This option allows the preferred type of the
resulting body to be indicated.
PK_boolean_prefer_solid_c:
If possible the results of a Boolean operation
with generalised topology disabled will be solid
bodies. The result will only be made solid if all
shells in the result are closed, if this is not
the case sheet bodies will be returned. In some
cases it may be necessary to negate some or all of
the solids.
If generalised topology is enabled and the
resulting body can be made into a manifold solid
body then it will be, otherwise it will remain a
general body.
PK_boolean_prefer_sheet_c:
If possible the results of a Boolean operation
with generalised topology disabled will be sheet
bodies. The result may contain several
components, if 'allow_disjoint' is set to
PK_LOGICAL_false then the components will be
split out into separate bodies.
If generalised topology is enabled and the
resulting body can be made into a manifold sheet
body then it will be, otherwise it will remain a
general body.
PK_boolean_prefer_original_c (the default):
When generalised topology is disabled, the
resulting bodies will be of the same type as the
target body. If it is not possible to return a
body of the desired type an appropriate error will
be returned.
If generalised topology is enabled and the
resulting body can be made to be of the same type
as the 'target' then it will be, otherwise it will
remain a general body. It is recommended to
override this default setting when generalised
topology is enabled and use
PK_boolean_prefer_simplest_c instead.
PK_boolean_prefer_wire_c:
This setting is only available when generalised
topology is enabled.
If the resulting body can be made into a manifold
wire body then it will be, otherwise it will
remain a general body.
PK_boolean_prefer_general_c:
This setting is only available when generalised
topology is enabled.
The resulting body will be a general body.
PK_boolean_prefer_simplest_c (recommended):
This setting is only available when generalised
topology is enabled and it is recommended to use
it to override the default setting
(PK_boolean_prefer_original_c).
The resulting body type will be the simplest it
can be without making any changes to the body.
The body type will be set to the first possible in
the list:
PK_BODY_type_wire_c, PK_BODY_type_sheet_c,
PK_BODY_type_solid_c, PK_BODY_type_general_c.
See here for more information.
If the 'fence' option is not PK_boolean_fence_none_c
this option must be set to
PK_boolean_prefer_original_c.
'flag_no_effect' This option allows the user to specify that if it is
possible to determine that the original target body
is unaffected by the tools, the returned token
will be PK_boolean_result_no_effect_c, in
preference to PK_boolean_result_success_c.
PK_boolean_no_effect_basic_c:
(Default).
PK_boolean_result_no_effect_c is returned in
the same cases as V16.1 and earlier.
PK_boolean_no_effect_advanced_c:
Return PK_boolean_result_no_effect_c in
preference to PK_boolean_result_success_c,
whenever possible to determine with certainty
that the target is unchanged by the tools.
This option considers a body is unchanged when
all the following conditions apply:
- the body occupies the same area/volume
- no additional topology or geometry has been
imprinted
- the body type is unchanged.
'nm_edge_repair' This option allows the user to specify that the
boolean operation should not fail due to
non-manifold edge conditions but attempt to continue
and make the result manifold.
PK_nm_edge_repair_no_c :
(Default).
No recovery or repair attempted.
PK_nm_edge_repair_blend_c:
Repair is attempted by applying blends.
For a unite operation this adds material and for a
subtract or intersect operation it removes
material.
This option may only be used with solid bodies and
default values of 'imprint_complete_targ',
`imprint_complete_tool, 'target_material_side',
'tool_material_side' and 'resulting_body_type'
options.
'blend_radius' This option specifies the radius to be used if
'nm_edge_repair' is set to PK_nm_edge_repair_blend_c.
'tracking_type' This option allows the user to specify the level
of information they wish edge tracking records to
contain. The levels of edge tracking available are:
PK_boolean_track_type_basic_c:
(Default).
Edge tracking records are compatible with v17.1
and earlier. Tracking records associated with
edges generated by imprint completion contain
information regarding the original topology
upon which they are imprinted only.
PK_boolean_track_type_comp_c:
Returns enhanced information regarding edges
generated by imprint completion. Tracking
records for edges generated by imprint
completion contain information regarding the
original topology upon which they are
imprinted; additionally implied information
regarding the topology on the other body is
included. This is the topology on the other body
which caused the imprint from which completion
is occurring.
'track_regions' This option allows the user to specify the level
of information they wish region tracking records to
contain. This option is only supported if general
topology is enabled in the session.
The levels of region tracking available are:
PK_region_track_no_c:
(Default).
No region tracking is returned.
PK_region_track_basic_c:
Basic region tracking.
A set of region tracking records
(PK_TOPOL_track_record_r_t) is returned, which
contains tracking information for every result
region created or affected by the operation.
A PK_TOPOL_track_create_c record indicates that
the result region in 'product_topols' is new.
A PK_TOPOL_track_derive_c record indicates that
the result regions in 'product_topols' were
derived from the original regions in
'original_topols'.
Solid result regions are tracked from their solid
parent original regions, and void result regions
are tracked from their void parent original
regions, if any.
'target_face_overflow' This option allows the user to specify the method
of overflowing the imprint from the target body onto
the tool body when overflowing a laminar edge of the
target body and overflow imprinting is chosen.
This option is only supported if
'imprint_complete_tool' is set to
PK_imprint_complete_no_c.
'tool_face_overflow' This option allows the user to specify the method
of overflowing the imprint from the tool body onto
the target body when overflowing a laminar edge of
the tool body and overflow imprinting is chosen.
This option is only supported if
'imprint_complete_targ' is set to
PK_imprint_complete_no_c.
'imprint_overlapping' Imprint the boundaries of overlapping areas. If a
face from the target and a face from the tool are on
the same surface, the boundaries of the overlapping
area will be imprinted. If this flag is not set,
faces on a common surface will not imprint on each
other.
'update' The default value allows applications to take
advantage of the latest enhancements to the boolean
algorithm. To maintain consistency when rebuilding
models created in a previous version of Parasolid, a
non-default value should be specified.
(PK_boolean_update_default_c)
'merge_in_solid' This determines whether any topologies which become
surrounded by solid during the boolean operation
should be merged out.
This option is only allowed when general topology
is enabled.
(PK_LOGICAL_false)
'merge_in_solid_dimension'
If 'merge_in_solid' is set to PK_LOGICAL_true, this
field determines the highest dimension of topologies
surrounded by solid to be merged out:
PK_TOPOL_dimension_0_c: merge out acorn vertices
in solid regions.
PK_TOPOL_dimension_1_c: merge out wireframe edges
and acorn vertices in solid
regions.
PK_TOPOL_dimension_2_c or
PK_TOPOL_dimension_any_c: merge out faces with solid
on either side and wireframe
edges and acorn vertices in
solid regions.
(PK_TOPOL_dimension_any_c)
'merge_in_face' This determines whether any redundant vertices or
edges within or between faces in the result body
which were not redundant in the target or tool
bodies should be merged out.
This option is only allowed when general topology
is enabled.
'merge_in_face' is performed after 'merge_in_solid'
and so it can merge out edges or vertices which have
become redundant through faces and/or wireframe edges
being merged out during 'merge_in_solid'.
If a redundant edge lies between faces with opposed
normals then the merged face after deletion of the
edge will have the orientation of the face derived
from the target body.
(PK_LOGICAL_false)
'merge_in_face_dimension'
If 'merge_in_face' is set to PK_LOGICAL_true, this
field determines the highest dimension of topologies
imprinted within faces to be merged out:
PK_TOPOL_dimension_0_c: merge out isolated vertices
PK_TOPOL_dimension_1_c or
PK_TOPOL_dimension_any_c: merge out redundant edges
and isolated vertices
(PK_TOPOL_dimension_any_c)
'merge_in_edge' This determines whether any redundant vertices
between edges in the result body which were not
redundant in the tool or target bodies should be
merged out.
This option is only allowed when general topology
is enabled.
'merge_in_edge' is performed after 'merge_in_solid'
and 'merge_in_face' and so it may merge out
vertices which have become redundant through having
faces and/or edges merged out during 'merge_in_solid'
and 'merge_in_face'.
(PK_LOGICAL_false)
'impose_bodies' To impose one body onto another means that material
from the first body dominates material from the
second body. Topologies of the second body located
within solid material of the first body are
considered redundant and are therefore deleted. All
result regions surrounding these redundant topologies
only inherit from the first body.
This option controls interactions between the target
and the tool(s). For control of tool-tool
interactions, see 'merge_tools'.
This option is only allowed when general topology
is enabled, 'function' is PK_boolean_unite_c, and
'merge_in_solid' is set to PK_LOGICAL_false.
The possible values are:
PK_boolean_impose_no_c:
Neither body imposes, no topologies are deleted.
PK_boolean_impose_target_c:
The solid regions of the target are imposed onto
the tool(s).
Tool topologies are deleted if they are located
within the solid material of the target. Any
regions which merge due to this deletion inherit
only from their parent region(s) in the target.
PK_boolean_impose_tools_c:
The solid regions of the tool(s) are imposed onto
the target.
Target topologies are deleted if they are located
within the solid material of the tool(s). Any
regions which merge due to this deletion inherit
only from their parent region(s) in the tool(s).
(PK_boolean_impose_no_c)
'merge_tools' This option controls merging between interacting tool
bodies.
This option is only allowed when general topology
is enabled, 'function' is PK_boolean_unite_c, and
'merge_in_solid' is set to PK_LOGICAL_false.
The possible values are:
PK_merge_tools_no_c:
Tools are not merged and no topologies are
deleted.
PK_merge_tools_yes_c:
Tools are merged and topologies are deleted if
they are located within the solid material of
any of the other tools. Any tool faces which
would have the same solid region on both sides as
a result of the merge are also deleted.
(PK_merge_tools_no_c)