 |
PK_TOPOL_render_facet_go_o_t |
|
struct PK_TOPOL_render_facet_go_o_s
{
int o_t_version; --- version of PK option struct
PK_facet_go_normals_t go_normals; --- whether to output GO face
--- normals
--- (PK_facet_go_normals_no_c)
PK_facet_go_parameters_t go_parameters;
--- whether to output GO surf
--- parameters [PF]
--- (PK_facet_go_parameters_no_c)
PK_facet_go_curvatures_t go_curvatures;
--- whether to output GO
--- principal directions and
--- curvatures of the face
--- (PK_facet_go_curvatures_no_c)
PK_facet_go_edges_t go_edges; --- whether to output GO edge
--- entities
--- (PK_facet_go_edges_no_c)
PK_facet_go_strips_t go_strips; --- whether to output facets in
--- strips
--- (PK_facet_go_strips_no_c)
int go_max_facets_per_strip;
--- associated max value (0)
PK_facet_go_interleaved_t go_interleaved;
--- whether to interleave the
--- output of faces from
--- different bodies
--- (PK_facet_go_interleaved_no_c)
PK_facet_split_strip_t split_strips; --- whether to split facet strips
---(PK_facet_split_strip_no_c)
PK_facet_consistent_parms_t
consistent_parms;
--- whether to force parameters at
--- vertices in each facet to lie
--- within half a period of each
--- other
---(PK_facet_consistent_parms_no_c)
};
typedef struct PK_TOPOL_render_facet_go_o_s PK_TOPOL_render_facet_go_o_t;
Selection of graphics output (GO) options for PK_TOPOL_render_facet_o_t
Specific Errors:
PK_ERROR_bad_value PK_facet_go_strips_yes_c needs value > 1
(MILD)
PK_ERROR_bad_combination 'consistent_parms' set to
PK_facet_consistent_parms_fa_c and 'degen'
set to PK_facet_degen_single_vx_c (MILD)
'go_curvatures' set to
PK_facet_go_curvatures_yes_c and 'go_normals'
set to PK_facet_go_normals_no_c (MILD)
'go_curvatures' set to
PK_facet_go_curvatures_yes_c and
'go_parameters' set to either
PK_facet_go_parameters_d1_c or
PK_facet_go_parameters_d2_c (MILD)
Used in:
PK_TOPOL_render_facet_o_t
This selects which additional data are output through GO
- face normals
- surface parameters
- first and second order derivatives of the surface parameterisation
- principal directions and curvatures of the face
- model edge entities
and how these are output.
See here for more information.
GO_PARAMETERS:
If derivatives are requested, the cross product dPdu X dPdv points in the
same direction as the surface normal. This is true except in the case where
a transform is supplied for which PK_TRANSF_classify on the transform returns
a matrix_type of PK_matrix_type_reflection_c. In this case, each dPdu X dPdv
points in the opposite direction to the corresponding surface normal.
Note: First and second derivatives are only returned for members of 'topols'
with classic geometry.
GO_CURVATURES:
Maximum and minimum curvatures are returned as the principal curvature
values. The principal curvature with the smallest absolute value is always
returned as the first principal curvature, irrespective of whether it
represents the maximum or minimum curvature. Likewise the principal curvature
with the largest absolute value is returned as the second principal
curvature.
The sign of the curvature is positive if the face curves away from the face
normal direction.
If the principal curvatures are equal (in both sign and magnitude) then the
principal directions are not significant.
At singularities the principal curvature directions returned will be (0,0,0)
and the principal curvatures will be zero.
Note: If 'go_curvatures' is set to PK_facet_go_curvatures_yes_c then
'go_normals' must be set to PK_facet_go_normals_yes_c and
'go_parameters' must be set to either PK_facet_go_parameters_no_c or
PK_facet_go_parameters_d0_c.
INTERLEAVED FACETS:
Facets may be output in one of two ways: all facets for a particular body are
output before facets belonging to any other body are output, or, the facets
of faces of the bodies being facetted can be interleaved.
Setting the 'go_interleaved' option to PK_facet_go_interleaved_yes_c allows
facets from any one of the bodies for which a body segment is open to be
output. Facets are output on a face by face basis rather than a body by
body basis: in cases where there are multiple instances selecting this
option should reduce the peak memory of facetting.
Interleaved facetting has the additional advantage of being multi-threaded.
When the function is running concurrently, facets may also be interleaved
with facets from calls to PK_TOPOL_render_facet in other threads that are
also facetting concurrently.
FACET STRIPS:
Setting the 'go_strips' option to PK_facet_go_strips_yes_c will result in
facets being output through the GO in strips where possible (some individual
facets may also be output). The 'go_max_facets_per_strip' option can be used
to limit the number of facets per strip.
The 'split_strips' option allows facet strips on periodic surfaces to be
split so that the strips do not span more than a single period on the
surface. The permitted values for the 'split_strips' option are:
PK_facet_split_strips_no_c (default)
PK_facet_split_strips_yes_c
The control of the parameterisation of the strip can be obtained via the
'consistent_parms' option described below.
CONSISTENT PARAMETERS:
The 'consistent_parms' option only has an effect on periodic surfaces,
setting this to either PK_facet_consistent_parms_su_c or
PK_facet_consistent_parms_fa_c ensures surface parameters for facet vertices
within a given facet lie within half a period of each other.
If facets are being output as strips each strip will be composed of
consistently parameterised triangular facets. All triplets of vertices
within the strip will have surface parameters that lie within half a period
of each other.
If the 'consistent_parms' option is set to PK_facet_consistent_parms_su_c
then one facet vertex within the facet or strip will have parameters in the
first period and all other vertices within the facet or strip will be made
consistent with this.
Setting 'consistent_parms' to PK_facet_consistent_parms_fa_c only produces
different results from PK_facet_consistent_parms_su_c if the facets do not
cover the whole of the period. In this case each facet vertex is given a
unique parameter value. Facet vertices that fall within the face uvbox, as
returned from PK_FACE_find_uvbox, will have parameters lying inside this box.
All other facet vertices will be made consistent with those inside the
face's uvbox. In cases where the facets do not span the whole of the period
but the face uvbox is the whole period, some facet vertices may not lie
inside the face's uvbox.
The permitted values for the 'consistent_parms' option are:
PK_facet_consistent_parms_no_c (default)
PK_facet_consistent_parms_su_c
PK_facet_consistent_parms_fa_c
If 'degen' in the 'control' options supplied to PK_TOPOL_render_facet is set
to PK_facet_degen_single_vx_c and 'consistent_parms' is set
to PK_facet_consistent_parms_fa_c PK_ERROR_bad_combination will be returned.