From cfece4cd1bd1763de0c15378cbad2159dcacfd27 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Fri, 21 Feb 2025 11:49:13 +0800 Subject: [PATCH] FIX:Adjust the maximum height of thumbnails in the slice jira: none Change-Id: If066005fb3e0dc6896c9c193f3160595e6188703 --- src/slic3r/GUI/GLCanvas3D.cpp | 49 ++++++++++++++++++++++------------- src/slic3r/GUI/GLCanvas3D.hpp | 3 ++- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2a4dc1d18..052307bda 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6024,7 +6024,9 @@ void GLCanvas3D::_render_3d_navigator() if (!wxGetApp().show_3d_navigator()) { return; } - + if (!can_show_3d_navigator()) { + return; + } ImGuizmo::BeginFrame(); ImGuizmo::AllowAxisFlip(false); @@ -6083,8 +6085,16 @@ void GLCanvas3D::_render_3d_navigator() request_extra_frame(); } + + _render_fit_camera_toolbar(); } +bool GLCanvas3D::can_show_3d_navigator() { + if (m_canvas_type == ECanvasType::CanvasPreview) { + return m_can_show_navigator; + } + return true; +} #define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0 #if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT static void debug_output_thumbnail(const ThumbnailData& thumbnail_data) @@ -7837,7 +7847,7 @@ void GLCanvas3D::_render_overlays() } m_labels.render(sorted_instances); _render_3d_navigator(); - _render_fit_camera_toolbar(); + glsafe(::glPopMatrix()); } @@ -8108,6 +8118,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() } if (all_plates_stats_item->selected && all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED && gcode_result_valid) { m_gcode_viewer.render_all_plates_stats(plate_list.get_nonempty_plates_slice_results()); + m_can_show_navigator = false; m_render_preview = false; } else{ @@ -8152,9 +8163,9 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGuiWrapper& imgui = *wxGetApp().imgui(); int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0); - bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > canvas_h ? true: false; + bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > window_height_max ? true : false; show_scroll = m_sel_plate_toolbar.is_display_scrollbar && show_scroll; - float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, canvas_h); + float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, window_height_max); float window_width = m_sel_plate_toolbar.icon_width + margin_size * 2 + (show_scroll ? 28.0f * f_scale : 20.0f * f_scale); ImVec4 window_bg = ImVec4(0.82f, 0.82f, 0.82f, 0.5f); @@ -8177,7 +8188,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); - imgui.set_next_window_pos(canvas_w * 0, canvas_h * 0, ImGuiCond_Always, 0, 0); + imgui.set_next_window_pos(canvas_w * 0, canvas_h * 0 + y_offset, ImGuiCond_Always, 0, 0); imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always); if (show_scroll) @@ -8241,32 +8252,34 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() } } } - + if (!all_plates_stats_item->selected) { + m_can_show_navigator = true; + } ImGui::PopStyleColor(3); ImVec2 start_pos = ImVec2(button_start_pos.x + frame_padding + margin.x, button_start_pos.y + frame_padding + margin.y); if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * all_plates_stats_item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text @@ -8335,22 +8348,22 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(250, 0, 0, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(250, 0, 0, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text if (item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index f05cb8317..bfa700c98 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -743,6 +743,7 @@ public: } m_gizmo_highlighter; + bool m_can_show_navigator = true; public: explicit GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed); @@ -1245,7 +1246,7 @@ private: bool _render_orient_menu(float left, float right, float bottom, float top); bool _render_arrange_menu(float left, float right, float bottom, float top); void _render_3d_navigator(); - + bool can_show_3d_navigator(); void _update_volumes_hover_state(); // Convert the screen space coordinate to world coordinate on the bed.