2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of COLLADAFramework.
6
Licensed under the MIT Open Source License,
7
for details please see LICENSE file or the website
8
http://www.opensource.org/licenses/mit-license.php
11
#include "COLLADAFWStableHeaders.h"
12
#include "COLLADAFWMeshPrimitive.h"
13
#include "COLLADAFWPolygons.h"
14
#include "COLLADAFWPolylist.h"
15
#include "COLLADAFWMeshPrimitiveWithFaceVertexCount.h"
16
#include "COLLADAFWTrifans.h"
17
#include "COLLADAFWTristrips.h"
18
#include "COLLADAFWLinestrips.h"
26
//-----------------------------
27
MeshPrimitive::MeshPrimitive ( const UniqueId& uniqueId )
28
: ObjectTemplate<COLLADA_TYPE::PRIMITIVE_ELEMENT>(uniqueId)
29
, mPrimitiveType ( UNDEFINED_PRIMITIVE_TYPE )
32
, mPositionIndices(UIntValuesArray::OWNER)
33
, mNormalIndices(UIntValuesArray::OWNER)
34
, mColorIndicesArray(UIntValuesArray::OWNER)
35
, mUVCoordIndicesArray(UIntValuesArray::OWNER)
39
//-----------------------------
40
MeshPrimitive::MeshPrimitive( const UniqueId& uniqueId, PrimitiveType primitiveType )
41
: ObjectTemplate<COLLADA_TYPE::PRIMITIVE_ELEMENT>(uniqueId)
42
, mPrimitiveType ( primitiveType )
45
, mPositionIndices(UIntValuesArray::OWNER)
46
, mNormalIndices(UIntValuesArray::OWNER)
47
, mColorIndicesArray(UIntValuesArray::OWNER)
48
, mUVCoordIndicesArray(UIntValuesArray::OWNER)
52
//-----------------------------
53
MeshPrimitive::~MeshPrimitive()
55
for ( size_t i = 0, count = mUVCoordIndicesArray.getCount(); i< count; ++i)
57
FW_DELETE mUVCoordIndicesArray[i];
60
for ( size_t i = 0, count = mColorIndicesArray.getCount(); i< count; ++i)
62
FW_DELETE mColorIndicesArray[i];
66
//-----------------------------
67
const int MeshPrimitive::getGroupedVerticesVertexCount( const size_t faceIndex ) const
69
switch ( mPrimitiveType )
75
return ((Trifans*)this)->getGroupedVerticesVertexCount ( faceIndex );
78
return ((Tristrips*)this)->getGroupedVerticesVertexCount ( faceIndex );
87
return ((Linestrips*)this)->getGroupedVerticesVertexCount ( faceIndex );
90
return ((Polygons*)this)->getGroupedVerticesVertexCount ( faceIndex );
93
return ((Polylist*)this)->getGroupedVerticesVertexCount ( faceIndex );
96
std::cerr << "Unknown primitive type: " << mPrimitiveType << std::endl;
101
//-----------------------------
102
const size_t MeshPrimitive::getGroupedVertexElementsCount () const
104
// Get the number of grouped vertex elements (faces, holes, tristrips or trifans).
105
size_t groupedVertexElementsCount = 0;
107
MeshPrimitive::PrimitiveType primitiveType = this->getPrimitiveType ();
108
switch ( primitiveType )
110
case MeshPrimitive::TRIANGLES:
112
groupedVertexElementsCount = this->getFaceCount ();
115
case MeshPrimitive::TRIANGLE_FANS:
117
Trifans* trifans = (Trifans*) this;
118
groupedVertexElementsCount = trifans->getTrifanCount ();
121
case MeshPrimitive::TRIANGLE_STRIPS:
123
Tristrips* tristrips = (Tristrips*) this;
124
groupedVertexElementsCount = tristrips->getTristripCount ();
127
case MeshPrimitive::POLYGONS:
129
Polygons* polygons = (Polygons*) this;
130
Polygons::VertexCountArray& vertexCountArray =
131
polygons->getGroupedVerticesVertexCountArray ();
132
groupedVertexElementsCount = vertexCountArray.getCount ();
135
case MeshPrimitive::POLYLIST:
137
Polylist* polylist = (Polylist*) this;
138
Polylist::VertexCountArray& vertexCountArray =
139
polylist->getGroupedVerticesVertexCountArray ();
140
groupedVertexElementsCount = vertexCountArray.getCount ();
143
case MeshPrimitive::LINES:
145
groupedVertexElementsCount = this->getFaceCount ();
149
case MeshPrimitive::LINE_STRIPS:
151
Linestrips* linestrips = (Linestrips*)this;
152
groupedVertexElementsCount = linestrips->getLinestripCount ();
157
std::cerr << "Primitive type not supported: " << primitiveType << std::endl;
158
COLLADABU_ASSERT ( "Primitive type not supported: " + primitiveType );
162
return groupedVertexElementsCount;