struct PK_BODY_pick_topols_r_s { int n_faces; PK_BODY_pick_topol_r_t *faces; int e_faces; int n_edges; PK_BODY_pick_topol_r_t *edges; int e_edges; int n_vertices; PK_BODY_pick_topol_r_t *vertices; int e_vertices; }; typedef struct PK_BODY_pick_topols_r_s PK_BODY_pick_topols_r_t; Structure returning picked entities Each picked entity is recorded in a PK_BODY_pick_topol_r_t structure. The 'entity' field refers to a picked face, an edge or a vertex. The 'occurence' field is a number in the range [0..n_bodies-1]. It identifies an index into the owning body array and possibly an associated transformation. If faces are being picked, the 'intersect' point is the exact intersection between the ray and face. The 'distance' values of picked faces are set to zero. If faces are picked within curve tolerance distance of their edge or silhouette boundary, the function may fail to pick the correct face. If edges are being picked, the 'intersect' field is a 'hit point' on the ray at which the distance to the (transformed) edge occurrence was at a minimum. The 'distance' field records the hit-distance, measured from here to the edge. If vertices are being picked, the 'intersect' field is a 'hit point' on the ray at which the distance to the (transformed) vertex occurrence was at a minimum. The 'distance' field records the distance from here to the vertex. The arrays of picked entity arrays are returned in a PK_BODY_pick_topols_r_t structure. If no entities of a particular type were requested or if none were picked by the ray, each array is returned empty; its PK_BODY_pick_topol_r_t pointer set to NULL and its e_<entities> and n_<entities> counts set to zero. If more than max_<entity> entities would be picked by the ray, details of the closest 'max_<entities>' are returned in the array and the number of 'excess' entities which also met the pick criteria recorded in the 'e_<entity>' count. The excess count hints to the application that the model is topologically complex around the region of the ray or possibly that geometric selection criteria set by the application are too lax. The returned pick data must not be used to simulate "closest approach" or "boolean" operations. This is because returned hit point and hit distance measurements may only be computed to the accuracy of the supplied (or the implied) curve tolerances, not to modelling accuracy. The function PK_BODY_pick_topols_r_f may be used to free associated memory.