SoRayPickAction — intersects objects with a ray cast into scene
Contents
Description
This class performs picking by casting a ray into a scene and performing intersection tests with each
object. The ray is extended to be a cone or cylinder, depending on the camera type, for intersection with
points and lines. Each intersection is returned as an SoPickedPoint instance.
The picking ray can be specified as either a ray from the camera location through a particular viewport
pixel, or as a world-space ray. In the former case, a valid camera must be encountered during traversal
of the graph to determine the location of the ray in world space.
Callers can cause the action to compute all intersections along the ray (sorted closest to farthest) by
setting the pickAll flag to TRUE. By default, the action computes only the closest intersection. In
either case, the intersections are returned in an SoPickedPointList. Each intersection can be examined by
accessing the appropriate SoPickedPoint in the list. The SoPickedPoint class provides methods to get the
intersection point, normal, and other info.
Inherits From
SoAction > SoPickAction > SoRayPickAction
Methods
SoRayPickAction(constSbViewportRegion&viewportRegion)
Constructor takes viewport region to use for picking. Even though the picking operation may not
involve a window per se, some nodes need this information to determine their size and placement.
voidsetPoint(constSbVec2s&viewportPoint)
Sets the viewport-space point through which the ray passes, starting at the camera's viewpoint.
Viewport coordinates range from (0,0) at the lower left to (width-1,height-1) at the upper right.
voidsetNormalizedPoint(constSbVec2f&normPoint)
Sets the viewport point in normalized coordinates, which range from (0,0) at the lower left to (1,1)
at the upper right.
voidsetRadius(floatradiusInPixels)
Set the radius (in pixels) around the point. This is used when testing the ray against lines and
points. By default, the radius is 5 pixels. For perspective cameras, the ray is extended to be a cone
when testing against lines and points. For orthographic cameras, the ray is extended to be a cylinder.
The radius has no effect for shapes of other types.
voidsetRay(constSbVec3f&start,constSbVec3f&direction,floatnearDistance=-1.0,floatfarDistance=-1.0)
Sets a world-space ray along which to pick. The ray is defined as a world space starting point and
direction vector. The direction vector will be normalized automatically. The last two arguments are
the parametric distances between which intersections along the ray must occur. The distances are
measured as if the direction vector is unit length; e.g., if nearDistance is 2.0, the intersection
must occur past (start + 2*(length of the direction vector)) units along the ray. These distances can
be used to achieve near and far plane clipping. A negative distance (such as the default values) means
disable clipping to that plane.
voidsetPickAll(SbBoolflag)SbBoolisPickAll()const
Sets/returns whether the action will return all objects intersected or just the closest one.
constSoPickedPointList&getPickedPointList()const
Returns list of picked points.
SoPickedPoint*getPickedPoint(intindex=0)const
Returns the indexed picked point from the list.
Name
SoRayPickAction — intersects objects with a ray cast into scene
See Also
SoPickedPoint,SoPickedPointListSoRayPickAction(3IV)()
Synopsis
#include<Inventor/actions/SoRayPickAction.h>
Methods from class SoRayPickAction:
SoRayPickAction(constSbViewportRegion&viewportRegion)voidsetPoint(constSbVec2s&viewportPoint)voidsetNormalizedPoint(constSbVec2f&normPoint)voidsetRadius(floatradiusInPixels)voidsetRay(constSbVec3f&start,constSbVec3f&direction,floatnearDistance=-1.0,floatfarDistance=-1.0)voidsetPickAll(SbBoolflag)SbBoolisPickAll()constconstSoPickedPointList&getPickedPointList()constSoPickedPoint*getPickedPoint(intindex=0)const
Methods from class SoPickAction:
voidsetViewportRegion(constSbViewportRegion&newRegion)constSbViewportRegion&getViewportRegion()const
Methods from class SoAction:
virtualvoidapply(SoNode*node)virtualvoidapply(SoPath*path)virtualvoidapply(constSoPathList&pathList,SbBoolobeysRules=FALSE)staticSoTypegetClassTypeId()virtualSoTypegetTypeId()virtualSbBoolisOfType(SoTypetype)virtualvoidinvalidateState()