Saga3D API Documentation  1.0-RC4
SMesh.h
Go to the documentation of this file.
1 #ifndef __SMESH_H_INCLUDED__
2 #define __SMESH_H_INCLUDED__
3 
4 #include "IMesh.h"
5 #include "IMeshBuffer.h"
6 #include "aabbox3d.h"
7 
8 namespace saga
9 {
10 namespace scene
11 {
13  struct SMesh : public IMesh
14  {
17  {
18 
19  }
20 
22  virtual ~SMesh()
23  {
24  MeshBuffers.clear();
25  }
26 
27  virtual E_MESH_TYPE getMeshType() const override { return E_MESH_TYPE::STATIC; }
28 
30  virtual void clear()
31  {
32  MeshBuffers.clear();
33  BoundingBox.reset (0.f, 0.f, 0.f);
34  }
35 
37  virtual std::uint32_t getMeshBufferCount() const override
38  {
39  return MeshBuffers.size();
40  }
41 
43  virtual IMeshBuffer& getMeshBuffer(std::uint32_t nr = 0) override
44  {
45  return *MeshBuffers[nr];
46  }
47 
49  virtual const core::aabbox3d<float>& getBoundingBox() const override
50  {
51  return BoundingBox;
52  }
53 
55  virtual void setBoundingBox(const core::aabbox3df& box) override
56  {
57  BoundingBox = box;
58  }
59 
62  {
63  bool hasMeshBufferBBox = false;
64  for (std::uint32_t i = 0; i < MeshBuffers.size(); ++i)
65  {
66  const core::aabbox3df& bb = MeshBuffers[i]->getBoundingBox();
67  if (!bb.isEmpty())
68  {
69  if (!hasMeshBufferBBox)
70  {
71  hasMeshBufferBBox = true;
72  BoundingBox = bb;
73  }
74  else
75  {
77  }
78 
79  }
80  }
81 
82  if (!hasMeshBufferBBox)
83  BoundingBox.reset(0.0f, 0.0f, 0.0f);
84  }
85 
87 
88  virtual void addMeshBuffer(std::unique_ptr<IMeshBuffer> buf) override
89  {
90  if (buf)
91  {
92  MeshBuffers.push_back(std::move(buf));
93  }
94  }
95 
97  std::vector<std::unique_ptr<IMeshBuffer>> MeshBuffers;
98 
101 
104  };
105 
106 
107 } // namespace scene
108 } // namespace saga
109 
110 #endif
111 
saga::scene::SMesh::getBoundingBox
virtual const core::aabbox3d< float > & getBoundingBox() const override
returns an axis aligned bounding box
Definition: SMesh.h:49
saga::scene::IMesh
Class which holds the geometry of an object.
Definition: IMesh.h:27
saga::scene::SMesh::addMeshBuffer
virtual void addMeshBuffer(std::unique_ptr< IMeshBuffer > buf) override
adds a MeshBuffer
Definition: SMesh.h:88
saga::scene::SMesh::setBoundingBox
virtual void setBoundingBox(const core::aabbox3df &box) override
set user axis aligned bounding box
Definition: SMesh.h:55
saga::scene::SMesh::MeshBuffers
std::vector< std::unique_ptr< IMeshBuffer > > MeshBuffers
The meshbuffers of this mesh.
Definition: SMesh.h:97
saga::scene::SMesh::BoundingBox
core::aabbox3d< float > BoundingBox
The bounding box of this mesh.
Definition: SMesh.h:103
saga::scene::IMeshBuffer
Struct for holding a mesh with a single material.
Definition: IMeshBuffer.h:43
aabbox3d.h
saga::scene::SMesh::getMeshBuffer
virtual IMeshBuffer & getMeshBuffer(std::uint32_t nr=0) override
returns pointer to a mesh buffer
Definition: SMesh.h:43
saga::core::aabbox3d::isEmpty
bool isEmpty() const
Check if the box is empty.
Definition: aabbox3d.h:128
saga::scene::SMesh::recalculateBoundingBox
void recalculateBoundingBox()
recalculates the bounding box
Definition: SMesh.h:61
saga::video::ShaderBufferHandle
SGPUResource::HandleType ShaderBufferHandle
Definition: SShaderBuffer.h:23
saga::core::aabbox3d< float >
saga::scene::STATIC
@ STATIC
Definition: IMesh.h:17
saga::core::aabbox3d::reset
void reset(T x, T y, T z)
Resets the bounding box to a one-point box.
Definition: aabbox3d.h:49
saga::scene::SMesh::getMeshType
virtual E_MESH_TYPE getMeshType() const override
Definition: SMesh.h:27
saga::scene::SMesh::SMesh
SMesh()
constructor
Definition: SMesh.h:16
saga::scene::SMesh::getMeshBufferCount
virtual std::uint32_t getMeshBufferCount() const override
returns amount of mesh buffers.
Definition: SMesh.h:37
saga::core::aabbox3d::addInternalBox
void addInternalBox(const aabbox3d< T > &b)
Adds another bounding box.
Definition: aabbox3d.h:81
saga::scene::SMesh::~SMesh
virtual ~SMesh()
destructor
Definition: SMesh.h:22
IMeshBuffer.h
saga::scene::SMesh::clear
virtual void clear()
clean mesh
Definition: SMesh.h:30
saga::scene::SMesh::GPUMeshBuffer
video::ShaderBufferHandle GPUMeshBuffer
GPU mesh buffer.
Definition: SMesh.h:100
saga::scene::SMesh
Simple implementation of the IMesh interface.
Definition: SMesh.h:13
IMesh.h
saga::scene::E_MESH_TYPE
E_MESH_TYPE
Definition: IMesh.h:15
saga
Definition: aabbox3d.h:11