20 #ifndef _TRIANGLEITERATOR_HPP_
21 #define _TRIANGLEITERATOR_HPP_
26 #include "renderer/StelVertexBuffer.hpp"
51 , primitiveType(primitiveType)
54 Q_ASSERT_X(vertices.size() != 1 && vertices.size() != 2, Q_FUNC_INFO,
55 "A vertex array containing triangles of any primitive type must not "
56 "have 1 or 2 vertices");
59 case PrimitiveType_Triangles:
60 Q_ASSERT_X(vertices.size() % 3 == 0, Q_FUNC_INFO,
61 "Size of a vertex array of triangles must be divisible by 3");
64 case PrimitiveType_TriangleStrip:
67 case PrimitiveType_TriangleFan:
71 Q_ASSERT_X(
false, Q_FUNC_INFO,
"Not a triangle primitive type");
83 bool next(V& a, V& b, V& c)
85 Q_ASSERT_X(currentVertex > 0, Q_FUNC_INFO,
"Current vertex is negative");
86 Q_ASSERT_X(currentVertex <= vertices.size(), Q_FUNC_INFO,
87 "Iterating outside the vertex array");
88 if(currentVertex == vertices.size()){
return false;}
92 case PrimitiveType_Triangles:
93 a = vertices[currentVertex++];
94 b = vertices[currentVertex++];
95 c = vertices[currentVertex++];
97 case PrimitiveType_TriangleStrip:
98 if(currentVertex % 2 == 0)
100 a = vertices[currentVertex - 2];
101 b = vertices[currentVertex - 1];
105 a = vertices[currentVertex - 1];
106 b = vertices[currentVertex - 2];
108 c = vertices[currentVertex];
111 case PrimitiveType_TriangleFan:
113 b = vertices[currentVertex];
114 c = vertices[currentVertex + 1];
118 Q_ASSERT_X(
false, Q_FUNC_INFO,
"Not a triangle primitive type");
126 const QVector<V>& vertices;
129 const PrimitiveType primitiveType;
135 #endif // _TRIANGLEITERATOR_HPP_