diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index a5926debef..253c340eb4 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -14,7 +14,7 @@ #include #define SLIC3R_FORK_NAME "Slic3r Prusa Edition" -#define SLIC3R_VERSION "1.40.1-rc" +#define SLIC3R_VERSION "1.40.1-rc2" #define SLIC3R_BUILD "UNKNOWN" typedef int32_t coord_t; diff --git a/xs/src/slic3r/GUI/PngExportDialog.hpp b/xs/src/slic3r/GUI/PngExportDialog.hpp index 03101b1c7c..bfbbd4ec4d 100644 --- a/xs/src/slic3r/GUI/PngExportDialog.hpp +++ b/xs/src/slic3r/GUI/PngExportDialog.hpp @@ -26,36 +26,40 @@ namespace Slic3r { /////////////////////////////////////////////////////////////////////////////// class PngExportDialog : public wxDialog { - private: +private: - protected: - wxFilePickerCtrl* filepick_ctl_; - wxFilePickerCtrl* confpick_ctl_; - wxSpinCtrl* spin_reso_width_; - wxSpinCtrl* spin_reso_height_; - wxToggleButton* reso_lock_btn_; - wxSpinCtrlDouble* bed_width_spin_; - wxSpinCtrlDouble* bed_height_spin_; - wxToggleButton* bedsize_lock_btn_; - wxSpinCtrlDouble* exptime_spin_; - wxSpinCtrlDouble* exptime_first_spin_; - wxSpinCtrlDouble* corr_spin_x_; - wxSpinCtrlDouble* corr_spin_y_; - wxSpinCtrlDouble* corr_spin_z_; - wxButton* export_btn_; +protected: + wxFilePickerCtrl* filepick_ctl_; + wxFilePickerCtrl* confpick_ctl_; + wxSpinCtrl* spin_reso_width_; + wxSpinCtrl* spin_reso_height_; + wxToggleButton* reso_lock_btn_; + wxSpinCtrlDouble* bed_width_spin_; + wxSpinCtrlDouble* bed_height_spin_; + wxToggleButton* bedsize_lock_btn_; + wxSpinCtrlDouble* exptime_spin_; + wxSpinCtrlDouble* exptime_first_spin_; + wxSpinCtrlDouble* corr_spin_x_; + wxSpinCtrlDouble* corr_spin_y_; + wxSpinCtrlDouble* corr_spin_z_; + wxButton* export_btn_; - // Virtual event handlers, overide them in your derived class - virtual void onFileChanged( wxFileDirPickerEvent& event ) { event.Skip(); } - virtual void EvalResoSpin( wxCommandEvent& event ) { event.Skip(); } - virtual void ResoLock( wxCommandEvent& event ) { event.Skip(); } - virtual void EvalBedSpin( wxCommandEvent& event ) { event.Skip(); } - virtual void BedsizeLock( wxCommandEvent& event ) { event.Skip(); } - virtual void Close( wxCommandEvent& /*event*/ ) { EndModal(wxID_OK); } + // Virtual event handlers, overide them in your derived class + virtual void onFileChanged( wxFileDirPickerEvent& event ) { event.Skip(); } + virtual void EvalResoSpin( wxCommandEvent& event ) { event.Skip(); } + virtual void ResoLock( wxCommandEvent& event ) { event.Skip(); } + virtual void EvalBedSpin( wxCommandEvent& event ) { event.Skip(); } + virtual void BedsizeLock( wxCommandEvent& event ) { event.Skip(); } + virtual void Close( wxCommandEvent& /*event*/ ) { EndModal(wxID_OK); } - public: +public: - PngExportDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Slice to zipped PNG files"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 452,170 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~PngExportDialog(); + PngExportDialog( wxWindow* parent, wxWindowID id = wxID_ANY, + const wxString& title = L("Slice to zipped PNG files"), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxSize( 452,170 ), + long style = wxDEFAULT_DIALOG_STYLE ); + ~PngExportDialog(); }; diff --git a/xs/src/slic3r/GUI/PresetBundle.cpp b/xs/src/slic3r/GUI/PresetBundle.cpp index d36ef7b6fe..0a280eee11 100644 --- a/xs/src/slic3r/GUI/PresetBundle.cpp +++ b/xs/src/slic3r/GUI/PresetBundle.cpp @@ -264,36 +264,38 @@ void PresetBundle::load_selections(const AppConfig &config) this->load_installed_printers(config); // Parse the initial print / filament / printer profile names. - std::string initial_print_profile_name = remove_ini_suffix(config.get("presets", "print")); - std::vector initial_filament_profile_names; - std::string initial_printer_profile_name = remove_ini_suffix(config.get("presets", "printer")); - - auto *nozzle_diameter = dynamic_cast(printers.get_selected_preset().config.option("nozzle_diameter")); - size_t num_extruders = nozzle_diameter->values.size(); - initial_filament_profile_names.emplace_back(remove_ini_suffix(config.get("presets", "filament"))); - this->set_filament_preset(0, initial_filament_profile_names.back()); - for (unsigned int i = 1; i < (unsigned int)num_extruders; ++ i) { - char name[64]; - sprintf(name, "filament_%d", i); - if (! config.has("presets", name)) - break; - initial_filament_profile_names.emplace_back(remove_ini_suffix(config.get("presets", name))); - this->set_filament_preset(i, initial_filament_profile_names.back()); - } + std::string initial_print_profile_name = remove_ini_suffix(config.get("presets", "print")); + std::string initial_filament_profile_name = remove_ini_suffix(config.get("presets", "filament")); + std::string initial_printer_profile_name = remove_ini_suffix(config.get("presets", "printer")); // Activate print / filament / printer profiles from the config. // If the printer profile enumerated by the config are not visible, select an alternate preset. // Do not select alternate profiles for the print / filament profiles as those presets // will be selected by the following call of this->update_compatible_with_printer(true). prints.select_preset_by_name_strict(initial_print_profile_name); - filaments.select_preset_by_name_strict(initial_filament_profile_names.front()); + filaments.select_preset_by_name_strict(initial_filament_profile_name); printers.select_preset_by_name(initial_printer_profile_name, true); + // Load the names of the other filament profiles selected for a multi-material printer. + auto *nozzle_diameter = dynamic_cast(printers.get_selected_preset().config.option("nozzle_diameter")); + size_t num_extruders = nozzle_diameter->values.size(); + this->filament_presets = { initial_filament_profile_name }; + for (unsigned int i = 1; i < (unsigned int)num_extruders; ++ i) { + char name[64]; + sprintf(name, "filament_%d", i); + if (! config.has("presets", name)) + break; + this->filament_presets.emplace_back(remove_ini_suffix(config.get("presets", name))); + } + // Do not define the missing filaments, so that the update_compatible_with_printer() will use the preferred filaments. + this->filament_presets.resize(num_extruders, ""); + // Update visibility of presets based on their compatibility with the active printer. // Always try to select a compatible print and filament preset to the current printer preset, // as the application may have been closed with an active "external" preset, which does not // exist. this->update_compatible_with_printer(true); + this->update_multi_material_filament_presets(); } // Export selections (current print, current filaments, current printer) into config.ini @@ -946,9 +948,7 @@ void PresetBundle::update_multi_material_filament_presets() for (size_t i = 0; i < std::min(this->filament_presets.size(), num_extruders); ++ i) this->filament_presets[i] = this->filaments.find_preset(this->filament_presets[i], true)->name; // Append the rest of filament presets. -// if (this->filament_presets.size() < num_extruders) - this->filament_presets.resize(num_extruders, this->filament_presets.empty() ? this->filaments.first_visible().name : this->filament_presets.back()); - + this->filament_presets.resize(num_extruders, this->filament_presets.empty() ? this->filaments.first_visible().name : this->filament_presets.back()); // Now verify if wiping_volumes_matrix has proper size (it is used to deduce number of extruders in wipe tower generator): std::vector old_matrix = this->project_config.option("wiping_volumes_matrix")->values; diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index ebbf4caffe..9e0e4fc270 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1492,7 +1492,7 @@ void TabPrinter::build() sizer->Add(btn); btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e){ - auto sender = new GCodeSender(); + auto sender = Slic3r::make_unique(); auto res = sender->connect( m_config->opt_string("serial_port"), m_config->opt_int("serial_speed") @@ -2134,6 +2134,8 @@ void Tab::save_preset(std::string name /*= ""*/) update_tab_ui(); // Update the selection boxes at the platter. on_presets_changed(); + // If current profile is saved, "delete preset" button have to be enabled + m_btn_delete_preset->Enable(true); if (m_name == "printer") static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count;