OpenSceneGraph
Public Types | Public Member Functions | Protected Attributes | List of all members
osg::Plane Class Reference

A plane class. More...

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

Public Types

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

Public Member Functions

 Plane ()
 Default constructor. More...
 
 Plane (const Plane &pl)
 
 Plane (value_type a, value_type b, value_type c, value_type d)
 Constructor. More...
 
 Plane (const Vec4f &vec)
 Constructor. More...
 
 Plane (const Vec4d &vec)
 Constructor. More...
 
 Plane (const Vec3_type &norm, value_type d)
 Constructor. More...
 
 Plane (const Vec3_type &v1, const Vec3_type &v2, const Vec3_type &v3)
 Constructor. More...
 
 Plane (const Vec3_type &norm, const Vec3_type &point)
 Constructor. More...
 
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. More...
 
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. More...
 
void calculateUpperLowerBBCorners ()
 calculate the upper and lower bounding box corners to be used in the intersect(BoundingBox&) method for speeding calculations. More...
 
bool valid () const
 Checks if all internal values describing the plane have valid numbers. More...
 
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. More...
 
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. More...
 
double distance (const osg::Vec3d &v) const
 Calculate the distance between a point and the plane. More...
 
float dotProductNormal (const osg::Vec3f &v) const
 calculate the dot product of the plane normal and a point. More...
 
double dotProductNormal (const osg::Vec3d &v) const
 calculate the dot product of the plane normal and a point. More...
 
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. More...
 
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. More...
 
int intersect (const BoundingSphere &bs) const
 intersection test between plane and bounding sphere. More...
 
int intersect (const BoundingBox &bb) const
 intersection test between plane and bounding sphere. More...
 
void transform (const osg::Matrix &matrix)
 Transform the plane by matrix. More...
 
void transformProvidingInverse (const osg::Matrix &matrix)
 Transform the plane by providing a pre inverted matrix. More...
 

Protected Attributes

value_type _fv [4]
 Vec member variable. More...
 
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

◆ value_type

typedef double osg::Plane::value_type

Type of Plane class.

◆ Vec3_type

◆ Vec4_type

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Number of vector components.

Enumerator
num_components 

Constructor & Destructor Documentation

◆ Plane() [1/8]

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.

◆ Plane() [2/8]

osg::Plane::Plane ( const Plane pl)
inline

◆ Plane() [3/8]

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.

◆ Plane() [4/8]

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.

◆ Plane() [5/8]

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.

◆ Plane() [6/8]

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.

◆ Plane() [7/8]

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).

◆ Plane() [8/8]

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

◆ asVec4()

Vec4_type osg::Plane::asVec4 ( ) const
inline

◆ calculateUpperLowerBBCorners()

void osg::Plane::calculateUpperLowerBBCorners ( )
inline

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

◆ distance() [1/2]

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().

◆ distance() [2/2]

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().

◆ dotProductNormal() [1/2]

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().

◆ dotProductNormal() [2/2]

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().

◆ flip()

void osg::Plane::flip ( )
inline

flip/reverse the orientation of the plane.

◆ getNormal()

Vec3_type osg::Plane::getNormal ( ) const
inline

◆ intersect() [1/4]

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.

◆ intersect() [2/4]

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.

◆ intersect() [3/4]

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< VT >::center(), and osg::BoundingSphereImpl< VT >::radius().

◆ intersect() [4/4]

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< VT >::corner().

◆ isNaN()

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

References osg::isNaN().

◆ makeUnitLength()

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.

◆ operator!=()

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

References _fv.

◆ operator<()

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.

◆ operator=()

Plane& osg::Plane::operator= ( const Plane pl)
inline

◆ operator==()

bool osg::Plane::operator== ( const Plane plane) const
inline

References _fv.

◆ operator[]() [1/2]

value_type& osg::Plane::operator[] ( unsigned int  i)
inline

◆ operator[]() [2/2]

value_type osg::Plane::operator[] ( unsigned int  i) const
inline

◆ ptr() [1/2]

value_type* osg::Plane::ptr ( )
inline

◆ ptr() [2/2]

const value_type* osg::Plane::ptr ( ) const
inline

◆ set() [1/7]

void osg::Plane::set ( const Plane pl)
inline

◆ set() [2/7]

void osg::Plane::set ( value_type  a,
value_type  b,
value_type  c,
value_type  d 
)
inline

◆ set() [3/7]

void osg::Plane::set ( const Vec4f vec)
inline

◆ set() [4/7]

void osg::Plane::set ( const Vec4d vec)
inline

◆ set() [5/7]

void osg::Plane::set ( const Vec3_type norm,
double  d 
)
inline

◆ set() [6/7]

void osg::Plane::set ( const Vec3_type v1,
const Vec3_type v2,
const Vec3_type v3 
)
inline

◆ set() [7/7]

void osg::Plane::set ( const Vec3_type norm,
const Vec3_type point 
)
inline

◆ transform()

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().

◆ transformProvidingInverse()

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

Transform the plane by providing a pre inverted matrix.

see transform for details.

◆ valid()

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

◆ _fv

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

Vec member variable.

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

◆ _lowerBBCorner

unsigned int osg::Plane::_lowerBBCorner
protected

◆ _upperBBCorner

unsigned int osg::Plane::_upperBBCorner
protected

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