From cfafbc812f410800f270c2197c9c21ba3da13214 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 5 Dec 2022 18:21:15 +0800 Subject: [PATCH] FIX: switch dark mode bug 1.selected tool item in support,seam,mmu will be invalid after swich dark mode 2.add reset direction button in mmu 3.if don't switch dark mode in prepare page,toolbar doesn't change color Change-Id: Ibaaaee5c0cc03f66682f5eb0daafcd143b9d9edc --- src/slic3r/GUI/GLCanvas3D.cpp | 60 +++++++------- src/slic3r/GUI/GLCanvas3D.hpp | 1 + src/slic3r/GUI/GUI_Preview.cpp | 9 ++- src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 20 ++--- .../GUI/Gizmos/GLGizmoMmuSegmentation.cpp | 79 ++++++++++++++----- src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp | 19 ++--- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 3 +- 7 files changed, 118 insertions(+), 73 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2c26ab4497..abf4227793 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1243,6 +1243,25 @@ bool GLCanvas3D::init() return true; } +void GLCanvas3D::on_change_toolbar_color_mode() { + // reset svg + _init_toolbars(); + m_gizmos.init(); + // re-generate icon texture + m_separator_toolbar.set_icon_dirty(); + _render_separator_toolbar_right(); + m_separator_toolbar.set_icon_dirty(); + _render_separator_toolbar_left(); + m_main_toolbar.set_icon_dirty(); + _render_main_toolbar(); + wxGetApp().plater()->get_collapse_toolbar().set_icon_dirty(); + _render_collapse_toolbar(); + m_assemble_view_toolbar.set_icon_dirty(); + _render_assemble_view_toolbar(); + m_gizmos.set_icon_dirty(); + m_gizmos.render_overlay(); +} + void GLCanvas3D::set_as_dirty() { m_dirty = true; @@ -3973,8 +3992,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) //BBS do not limit rotate in assemble view camera.rotate_local_with_target(Vec3d(rot.y(), rot.x(), 0.), rotate_target); //camera.rotate_on_sphere_with_target(rot.x(), rot.y(), false, rotate_target); - auto clp_dist = m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position(); - m_gizmos.m_assemble_view_data->model_objects_clipper()->set_position(clp_dist, true); } else { #ifdef SUPPORT_FEEE_CAMERA @@ -6699,33 +6716,11 @@ void GLCanvas3D::_render_overlays() m_gizmos.set_overlay_icon_size(gizmo_size); #endif // ENABLE_RETINA_GL - static bool last_dark_mode_tatus = wxGetApp().app_config->get("dark_color_mode") == "1"; - bool dark_mode_status = wxGetApp().app_config->get("dark_color_mode") == "1"; - if (dark_mode_status != last_dark_mode_tatus) { - last_dark_mode_tatus = dark_mode_status; - // reset svg - _init_toolbars(); - m_gizmos.init(); - // re-generate icon texture - m_separator_toolbar.set_icon_dirty(); - _render_separator_toolbar_right(); - m_separator_toolbar.set_icon_dirty(); - _render_separator_toolbar_left(); - m_main_toolbar.set_icon_dirty(); - _render_main_toolbar(); - wxGetApp().plater()->get_collapse_toolbar().set_icon_dirty(); - _render_collapse_toolbar(); - m_assemble_view_toolbar.set_icon_dirty(); - _render_assemble_view_toolbar(); - m_gizmos.set_icon_dirty(); - } - else { - _render_separator_toolbar_right(); - _render_separator_toolbar_left(); - _render_main_toolbar(); - _render_collapse_toolbar(); - _render_assemble_view_toolbar(); - } + _render_separator_toolbar_right(); + _render_separator_toolbar_left(); + _render_main_toolbar(); + _render_collapse_toolbar(); + _render_assemble_view_toolbar(); //BBS: GUI refactor: GLToolbar _render_imgui_select_plate_toolbar(); _render_return_toolbar(); @@ -7428,7 +7423,8 @@ void GLCanvas3D::_render_assemble_control() const auto canvas_h = float(get_canvas_size().get_height()); const float text_padding = 7.0f; - const float text_size_x = std::max(imgui->calc_text_size(_L("Explosion Ratio")).x, imgui->calc_text_size(_L("Section View")).x); + const float text_size_x = std::max(imgui->calc_text_size(_L("Reset direction")).x + 2 * ImGui::GetStyle().FramePadding.x, + std::max(imgui->calc_text_size(_L("Explosion Ratio")).x, imgui->calc_text_size(_L("Section View")).x)); const float slider_width = 75.0f; const float value_size = imgui->calc_text_size("3.00").x + text_padding * 2; const float item_spacing = imgui->get_item_spacing().x; @@ -7440,7 +7436,8 @@ void GLCanvas3D::_render_assemble_control() const ImGui::AlignTextToFramePadding(); { - if (m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position() == 0.f) { + float clp_dist = m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position(); + if (clp_dist == 0.f) { ImGui::AlignTextToFramePadding(); imgui->text(_L("Section View")); } @@ -7454,7 +7451,6 @@ void GLCanvas3D::_render_assemble_control() const ImGui::SameLine(window_padding.x + text_size_x + item_spacing); ImGui::PushItemWidth(slider_width); - auto clp_dist = float(m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position()); bool view_slider_changed = imgui->bbl_slider_float_style("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f", 1.0f, true); ImGui::SameLine(window_padding.x + text_size_x + slider_width + item_spacing * 2); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 79ccaa36cf..7ff349748d 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -701,6 +701,7 @@ public: bool init(); void post_event(wxEvent &&event); + void on_change_toolbar_color_mode(); void set_as_dirty(); void requires_check_outside_state() { m_requires_check_outside_state = true; } diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index d5b14c5749..86ce19f59f 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -94,8 +94,15 @@ bool View3D::init(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrintConfig void View3D::set_as_dirty() { - if (m_canvas != nullptr) + if (m_canvas != nullptr) { + static bool last_dark_mode_tatus = wxGetApp().app_config->get("dark_color_mode") == "1"; + bool dark_mode_status = wxGetApp().app_config->get("dark_color_mode") == "1"; + if (dark_mode_status != last_dark_mode_tatus) { + last_dark_mode_tatus = dark_mode_status; + m_canvas->on_change_toolbar_color_mode(); + } m_canvas->set_as_dirty(); + } } void View3D::bed_shape_changed() diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 951669ff97..ae4c2fb878 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -248,21 +248,23 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("tool_type")); + std::array tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; - std::array tool_icons; + std::array icons; if (dark_mode) - tool_icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon, ImGui::FillButtonDarkIcon, ImGui::GapFillDarkIcon }; + icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon, ImGui::FillButtonDarkIcon, ImGui::GapFillDarkIcon }; else - tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; + icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; + std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Fill"), _L("Gap Fill") }; - for (int i = 0; i < tool_icons.size(); i++) { + for (int i = 0; i < tool_ids.size(); i++) { std::string str_label = std::string("##"); - std::wstring btn_name = tool_icons[i] + boost::nowide::widen(str_label); + std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - if (m_current_tool == tool_icons[i]) { + if (m_current_tool == tool_ids[i]) { ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); @@ -271,15 +273,15 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_icons[i]) + if (m_current_tool == tool_ids[i]) { ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } ImGui::PopStyleVar(1); - if (btn_clicked && m_current_tool != tool_icons[i]) { - m_current_tool = tool_icons[i]; + if (btn_clicked && m_current_tool != tool_ids[i]) { + m_current_tool = tool_ids[i]; for (auto& triangle_selector : m_triangle_selectors) { triangle_selector->seed_fill_unselect_all_triangles(); triangle_selector->request_update_render_data(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 8c2d294c18..248321c482 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -99,6 +99,7 @@ bool GLGizmoMmuSegmentation::on_init() m_desc["clipping_of_view_caption"] = _L("Alt + Mouse wheel"); m_desc["clipping_of_view"] = _L("Section view"); + m_desc["reset_direction"] = _L("Reset direction"); m_desc["cursor_size_caption"] = _L("Ctrl + Mouse wheel"); m_desc["cursor_size"] = _L("Pen size"); m_desc["cursor_type"] = _L("Pen shape"); @@ -356,7 +357,8 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: const float space_size = m_imgui->get_style_scaling() * 8; - const float clipping_slider_left = m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f); + const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f), + m_imgui->calc_text_size(m_desc.at("reset_direction")).x + m_imgui->scaled(1.5f) + ImGui::GetStyle().FramePadding.x * 2); const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.5f); const float smart_fill_slider_left = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); const float edge_detect_slider_left = m_imgui->calc_text_size(m_desc.at("edge_detection")).x + m_imgui->scaled(1.f); @@ -464,20 +466,22 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_imgui->text(m_desc.at("tool_type")); + std::array tool_ids; + tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; - std::array tool_icons; + std::array icons; if (dark_mode) - tool_icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon, ImGui::TriangleButtonDarkIcon, ImGui::HeightRangeDarkIcon, ImGui::FillButtonDarkIcon, ImGui::GapFillDarkIcon }; + icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon, ImGui::TriangleButtonDarkIcon, ImGui::HeightRangeDarkIcon, ImGui::FillButtonDarkIcon, ImGui::GapFillDarkIcon }; else - tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; + icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Height Range"), _L("Fill"), _L("Gap Fill") }; - for (int i = 0; i < tool_icons.size(); i++) { + for (int i = 0; i < tool_ids.size(); i++) { std::string str_label = std::string(""); - std::wstring btn_name = tool_icons[i] + boost::nowide::widen(str_label); + std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - if (m_current_tool == tool_icons[i]) { + if (m_current_tool == tool_ids[i]) { ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); @@ -486,15 +490,15 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_icons[i]) + if (m_current_tool == tool_ids[i]) { ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } ImGui::PopStyleVar(1); - if (btn_clicked && m_current_tool != tool_icons[i]) { - m_current_tool = tool_icons[i]; + if (btn_clicked && m_current_tool != tool_ids[i]) { + m_current_tool = tool_ids[i]; for (auto &triangle_selector : m_triangle_selectors) { triangle_selector->seed_fill_unselect_all_triangles(); triangle_selector->request_update_render_data(); @@ -528,9 +532,17 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f"); ImGui::Separator(); - - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("clipping_of_view")); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this]() { + m_c->object_clipper()->set_position(-1., false); + }); + } + } auto clp_dist = float(m_c->object_clipper()->get_position()); ImGui::SameLine(circle_max_width); @@ -546,8 +558,17 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_cursor_type = TriangleSelector::CursorType::POINTER; m_tool_type = ToolType::BRUSH; - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("clipping_of_view")); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this]() { + m_c->object_clipper()->set_position(-1., false); + }); + } + } auto clp_dist = float(m_c->object_clipper()->get_position()); ImGui::SameLine(clipping_slider_left); @@ -584,9 +605,17 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_smart_fill_angle = -1.f; } ImGui::Separator(); - - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("clipping_of_view")); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this]() { + m_c->object_clipper()->set_position(-1., false); + }); + } + } auto clp_dist = float(m_c->object_clipper()->get_position()); ImGui::SameLine(sliders_left_width); @@ -612,9 +641,17 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::BBLDragFloat("##cursor_height_input", &m_cursor_height, 0.05f, 0.0f, 0.0f, "%.2f"); ImGui::Separator(); - - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("clipping_of_view")); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this]() { + m_c->object_clipper()->set_position(-1., false); + }); + } + } auto clp_dist = float(m_c->object_clipper()->get_position()); ImGui::SameLine(height_max_width); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 07bb861a21..aac95cd1f1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -207,20 +207,21 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("cursor_type")); + std::array tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon }; bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; - std::array tool_icons; + std::array icons; if (dark_mode) - tool_icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon}; + icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon}; else - tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon}; + icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere")}; - for (int i = 0; i < tool_icons.size(); i++) { + for (int i = 0; i < tool_ids.size(); i++) { std::string str_label = std::string("##"); - std::wstring btn_name = tool_icons[i] + boost::nowide::widen(str_label); + std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - if (m_current_tool == tool_icons[i]) { + if (m_current_tool == tool_ids[i]) { ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); @@ -229,14 +230,14 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_icons[i]) + if (m_current_tool == tool_ids[i]) { ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } ImGui::PopStyleVar(1); - if (btn_clicked && m_current_tool != tool_icons[i]) { - m_current_tool = tool_icons[i]; + if (btn_clicked && m_current_tool != tool_ids[i]) { + m_current_tool = tool_ids[i]; for (auto& triangle_selector : m_triangle_selectors) { triangle_selector->seed_fill_unselect_all_triangles(); triangle_selector->request_update_render_data(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 75ec8a4f36..eaca440536 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -157,7 +157,8 @@ bool GLGizmosManager::init() //m_gizmos.emplace_back(new GLGizmoHollow(m_parent, "hollow.svg", sprite_id++)); m_common_gizmos_data.reset(new CommonGizmosDataPool(&m_parent)); - m_assemble_view_data.reset(new AssembleViewDataPool(&m_parent)); + if(!m_assemble_view_data) + m_assemble_view_data.reset(new AssembleViewDataPool(&m_parent)); for (auto& gizmo : m_gizmos) { if (! gizmo->init()) {