osgUtil::RayIntersector Class Reference

`#include <RayIntersector>`

Inheritance diagram for osgUtil::RayIntersector:

## Classes

struct | Intersection

## Public Types

typedef std::multiset< Intersection > | Intersections
Public Types inherited from osgUtil::Intersector
enum | CoordinateFrame { WINDOW , PROJECTION , VIEW , MODEL }
enum | IntersectionLimit { NO_LIMIT , LIMIT_ONE_PER_DRAWABLE , LIMIT_ONE , LIMIT_NEAREST }
enum | PrecisionHint { USE_DOUBLE_CALCULATIONS , USE_FLOAT_CALCULATIONS }

## Public Member Functions

| RayIntersector (CoordinateFrame cf=MODEL, RayIntersector *parent=NULL, osgUtil::Intersector::IntersectionLimit intersectionLimit=osgUtil::Intersector::NO_LIMIT)
| RayIntersector (const osg::Vec3d &start, const osg::Vec3d &direction)
| RayIntersector (CoordinateFrame cf, const osg::Vec3d &start, const osg::Vec3d &direction, RayIntersector *parent=NULL, osgUtil::Intersector::IntersectionLimit intersectionLimit=osgUtil::Intersector::NO_LIMIT)
| RayIntersector (CoordinateFrame cf, double x, double y)
void | insertIntersection (const Intersection &intersection)
Intersections & | getIntersections ()
Intersection | getFirstIntersection ()
virtual void | setStart (const osg::Vec3d &start)
const osg::Vec3d & | getStart () const
virtual void | setDirection (const osg::Vec3d &dir)
const osg::Vec3d & | getDirection () const
virtual Intersector * | clone (osgUtil::IntersectionVisitor &iv)
virtual bool | enter (const osg::Node &node)
virtual void | leave ()
virtual void | intersect (osgUtil::IntersectionVisitor &iv, osg::Drawable *drawable)
virtual void | reset ()
virtual bool | containsIntersections ()
Public Member Functions inherited from osgUtil::Intersector
| Intersector (CoordinateFrame cf=MODEL, IntersectionLimit il=NO_LIMIT)
void | setCoordinateFrame (CoordinateFrame cf)
CoordinateFrame | getCoordinateFrame () const
void | setIntersectionLimit (IntersectionLimit limit)
IntersectionLimit | getIntersectionLimit () const
bool | disabled () const
void | incrementDisabledCount ()
void | decrementDisabledCount ()
bool | reachedLimit ()
void | setPrecisionHint (PrecisionHint hint)
PrecisionHint | getPrecisionHint () const
Public Member Functions inherited from osg::Referenced
| Referenced ()
| Referenced (bool threadSafeRefUnref)
| Referenced (const Referenced &)
Referenced & | operator= (const Referenced &)
virtual void | setThreadSafeRefUnref (bool)
bool | getThreadSafeRefUnref () const
OpenThreads::Mutex * | getRefMutex () const
int | ref () const
int | unref () const
int | unref_nodelete () const
int | referenceCount () const
ObserverSet * | getObserverSet () const
ObserverSet * | getOrCreateObserverSet () const
void | addObserver (Observer *observer) const
void | removeObserver (Observer *observer) const

## Protected Member Functions

virtual bool | intersects (const osg::BoundingSphere &bs)
bool | intersectAndClip (osg::Vec3d &s, const osg::Vec3d &d, osg::Vec3d &e, const osg::BoundingBox &bb)
Protected Member Functions inherited from osg::Referenced
virtual | ~Referenced ()
void | signalObserversAndDelete (bool signalDelete, bool doDelete) const
void | deleteUsingDeleteHandler () const

## Protected Attributes

RayIntersector * | _parent
osg::Vec3d | _start
osg::Vec3d | _direction
Intersections | _intersections
Protected Attributes inherited from osgUtil::Intersector
CoordinateFrame | _coordinateFrame
IntersectionLimit | _intersectionLimit
unsigned int | _disabledCount
PrecisionHint | _precisionHint
Protected Attributes inherited from osg::Referenced
OpenThreads::AtomicPtr | _observerSet
OpenThreads::Atomic | _refCount

## Additional Inherited Members

Static Public Member Functions inherited from osg::Referenced
static OpenThreads::Mutex * | getGlobalReferencedMutex ()
static void | setDeleteHandler (DeleteHandler *handler)
static DeleteHandler * | getDeleteHandler ()

## Detailed Description

RayIntersector implements possibly-infinite line intersections with the scene graph.

Compared with LineSegmentIntersector, RayIntersector supports infinite intersection lines, start and end point can be given in homogeneous coordinates and projection matrix is allowed to have z-far plane at infinity (often used in shadow volume technique).

Currently, picking of objects at infinity is not supported. Please, contribute.

The class is be used in conjunction with IntersectionVisitor.

## Member Typedef Documentation

## Intersections

typedef std::multiset<Intersection> osgUtil::RayIntersector::Intersections

## Constructor & Destructor Documentation

## RayIntersector() [1/4]

osgUtil::RayIntersector::RayIntersector | ( | CoordinateFrame | cf = MODEL,
|  | RayIntersector * | parent = NULL,
|  | osgUtil::Intersector::IntersectionLimit | intersectionLimit = osgUtil::Intersector::NO_LIMIT )

Construct a RayIntersector. You will need to provide start and end point, or start point and direction. See setStart() and setDirecton().

References osgUtil::Intersector::MODEL, osgUtil::Intersector::NO_LIMIT, NULL, and RayIntersector().

Referenced by RayIntersector(), and RayIntersector().

## RayIntersector() [2/4]

osgUtil::RayIntersector::RayIntersector | ( | const osg::Vec3d & | start,
|  | const osg::Vec3d & | direction )

Construct a RayIntersector that runs from start point in specified direction to the infinity. Start and direction are provided in MODEL coordinates.

## RayIntersector() [3/4]

osgUtil::RayIntersector::RayIntersector | ( | CoordinateFrame | cf,
|  | const osg::Vec3d & | start,
|  | const osg::Vec3d & | direction,
|  | RayIntersector * | parent = NULL,
|  | osgUtil::Intersector::IntersectionLimit | intersectionLimit = osgUtil::Intersector::NO_LIMIT )

Construct a RayIntersector the runs from start point in specified direction to the infinity in the specified coordinate frame.

References osgUtil::Intersector::NO_LIMIT, NULL, and RayIntersector().

## RayIntersector() [4/4]

osgUtil::RayIntersector::RayIntersector | ( | CoordinateFrame | cf,
|  | double | x,
|  | double | y )

Convenience constructor for supporting picking in WINDOW and PROJECTION coordinates. In WINDOW coordinates, it creates a start value of (x,y,0) and end value of (x,y,1). In PROJECTION coordinates (clip space cube), it creates a start value of (x,y,-1) and end value of (x,y,1). In VIEW and MODEL coordinates, it creates a start value of (x,y,0) and end value of (x,y,1).

## Member Function Documentation

## clone()

virtual Intersector * osgUtil::RayIntersector::clone | ( | osgUtil::IntersectionVisitor & | iv | ) |

virtual

Implements osgUtil::Intersector.

References osgUtil::Intersector::Intersector().

## containsIntersections()

virtual bool osgUtil::RayIntersector::containsIntersections | ( |  | ) |

inline virtual

Implements osgUtil::Intersector.

References getIntersections().

## enter()

virtual bool osgUtil::RayIntersector::enter | ( | const osg::Node & | node | ) |

virtual

Implements osgUtil::Intersector.

## getDirection()

const osg::Vec3d & osgUtil::RayIntersector::getDirection | ( |  | ) | const

inline

References _direction.

## getFirstIntersection()

Intersection osgUtil::RayIntersector::getFirstIntersection | ( |  | ) |

inline

References getIntersections().

## getIntersections()

Intersections & osgUtil::RayIntersector::getIntersections | ( |  | ) |

inline

References _intersections, and _parent.

Referenced by containsIntersections(), getFirstIntersection(), and insertIntersection().

## getStart()

const osg::Vec3d & osgUtil::RayIntersector::getStart | ( |  | ) | const

inline

References _start.

## insertIntersection()

void osgUtil::RayIntersector::insertIntersection | ( | const Intersection & | intersection | ) |

inline

References getIntersections().

## intersect()

virtual void osgUtil::RayIntersector::intersect | ( | osgUtil::IntersectionVisitor & | iv,
|  | osg::Drawable * | drawable )

virtual

Implements osgUtil::Intersector.

## intersectAndClip()

bool osgUtil::RayIntersector::intersectAndClip | ( | osg::Vec3d & | s,
|  | const osg::Vec3d & | d,
|  | osg::Vec3d & | e,
|  | const osg::BoundingBox & | bb )

protected

## intersects()

virtual bool osgUtil::RayIntersector::intersects | ( | const osg::BoundingSphere & | bs | ) |

protected virtual

## leave()

virtual void osgUtil::RayIntersector::leave | ( |  | ) |

virtual

Implements osgUtil::Intersector.

## reset()

virtual void osgUtil::RayIntersector::reset | ( |  | ) |

virtual

Reimplemented from osgUtil::Intersector.

## setDirection()

virtual void osgUtil::RayIntersector::setDirection | ( | const osg::Vec3d & | dir | ) |

inline virtual

References _direction.

## setStart()

virtual void osgUtil::RayIntersector::setStart | ( | const osg::Vec3d & | start | ) |

inline virtual

References _start.

## Member Data Documentation

## _direction

osg::Vec3d osgUtil::RayIntersector::_direction

protected

Referenced by getDirection(), and setDirection().

## _intersections

Intersections osgUtil::RayIntersector::_intersections

protected

Referenced by getIntersections().

## _parent

RayIntersector* osgUtil::RayIntersector::_parent

protected

Referenced by getIntersections().

## _start

osg::Vec3d osgUtil::RayIntersector::_start

protected

Referenced by getStart(), and setStart().

The documentation for this class was generated from the following file:

- RayIntersector