Remove text configuration for splited volumes
Sort splitted volumes
This commit is contained in:
parent
f961fe8c2f
commit
af3984b356
@ -1641,6 +1641,34 @@ ModelObjectPtrs ModelObject::cut(size_t instance, const Transform3d& cut_matrix,
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compare TriangleMeshes by Bounding boxes (mainly for sort)
|
||||
/// From Front(Z) Upper(Y) TopLeft(X) corner.
|
||||
/// 1. Seraparate group not overlaped i Z axis
|
||||
/// 2. Seraparate group not overlaped i Y axis
|
||||
/// 3. Start earlier in X (More on left side)
|
||||
/// </summary>
|
||||
/// <param name="triangle_mesh1">Compare from</param>
|
||||
/// <param name="triangle_mesh2">Compare to</param>
|
||||
/// <returns>True when triangle mesh 1 is closer, upper or lefter than triangle mesh 2 other wise false</returns>
|
||||
static bool is_front_up_left(const TriangleMesh &trinagle_mesh1, const TriangleMesh &triangle_mesh2)
|
||||
{
|
||||
// stats form t1
|
||||
const Vec3f &min1 = trinagle_mesh1.stats().min;
|
||||
const Vec3f &max1 = trinagle_mesh1.stats().max;
|
||||
// stats from t2
|
||||
const Vec3f &min2 = triangle_mesh2.stats().min;
|
||||
const Vec3f &max2 = triangle_mesh2.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();
|
||||
}
|
||||
|
||||
void ModelObject::split(ModelObjectPtrs* new_objects)
|
||||
{
|
||||
for (ModelVolume* volume : this->volumes) {
|
||||
@ -1652,25 +1680,7 @@ void ModelObject::split(ModelObjectPtrs* new_objects)
|
||||
volume->text_configuration.reset();
|
||||
|
||||
std::vector<TriangleMesh> 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);
|
||||
std::sort(meshes.begin(), meshes.end(), is_front_up_left);
|
||||
|
||||
size_t counter = 1;
|
||||
for (TriangleMesh &mesh : meshes) {
|
||||
@ -2155,9 +2165,15 @@ size_t ModelVolume::split(unsigned int max_extruders)
|
||||
if (meshes.size() <= 1)
|
||||
return 1;
|
||||
|
||||
std::sort(meshes.begin(), meshes.end(), is_front_up_left);
|
||||
|
||||
// splited volume should not be text object
|
||||
if (text_configuration.has_value())
|
||||
text_configuration.reset();
|
||||
|
||||
size_t idx = 0;
|
||||
size_t ivolume = std::find(this->object->volumes.begin(), this->object->volumes.end(), this) - this->object->volumes.begin();
|
||||
const std::string name = this->name;
|
||||
const std::string& name = this->name;
|
||||
|
||||
unsigned int extruder_counter = 0;
|
||||
const Vec3d offset = this->get_offset();
|
||||
|
Loading…
Reference in New Issue
Block a user