Merge branch 'main' into dev/p2s-pr

This commit is contained in:
Noisyfox
2025-11-04 10:26:47 +08:00
committed by GitHub
367 changed files with 950 additions and 115 deletions

View File

@@ -1259,6 +1259,8 @@ bool GLCanvas3D::init()
// init dark mode status
on_change_color_mode(wxGetApp().app_config->get("dark_color_mode") == "1", false);
m_show_world_axes = wxGetApp().app_config->get("show_axes") == "true";
BOOST_LOG_TRIVIAL(info) <<__FUNCTION__<< " enter";
glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f));
glsafe(::glClearDepth(1.0f));
@@ -1535,6 +1537,17 @@ ModelInstanceEPrintVolumeState GLCanvas3D::check_volumes_outside_state(ObjectFil
return state;
}
void GLCanvas3D::toggle_world_axes_visibility(bool force_show)
{
if (force_show) {
m_show_world_axes = true;
} else {
m_show_world_axes = !m_show_world_axes;
}
wxGetApp().app_config->set_bool("show_axes", m_show_world_axes);
set_as_dirty();
}
void GLCanvas3D::toggle_selected_volume_visibility(bool selected_visible)
{
m_render_sla_auxiliaries = !selected_visible;
@@ -2086,7 +2099,7 @@ void GLCanvas3D::render(bool only_init)
_render_background();
//BBS add partplater rendering logic
bool only_current = false, only_body = false, show_axes = true, no_partplate = false;
bool only_current = false, only_body = false, no_partplate = false;
bool show_grid = true;
GLGizmosManager::EType gizmo_type = m_gizmos.get_current_type();
if (!m_main_toolbar.is_enabled()) {
@@ -2106,7 +2119,7 @@ void GLCanvas3D::render(bool only_init)
_render_sla_slices();
_render_selection();
if (!no_partplate)
_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), show_axes);
_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), m_show_world_axes);
if (!no_partplate) //BBS: add outline logic
_render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid);
_render_objects(GLVolumeCollection::ERenderType::Transparent, !m_gizmos.is_running());
@@ -2116,7 +2129,7 @@ void GLCanvas3D::render(bool only_init)
_render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running());
_render_sla_slices();
_render_selection();
_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), show_axes);
_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), m_show_world_axes);
_render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, true, hover_id);
// BBS: GUI refactor: add canvas size as parameters
_render_gcode(cnv_size.get_width(), cnv_size.get_height());
@@ -2124,9 +2137,9 @@ void GLCanvas3D::render(bool only_init)
/* assemble render*/
else if (m_canvas_type == ECanvasType::CanvasAssembleView) {
//BBS: add outline logic
if (m_show_world_axes) {
m_axes.render();
}
//if (m_show_world_axes) {
// m_axes.render();
//}
_render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running());
_render_selection();
//_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), show_axes);
@@ -6073,6 +6086,7 @@ void GLCanvas3D::_render_3d_navigator()
}
const float size = 128 * sc;
m_axis_button_pos[0] = size - 10;
const auto result = ImGuizmo::ViewManipulate(cameraView, cameraProjection, ImGuizmo::OPERATION::ROTATE, ImGuizmo::MODE::WORLD, nullptr,
camDistance, ImVec2(viewManipulateLeft, viewManipulateTop - size), ImVec2(size, size),
0x00101010);
@@ -6108,6 +6122,7 @@ void GLCanvas3D::_render_3d_navigator()
request_extra_frame();
}
_render_camera_toolbar();
}
#define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
@@ -8608,6 +8623,51 @@ void GLCanvas3D::_render_return_toolbar() const
imgui.end();
}
void GLCanvas3D::_render_camera_toolbar()
{
float font_size = ImGui::GetFontSize();
float sc = get_scale();
ImVec2 button_icon_size = ImVec2(font_size * 2.5, font_size * 2.5);
ImGuiWrapper &imgui = *wxGetApp().imgui();
float window_width = button_icon_size.x + imgui.scaled(2.0f);
float window_height = button_icon_size.y + imgui.scaled(2.0f);
Size cnv_size = get_canvas_size();
m_axis_button_pos[1] = cnv_size.get_height() - button_icon_size[1] - 20 * sc;
imgui.set_next_window_pos(m_axis_button_pos[0], m_axis_button_pos[1], ImGuiCond_Always, 0, 0);
#ifdef __WINDOWS__
imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always);
#endif
imgui.begin(_L("Toggle Axis"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);//
ImTextureID normal_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_DARK : GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE);
ImTextureID hover_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_DARK_HOVER : GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_HOVER);
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0});
if (ImGui::ImageButton3(normal_id, hover_id, button_icon_size, ImVec2(0, 0), ImVec2(1, 1), -1,
ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1), ImVec2(10, 0))) {
//select_view("plate");
if (m_canvas_type == ECanvasType::CanvasView3D || m_canvas_type == ECanvasType::CanvasPreview) {
toggle_world_axes_visibility(false);
}
}
if (ImGui::IsItemHovered()) {
auto temp_tooltip = _L("Toggle Axis");
auto width = ImGui::CalcTextSize(temp_tooltip.c_str()).x + imgui.scaled(2.0f);
imgui.tooltip(temp_tooltip, width);
}
ImGui::PopStyleVar(2);
imgui.end();
}
void GLCanvas3D::_render_separator_toolbar_right() const
{
if (!m_separator_toolbar.is_enabled())