CrystalSpace

Public API Reference

Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

csPoly3D Class Reference
[Geometry utilities]

The following class represents a general 3D polygon. More...

#include <csgeom/poly3d.h>

Inheritance diagram for csPoly3D:

csVector3Array List of all members.

Public Member Functions

 csPoly3D (size_t start_size=10)
 Make a new empty polygon.
 csPoly3D (const csPoly3D &copy)
 Copy constructor.
virtual ~csPoly3D ()
 Destructor.
void MakeEmpty ()
 Initialize the polygon to empty.
size_t GetVertexCount () const
 Get the number of vertices.
const csVector3GetVertices () const
 Get the array with all vertices.
csVector3GetVertices ()
 Get the array with all vertices.
const csVector3GetVertex (size_t i) const
 Get the specified vertex.
csVector3operator[] (size_t i)
 Get the specified vertex.
const csVector3operator[] (size_t i) const
 Get the specified vertex.
const csVector3GetFirst () const
 Get the first vertex.
const csVector3GetLast () const
 Get the last vertex.
bool In (const csVector3 &v) const
 Test if this vector is inside the polygon.
void MakeRoom (size_t new_max)
 Make room for at least the specified number of vertices.
void SetVertexCount (size_t n)
 Set the number of vertices.
size_t AddVertex (const csVector3 &v)
 Add a vertex (3D) to the polygon.
size_t AddVertex (float x, float y, float z)
 Add a vertex (3D) to the polygon.
void SetVertices (csVector3 const *v, size_t num)
 Set all polygon vertices at once.
bool ProjectXPlane (const csVector3 &point, float plane_x, csPoly2D *poly2d) const
 Project this polygon onto a X plane as seen from some point in space.
bool ProjectYPlane (const csVector3 &point, float plane_y, csPoly2D *poly2d) const
 Project this polygon onto a Y plane as seen from some point in space.
bool ProjectZPlane (const csVector3 &point, float plane_z, csPoly2D *poly2d) const
 Project this polygon onto a Z plane as seen from some point in space.
bool ProjectAxisPlane (const csVector3 &point, int plane_nr, float plane_pos, csPoly2D *poly2d) const
 Project this polygon onto an axis-aligned plane as seen from some point in space.
int Classify (const csPlane3 &pl) const
 Classify this polygon with regards to a plane.
int ClassifyX (float x) const
 Same as Classify() but for X plane only.
int ClassifyY (float y) const
 Same as Classify() but for Y plane only.
int ClassifyZ (float z) const
 Same as Classify() but for Z plane only.
int ClassifyAxis (int axis, float where) const
 Same as Classify() but for a given axis plane.
int IsAxisAligned (float &where, float epsilon=SMALL_EPSILON) const
 Test if this polygon is axis aligned and return the axis (one of CS_AXIS_ constants).
void CutToPlane (const csPlane3 &split_plane)
 Cut this polygon with a plane and only keep the front side.
void SplitWithPlane (csPoly3D &front, csPoly3D &back, const csPlane3 &split_plane) const
 Split this polygon with the given plane (A,B,C,D).
void SplitWithPlaneX (csPoly3D &front, csPoly3D &back, float x) const
 Split this polygon to the x-plane.
void SplitWithPlaneY (csPoly3D &front, csPoly3D &back, float y) const
 Split this polygon to the y-plane.
void SplitWithPlaneZ (csPoly3D &front, csPoly3D &back, float z) const
 Split this polygon to the z-plane.
csVector3 ComputeNormal () const
 Compute the normal of this polygon.
csPlane3 ComputePlane () const
 Compute the plane of this polygon.
float GetArea () const
 Calculate the area of this polygon.
csVector3 GetCenter () const
 Compute and get the central vertex of this polygon.

Static Public Member Functions

bool In (csVector3 *poly, size_t num_poly, const csVector3 &v)
 Test if a vector is inside the given polygon.
int Classify (const csPlane3 &pl, const csVector3 *vertices, size_t num_vertices)
 Static function to classify a polygon with regards to a plane.
csVector3 ComputeNormal (const csVector3 *vertices, size_t num)
 Compute the normal of a polygon.
csVector3 ComputeNormal (const csArray< csVector3 > &poly)
 Compute the normal of a polygon.
csVector3 ComputeNormal (int *poly, size_t num, csVector3 *vertices)
 Compute the normal of an indexed polygon.
csPlane3 ComputePlane (const csVector3 *vertices, size_t num)
 Compute the plane of a polygon.
csPlane3 ComputePlane (const csArray< csVector3 > &poly)
 Compute the plane of a polygon.
csPlane3 ComputePlane (int *poly, size_t num, csVector3 *vertices)
 Compute the plane of an indexed polygon.

Protected Attributes

csDirtyAccessArray< csVector3vertices
 The 3D vertices.

Detailed Description

The following class represents a general 3D polygon.

Definition at line 44 of file poly3d.h.


Constructor & Destructor Documentation

csPoly3D::csPoly3D size_t  start_size = 10  ) 
 

Make a new empty polygon.

csPoly3D::csPoly3D const csPoly3D copy  ) 
 

Copy constructor.

virtual csPoly3D::~csPoly3D  )  [virtual]
 

Destructor.


Member Function Documentation

size_t csPoly3D::AddVertex float  x,
float  y,
float  z
 

Add a vertex (3D) to the polygon.

Return index of added vertex.

size_t csPoly3D::AddVertex const csVector3 v  )  [inline]
 

Add a vertex (3D) to the polygon.

Return index of added vertex.

Definition at line 148 of file poly3d.h.

References csVector3::x, csVector3::y, and csVector3::z.

int csPoly3D::Classify const csPlane3 pl  )  const [inline]
 

Classify this polygon with regards to a plane.

If this poly is on same plane it returns CS_POL_SAME_PLANE. If this poly is completely in front of the given plane it returnes CS_POL_FRONT. If this poly is completely back of the given plane it returnes CS_POL_BACK. Otherwise it returns CS_POL_SPLIT_NEEDED.

Definition at line 231 of file poly3d.h.

References Classify(), csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

int csPoly3D::Classify const csPlane3 pl,
const csVector3 vertices,
size_t  num_vertices
[static]
 

Static function to classify a polygon with regards to a plane.

If this poly is on same plane it returns CS_POL_SAME_PLANE. If this poly is completely in front of the given plane it returnes CS_POL_FRONT. If this poly is completely back of the given plane it returnes CS_POL_BACK. Otherwise it returns CS_POL_SPLIT_NEEDED.

Referenced by Classify().

int csPoly3D::ClassifyAxis int  axis,
float  where
const [inline]
 

Same as Classify() but for a given axis plane.

Definition at line 246 of file poly3d.h.

References ClassifyX(), ClassifyY(), and ClassifyZ().

int csPoly3D::ClassifyX float  x  )  const
 

Same as Classify() but for X plane only.

Referenced by ClassifyAxis().

int csPoly3D::ClassifyY float  y  )  const
 

Same as Classify() but for Y plane only.

Referenced by ClassifyAxis().

int csPoly3D::ClassifyZ float  z  )  const
 

Same as Classify() but for Z plane only.

Referenced by ClassifyAxis().

csVector3 csPoly3D::ComputeNormal  )  const [inline]
 

Compute the normal of this polygon.

Definition at line 292 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

csVector3 csPoly3D::ComputeNormal int *  poly,
size_t  num,
csVector3 vertices
[static]
 

Compute the normal of an indexed polygon.

csVector3 csPoly3D::ComputeNormal const csArray< csVector3 > &  poly  )  [static]
 

Compute the normal of a polygon.

csVector3 csPoly3D::ComputeNormal const csVector3 vertices,
size_t  num
[static]
 

Compute the normal of a polygon.

csPlane3 csPoly3D::ComputePlane  )  const [inline]
 

Compute the plane of this polygon.

Definition at line 307 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

csPlane3 csPoly3D::ComputePlane int *  poly,
size_t  num,
csVector3 vertices
[static]
 

Compute the plane of an indexed polygon.

csPlane3 csPoly3D::ComputePlane const csArray< csVector3 > &  poly  )  [static]
 

Compute the plane of a polygon.

csPlane3 csPoly3D::ComputePlane const csVector3 vertices,
size_t  num
[static]
 

Compute the plane of a polygon.

void csPoly3D::CutToPlane const csPlane3 split_plane  ) 
 

Cut this polygon with a plane and only keep the front side.

float csPoly3D::GetArea  )  const
 

Calculate the area of this polygon.

csVector3 csPoly3D::GetCenter  )  const
 

Compute and get the central vertex of this polygon.

const csVector3* csPoly3D::GetFirst  )  const [inline]
 

Get the first vertex.

Definition at line 110 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

const csVector3* csPoly3D::GetLast  )  const [inline]
 

Get the last vertex.

Definition at line 116 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

const csVector3* csPoly3D::GetVertex size_t  i  )  const [inline]
 

Get the specified vertex.

Definition at line 85 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

size_t csPoly3D::GetVertexCount  )  const [inline]
 

Get the number of vertices.

Definition at line 70 of file poly3d.h.

References csArray< T, ElementHandler, MemoryAllocator >::Length(), and vertices.

csVector3* csPoly3D::GetVertices  )  [inline]
 

Get the array with all vertices.

Definition at line 80 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), and vertices.

const csVector3* csPoly3D::GetVertices  )  const [inline]
 

Get the array with all vertices.

Definition at line 75 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), and vertices.

bool csPoly3D::In csVector3 poly,
size_t  num_poly,
const csVector3 v
[static]
 

Test if a vector is inside the given polygon.

bool csPoly3D::In const csVector3 v  )  const
 

Test if this vector is inside the polygon.

int csPoly3D::IsAxisAligned float &  where,
float  epsilon = SMALL_EPSILON
const
 

Test if this polygon is axis aligned and return the axis (one of CS_AXIS_ constants).

The location of the axis is returned in 'where'. Returns CS_AXIS_NONE if the polygon is not axis aligned. The epsilon will be used to test if two coordinates are close.

void csPoly3D::MakeEmpty  ) 
 

Initialize the polygon to empty.

void csPoly3D::MakeRoom size_t  new_max  ) 
 

Make room for at least the specified number of vertices.

Referenced by SetVertexCount(), and SetVertices().

const csVector3& csPoly3D::operator[] size_t  i  )  const [inline]
 

Get the specified vertex.

Definition at line 102 of file poly3d.h.

References vertices.

csVector3& csPoly3D::operator[] size_t  i  )  [inline]
 

Get the specified vertex.

Definition at line 94 of file poly3d.h.

References vertices.

bool csPoly3D::ProjectAxisPlane const csVector3 point,
int  plane_nr,
float  plane_pos,
csPoly2D poly2d
const [inline]
 

Project this polygon onto an axis-aligned plane as seen from some point in space.

Fills the given 2D polygon with the projection on the plane. This function assumes that there actually is a projection. Plane_nr is 0 for the X plane, 1 for Y, and 2 for Z. Or one of the CS_AXIX_ constants.

Definition at line 202 of file poly3d.h.

References ProjectXPlane(), ProjectYPlane(), and ProjectZPlane().

bool csPoly3D::ProjectXPlane const csVector3 point,
float  plane_x,
csPoly2D poly2d
const
 

Project this polygon onto a X plane as seen from some point in space.

Fills the given 2D polygon with the projection on the plane. This function assumes that there actually is a projection. If the polygon to project comes on the same plane as 'point' then it will return false (no valid projection).

Referenced by ProjectAxisPlane().

bool csPoly3D::ProjectYPlane const csVector3 point,
float  plane_y,
csPoly2D poly2d
const
 

Project this polygon onto a Y plane as seen from some point in space.

Fills the given 2D polygon with the projection on the plane. This function assumes that there actually is a projection. If the polygon to project comes on the same plane as 'point' then it will return false (no valid projection).

Referenced by ProjectAxisPlane().

bool csPoly3D::ProjectZPlane const csVector3 point,
float  plane_z,
csPoly2D poly2d
const
 

Project this polygon onto a Z plane as seen from some point in space.

Fills the given 2D polygon with the projection on the plane. This function assumes that there actually is a projection. If the polygon to project comes on the same plane as 'point' then it will return false (no valid projection).

Referenced by ProjectAxisPlane().

void csPoly3D::SetVertexCount size_t  n  )  [inline]
 

Set the number of vertices.

Definition at line 138 of file poly3d.h.

References MakeRoom(), csArray< T, ElementHandler, MemoryAllocator >::SetLength(), and vertices.

void csPoly3D::SetVertices csVector3 const *  v,
size_t  num
[inline]
 

Set all polygon vertices at once.

Copies the array.

Definition at line 159 of file poly3d.h.

References csDirtyAccessArray< T >::GetArray(), MakeRoom(), and vertices.

void csPoly3D::SplitWithPlane csPoly3D front,
csPoly3D back,
const csPlane3 split_plane
const
 

Split this polygon with the given plane (A,B,C,D).

void csPoly3D::SplitWithPlaneX csPoly3D front,
csPoly3D back,
float  x
const
 

Split this polygon to the x-plane.

void csPoly3D::SplitWithPlaneY csPoly3D front,
csPoly3D back,
float  y
const
 

Split this polygon to the y-plane.

void csPoly3D::SplitWithPlaneZ csPoly3D front,
csPoly3D back,
float  z
const
 

Split this polygon to the z-plane.


Member Data Documentation

csDirtyAccessArray<csVector3> csPoly3D::vertices [protected]
 

The 3D vertices.

Definition at line 48 of file poly3d.h.

Referenced by Classify(), ComputeNormal(), ComputePlane(), GetFirst(), GetLast(), GetVertex(), GetVertexCount(), GetVertices(), operator[](), SetVertexCount(), and SetVertices().


The documentation for this class was generated from the following file:
Generated for Crystal Space by doxygen 1.3.9.1