OpenSceneGraph 3.6.5
osg::Plane Class Reference

A plane class. More...

#include <Plane>

Inheritance diagram for osg::Plane:

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

◆ 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]

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

◆ distance() [2/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

◆ dotProductNormal() [1/2]

double osg::Plane::dotProductNormal ( const osg::Vec3d & v) const
inline

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

◆ dotProductNormal() [2/2]

float osg::Plane::dotProductNormal ( const osg::Vec3f & v) const
inline

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

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

◆ intersect() [2/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.

◆ intersect() [3/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() [4/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.

◆ isNaN()

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

◆ 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

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

◆ operator=()

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

◆ operator==()

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

◆ 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 ( const Vec3_type & norm,
const Vec3_type & point )
inline

◆ set() [3/7]

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

◆ set() [4/7]

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

◆ set() [5/7]

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

◆ set() [6/7]

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

◆ set() [7/7]

void osg::Plane::set ( value_type a,
value_type b,
value_type c,
value_type d )
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

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

Member Data Documentation

◆ _fv

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

Vec member variable.

◆ _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:

osg logo
Generated at Tue Nov 5 2024 00:00:00 for the OpenSceneGraph by doxygen 1.12.0.