PK_detail_def_hole_t   

struct PK_detail_def_hole_s
    {
    PK_AXIS2_sf_t        origin;         --- hole's position and orientation
    double               total_depth;    --- total depth of hole
    double               smallest_radius;--- smallest radius of hole
    PK_BODY_t            profile;        --- wire body profile
    int                  cb_result;      --- result of callback function
    int                  n_components;   --- number of hole components
    PK_hole_component_t *components;     --- hole components
    };
typedef struct PK_detail_def_hole_s PK_detail_def_hole_t;



This structure contains information defining a hole detail.

Used in:

PK_detail_def_t
PK_detail_hole_cb_f_t


Its fields are:

'origin'          this defines the position and orientation of the hole.
                  The 'origin's 'location' lies at the intersection between the
                  hole's axis and the surface in its initial
                  PK_hole_comp_open_end_c component.
                  The 'origin's 'axis' points out of the hole.
                  The 'origin's 'ref_direction' is a vector orthogonal to the
                  'origin's axis.

'total_depth'     the distance along the hole's axis from the 'origin's
                  'location' to the other end of the hole.  Note that since
                  the 'origin's 'axis' points out of the hole, the
                  'total_depth' is negative.

'smallest_radius' this is the smallest radius of the hole not including either
                  a PK_hole_comp_closed_end_c component or a
                  PK_hole_comp_cone_in_c component which reduces the radius to
                  zero.

'profile'         if 'want_profiles' in the PK_FACE_details_hole_o_t is set to
                  PK_LOGICAL_true, then this 'profile' will be a wire body
                  which, if spun around the hole's axis, produces the shape of
                  the hole.  If 'want_profiles' is set to PK_LOGICAL_false, or
                  the shape of the hole cannot be produced by spinning a wire
                  body, then 'profile' will be set to PK_ENTITY_null.  See
                  further notes below.

'cb_result'       if the 'cb' field of the PK_FACE_details_hole_o_t has been
                  set to a callback function, this 'cb_result' field will have
                  the value of the integer return from that function.

'n_components'    number of hole components in the hole.

'components'      array of hole components (PK_hole_component_t).  These
                  components are ordered from a PK_hole_comp_open_end_c
                  component at zero depth into the hole (therefore at the
                  'location' of the hole's 'origin') by increasing depth into
                  the hole.

Profile

The position of the 'profile' in space is where the plane containing the
'origin's 'location', the 'origin's 'axis' and the 'origin's 'ref_direction'
intersects the surfaces of the hole in the direction of the 'origin's
'ref_direction'.

The end vertices of the profile will both lie on the hole axis.  At an open end
of a hole, this is achieved by adding an edge to the profile at right angles to
the hole axis.  Thus, if the profile is spun about the hole axis ( using
PK_BODY_spin ) by an angle of 2 pi a sheet body bounding a volume will be
created which may be converted to a solid by PK_REGION_make_solid.

At an open end of a hole, where the face into which the hole is drilled is not
a plane orthogonal to the hole axis, the profile will extend far enough out of
the hole so that every part of the hole's side face will be swept out by
spinning the profile.


RESTRICTION

A hole will not be recognized if no 'origin' can be found for it.  A typical
case of this is where the open end of a hole has been blended onto some
curved face and the blend face has not been included in the faceset.