diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 41b204d65..b04e78c4e 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -60,7 +60,7 @@ // Enable G-Code viewer #define ENABLE_GCODE_VIEWER (1 && ENABLE_2_3_0_ALPHA1) #define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER) -#define ENABLE_GCODE_VIEWER_SHADERS_EDITOR (1 && ENABLE_GCODE_VIEWER) +#define ENABLE_GCODE_VIEWER_SHADERS_EDITOR (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_VIEWER_AS_STATE (1 && ENABLE_GCODE_VIEWER) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 450a538d0..16ab95d6c 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -694,7 +694,11 @@ void Bed3D::render_default(bool bottom) const { // draw background glsafe(::glDepthMask(GL_FALSE)); +#if ENABLE_LAYOUT_NO_RESTART + glsafe(::glColor4fv(m_model_color.data())); +#else glsafe(::glColor4f(0.35f, 0.35f, 0.35f, 0.4f)); +#endif // ENABLE_LAYOUT_NO_RESTART glsafe(::glNormal3d(0.0f, 0.0f, 1.0f)); glsafe(::glVertexPointer(3, GL_FLOAT, m_triangles.get_vertex_data_size(), (GLvoid*)m_triangles.get_vertices_data())); glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount)); @@ -702,11 +706,23 @@ void Bed3D::render_default(bool bottom) const } // draw grid +#if ENABLE_LAYOUT_NO_RESTART + glsafe(::glLineWidth(1.5f * m_scale_factor)); +#else glsafe(::glLineWidth(3.0f * m_scale_factor)); +#endif // ENABLE_LAYOUT_NO_RESTART if (has_model && !bottom) +#if ENABLE_LAYOUT_NO_RESTART + glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 1.0f)); +#else glsafe(::glColor4f(0.75f, 0.75f, 0.75f, 1.0f)); +#endif // ENABLE_LAYOUT_NO_RESTART else +#if ENABLE_LAYOUT_NO_RESTART + glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 0.6f)); +#else glsafe(::glColor4f(0.2f, 0.2f, 0.2f, 0.4f)); +#endif //ENABLE_LAYOUT_NO_RESTART glsafe(::glVertexPointer(3, GL_FLOAT, m_triangles.get_vertex_data_size(), (GLvoid*)m_gridlines.get_vertices_data())); glsafe(::glDrawArrays(GL_LINES, 0, (GLsizei)m_gridlines.get_vertices_count())); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 00cc7d7bb..7f591bedd 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -323,9 +323,16 @@ void MainFrame::update_layout() Layout(); }; +#if ENABLE_GCODE_VIEWER_AS_STATE + ESettingsLayout layout = (m_mode == EMode::GCodeViewer) ? ESettingsLayout::GCodeViewer : + (wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : + wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : + wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old); +#else ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old; +#endif // ENABLE_GCODE_VIEWER_AS_STATE if (m_layout == layout) return; @@ -377,6 +384,14 @@ void MainFrame::update_layout() m_plater->Show(); break; } +#if ENABLE_GCODE_VIEWER_AS_STATE + case ESettingsLayout::GCodeViewer: + { + GetSizer()->Add(m_plater, 1, wxEXPAND); + m_plater->Show(); + break; + } +#endif // ENABLE_GCODE_VIEWER_AS_STATE } //#ifdef __APPLE__ @@ -1082,15 +1097,16 @@ void MainFrame::init_menubar() #endif m_menu_item_reslice_now = append_menu_item(fileMenu, wxID_ANY, _L("(Re)Slice No&w") + "\tCtrl+R", _L("Start new slicing process"), [this](wxCommandEvent&) { reslice_now(); }, "re_slice", nullptr, - [this](){return m_plater != nullptr && can_reslice(); }, this); + [this]() { return m_plater != nullptr && can_reslice(); }, this); fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_ANY, _L("&Repair STL file") + dots, _L("Automatically repair an STL file"), [this](wxCommandEvent&) { repair_stl(); }, "wrench", nullptr, - [this]() {return true; }, this); + [this]() { return true; }, this); #if ENABLE_GCODE_VIEWER_AS_STATE fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_ANY, _L("&G-code preview"), _L("Switch to G-code preview mode"), - [this](wxCommandEvent&) { set_mode(EMode::GCodeViewer); }); + [this](wxCommandEvent&) { set_mode(EMode::GCodeViewer); }, "", nullptr, + [this]() { return m_plater != nullptr && m_plater->printer_technology() != ptSLA; }, this); #endif // ENABLE_GCODE_VIEWER_AS_STATE fileMenu->AppendSeparator(); append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME), @@ -1381,16 +1397,30 @@ void MainFrame::init_gcodeviewer_menubar() void MainFrame::set_mode(EMode mode) { + if (m_mode == mode) + return; + + wxBusyCursor busy; + m_mode = mode; switch (m_mode) { default: case EMode::Editor: { +#if ENABLE_LAYOUT_NO_RESTART + update_layout(); + select_tab(0); +#endif // ENABLE_LAYOUT_NO_RESTART + m_plater->reset(); m_plater->Freeze(); + // reinitialize undo/redo stack + m_plater->clear_undo_redo_stack_main(); + m_plater->take_snapshot(_L("New Project")); + // switch view m_plater->select_view_3D("3D"); m_plater->select_view("iso"); @@ -1421,6 +1451,10 @@ void MainFrame::set_mode(EMode mode) } case EMode::GCodeViewer: { +#if ENABLE_LAYOUT_NO_RESTART + update_layout(); +#endif // ENABLE_LAYOUT_NO_RESTART + m_plater->reset(); m_plater->reset_last_loaded_gcode(); diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 9ec2d991a..931dd87b2 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -138,6 +138,9 @@ class MainFrame : public DPIFrame Old, New, Dlg, +#if ENABLE_GCODE_VIEWER_AS_STATE + GCodeViewer +#endif // ENABLE_GCODE_VIEWER_AS_STATE }; ESettingsLayout m_layout{ ESettingsLayout::Unknown };