diff options
author | Enrico Turri <enricoturri@seznam.cz> | 2018-03-06 12:26:39 +0300 |
---|---|---|
committer | Enrico Turri <enricoturri@seznam.cz> | 2018-03-06 12:26:39 +0300 |
commit | 9f7607c064b9473a9599f9d01947a0d52db03d95 (patch) | |
tree | 68ae31dea0efa8ec691b84ce668daf9f891e10a6 | |
parent | 7320a87183bf8849b75cbbf7fff0c26b19b44e5f (diff) |
3mf I/O - Fixed object sinking into bed after import
-rw-r--r-- | xs/src/libslic3r/Format/3mf.cpp | 3 | ||||
-rw-r--r-- | xs/src/libslic3r/Model.cpp | 24 | ||||
-rw-r--r-- | xs/src/libslic3r/Model.hpp | 3 |
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(); } }; |