From 7c834de6abe7ce00ac113b63301b7a8845559a6d Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Tue, 10 Jan 2023 09:42:53 +0100 Subject: [PATCH] Fix crash when selecting an object issue no. 11 --- src/slic3r/GUI/GLCanvas3D.cpp | 13 +++++++++++++ src/slic3r/GUI/GLCanvas3D.hpp | 2 ++ src/slic3r/GUI/Selection.cpp | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 419e5fbc96..fa94e6abf8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -7055,5 +7055,18 @@ void GLCanvas3D::GizmoHighlighter::blink() invalidate(); } +const ModelVolume *get_model_volume(const GLVolume &v, const Model &model) +{ + const ModelVolume * ret = nullptr; + + if (model.objects.size() < v.object_idx()) { + const ModelObject *obj = model.objects[v.object_idx()]; + if (obj->volumes.size() < v.volume_idx()) + ret = obj->volumes[v.volume_idx()]; + } + + return ret; +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 7b5a1084c1..198ecb1d81 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1046,6 +1046,8 @@ private: float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); } }; +const ModelVolume * get_model_volume(const GLVolume &v, const Model &model); + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index a70698b438..42331f3a70 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1974,8 +1974,8 @@ std::vector Selection::get_volume_idxs_from_instance(unsigned int for (unsigned int i = 0; i < (unsigned int)m_volumes->size(); ++i) { const GLVolume* v = (*m_volumes)[i]; - if (pt == ptSLA && v->is_modifier && - m_model->objects[object_idx]->volumes[i]->is_modifier()) + const ModelVolume *mv = get_model_volume(*v, *m_model); + if (pt == ptSLA && v->is_modifier && mv && mv->is_modifier()) continue; if (v->object_idx() == (int)object_idx && v->instance_idx() == (int)instance_idx) idxs.push_back(i);