# Ogre::ConvexBody Class Reference

Holds a solid representation of a convex body. More...

`#include <OgreConvexBody.h>`

List of all members.

## Public Types

typedef std::vector< Polygon * > | PolygonList

## Public Member Functions

| ConvexBody ()
| ~ConvexBody ()
| ConvexBody (const ConvexBody &cpy)
void | define (const Frustum &frustum)
| Build a new polygon representation from a frustum.
void | define (const AxisAlignedBox &aab)
| Build a new polygon representation from an AAB.
void | clip (const Frustum &frustum)
| Clips the body with a frustum.
void | clip (const AxisAlignedBox &aab)
| Clips the body with an AAB.
void | clip (const ConvexBody &body)
| Clips the body with another body.
void | clip (const Plane &pl, bool keepNegative=true)
| Clips the object by the positive half space of a plane.
void | extend (const Vector3 &pt)
| Extends the existing body to incorporate the passed in point as a convex hull.
void | reset (void)
| Resets the object.
size_t | getPolygonCount (void) const
| Returns the current number of polygons.
size_t | getVertexCount (size_t poly) const
| Returns the number of vertices for a polygon.
const Polygon & | getPolygon (size_t poly) const
| Returns a polygon.
const Vector3 & | getVertex (size_t poly, size_t vertex) const
| Returns a specific vertex of a polygon.
const Vector3 & | getNormal (size_t poly)
| Returns the normal of a specified polygon.
AxisAlignedBox | getAABB (void) const
| Returns an AABB representation.
bool | hasClosedHull (void) const
| Checks if the body has a closed hull.
void | mergePolygons (void)
| Merges all neighboring polygons into one single polygon if they are lay in the same plane.
bool | operator== (const ConvexBody &rhs) const
| Determines if the current object is equal to the compared one.
bool | operator!= (const ConvexBody &rhs) const
| Determines if the current object is not equal to the compared one.
void | logInfo () const
| Log details of this body.

## Static Public Member Functions

static void | _initialisePool ()
| Initialise the internal polygon pool used to minimise allocations.
static void | _destroyPool ()
| Tear down the internal polygon pool used to minimise allocations.

## Protected Member Functions

void | insertPolygon (Polygon *pdata, size_t poly)
| Inserts a polygon at a particular point in the body.
void | insertPolygon (Polygon *pdata)
| Inserts a polygon at the end.
void | insertVertex (size_t poly, const Vector3 &vdata, size_t vertex)
| Inserts a vertex for a polygon at a particular point.
void | insertVertex (size_t poly, const Vector3 &vdata)
| Inserts a vertex for a polygon at the end.
void | deletePolygon (size_t poly)
| Deletes a specific polygon.
Polygon * | unlinkPolygon (size_t poly)
| Removes a specific polygon from the body without deleting it.
void | moveDataFromBody (ConvexBody &body)
| Moves all polygons from the parameter body to this instance.
void | deleteVertex (size_t poly, size_t vertex)
| Deletes a specific vertex of a specific polygon.
void | setPolygon (Polygon *pdata, size_t poly)
| Replace a polygon at a particular index.
void | setVertex (size_t poly, const Vector3 &vdata, size_t vertex)
| Replace a specific vertex of a polygon.
Polygon::EdgeMap | getSingleEdges () const
| Returns the single edges in an EdgeMap (= edges where one side is a vertex and the other is empty space (a hole in the body)).
void | storeEdgesOfPolygon (size_t poly, Polygon::EdgeMap *edgeMap) const
| Stores the edges of a specific polygon in a passed in structure.
void | allocateSpace (size_t numPolygons, size_t numVertices)
| Allocates space for an specified amount of polygons with each of them having a specified number of vertices.
bool | findAndEraseEdgePair (const Vector3 &vec, Polygon::EdgeMap &intersectionEdges, Vector3 &vNext) const
| Searches for a pair (an edge) in the intersectionList with an entry that equals vec, and removes it from the passed in list.

## Static Protected Member Functions

static Polygon * | allocatePolygon ()
| Get a new polygon from the pool.
static void | freePolygon (Polygon *poly)
| Release a polygon back tot he pool.

## Protected Attributes

PolygonList | mPolygons

## Static Protected Attributes

static PolygonList | msFreePolygons

## Friends

_OgreExport friend std::ostream & | operator<< (std::ostream &strm, const ConvexBody &body)
| Prints out the body with all its polygons.

## Detailed Description

Holds a solid representation of a convex body.

Remarks:
  Administers a convex body. All polygons of the body are convex and planar. Several operations may be applied, ranging from intersection to join where each result it itself a convex body.

Definition at line 46 of file OgreConvexBody.h.

## Member Typedef Documentation

typedef std::vector< Polygon* > Ogre::ConvexBody::PolygonList

Definition at line 49 of file OgreConvexBody.h.

## Constructor & Destructor Documentation

Ogre::ConvexBody::ConvexBody | ( |  | ) |

Ogre::ConvexBody::~ConvexBody | ( |  | ) |

Ogre::ConvexBody::ConvexBody | ( | const ConvexBody & | cpy | ) |

## Member Function Documentation

void Ogre::ConvexBody::define | ( | const Frustum & | frustum | ) |

Build a new polygon representation from a frustum.

void Ogre::ConvexBody::define | ( | const AxisAlignedBox & | aab | ) |

Build a new polygon representation from an AAB.

void Ogre::ConvexBody::clip | ( | const Frustum & | frustum | ) |

Clips the body with a frustum.

The resulting holes are filled with new polygons.

void Ogre::ConvexBody::clip | ( | const AxisAlignedBox & | aab | ) |

Clips the body with an AAB.

The resulting holes are filled with new polygons.

void Ogre::ConvexBody::clip | ( | const ConvexBody & | body | ) |

Clips the body with another body.

void Ogre::ConvexBody::clip | ( | const Plane & | pl,
|  | bool | keepNegative = `true` |
| ) |  |  |

Clips the object by the positive half space of a plane.

void Ogre::ConvexBody::extend | ( | const Vector3 & | pt | ) |

Extends the existing body to incorporate the passed in point as a convex hull.

Remarks:
  You must already have constructed a basic body using a 'construct' method.

void Ogre::ConvexBody::reset | ( | void |  | ) |

Resets the object.

size_t Ogre::ConvexBody::getPolygonCount | ( | void |  | ) | const

Returns the current number of polygons.

size_t Ogre::ConvexBody::getVertexCount | ( | size_t | poly | ) | const

Returns the number of vertices for a polygon.

const Polygon& Ogre::ConvexBody::getPolygon | ( | size_t | poly | ) | const

Returns a polygon.

const Vector3& Ogre::ConvexBody::getVertex | ( | size_t | poly,
|  | size_t | vertex |
| ) |  |  | const

Returns a specific vertex of a polygon.

const Vector3& Ogre::ConvexBody::getNormal | ( | size_t | poly | ) |

Returns the normal of a specified polygon.

AxisAlignedBox Ogre::ConvexBody::getAABB | ( | void |  | ) | const

Returns an AABB representation.

bool Ogre::ConvexBody::hasClosedHull | ( | void |  | ) | const

Checks if the body has a closed hull.

void Ogre::ConvexBody::mergePolygons | ( | void |  | ) |

Merges all neighboring polygons into one single polygon if they are lay in the same plane.

bool Ogre::ConvexBody::operator== | ( | const ConvexBody & | rhs | ) | const

Determines if the current object is equal to the compared one.

bool Ogre::ConvexBody::operator!= | ( | const ConvexBody & | rhs | ) | const

Determines if the current object is not equal to the compared one.

Definition at line 142 of file OgreConvexBody.h.

void Ogre::ConvexBody::logInfo | ( |  | ) | const

Log details of this body.

static void Ogre::ConvexBody::_initialisePool | ( |  | ) | `[static]`

Initialise the internal polygon pool used to minimise allocations.

static void Ogre::ConvexBody::_destroyPool | ( |  | ) | `[static]`

Tear down the internal polygon pool used to minimise allocations.

static Polygon* Ogre::ConvexBody::allocatePolygon | ( |  | ) | `[static, protected]`

Get a new polygon from the pool.

static void Ogre::ConvexBody::freePolygon | ( | Polygon * | poly | ) | `[static, protected]`

Release a polygon back tot he pool.

void Ogre::ConvexBody::insertPolygon | ( | Polygon * | pdata,
|  | size_t | poly |
| ) |  |  | `[protected]`

Inserts a polygon at a particular point in the body.

Note:
  After this method is called, the ConvexBody 'owns' this Polygon and will be responsible for deleting it.

void Ogre::ConvexBody::insertPolygon | ( | Polygon * | pdata | ) | `[protected]`

Inserts a polygon at the end.

Note:
  After this method is called, the ConvexBody 'owns' this Polygon and will be responsible for deleting it.

void Ogre::ConvexBody::insertVertex | ( | size_t | poly,
|  | const Vector3 & | vdata,
|  | size_t | vertex |
| ) |  |  | `[protected]`

Inserts a vertex for a polygon at a particular point.

Note:
  No checks are done whether the assembled polygon is (still) planar, the caller must ensure that this is the case.

void Ogre::ConvexBody::insertVertex | ( | size_t | poly,
|  | const Vector3 & | vdata |
| ) |  |  | `[protected]`

Inserts a vertex for a polygon at the end.

Note:
  No checks are done whether the assembled polygon is (still) planar, the caller must ensure that this is the case.

void Ogre::ConvexBody::deletePolygon | ( | size_t | poly | ) | `[protected]`

Deletes a specific polygon.

Polygon* Ogre::ConvexBody::unlinkPolygon | ( | size_t | poly | ) | `[protected]`

Removes a specific polygon from the body without deleting it.

Note:
  The retrieved polygon needs to be deleted later by the caller.

void Ogre::ConvexBody::moveDataFromBody | ( | ConvexBody & | body | ) | `[protected]`

Moves all polygons from the parameter body to this instance.

Note:
  Both the passed in object and this instance are modified

void Ogre::ConvexBody::deleteVertex | ( | size_t | poly,
|  | size_t | vertex |
| ) |  |  | `[protected]`

Deletes a specific vertex of a specific polygon.

void Ogre::ConvexBody::setPolygon | ( | Polygon * | pdata,
|  | size_t | poly |
| ) |  |  | `[protected]`

Replace a polygon at a particular index.

Note:
  Again, the passed in polygon is owned by this object after this call returns, and this object is resonsible for deleting it.

void Ogre::ConvexBody::setVertex | ( | size_t | poly,
|  | const Vector3 & | vdata,
|  | size_t | vertex |
| ) |  |  | `[protected]`

Replace a specific vertex of a polygon.

Note:
  No checks are done whether the assembled polygon is (still) planar, the caller must ensure that this is the case.

Polygon::EdgeMap Ogre::ConvexBody::getSingleEdges | ( |  | ) | const`[protected]`

Returns the single edges in an EdgeMap (= edges where one side is a vertex and the other is empty space (a hole in the body)).

void Ogre::ConvexBody::storeEdgesOfPolygon | ( | size_t | poly,
|  | Polygon::EdgeMap * | edgeMap |
| ) |  |  | const`[protected]`

Stores the edges of a specific polygon in a passed in structure.

void Ogre::ConvexBody::allocateSpace | ( | size_t | numPolygons,
|  | size_t | numVertices |
| ) |  |  | `[protected]`

Allocates space for an specified amount of polygons with each of them having a specified number of vertices.

Note:
  Old data (if available) will be erased.

bool Ogre::ConvexBody::findAndEraseEdgePair | ( | const Vector3 & | vec,
|  | Polygon::EdgeMap & | intersectionEdges,
|  | Vector3 & | vNext |
| ) |  |  | const`[protected]`

Searches for a pair (an edge) in the intersectionList with an entry that equals vec, and removes it from the passed in list.

Parameters:

  | vec | The vertex to search for in intersectionEdges
  | intersectionEdges | A list of edges, which is updated if a match is found
  | vNext | A reference to a vector which will be filled with the other vertex at the matching edge, if found.

Returns:
  True if a match was found

## Friends And Related Function Documentation

_OgreExport friend std::ostream& operator<< | ( | std::ostream & | strm,
|  | const ConvexBody & | body |
| ) |  |  | `[friend]`

Prints out the body with all its polygons.

## Member Data Documentation

PolygonList Ogre::ConvexBody::mPolygons `[protected]`

Definition at line 52 of file OgreConvexBody.h.

PolygonList Ogre::ConvexBody::msFreePolygons `[static, protected]`

Definition at line 55 of file OgreConvexBody.h.

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

- OgreConvexBody.h

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Jul 26 11:33:04 2009