PK_TOPOL_render_line_o_t   


struct PK_TOPOL_render_line_o_s
    {
    int                      o_t_version;--- version of this PK option struct
    PK_render_edge_t         edge;       --- whether to draw edges
                                         --- (PK_render_edge_yes_c)
    PK_render_silhouette_t   silhouette; --- whether to draw silhouettes
                                         --- (PK_render_silhouette_no_c)
    PK_render_planar_t       planar;     --- whether to draw planar hatching
                                         --- (PK_render_planar_no_c)
    PK_render_radial_t       radial;     --- whether to draw radial hatching
                                         --- (PK_render_radial_no_c)
    PK_render_param_t        param;      --- whether to draw parametric hatch
                                         --- (PK_render_param_no_c)
    PK_render_unfix_t        unfix;      --- whether to draw unfixed blends
                                         --- (PK_render_unfix_no_c)
    PK_render_vis_t          visibility; --- whether to determine visibility
                                         --- (PK_render_vis_no_c)
    PK_render_smooth_t       smooth;     --- whether to indicate smooth edges
                                         --- (i.e. where faces have the same
                                         ---     tangent surface at the edge)
                                         --- (PK_render_smooth_no_c)
    PK_render_internal_t     internal;   --- whether to indicate internal edges
                                         --- (i.e. where faces on either side
                                         ---  of the edge lie on same surface)
                                         --- (PK_render_internal_no_c)
    PK_render_region_t       region;     --- whether to produce regional data
                                         --- (PK_render_region_no_c)
    PK_render_hierarch_t     hierarch;   --- whether to produce hierarchical
                                         --- output (PK_render_hierarch_no_c)
    PK_render_bcurve_t       bcurve;     --- method for rendering bcurves
                                         --- (PK_render_bcurve_polyline_c)
    PK_render_viewport_t     viewport;   --- whether to use viewport(s)
                                         --- (PK_render_viewport_no_c)
    PK_render_invisible_t    invisible;  --- whether to output invisible lines
                                         --- when visibility is set to
                                         --- PK_render_vis_extended_c
                                         --- (PK_render_drafting_no_c)
    PK_render_drafting_t     drafting;   --- whether to distinguish lines
                                         --- hidden by lines and faces
                                         --- when visibility is set to
                                         --- PK_render_vis_extended_c
                                         --- (PK_render_invisible_no_c)
    PK_render_self_hidden_t  self_hidden;--- whether to distinguish lines
                                         --- hidden by own or another
                                         --- occurrence when visibility is
                                         --- set to PK_render_vis_extended_c
                                         --- (PK_render_self_hidden_no_c)
    PK_LOGICAL_t             is_curve_chord_tol;
                                         --- whether curve_chord_tol is set
                                         --- ( PK_LOGICAL_false )
    double                   curve_chord_tol;
                                         --- chordal tolerance between curve
                                         --- and chord edges in model units
                                         --- ( 0.0 )
    PK_LOGICAL_t             is_curve_chord_max;
                                         --- whether curve_chord_max is set
                                         --- ( PK_LOGICAL_false )
    double                   curve_chord_max;
                                         --- max length of chord in model units
                                         --- ( 0.0 )
    PK_LOGICAL_t             is_curve_chord_ang;
                                         --- whether curve_chord_ang is set
                                         --- ( PK_LOGICAL_false )
    double                   curve_chord_ang;
                                         --- max angle between adjacent chords
                                         ---                     in radians
                                         --- ( 0.0 )
    double                   planar_spacing;
                                         --- distance between planes for
                                         --- planar hatching
                                         --- ( 0.0 )
    PK_AXIS1_sf_t            planar_axis;
                                         --- axis for planar hatching
                                         --- (through 0,0,0 direction 0,0,0)
    double                   radial_around;
                                         --- angular spacing around spine for
                                         --- radial hatching
                                         --- ( 0.0 )
    double                   radial_along;
                                         --- spacing in model units along spine
                                         --- ( 0.0 )
    double                   radial_about;
                                         --- angular spacing about centre
                                         --- ( 0.0 )
    double                   param_u;
                                         --- hatch spacing in U direction
                                         --- ( 0.0 )
    double                   param_v;
                                         --- hatch spacing in V direction
                                         --- ( 0.0 )
    double                   unfix_spacing;
                                         --- unfixed blend default rib spacing
                                         --- ( 0.0 )
    PK_NABOX_sf_t            viewport_sf;
                                         --- viewport definition
                                         --- if single viewport is used, i.e.
                                         --- PK_render_viewport_yes_c chosen
    double                   radial_around_start;
                                         --- starting value for angular
                                         --- spacing around
                                         --- spine for radial hatching
                                         --- ( 0.0 )
    double                   radial_along_start;
                                         --- starting value for spacing in
                                         --- model units along spine
                                         --- ( 0.0 )
    double                   radial_about_start;
                                         --- starting value for angular
                                         --- spacing about centre
                                         --- ( 0.0 )
    double                   param_u_start;
                                         --- starting value for hatch spacing
                                         --- in U direction
                                         --- ( 0.0 )
    double                   param_v_start;
                                         --- starting value for hatch spacing
                                         --- in V direction
                                         --- ( 0.0 )
    PK_render_ignore_t       ignore;
                                         --- whether to ignore small features
                                         --- in hidden line rendering.
                                         --- Small features can be ignored
                                         --- by inputting an absolute value or
                                         --- a ratio value
                                         --- ( PK_render_ignore_no_c )
    double                   ignore_value;
                                         --- features smaller than this value
                                         --- will be considered for ignoring
                                         --- ( 0.0 )
    PK_render_overlap_t      overlap;
                                         --- whether to allow for overlapping
                                         --- bodies
                                         --- ( PK_render_overlap_no_c )
    PK_render_memory_target_t   memory_target;
                                         --- whether to restrict memory usage
                                         --- ( PK_render_memory_target_no_c )
    size_t                   memory_target_value;
                                         --- target memory usage in bytes
                                         --- ( 0 )
    PK_LOGICAL_t             is_edge_smooth_tol;
                                         --- whether edge_smooth_tol is set
                                         --- ( PK_LOGICAL_false )
    double                   edge_smooth_tol;
                                         --- max angle (in radians) allowed
                                         --- between face
                                         --- normals for edge to be smooth
                                         --- ( 0.0 )
    int                      n_viewports;
                                         --- number of viewports
    const PK_NABOX_sf_t     *viewports;
                                         --- array of viewports
    };
typedef struct PK_TOPOL_render_line_o_s PK_TOPOL_render_line_o_t;




Controls for the PK_TOPOL_render_line options structure


PK_TOPOL_render_line_o_t provides controls for PK_TOPOL_render_line to
generate view-independent, view-dependent and hidden line drawings of
topological entities through the Graphics Output (GO) interface.

The controls allow view independent and view dependent data (silhouettes)
to be generated in the same call to PK_TOPOL_render_line. Hidden line
drawings should be generated in a separate call to PK_TOPOL_render_line
because their arguments are generally incompatible with those used for
the other categories of drawing.

The options specify which types of lines should be rendered (e.g. edges,
silhouettes) and what additional data (e.g. visibility and smoothness)
needs to be calculated and handed onto GO.


Tolerance Values
Each control tolerance is passed as a pair of values, consisting of a
PK_LOGICAL_t flag and a double precision value. If a specific tolerance
is required, the variable is set to a strictly positive value and the
associated flag set to PK_LOGICAL_true.

If Parasolid is to use its internal tolerance defaults, the associated flag is
set to PK_LOGICAL_false (and no use made of the associated tolerance argument).
This is the default state set by the PK_TOPOL_render_line_o_m macro.


Visibility
If visibility is set to PK_render_vis_no_c then no visibility evaluation
(ie hidden line drawing) is performed.  Common visibility requirements may
be requested by the values: PK_render_vis_hid_c, PK_render_vis_inv_c and
PK_render_vis_inv_draft_c.  For more refined control over visibility
requirements, visibility may be set to PK_render_vis_extended_c which
then enables the options: invisible, drafting and self_hidden.

Radial and Param Default Start Values
In no values are specified for the radial start values then the option
PK_render_radial_yes_c will behave like PK_render_radial_free_c and
Parasolid will choose the start values. Similarly, if no param start
values are specified then the option PK_render_param_yes_c will behave
like PK_render_param_free_c and Parasolid will choose the start values.

Ignore Small Features
The 'ignore' option can be set to one of the following values:

PK_render_ignore_no_c: (default) All features will be rendered regardless of
their size.

PK_render_ignore_absolute_c: Any feature with a box size smaller than the
value specified will be ignored.

PK_render_ignore_ratio_c: The 'ignore_value' corresponds to the ratio of box
size of the feature to the size of the box containing the entities to be
rendered i.e. if this value is set to 0.01 then all features smaller than 1
per-cent of the entities' box will be ignored.

PK_render_ignore_body_ratio_c: The 'ignore_value' corresponds to the ratio of
the box size of the feature to the size of the box of the body containing the
feature.

This option only takes effect when visibility is not set to
PK_render_vis_no_c. Note that 'small' features will only be ignored provided
that ignoring them does not leave the model invalid.

Overlapping Bodies
The 'overlap' options can be set to one of the following values:

PK_render_overlap_no_c: Parasolid assumes that the bodies to be rendered do
not overlap. If there are overlapping entities present then the overlap will
not be detect and the resulting picture may contain errors.

PK_render_overlap_yes_c: Parasolid will detect overlapping bodies and will
split the existing lines appropriately. However, the algorithm will not
generate new edges where the faces intersect. The additional effort of
detecting overlaps will incur a performance overhead compared to
'PK_render_overlap_no_c'.

This option only takes effect when visibility is not set to
PK_render_vis_no_c. Abutting bodies will always be rendered correctly,
regardless of the setting of the option.

Memory Target
The 'memory target' option can be set to one of the following values:

PK_render_memory_target_yes_c: Parasolid will attempt to restrict the memory
usage of PK_TOPOL_render_line to the amount of memory given by
"memory_target_value".  The target value is not guaranteed to be met. The
amount of memory used by PK_TOPOL_render_line will be reduced at the expense
of total processor time.

The value given by 'memory_target' refers to the peak amount of extra memory
temporarily allocated during PK_TOPOL_render_line.

PK_render_memory_target_no_c: Parasolid will maximise performance without
attempting to restrict memory usage.

This option only takes effect when visibility is not set to
PK_render_vis_no_c.


Edge Smoothness
If is_edge_smooth_tol is set to true, the value in edge_smooth_tol
defines the angular tolerance (in radians) for the smoothness property
in the same way as PK_EDGE_is_smooth.

The criteria for smoothness is defined as being that the angle between the
normals of the two faces that meet at a given edge do not exceed the angle
supplied in edge_smooth_tol.

If is_edge_smooth_tol is set to false, the angular tolerance used will
depend upon the accuracy of the relevant edge.

Multiple viewports
PK_render_viewport_t controls the multiple viewport behaviour.
PK_render_viewport_no_c: no viewports are supplied (default)

PK_render_viewport_yes_c: the single viewport specified in viewport_sf
is used. Entities outside the single supplied viewport may be omitted. In this
case, n_viewports and viewports are ignored.

PK_render_viewport_array_c: an array of viewports is supplied. Entities
outside all the supplied viewports may be omitted. viewport_sf is
ignored. The number of viewports used is set in n_viewports and can be set
to zero or a positive integer. The array of viewports is specified in
viewports.