From 614148e5e4c178307bc50b00aabeffb3d1c50be3 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 18 Mar 2016 11:18:02 +0100 Subject: [PATCH] Don't iterate past material indices in collada serializer --- src/ifcconvert/ColladaSerializer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ifcconvert/ColladaSerializer.cpp b/src/ifcconvert/ColladaSerializer.cpp index bf3e65b2ca..042eb1647d 100644 --- a/src/ifcconvert/ColladaSerializer.cpp +++ b/src/ifcconvert/ColladaSerializer.cpp @@ -72,7 +72,14 @@ void ColladaSerializer::ColladaExporter::ColladaGeometries::write(const std::str std::vector::const_iterator material_it = material_ids.begin(); int previous_material_id = -1; for (std::vector::const_iterator it = faces.begin(); !faces.empty(); it += 3) { - const int current_material_id = *(material_it++); + + int current_material_id = 0; + if (material_it != material_ids.end()) { + // In order for the last range of equal material ids to be output as well, this loop iterates + // one element past the end of the vector. This needs to be observed when incrementing. + current_material_id = *(material_it++); + } + const unsigned long num_triangles = (unsigned long)std::distance(index_range_start, it) / 3; if ((previous_material_id != current_material_id && num_triangles > 0) || (it == faces.end())) { COLLADASW::Triangles triangles(mSW);