OpenSceneGraph  3.0.1
Public Types | Public Member Functions | Protected Attributes
osg::Plane Class Reference

A plane class. More...

Inheritance diagram for osg::Plane:
Inheritance graph
[legend]

List of all members.

Public Types

enum  { num_components = 3 }
 Number of vector components. More...
typedef double value_type
 Type of Plane class.
typedef Vec3d Vec3_type
typedef Vec4d Vec4_type

Public Member Functions

 Plane ()
 Default constructor.
 Plane (const Plane &pl)
 Plane (value_type a, value_type b, value_type c, value_type d)
 Constructor.
 Plane (const Vec4f &vec)
 Constructor.
 Plane (const Vec4d &vec)
 Constructor.
 Plane (const Vec3_type &norm, value_type d)
 Constructor.
 Plane (const Vec3_type &v1, const Vec3_type &v2, const Vec3_type &v3)
 Constructor.
 Plane (const Vec3_type &norm, const Vec3_type &point)
 Constructor.
Planeoperator= (const Plane &pl)
void set (const Plane &pl)
void set (value_type a, value_type b, value_type c, value_type d)
void set (const Vec4f &vec)
void set (const Vec4d &vec)
void set (const Vec3_type &norm, double d)
void set (const Vec3_type &v1, const Vec3_type &v2, const Vec3_type &v3)
void set (const Vec3_type &norm, const Vec3_type &point)
void flip ()
 flip/reverse the orientation of the plane.
void makeUnitLength ()
 This method multiplies the coefficients of the plane equation with a constant factor so that the equation a^2+b^2+c^2 = 1 holds.
void calculateUpperLowerBBCorners ()
 calculate the upper and lower bounding box corners to be used in the intersect(BoundingBox&) method for speeding calculations.
bool valid () const
 Checks if all internal values describing the plane have valid numbers.
bool isNaN () const
bool operator== (const Plane &plane) const
bool operator!= (const Plane &plane) const
bool operator< (const Plane &plane) const
 A plane is said to be smaller than another plane if the first non-identical element of the internal array is smaller than the corresponding element of the other plane.
value_typeptr ()
const value_typeptr () const
Vec4_type asVec4 () const
value_typeoperator[] (unsigned int i)
value_type operator[] (unsigned int i) const
Vec3_type getNormal () const
float distance (const osg::Vec3f &v) const
 Calculate the distance between a point and the plane.
double distance (const osg::Vec3d &v) const
 Calculate the distance between a point and the plane.
float dotProductNormal (const osg::Vec3f &v) const
 calculate the dot product of the plane normal and a point.
double dotProductNormal (const osg::Vec3d &v) const
 calculate the dot product of the plane normal and a point.
int intersect (const std::vector< Vec3f > &vertices) const
 intersection test between plane and vertex list return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.
int intersect (const std::vector< Vec3d > &vertices) const
 intersection test between plane and vertex list return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.
int intersect (const BoundingSphere &bs) const
 intersection test between plane and bounding sphere.
int intersect (const BoundingBox &bb) const
 intersection test between plane and bounding sphere.
void transform (const osg::Matrix &matrix)
 Transform the plane by matrix.
void transformProvidingInverse (const osg::Matrix &matrix)
 Transform the plane by providing a pre inverted matrix.

Protected Attributes

value_type _fv [4]
 Vec member variable.
unsigned int _upperBBCorner
unsigned int _lowerBBCorner

Detailed Description

A plane class.

It can be used to represent an infinite plane.

The infinite plane is described by an implicit plane equation a*x+b*y+c*z+d = 0. Though it is not mandatory that a^2+b^2+c^2 = 1 is fulfilled in general some methods require it (

See also:
osg::Plane::distance).

Member Typedef Documentation

typedef double osg::Plane::value_type

Type of Plane class.


Member Enumeration Documentation

anonymous enum

Number of vector components.

Enumerator:
num_components 

Constructor & Destructor Documentation

osg::Plane::Plane ( ) [inline]

Default constructor.

The default constructor initializes all values to zero.

Warning:
Although the method osg::Plane::valid() will return true after the default constructors call the plane is mathematically invalid! Default data do not describe a valid plane.
osg::Plane::Plane ( const Plane pl) [inline]
osg::Plane::Plane ( value_type  a,
value_type  b,
value_type  c,
value_type  d 
) [inline]

Constructor.

The plane is described as a*x+b*y+c*z+d = 0.

Remarks:
You may call osg::Plane::MakeUnitLength afterwards if the passed values are not normalized.
osg::Plane::Plane ( const Vec4f vec) [inline]

Constructor.

The plane can also be described as vec*[x,y,z,1].

Remarks:
You may call osg::Plane::MakeUnitLength afterwards if the passed values are not normalized.
osg::Plane::Plane ( const Vec4d vec) [inline]

Constructor.

The plane can also be described as vec*[x,y,z,1].

Remarks:
You may call osg::Plane::MakeUnitLength afterwards if the passed values are not normalized.
osg::Plane::Plane ( const Vec3_type norm,
value_type  d 
) [inline]

Constructor.

This constructor initializes the internal values directly without any checking or manipulation.

Parameters:
normThe normal of the plane.
dThe negative distance from the point of origin to the plane.
Remarks:
You may call osg::Plane::MakeUnitLength afterwards if the passed normal was not normalized.
osg::Plane::Plane ( const Vec3_type v1,
const Vec3_type v2,
const Vec3_type v3 
) [inline]

Constructor.

This constructor calculates from the three points describing an infinite plane the internal values.

Parameters:
v1Point in the plane.
v2Point in the plane.
v3Point in the plane.
Remarks:
After this constructor call the plane's normal is normalized in case the three points described a mathematically valid plane.
The normal is determined by building the cross product of (v2-v1) ^ (v3-v2).
osg::Plane::Plane ( const Vec3_type norm,
const Vec3_type point 
) [inline]

Constructor.

This constructor initializes the internal values directly without any checking or manipulation.

Parameters:
normThe normal of the plane.
pointA point of the plane.
Remarks:
You may call osg::Plane::MakeUnitLength afterwards if the passed normal was not normalized.

Member Function Documentation

Vec4_type osg::Plane::asVec4 ( ) const [inline]
void osg::Plane::calculateUpperLowerBBCorners ( ) [inline]

calculate the upper and lower bounding box corners to be used in the intersect(BoundingBox&) method for speeding calculations.

float osg::Plane::distance ( const osg::Vec3f v) const [inline]

Calculate the distance between a point and the plane.

Remarks:
This method only leads to real distance values if the plane's norm is 1.
See also:
osg::Plane::makeUnitLength

References osg::Vec3f::x(), osg::Vec3f::y(), and osg::Vec3f::z().

double osg::Plane::distance ( const osg::Vec3d v) const [inline]

Calculate the distance between a point and the plane.

Remarks:
This method only leads to real distance values if the plane's norm is 1.
See also:
osg::Plane::makeUnitLength

References osg::Vec3d::x(), osg::Vec3d::y(), and osg::Vec3d::z().

float osg::Plane::dotProductNormal ( const osg::Vec3f v) const [inline]

calculate the dot product of the plane normal and a point.

References osg::Vec3f::x(), osg::Vec3f::y(), and osg::Vec3f::z().

double osg::Plane::dotProductNormal ( const osg::Vec3d v) const [inline]

calculate the dot product of the plane normal and a point.

References osg::Vec3d::x(), osg::Vec3d::y(), and osg::Vec3d::z().

void osg::Plane::flip ( ) [inline]

flip/reverse the orientation of the plane.

Vec3_type osg::Plane::getNormal ( ) const [inline]
int osg::Plane::intersect ( const std::vector< Vec3f > &  vertices) const [inline]

intersection test between plane and vertex list return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.

int osg::Plane::intersect ( const std::vector< Vec3d > &  vertices) const [inline]

intersection test between plane and vertex list return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.

int osg::Plane::intersect ( const BoundingSphere bs) const [inline]

intersection test between plane and bounding sphere.

return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.

References osg::BoundingSphereImpl::center(), and osg::BoundingSphereImpl::radius().

int osg::Plane::intersect ( const BoundingBox bb) const [inline]

intersection test between plane and bounding sphere.

return 1 if the bs is completely above plane, return 0 if the bs intersects the plane, return -1 if the bs is completely below the plane.

References osg::BoundingBoxImpl::corner().

bool osg::Plane::isNaN ( ) const [inline]

References osg::isNaN().

void osg::Plane::makeUnitLength ( ) [inline]

This method multiplies the coefficients of the plane equation with a constant factor so that the equation a^2+b^2+c^2 = 1 holds.

bool osg::Plane::operator!= ( const Plane plane) const [inline]

References _fv.

bool osg::Plane::operator< ( const Plane plane) const [inline]

A plane is said to be smaller than another plane if the first non-identical element of the internal array is smaller than the corresponding element of the other plane.

References _fv.

Plane& osg::Plane::operator= ( const Plane pl) [inline]
bool osg::Plane::operator== ( const Plane plane) const [inline]

References _fv.

value_type& osg::Plane::operator[] ( unsigned int  i) [inline]
value_type osg::Plane::operator[] ( unsigned int  i) const [inline]
value_type* osg::Plane::ptr ( ) [inline]
const value_type* osg::Plane::ptr ( ) const [inline]
void osg::Plane::set ( const Plane pl) [inline]
void osg::Plane::set ( value_type  a,
value_type  b,
value_type  c,
value_type  d 
) [inline]
void osg::Plane::set ( const Vec4f vec) [inline]
void osg::Plane::set ( const Vec4d vec) [inline]
void osg::Plane::set ( const Vec3_type norm,
double  d 
) [inline]
void osg::Plane::set ( const Vec3_type v1,
const Vec3_type v2,
const Vec3_type v3 
) [inline]
void osg::Plane::set ( const Vec3_type norm,
const Vec3_type point 
) [inline]
void osg::Plane::transform ( const osg::Matrix matrix) [inline]

Transform the plane by matrix.

Note, this operation carries out the calculation of the inverse of the matrix since a plane must be multiplied by the inverse transposed to transform it. This make this operation expensive. If the inverse has been already calculated elsewhere then use transformProvidingInverse() instead. See http://www.worldserver.com/turk/computergraphics/NormalTransformations.pdf

References osg::Matrixd::invert().

void osg::Plane::transformProvidingInverse ( const osg::Matrix matrix) [inline]

Transform the plane by providing a pre inverted matrix.

see transform for details.

bool osg::Plane::valid ( ) const [inline]

Checks if all internal values describing the plane have valid numbers.

Warning:
This method does not check if the plane is mathematically correctly described!
Remarks:
The only case where all elements have valid numbers and the plane description is invalid occurs if the plane's normal is zero.

References osg::isNaN().


Member Data Documentation

value_type osg::Plane::_fv[4] [protected]

Vec member variable.

Referenced by operator==(), operator!=(), and operator<().

unsigned int osg::Plane::_lowerBBCorner [protected]
unsigned int osg::Plane::_upperBBCorner [protected]

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

osg logo
Generated at Mon Oct 3 2011 12:39:43 for the OpenSceneGraph by doxygen 1.7.5.