mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-17 05:52:39 +00:00
The reduced toolpath set was only ever bound during a camera drag. The slider check read is_dirty(), which the slider raises inside its own render and _render_gcode() consumes at the end of the same frame, so it was never true at the start of the next one; the only time it was true was the frame after a keyboard or wheel step, which then drew one coarse frame followed by one full frame. The navigator cube and the mouse wheel never engaged it at all, and the extra frame requested on every level change was a full-detail frame drawn for nothing, since the level is chosen before the draw. The reduced buffers were also built and uploaded on every slider tick with the preference off. Dragging is now read from ImGui's active id for the sliders and from the navigator's own flag, a wheel step holds the reduced set for a 150 ms settle time with the restoring frame scheduled for when it runs out, and nothing is built while the preference is off. What the reduced set leaves out is now a choice: skip layers only, skip the internal infill roles, or keep the shell only. The shell is found geometrically at load, once per print: every layer is rasterized into a half-millimetre occupancy grid and closed so that sparse infill reads as solid, a cell is on the shell when any of its six neighbours is empty, and a segment is kept when at least half of its cells are. Being geometric it works for the wipe tower, whose every segment shares one role and which is the bulk of a tall print, where dropping roles could not. The layer stride is a preference too, one layer in every N with both ends of the visible range always whole. On the 636-layer three-filament fixture, frames during a drag against 448467 segments drawn in 334 ms at full detail: skip layers only, 1 in 4 110691 segments 83 ms skip internal infill, 1 in 4 85661 segments 68 ms shell only, 1 in 4 54382 segments 52 ms skip internal infill, every layer 347208 segments 255 ms shell only, every layer 215797 segments 170 ms The shell classification takes 63 ms once per load, split across threads. At rest the preview is pixel identical to before in every configuration, and the frame after a release or a settled wheel burst is the full one.
131 lines
5.9 KiB
C++
131 lines
5.9 KiB
C++
#ifndef slic3r_Preferences_hpp_
|
|
#define slic3r_Preferences_hpp_
|
|
|
|
#include "GUI.hpp"
|
|
#include "GUI_Utils.hpp"
|
|
|
|
#include <wx/dialog.h>
|
|
#include <wx/timer.h>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <list>
|
|
#include <map>
|
|
#include "Widgets/ComboBox.hpp"
|
|
#include "Widgets/CheckBox.hpp"
|
|
#include "Widgets/TextInput.hpp"
|
|
#include "Widgets/SpinInput.hpp"
|
|
#include "Widgets/TabCtrl.hpp"
|
|
#include "slic3r/Utils/bambu_networking.hpp"
|
|
|
|
namespace Slic3r { namespace GUI {
|
|
|
|
#define DESIGN_GRAY900_COLOR wxColour("#363636") // Label color
|
|
#define DESIGN_GRAY600_COLOR wxColour("#ACACAC") // Dimmed text color
|
|
|
|
#define DESIGN_WINDOW_SIZE wxSize(FromDIP(640), FromDIP(640))
|
|
#define DESIGN_TITLE_SIZE wxSize(FromDIP(280), -1)
|
|
#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(120), -1)
|
|
#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(120), -1)
|
|
#define DESIGN_INPUT_SIZE wxSize(FromDIP(120), -1)
|
|
#define DESIGN_LEFT_MARGIN 25
|
|
|
|
class PreferencesDialog : public DPIDialog
|
|
{
|
|
private:
|
|
AppConfig *app_config;
|
|
|
|
protected:
|
|
wxBoxSizer * m_sizer_body;
|
|
wxScrolledWindow* m_parent;
|
|
TabCtrl* m_pref_tabs;
|
|
|
|
// bool m_settings_layout_changed {false};
|
|
bool m_seq_top_layer_only_changed{false};
|
|
bool m_recreate_GUI{false};
|
|
std::string m_pending_language;
|
|
|
|
public:
|
|
bool seq_top_layer_only_changed() const { return m_seq_top_layer_only_changed; }
|
|
bool recreate_GUI() const { return m_recreate_GUI; }
|
|
const std::string& pending_language() const { return m_pending_language; }
|
|
void on_dpi_changed(const wxRect &suggested_rect) override;
|
|
|
|
public:
|
|
PreferencesDialog(wxWindow * parent,
|
|
wxWindowID id = wxID_ANY,
|
|
const wxString &title = wxT(""),
|
|
const wxPoint & pos = wxDefaultPosition,
|
|
const wxSize & size = wxDefaultSize,
|
|
long style = wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX);
|
|
|
|
~PreferencesDialog();
|
|
|
|
wxString m_backup_interval_time;
|
|
wxTimer m_filament_height_timer;
|
|
|
|
void create();
|
|
|
|
// debug mode
|
|
::CheckBox * m_developer_mode_ckeckbox = {nullptr};
|
|
::CheckBox * m_internal_developer_mode_ckeckbox = {nullptr};
|
|
::CheckBox * m_dark_mode_ckeckbox = {nullptr};
|
|
::CheckBox * m_sync_user_preset_checkbox = {nullptr};
|
|
::CheckBox * m_bambu_cloud_checkbox = {nullptr};
|
|
::TextInput *m_backup_interval_textinput = {nullptr};
|
|
::SpinInput *m_dim_previous_layers_brightness_input = {nullptr};
|
|
::ComboBox * m_reduced_detail_mode_combo = {nullptr};
|
|
::SpinInput *m_reduced_detail_layer_stride_input = {nullptr};
|
|
::ComboBox * m_network_version_combo = {nullptr};
|
|
std::vector<NetworkLibraryVersionInfo> m_available_versions;
|
|
|
|
wxString m_developer_mode_def;
|
|
wxString m_internal_developer_mode_def;
|
|
wxString m_backup_interval_def;
|
|
wxString m_iot_environment_def;
|
|
|
|
std::vector<wxFlexGridSizer*> f_sizers;
|
|
|
|
wxBoxSizer *create_item_title(wxString title);
|
|
wxBoxSizer *create_item_label(wxString label, const wxString tooltip = "", const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector<wxString> vlist, std::function<void(wxString)> onchange = {}, const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector<wxString> vlist, std::vector<std::string> config_name_index, std::function<void(std::string)> onchange = {}, const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_region_combobox(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_language_combobox(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_loglevel_combobox(wxString title, wxString tooltip, std::vector<wxString> vlist);
|
|
wxBoxSizer *create_item_checkbox(wxString title, wxString tooltip, std::string param, const wxString secondary_title = "", const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_darkmode(wxString title,wxString tooltip, std::string param);
|
|
void set_dark_mode();
|
|
wxBoxSizer *create_item_button(wxString title, wxString title2, wxString tooltip, wxString tooltip2, std::function<void()> onclick, const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_downloads(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_input(wxString title, wxString title2, wxString tooltip, std::string param, std::function<void(wxString)> onchange = {}, const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_spinctrl(wxString title, wxString title2, wxString side_label, wxString tooltip, std::string param, int min, int max, std::function<void(int)> onchange = nullptr, const wxString wiki_url = "");
|
|
wxBoxSizer *create_camera_orbit_mult_input(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_decimal_input(wxString title, wxString title2, wxString tooltip, std::string param, double min, double max, int decimals, const wxString wiki_url = "");
|
|
wxBoxSizer *create_item_backup(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_auto_reslice(wxString title, wxString checkbox_tooltip, wxString delay_tooltip);
|
|
wxBoxSizer *create_item_bambu_cloud(wxString title, wxString tooltip);
|
|
wxBoxSizer *create_item_network_plugin_version(wxString title, wxString tooltip);
|
|
#ifdef WIN32
|
|
wxBoxSizer *create_item_link_association(wxString url_prefix, wxString website_name);
|
|
#endif // WIN32
|
|
|
|
void create_items();
|
|
void create_sync_page();
|
|
wxBoxSizer* create_debug_page();
|
|
|
|
void UpdateSidebarLayout();
|
|
|
|
// BBS
|
|
void create_select_domain_widget();
|
|
|
|
void Split(const std::string &src, const std::string &separator, std::vector<wxString> &dest);
|
|
int m_current_language_selected = {0};
|
|
|
|
private:
|
|
std::tuple<wxBoxSizer*, ComboBox*> create_item_combobox_base(wxString title, wxString tooltip, std::string param, std::vector<wxString> vlist, unsigned int current_index, const wxString wiki_url = "");
|
|
};
|
|
|
|
}} // namespace Slic3r::GUI
|
|
|
|
#endif /* slic3r_Preferences_hpp_ */
|