From a9223aeb5f803736b0c94b2ebbb466ae79e69399 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Fri, 5 Apr 2019 10:08:34 +0200 Subject: [PATCH] Follow-up of 763a91e2ca73a2a9189ea47bbdcb80089e3262b8 -> take in account of ModelObject::origin_translation when saving parts and modifiers to stl --- src/libslic3r/TriangleMesh.cpp | 5 +++++ src/libslic3r/TriangleMesh.hpp | 1 + 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()); } } - 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));