From c6ca180142fcc1ff3b87e31444f7c99f41e61495 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 6 Feb 2020 15:19:53 +0100
Subject: [PATCH] Use frontend data to update labels

---
 src/slic3r/GUI/GLCanvas3D.cpp     | 13 +++++++------
 src/slic3r/GUI/GLCanvas3D.hpp     |  5 +----
 src/slic3r/GUI/GUI_ObjectList.cpp |  2 ++
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 4096e99c4..2e1a6f082 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1238,7 +1238,7 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const
 }
 
 #if ENABLE_SHOW_SCENE_LABELS
-void GLCanvas3D::Labels::render(const std::vector<const PrintInstance*>& sorted_instances) const
+void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_instances) const
 {
     if (!m_enabled || !is_shown())
         return;
@@ -1298,7 +1298,7 @@ void GLCanvas3D::Labels::render(const std::vector<const PrintInstance*>& sorted_
     // updates print order strings
     if (sorted_instances.size() > 1) {
         for (int i = 0; i < sorted_instances.size(); ++i) {
-            size_t id = sorted_instances[i]->model_instance->id().id;
+            size_t id = sorted_instances[i]->id().id;
             std::vector<Owner>::iterator it = std::find_if(owners.begin(), owners.end(), [id](const Owner& owner) {
                 return owner.model_instance_id == id;
                 });
@@ -5101,11 +5101,12 @@ void GLCanvas3D::_render_overlays() const
 #if ENABLE_SHOW_SCENE_LABELS
     const ConfigOptionBool* opt = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"));
     bool sequential_print = (opt != nullptr) ? m_config->opt_bool("complete_objects") : false;
-    std::vector<const PrintInstance*> sorted_instances;
+    std::vector<const ModelInstance*> sorted_instances;
     if (sequential_print) {
-        const Print* print = fff_print();
-        if (print != nullptr)
-            sorted_instances = sort_object_instances_by_model_order(*print);
+        for (ModelObject* model_object : m_model->objects)
+            for (ModelInstance* model_instance : model_object->instances) {
+                sorted_instances.push_back(model_instance);
+            }
     }
     m_labels.render(sorted_instances);
 #endif // ENABLE_SHOW_SCENE_LABELS
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 71523a433..21f3f012c 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -40,9 +40,6 @@ class GCodePreviewData;
 struct ThumbnailData;
 #endif // ENABLE_THUMBNAIL_GENERATOR
 struct SlicingParameters;
-#if ENABLE_SHOW_SCENE_LABELS
-struct PrintInstance;
-#endif // ENABLE_SHOW_SCENE_LABELS
 enum LayerHeightEditActionType : unsigned int;
 
 namespace GUI {
@@ -390,7 +387,7 @@ private:
         void enable(bool enable) { m_enabled = enable; }
         void show(bool show) { m_shown = m_enabled ? show : false; }
         bool is_shown() const { return m_shown; }
-        void render(const std::vector<const PrintInstance*>& sorted_instances) const;
+        void render(const std::vector<const ModelInstance*>& sorted_instances) const;
     };
 #endif // ENABLE_SHOW_SCENE_LABELS
 
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index c07d50a0e..f4c2c7093 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -1134,6 +1134,8 @@ void ObjectList::OnDrop(wxDataViewEvent &event)
     changed_object(m_dragged_data.obj_idx());
 
     m_dragged_data.clear();
+
+    wxGetApp().plater()->set_current_canvas_as_dirty();
 }