diff --git a/src/ifcconvert/ColladaSerializer.cpp b/src/ifcconvert/ColladaSerializer.cpp index c47c48eea7..d67bc04044 100644 --- a/src/ifcconvert/ColladaSerializer.cpp +++ b/src/ifcconvert/ColladaSerializer.cpp @@ -352,6 +352,7 @@ void ColladaSerializer::ColladaExporter::endDocument() { // only at this point all objects are written to the stream. materials.write(); std::set geometries_written; + std::sort(deferreds.begin(), deferreds.end()); for (std::vector::const_iterator it = deferreds.begin(); it != deferreds.end(); ++it) { if (geometries_written.find(it->representation_id) != geometries_written.end()) { continue; diff --git a/src/ifcconvert/ColladaSerializer.h b/src/ifcconvert/ColladaSerializer.h index 86142a4722..9ef049ed79 100644 --- a/src/ifcconvert/ColladaSerializer.h +++ b/src/ifcconvert/ColladaSerializer.h @@ -121,6 +121,10 @@ private: ColladaEffects effects; }; class DeferredObject { + friend bool operator < (const DeferredObject & def_obj1, const DeferredObject & def_obj2) + { + return (def_obj1.parent < def_obj2.parent ? true : false); + } public: std::string unique_id, representation_id, type; std::vector matrix;