source: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCSubEntity.cpp @ 751

Revision 751, 4.6 KB checked in by igarcia, 18 years ago (diff)
Line 
1
2#include "BBCSubEntity.h"
3
4namespace BBC {
5
6SubEntity::SubEntity(): references(0) // initialize references to 0
7{
8        mHasTangents = false;
9        mHasVertexColours = false;
10        mHasNormals = true;
11        mHasTextureCoords = true;
12}
13
14SubEntity::~SubEntity()
15{
16        mUniqueVertexList.clear();
17        mIndices.clear();
18        mTextureCoordSetsDimensions.clear();
19
20}
21
22void SubEntity::setPosition(unsigned int index, Ogre::Vector3 value)
23{
24        mUniqueVertexList[index].position = value;
25}
26
27Ogre::Vector3 SubEntity::getPosition(unsigned int index)
28{
29        return mUniqueVertexList[index].position;
30}
31
32void SubEntity::setNormal(unsigned int index, Ogre::Vector3 value)
33{
34        mUniqueVertexList[index].normal = value;
35}
36
37Ogre::Vector3 SubEntity::getNormal(unsigned int index)
38{
39        return mUniqueVertexList[index].normal;
40}
41
42void SubEntity::setTexCoord(unsigned int index, unsigned int set, Ogre::Vector3 value)
43{
44        mUniqueVertexList[index].uv[set] = value;
45}
46
47Ogre::Vector3 SubEntity::getTexCoord(unsigned int index, unsigned int set, unsigned int value)
48{
49        return mUniqueVertexList[index].uv[set];
50}
51
52void SubEntity::addFaceVerticesIDs(Ogre::Vector3 value)
53{
54        mIndices.push_back(value);
55}
56
57void SubEntity::removeFaceVerticesIDs(unsigned int value)
58{
59        mIndices.erase(mIndices.begin()+value);
60}
61
62Ogre::Vector3 SubEntity::getFaceVerticesIDs(unsigned int value)
63{
64        return mIndices[value];
65}
66
67void SubEntity::enableTangents(bool value)
68{
69        mHasTangents = value;
70}
71
72bool SubEntity::hasTangents()
73{
74        return mHasTangents;
75}
76
77void SubEntity::enableNormals(bool value)
78{
79        mHasNormals = value;
80}
81
82bool SubEntity::hasNormals()
83{
84        return mHasNormals;
85}
86
87void SubEntity::enableTextureCoords(bool value)
88{
89        mHasTextureCoords = value;
90}
91
92void SubEntity::addTextureCoordSet(unsigned int numTexCoords)
93{
94        mTextureCoordSetsDimensions.push_back(numTexCoords);
95        enableTextureCoords(true);
96}
97
98
99unsigned int SubEntity::getNumTexCoordSets()
100{
101        return static_cast<unsigned int>(mTextureCoordSetsDimensions.size());
102}
103
104unsigned int SubEntity::getNumTexCoords()
105{
106        return static_cast<unsigned int>(mUniqueVertexList.size());
107}
108
109unsigned int SubEntity::getTexCoordDimensions(unsigned int set)
110{
111        return mTextureCoordSetsDimensions[set];
112}
113
114void SubEntity::enableVertexColours(bool value)
115{
116        mHasVertexColours = value;
117}
118
119bool SubEntity::hasVertexColours()
120{
121        return mHasVertexColours;
122}
123
124void SubEntity::setVertexColour(unsigned int index, Ogre::RGBA value)
125{
126        mUniqueVertexList[index].colour = value;
127}
128
129Ogre::RGBA SubEntity::getVertexColour(unsigned int index)
130{
131        return mUniqueVertexList[index].colour;
132}
133
134unsigned int SubEntity::getNumFaces()
135{
136        return static_cast<unsigned int>(mIndices.size());
137}
138
139unsigned int SubEntity::getNumVertices()
140{
141        return static_cast<unsigned int>(mUniqueVertexList.size());
142}
143
144Ogre::String SubEntity::getName()
145{
146        return mName;
147}
148
149void SubEntity::setName(Ogre::String value)
150{
151        mName = value;
152}
153
154Ogre::String SubEntity::getMaterialName()
155{
156        return mMaterialName;
157}
158
159void SubEntity::setMaterialName(Ogre::String value)
160{
161        mMaterialName = value;
162}
163
164
165UniqueVertexList* SubEntity::getUniqueVertices()
166{
167        return &mUniqueVertexList;
168}
169
170void SubEntity::addUniqueVertex(UniqueVertex uniqueVertex)
171{
172        mUniqueVertexList.push_back(uniqueVertex);
173}
174
175void SubEntity::removeUniqueVertex(unsigned int index)
176{
177        mUniqueVertexList.erase(mUniqueVertexList.begin() + index);
178}
179
180UniqueVertex SubEntity::getUniqueVertex(unsigned int index)
181{
182        return mUniqueVertexList[index];
183}
184
185const Ogre::AxisAlignedBox &SubEntity::getAABBox()
186{
187        return mAABBox;
188}
189
190void SubEntity::setAABBox(Ogre::AxisAlignedBox box)
191{
192        mAABBox = box;
193}
194
195void SubEntity::generateAABBox()
196{
197        // Bounds calculation
198        Ogre::Real squaredRadius = 0.0f;
199    Ogre::Vector3 min, max;
200    bool first = true;
201
202        for (size_t jVertex = 0; jVertex < this->getNumVertices(); jVertex++)
203        {
204                if (first)
205                {
206                        squaredRadius = this->getUniqueVertex(jVertex).position.squaredLength();
207                        min = max = this->getUniqueVertex(jVertex).position;
208                        first = false;
209                }
210                else
211                {
212                        size_t numVertices = (unsigned int)this->getNumVertices();
213                        //Ogre::LogManager::getSingleton().logMessage("NumVertices:" + Ogre::StringConverter::toString(numVertices));
214                        //Ogre::LogManager::getSingleton().logMessage("IDVertex:" + Ogre::StringConverter::toString(jVertex) + "--" + Ogre::StringConverter::toString(iSubEntity) + "--" + Ogre::StringConverter::toString(mEntity->getSubEntity(iSubEntity)->getUniqueVertex(jVertex).position));
215                        squaredRadius =
216                                std::max(squaredRadius,this->getUniqueVertex(jVertex).position.squaredLength());
217                        min.makeFloor(this->getUniqueVertex(jVertex).position);
218                        max.makeCeil(this->getUniqueVertex(jVertex).position);
219                }
220        }
221
222        // Merge bounds
223        mAABBox.setExtents(min, max);
224}
225
226}
Note: See TracBrowser for help on using the repository browser.