 |
PK_FACE_output_surf_trimmed |
|
PK_ERROR_code_t PK_FACE_output_surf_trimmed
(
--- received arguments ---
PK_FACE_t face, --- face
const PK_FACE_output_surf_trimmed_o_t *options, --- options structure
--- returned arguments ---
PK_SURF_t *const surf, --- surface
PK_LOGICAL_t *const sense, --- which side of surface
PK_SURF_trim_data_t *const trim_data, --- trim data
PK_GEOM_t **const geoms, --- points and curves
PK_INTERVAL_t **const intervals, --- geom intervals
PK_TOPOL_t **const topols --- topologies
)
This function returns a trimmed surface representation of the given face.
This function does not support facet geometry [NF]. Similar functionality for
faces with facet geometry is available within PK_MESH_make_surf_trimmed.
Specific Errors:
PK_ERROR_missing_geom given face has no surface
PK_ERROR_bad_option_data option data incorrect
PK_ERROR_tolerances_too_tight curve tolerance too tight
PK_ERROR_trim_loop_degenerate trimming loop degenerate
PK_ERROR_cant_make_bspline failed to make equivalent bspline surface
PK_ERROR_cant_make_trimmed_sf failed to make trimmed surface
See the documentation for PK_FACE_output_surf_trimmed_o_t for a description
of the options.
The Trimmed Surface Representation returned:
A trimmed surface represents a bounded region of a parameterised surface by
expressing the boundary curves of the trimmed surface as curves in surface
parameter space. These curves, referred to as SP-curves, represent a 3-space
curve with B-spline surface parameter space curves (i.e. B-spline curves with
(u,v) vertices). In cases where the bounded region is the whole of the surface
the trimmed surface can optionally be represented as a surface with no
trimming curves.
Wire edges and biwire edges are not considered, to form part of the
boundary of a face and so will not be represented amongst the SP-curves
returned.
The surface that is trimmed is returned in 'surf'.
The 'sense' argument indicates whether 'surf's normal points in the same
direction (PK_LOGICAL_true) or opposite to (PK_LOGICAL_false) the face
normal.
If this returned information is to be passed into PK_SURF_make_sheet_trimmed
then the surface and trim data are passed directly to that and then, if the
'sense' was PK_LOGICAL_false, PK_BODY_reverse_orientation is applied to the
result.
A description of a single trimmed surface is comprised of the
surface to be trimmed, the sense of the surface, trimming information held
in a PK_SURF_trim_data_t structure and three additional arrays.
'trim_data' returns the trimming information. The 'spcurves' field of
'trim_data' is described here. For further information on 'trim_data' see
documentation for PK_SURF_trim_data_t.
'spcurves' consists of an array of SP-curves which describe the boundary
loops of the trimmed surface (these will not necessarily be in
1-1 correspondence with the loops on the face). Where it is
appropriate to do so the code will place the outer boundary
loop of the trimmed surface at the head of the list of loops.
An example of where this is not appropriate is a trimmed
surface on a sphere, in this case it is sometimes hard
to distinguish between outer boundaries and holes.
Each component trimmed SP-curve of a trimming loop will
be G1 in in 3-space. This means, however, that it will not
necessarily be possible to represent a single G1 edge curve
as a single G1 SP-curve when the surface does not have a
parameterisation with continuous first derivatives.
Where an SP-curve is to represent a 3-space curve
identified as a line of constant surface parameter the
SP-curve description of it will be in the form of a
linear B-spline.
Note: if 'n_spcurves'>0 then `trim_set[n_spcurves-1]' says how many trim sets
there are.
The arrays 'geoms', 'intervals' and 'topols' provide additional information,
if requested, in the options structure. Information in these arrays at a
particular array index goes with the SP-curve in the 'spcurves' array in
'trim_data' at the same index. When 'geoms' contains a curve, the
corresponding element in 'intervals' will contain the parametric range
of that curve.
Setting the 'want_geoms' flag in the options structure to PK_LOGICAL_true
causes both the 'geoms' and 'intervals' arrays to be output.
geoms
'geoms': An optional array of corresponding 3-space geometry. Each
3-space geometry will be either a curve or a point. Points
will arise in cases where a SP-curve has been produced to
cross a degeneracy in the surface parameterisation.
intervals
'intervals': An optional array of geometry intervals where the
corresponding geometry is a curve.
topols
'topols': An optional array of corresponding model topology. Each
topology may be one of fin, vertex or null. Vertices will be
associated with parameterisation degeneracies. The topology
will be null if the SP-curve represents part of a seam line
on the surface underlying the face.
If the trimmed surface has no trimming loops these arrays will be
returned as NULLs.
Deleting Returned Geometry
In the returned data from PK_FACE_output_surf_trimmed all geometries are either
copies of geometry on the face or have been built specifically as
alternative representations of that geometry. To avoid the modeller
filling up with unrequired nodes, the returned geometry arrays
should be deleted as soon as their usefulness expires.