Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Turri <enricoturri@seznam.cz>2018-03-06 12:26:39 +0300
committerEnrico Turri <enricoturri@seznam.cz>2018-03-06 12:26:39 +0300
commit9f7607c064b9473a9599f9d01947a0d52db03d95 (patch)
tree68ae31dea0efa8ec691b84ce668daf9f891e10a6
parent7320a87183bf8849b75cbbf7fff0c26b19b44e5f (diff)
3mf I/O - Fixed object sinking into bed after import
-rw-r--r--xs/src/libslic3r/Format/3mf.cpp3
-rw-r--r--xs/src/libslic3r/Model.cpp24
-rw-r--r--xs/src/libslic3r/Model.hpp3
3 files changed, 29 insertions, 1 deletions
diff --git a/xs/src/libslic3r/Format/3mf.cpp b/xs/src/libslic3r/Format/3mf.cpp
index b92d969df..b34b8989e 100644
--- a/xs/src/libslic3r/Format/3mf.cpp
+++ b/xs/src/libslic3r/Format/3mf.cpp
@@ -572,6 +572,9 @@ namespace Slic3r {
}
}
+ // fixes the min z of the model if negative
+ model.adjust_min_z();
+
return true;
}
diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp
index 1de99bbf8..f394e553c 100644
--- a/xs/src/libslic3r/Model.cpp
+++ b/xs/src/libslic3r/Model.cpp
@@ -409,6 +409,25 @@ void Model::convert_multipart_object()
this->objects.push_back(object);
}
+void Model::adjust_min_z()
+{
+ if (objects.empty())
+ return;
+
+ if (bounding_box().min.z < 0.0)
+ {
+ for (ModelObject* obj : objects)
+ {
+ if (obj != nullptr)
+ {
+ coordf_t obj_min_z = obj->bounding_box().min.z;
+ if (obj_min_z < 0.0)
+ obj->translate(0.0, 0.0, -obj_min_z);
+ }
+ }
+ }
+}
+
ModelObject::ModelObject(Model *model, const ModelObject &other, bool copy_volumes) :
name(other.name),
input_file(other.input_file),
@@ -671,7 +690,10 @@ void ModelObject::transform(const float* matrix3x4)
v->mesh.transform(matrix3x4);
}
- origin_translation = Pointf3(0.0f, 0.0f, 0.0f);
+//#####################################################################################################
+ origin_translation = Pointf3(0.0, 0.0, 0.0);
+// origin_translation = Pointf3(0.0f, 0.0f, 0.0f);
+//#####################################################################################################
invalidate_bounding_box();
}
diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp
index cf9bfd85a..d3faf38ef 100644
--- a/xs/src/libslic3r/Model.hpp
+++ b/xs/src/libslic3r/Model.hpp
@@ -273,6 +273,9 @@ public:
bool looks_like_multipart_object() const;
void convert_multipart_object();
+ // Ensures that the min z of the model is not negative
+ void adjust_min_z();
+
void print_info() const { for (const ModelObject *o : this->objects) o->print_info(); }
};