From 12ef6913d52d068b8bc1298a0f7ea330909a3933 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Fri, 9 Nov 2018 10:31:58 +0100 Subject: [PATCH 1/2] ModelObject::instance_bounding_box() fixed to take in account for volumes' transforms --- src/libslic3r/Model.cpp | 18 +++++++++++++++--- src/libslic3r/Model.hpp | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 71b9dc4922..792b848129 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -787,7 +787,7 @@ BoundingBoxf3 ModelObject::raw_bounding_box() const if (v->is_model_part()) { if (this->instances.empty()) throw std::invalid_argument("Can't call raw_bounding_box() with no instances"); - bb.merge(this->instances.front()->transform_mesh_bounding_box(&v->mesh, true)); + bb.merge(this->instances.front()->transform_mesh_bounding_box(v->mesh, true)); } return bb; } @@ -796,9 +796,21 @@ BoundingBoxf3 ModelObject::raw_bounding_box() const BoundingBoxf3 ModelObject::instance_bounding_box(size_t instance_idx, bool dont_translate) const { BoundingBoxf3 bb; +#if ENABLE_MODELVOLUME_TRANSFORM + for (ModelVolume *v : this->volumes) + { + if (v->is_model_part()) + { + TriangleMesh mesh(v->mesh); + mesh.transform(v->get_matrix()); + bb.merge(this->instances[instance_idx]->transform_mesh_bounding_box(mesh, dont_translate)); + } + } +#else for (ModelVolume *v : this->volumes) if (v->is_model_part()) bb.merge(this->instances[instance_idx]->transform_mesh_bounding_box(&v->mesh, dont_translate)); +#endif // ENABLE_MODELVOLUME_TRANSFORM return bb; } @@ -1368,10 +1380,10 @@ void ModelInstance::transform_mesh(TriangleMesh* mesh, bool dont_translate) cons mesh->transform(get_matrix(dont_translate)); } -BoundingBoxf3 ModelInstance::transform_mesh_bounding_box(const TriangleMesh* mesh, bool dont_translate) const +BoundingBoxf3 ModelInstance::transform_mesh_bounding_box(const TriangleMesh& mesh, bool dont_translate) const { // Rotate around mesh origin. - TriangleMesh copy(*mesh); + TriangleMesh copy(mesh); copy.transform(get_matrix(true, false, true, true)); BoundingBoxf3 bbox = copy.bounding_box(); diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 4da4d1542a..f1b7dc15ae 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -516,7 +516,7 @@ public: // To be called on an external mesh void transform_mesh(TriangleMesh* mesh, bool dont_translate = false) const; // Calculate a bounding box of a transformed mesh. To be called on an external mesh. - BoundingBoxf3 transform_mesh_bounding_box(const TriangleMesh* mesh, bool dont_translate = false) const; + BoundingBoxf3 transform_mesh_bounding_box(const TriangleMesh& mesh, bool dont_translate = false) const; // Transform an external bounding box. BoundingBoxf3 transform_bounding_box(const BoundingBoxf3 &bbox, bool dont_translate = false) const; // Transform an external vector. From f2d1153d8fc50ef7d15a1f1956abfc91e0ecd626 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Fri, 9 Nov 2018 10:37:50 +0100 Subject: [PATCH 2/2] Removed unneeded auto-arrange from Plater::priv::load_model_objects() --- src/slic3r/GUI/Plater.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 99821a351d..2f26d0d49e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1292,11 +1292,6 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs &mode // print.add_model_object(object); } - // if user turned autocentering off, automatic arranging would disappoint them - if (get_config("autocenter") != "1") { - need_arrange = false; - } - if (scaled_down) { GUI::show_info(q, _(L("Your object appears to be too large, so it was automatically scaled down to fit your print bed.")), @@ -1307,10 +1302,6 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs &mode wxGetApp().obj_list()->add_object_to_list(idx); } - if (need_arrange) { - // arrange(); // TODO - } - update(); #if !ENABLE_MODIFIED_CAMERA_TARGET _3DScene::zoom_to_volumes(canvas3D);