From 02b39d72826a79e54686ce65f05aa5406d62e96d Mon Sep 17 00:00:00 2001 From: Filip Sykala - NTB T15p Date: Wed, 11 Jan 2023 11:33:44 +0100 Subject: [PATCH] Text volume after spliting become common volume Add sort of splitted object --- src/libslic3r/Model.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 76668d0d2b..b4e82c7d51 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1647,7 +1647,31 @@ void ModelObject::split(ModelObjectPtrs* new_objects) if (volume->type() != ModelVolumeType::MODEL_PART) continue; + // splited volume should not be text object + if (volume->text_configuration.has_value()) + volume->text_configuration.reset(); + std::vector meshes = volume->mesh().split(); + + // sort splitted meshes by Z, Y and X + auto sort_fnc = [](const TriangleMesh &t1, const TriangleMesh &t2)->bool { + // stats form t1 + const Vec3f &min1 = t1.stats().min; + const Vec3f &max1 = t1.stats().max; + // stats from t2 + const Vec3f &min2 = t2.stats().min; + const Vec3f &max2 = t2.stats().max; + // priority Z, Y, X + for (int axe = 2; axe >= 0; --axe) { + if (max1[axe] < min2[axe]) + return true; + if (min1[axe] > max2[axe]) + return false; + } + return min1.x() < min2.x(); + }; + std::sort(meshes.begin(), meshes.end(), sort_fnc); + size_t counter = 1; for (TriangleMesh &mesh : meshes) { // FIXME: crashes if not satisfied