diff options
author | Enrico Turri <enricoturri@seznam.cz> | 2019-04-05 11:08:34 +0300 |
---|---|---|
committer | Enrico Turri <enricoturri@seznam.cz> | 2019-04-05 11:08:34 +0300 |
commit | a9223aeb5f803736b0c94b2ebbb466ae79e69399 (patch) | |
tree | d64be72a9a3b249d8ee7da8fbed99f9767c85053 /src | |
parent | 88059baddba34fafd9952775491732192999fb3d (diff) |
Follow-up of 763a91e2ca73a2a9189ea47bbdcb80089e3262b8 -> take in account of ModelObject::origin_translation when saving parts and modifiers to stl
Diffstat (limited to 'src')
-rw-r--r-- | src/libslic3r/TriangleMesh.cpp | 5 | ||||
-rw-r--r-- | src/libslic3r/TriangleMesh.hpp | 1 | ||||
-rw-r--r-- | src/slic3r/GUI/Plater.cpp | 9 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 0d9a79978..bfba364af 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -273,6 +273,11 @@ void TriangleMesh::translate(float x, float y, float z) stl_invalidate_shared_vertices(&this->stl); } +void TriangleMesh::translate(const Vec3f &displacement) +{ + translate(displacement(0), displacement(1), displacement(2)); +} + void TriangleMesh::rotate(float angle, const Axis &axis) { if (angle == 0.f) diff --git a/src/libslic3r/TriangleMesh.hpp b/src/libslic3r/TriangleMesh.hpp index 527846f9d..d389500c6 100644 --- a/src/libslic3r/TriangleMesh.hpp +++ b/src/libslic3r/TriangleMesh.hpp @@ -40,6 +40,7 @@ public: void scale(float factor); void scale(const Vec3d &versor); void translate(float x, float y, float z); + void translate(const Vec3f &displacement); void rotate(float angle, const Axis &axis); void rotate(float angle, const Vec3d& axis); void rotate_x(float angle) { this->rotate(angle, X); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index c3352866a..ec2e88f84 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3380,18 +3380,19 @@ void Plater::export_stl(bool selection_only) const auto obj_idx = selection.get_object_idx(); if (obj_idx == -1) { return; } + const ModelObject* model_object = p->model.objects[obj_idx]; if (selection.get_mode() == Selection::Instance) - mesh = p->model.objects[obj_idx]->mesh(); + mesh = model_object->mesh(); else { const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); - mesh = p->model.objects[obj_idx]->volumes[volume->volume_idx()]->mesh; + mesh = model_object->volumes[volume->volume_idx()]->mesh; mesh.transform(volume->get_volume_transformation().get_matrix()); + mesh.translate(-model_object->origin_translation.cast<float>()); } } - else { + else mesh = p->model.mesh(); - } Slic3r::store_stl(path_u8.c_str(), &mesh, true); p->statusbar()->set_status_text(wxString::Format(_(L("STL file exported to %s")), path)); |