Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

pge::MeshModel Class Reference

#include <MeshModel.h>

Inheritance diagram for pge::MeshModel:

Inheritance graph
[legend]
Collaboration diagram for pge::MeshModel:

Collaboration graph
[legend]

Public Member Functions

 MeshModel (void)
 Constructor.

virtual ~MeshModel (void)
 Destructor.

bool init (void)
void render (void)
 Called when the object should render itself.

void timer (unsigned int delay)
 Called when the timer event comes.

std::vector< Mesh * > * getMeshs (void)
int getTriangleNum (void)
int getMeshNum (void)
AABBgetBoundingBox (void)
void addMesh (Mesh *mesh)
void addMeshModel (MeshModel *model)
void clearMeshs (void)
float getHeightAt (float posX, float posZ)
void buildBoundingBox (void)
void scale (float f)
void setBottomCenter (Vector3f bottomCenter)
Vector3f getBottomCenterDifference (void)

Private Attributes

std::vector< Mesh * > * m_meshs
AABBm_boundingBox
Vector3f m_bottomCenterDifference

Constructor & Destructor Documentation

pge::MeshModel::MeshModel void   ) 
 

Constructor.

Definition at line 16 of file MeshModel.cpp.

References m_boundingBox, and m_meshs.

00016                                  {
00017                 m_boundingBox = NULL;
00018                 m_meshs = new std::vector<Mesh*>();
00019         }

pge::MeshModel::~MeshModel void   )  [virtual]
 

Destructor.

Definition at line 27 of file MeshModel.cpp.

References m_boundingBox, and m_meshs.

00027                                   {
00028                 std::vector<Mesh*>::iterator it;
00029 
00030                 if(m_meshs != NULL) {
00031                         for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00032                                 if(*it != NULL) {
00033                                         delete *it;
00034                                 }
00035                         }
00036                         delete m_meshs;
00037                         m_meshs = NULL;
00038                 }
00039 
00040                 if(m_boundingBox != NULL) {
00041                         delete m_boundingBox;
00042                         m_boundingBox = NULL;
00043                 }
00044         }


Member Function Documentation

void pge::MeshModel::addMesh Mesh mesh  ) 
 

Definition at line 151 of file MeshModel.cpp.

References m_meshs.

Referenced by pge::SGFMeshModel::convertMeshes(), pge::DynamicCity::createCity(), createGrass(), pge::DynamicCity::createGround(), and pge::Terrain::createTerrain().

00151                                           {
00152                 m_meshs->push_back(mesh);
00153         }

void pge::MeshModel::addMeshModel MeshModel model  ) 
 

Definition at line 161 of file MeshModel.cpp.

References getMeshs(), and m_meshs.

Referenced by main().

00161                                                      {
00162                 std::vector<Mesh*>::iterator it;
00163 
00164 
00165                 for(it = model->getMeshs()->begin(); it != model->getMeshs()->end(); it++) {
00166                         m_meshs->push_back(*it);
00167                 }
00168         }

Here is the call graph for this function:

void pge::MeshModel::buildBoundingBox void   ) 
 

Definition at line 210 of file MeshModel.cpp.

References pge::Mesh::getTriangles(), m_boundingBox, pge::AABB::m_maxX, pge::AABB::m_maxY, pge::AABB::m_maxZ, m_meshs, pge::AABB::m_minX, pge::AABB::m_minY, pge::AABB::m_minZ, pge::Vector3f::m_v, and pge::Triangle::m_vertices.

Referenced by init(), pge::DynamicCity::init(), pge::SGFMeshModel::SGFMeshModel(), and pge::Terrain::Terrain().

00210                                              {
00211                 //
00212                 // Variables
00213                 //
00214                 float minX;
00215                 float minY;
00216                 float minZ;
00217                 float maxX;
00218                 float maxY;
00219                 float maxZ;
00220                 int i;
00221                 Vector3f temp;
00222                 std::vector<Mesh*>::iterator meshIt;
00223                 std::vector<Triangle*>::iterator triangleIt;
00224 
00225 
00226                 // Set the start values to the first vertex in the first mesh, if it exists.
00227                 if(m_meshs->size() < 1) {
00228                         // TODO: Error?
00229                         return;
00230                 } else {
00231                         if(m_meshs->at(0)->getTriangles()->size() < 1) {
00232                                 return;
00233                         }
00234                 }
00235 
00236                 temp = m_meshs->at(0)->getTriangles()->at(0)->m_vertices[0];
00237                 minX = temp.m_v[0];
00238                 minY = temp.m_v[1];
00239                 minZ = temp.m_v[2];
00240                 maxX = temp.m_v[0];
00241                 maxY = temp.m_v[1];
00242                 maxZ = temp.m_v[2];
00243 
00244                 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) {
00245                         Mesh *mesh = *meshIt;
00246 
00247                         for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) {
00248                                 Triangle *t = *triangleIt;
00249 
00250                                 for(i = 0; i < 3; i++) {
00251                                         Vector3f v = t->m_vertices[i];
00252 
00253                                         // Min values.
00254                                         if (v.m_v[0] < minX) {
00255                                                 minX = v.m_v[0];
00256                                         }
00257                                         if (v.m_v[1] < minY) {
00258                                                 minY = v.m_v[1];
00259                                         }
00260                                         if (v.m_v[2] < minZ) {
00261                                                 minZ = v.m_v[2];
00262                                         }
00263 
00264                                         // Max values.
00265                                         if (v.m_v[0] > maxX) {
00266                                                 maxX = v.m_v[0];
00267                                         }
00268                                         if (v.m_v[1] > maxY) {
00269                                                 maxY = v.m_v[1];
00270                                         }
00271                                         if (v.m_v[2] > maxZ) {
00272                                                 maxZ = v.m_v[2];
00273                                         }
00274                                 }
00275                         }
00276                 }
00277 
00278                 if(m_boundingBox != NULL) {
00279                         m_boundingBox->m_minX = minX;
00280                         m_boundingBox->m_minY = minY;
00281                         m_boundingBox->m_minZ = minZ;
00282                         m_boundingBox->m_maxX = maxX;
00283                         m_boundingBox->m_maxY = maxY;
00284                         m_boundingBox->m_maxZ = maxZ;
00285                 } else {
00286                         m_boundingBox = new AABB(minX, minY, minZ, maxX, maxY, maxZ);
00287                 }
00288         }

Here is the call graph for this function:

void pge::MeshModel::clearMeshs void   ) 
 

Definition at line 176 of file MeshModel.cpp.

References m_meshs.

00176                                        {
00177                 m_meshs->clear();
00178         }

Vector3f pge::MeshModel::getBottomCenterDifference void   ) 
 

Definition at line 357 of file MeshModel.cpp.

References m_bottomCenterDifference.

Referenced by pge::sgfmeshmodelfactory::createSGFMeshModelWithLights().

00357                                                           {
00358                 return m_bottomCenterDifference;
00359         }

AABB * pge::MeshModel::getBoundingBox void   ) 
 

Definition at line 141 of file MeshModel.cpp.

References m_boundingBox.

Referenced by pge::Quadtree::init(), pge::Octree::init(), pge::DynamicCity::init(), and main().

00141                                             {
00142                 return m_boundingBox;
00143         }

float pge::MeshModel::getHeightAt float  posX,
float  posZ
 

Definition at line 186 of file MeshModel.cpp.

References pge::Mesh::getHeightAt(), pge::Mesh::isHeightQueryInside(), and m_meshs.

Referenced by addModels(), and main().

00186                                                            {
00187                 float height = 0.0f;
00188                 std::vector<Mesh*>::iterator it;
00189 
00190 
00191                 for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00192                         Mesh *mesh = *it;
00193 
00194                         if(mesh->isHeightQueryInside(posX, posZ)) {
00195 
00196                                 if(mesh->getHeightAt(posX, posZ, &height)) {
00197                                         return height;
00198                                 }
00199                         }
00200                 }
00201                 return 0.0f;
00202         }

Here is the call graph for this function:

int pge::MeshModel::getMeshNum void   ) 
 

Definition at line 131 of file MeshModel.cpp.

References m_meshs.

00131                                       {
00132                 return (int)m_meshs->size();
00133         }

std::vector< Mesh * > * pge::MeshModel::getMeshs void   ) 
 

Definition at line 103 of file MeshModel.cpp.

References m_meshs.

Referenced by addMeshModel(), pge::Quadtree::init(), and pge::Octree::init().

00103                                                   {
00104                 return m_meshs;
00105         }

int pge::MeshModel::getTriangleNum void   ) 
 

Definition at line 113 of file MeshModel.cpp.

References pge::Mesh::getTriangleNum(), and m_meshs.

00113                                           {
00114                 std::vector<Mesh*>::iterator it;
00115                 int num = 0;
00116 
00117 
00118                 for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00119                         Mesh *mesh = *it;
00120                         num += mesh->getTriangleNum();
00121                 }
00122                 return num;
00123         }

Here is the call graph for this function:

bool pge::MeshModel::init void   )  [virtual]
 

Implements pge::IRenderableObject.

Reimplemented in pge::DynamicCity.

Definition at line 52 of file MeshModel.cpp.

References buildBoundingBox(), pge::Mesh::init(), and m_meshs.

Referenced by pge::Quadtree::init(), and pge::Octree::init().

00052                                  {
00053                 std::vector<Mesh*>::iterator it;
00054 
00055                 buildBoundingBox();
00056 
00057                 for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00058                         Mesh *mesh = *it;
00059                         mesh->init();
00060                 }
00061 
00062                 return true;
00063         }

Here is the call graph for this function:

void pge::MeshModel::render void   )  [virtual]
 

Called when the object should render itself.

Implements pge::IRenderableObject.

Definition at line 71 of file MeshModel.cpp.

References m_meshs, and pge::Mesh::render().

00071                                    {
00072                 std::vector<Mesh*>::iterator it;
00073 
00074 
00075                 for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00076                         Mesh *mesh = *it;
00077                         mesh->render();
00078                 }
00079         }

Here is the call graph for this function:

void pge::MeshModel::scale float  f  ) 
 

Definition at line 296 of file MeshModel.cpp.

References pge::Mesh::getTriangles(), m_meshs, pge::Triangle::m_vertices, and pge::Vector3f::multiply().

Referenced by pge::SGFMeshModel::SGFMeshModel().

00296                                      {
00297                 std::vector<Mesh*>::iterator meshIt;
00298                 std::vector<Triangle*>::iterator triangleIt;
00299 
00300 
00301                 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) {
00302                         Mesh *mesh = *meshIt;
00303 
00304                         for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) {
00305                                 Triangle *t = *triangleIt;
00306 
00307                                 t->m_vertices[0] = t->m_vertices[0].multiply(s);
00308                                 t->m_vertices[1] = t->m_vertices[1].multiply(s);
00309                                 t->m_vertices[2] = t->m_vertices[2].multiply(s);
00310                         }
00311                 }
00312         }

Here is the call graph for this function:

void pge::MeshModel::setBottomCenter Vector3f  bottomCenter  ) 
 

Definition at line 320 of file MeshModel.cpp.

References pge::Vector3f::add(), pge::AABB::getBottomCenter(), pge::Mesh::getTriangles(), m_bottomCenterDifference, m_boundingBox, pge::AABB::m_maxX, pge::AABB::m_maxY, pge::AABB::m_maxZ, m_meshs, pge::AABB::m_minX, pge::AABB::m_minY, pge::AABB::m_minZ, pge::Triangle::m_vertices, and pge::Vector3f::subtract().

Referenced by pge::SGFMeshModel::SGFMeshModel().

00320                                                              {
00321                 Vector3f difference;
00322                 Vector3f center;
00323                 std::vector<Mesh*>::iterator meshIt;
00324                 std::vector<Triangle*>::iterator triangleIt;
00325 
00326 
00327                 center = m_boundingBox->getBottomCenter();
00328                 difference = bottomCenter.subtract(center);
00329                 m_bottomCenterDifference = difference;
00330 
00331                 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) {
00332                         Mesh *mesh = *meshIt;
00333 
00334                         for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) {
00335                                 Triangle *t = *triangleIt;
00336 
00337                                 t->m_vertices[0] = t->m_vertices[0].add(difference);
00338                                 t->m_vertices[1] = t->m_vertices[1].add(difference);
00339                                 t->m_vertices[2] = t->m_vertices[2].add(difference);
00340                         }
00341                 }
00342 
00343                 m_boundingBox->m_minX += difference.m_v[0];
00344                 m_boundingBox->m_minY += difference.m_v[1];
00345                 m_boundingBox->m_minZ += difference.m_v[2];
00346                 m_boundingBox->m_maxX += difference.m_v[0];
00347                 m_boundingBox->m_maxY += difference.m_v[1];
00348                 m_boundingBox->m_maxZ += difference.m_v[2];
00349         }

Here is the call graph for this function:

void pge::MeshModel::timer unsigned int  delay  )  [virtual]
 

Called when the timer event comes.

Implements pge::IRenderableObject.

Definition at line 87 of file MeshModel.cpp.

References m_meshs, and pge::Mesh::timer().

Referenced by pge::Octree::timer().

00087                                                 {
00088                 std::vector<Mesh*>::iterator it;
00089 
00090 
00091                 for(it = m_meshs->begin(); it != m_meshs->end(); it++) {
00092                         Mesh *mesh = *it;
00093                         mesh->timer(delay);
00094                 }
00095         }

Here is the call graph for this function:


Field Documentation

Vector3f pge::MeshModel::m_bottomCenterDifference [private]
 

Definition at line 81 of file MeshModel.h.

Referenced by getBottomCenterDifference(), and setBottomCenter().

AABB* pge::MeshModel::m_boundingBox [private]
 

Definition at line 80 of file MeshModel.h.

Referenced by buildBoundingBox(), getBoundingBox(), MeshModel(), setBottomCenter(), and ~MeshModel().

std::vector<Mesh*>* pge::MeshModel::m_meshs [private]
 

Definition at line 77 of file MeshModel.h.

Referenced by addMesh(), addMeshModel(), buildBoundingBox(), clearMeshs(), getHeightAt(), getMeshNum(), getMeshs(), getTriangleNum(), init(), MeshModel(), render(), scale(), setBottomCenter(), timer(), and ~MeshModel().


The documentation for this class was generated from the following files:
Generated on Mon Oct 16 12:09:20 2006 for Phobosengine by doxygen 1.3.4