mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 08:47:52 -06:00
Fix of #2548
This commit is contained in:
parent
5320ed9374
commit
ac82cbe0cc
3 changed files with 82 additions and 4 deletions
|
@ -1260,6 +1260,7 @@ struct Plater::priv
|
||||||
Preview *preview;
|
Preview *preview;
|
||||||
|
|
||||||
BackgroundSlicingProcess background_process;
|
BackgroundSlicingProcess background_process;
|
||||||
|
bool suppressed_backround_processing_update { false };
|
||||||
|
|
||||||
// A class to handle UI jobs like arranging and optimizing rotation.
|
// A class to handle UI jobs like arranging and optimizing rotation.
|
||||||
// These are not instant jobs, the user has to be informed about their
|
// These are not instant jobs, the user has to be informed about their
|
||||||
|
@ -1694,7 +1695,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||||
panels.push_back(preview);
|
panels.push_back(preview);
|
||||||
|
|
||||||
this->background_process_timer.SetOwner(this->q, 0);
|
this->background_process_timer.SetOwner(this->q, 0);
|
||||||
this->q->Bind(wxEVT_TIMER, [this](wxTimerEvent &evt) { this->update_restart_background_process(false, false); });
|
this->q->Bind(wxEVT_TIMER, [this](wxTimerEvent &evt)
|
||||||
|
{
|
||||||
|
if (!this->suppressed_backround_processing_update)
|
||||||
|
this->update_restart_background_process(false, false);
|
||||||
|
});
|
||||||
|
|
||||||
update();
|
update();
|
||||||
|
|
||||||
|
@ -4176,9 +4181,25 @@ void Plater::changed_objects(const std::vector<size_t>& object_idxs)
|
||||||
this->p->schedule_background_process();
|
this->p->schedule_background_process();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Plater::schedule_background_process()
|
void Plater::schedule_background_process(bool schedule/* = true*/)
|
||||||
{
|
{
|
||||||
this->p->schedule_background_process();
|
if (schedule)
|
||||||
|
this->p->schedule_background_process();
|
||||||
|
|
||||||
|
this->p->suppressed_backround_processing_update = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Plater::is_background_process_running() const
|
||||||
|
{
|
||||||
|
return this->p->background_process_timer.IsRunning();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Plater::suppress_background_process(const bool stop_background_process)
|
||||||
|
{
|
||||||
|
if (stop_background_process)
|
||||||
|
this->p->background_process_timer.Stop();
|
||||||
|
|
||||||
|
this->p->suppressed_backround_processing_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Plater::fix_through_netfabb(const int obj_idx, const int vol_idx/* = -1*/) { p->fix_through_netfabb(obj_idx, vol_idx); }
|
void Plater::fix_through_netfabb(const int obj_idx, const int vol_idx/* = -1*/) { p->fix_through_netfabb(obj_idx, vol_idx); }
|
||||||
|
@ -4254,4 +4275,15 @@ bool Plater::can_copy_to_clipboard() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() :
|
||||||
|
m_was_running(wxGetApp().plater()->is_background_process_running())
|
||||||
|
{
|
||||||
|
wxGetApp().plater()->suppress_background_process(m_was_running);
|
||||||
|
}
|
||||||
|
|
||||||
|
SuppressBackgroundProcessingUpdate::~SuppressBackgroundProcessingUpdate()
|
||||||
|
{
|
||||||
|
wxGetApp().plater()->schedule_background_process(m_was_running);
|
||||||
|
}
|
||||||
|
|
||||||
}} // namespace Slic3r::GUI
|
}} // namespace Slic3r::GUI
|
||||||
|
|
|
@ -175,7 +175,9 @@ public:
|
||||||
void reslice_SLA_supports(const ModelObject &object);
|
void reslice_SLA_supports(const ModelObject &object);
|
||||||
void changed_object(int obj_idx);
|
void changed_object(int obj_idx);
|
||||||
void changed_objects(const std::vector<size_t>& object_idxs);
|
void changed_objects(const std::vector<size_t>& object_idxs);
|
||||||
void schedule_background_process();
|
void schedule_background_process(bool schedule = true);
|
||||||
|
bool is_background_process_running() const;
|
||||||
|
void suppress_background_process(const bool stop_background_process) ;
|
||||||
void fix_through_netfabb(const int obj_idx, const int vol_idx = -1);
|
void fix_through_netfabb(const int obj_idx, const int vol_idx = -1);
|
||||||
void send_gcode();
|
void send_gcode();
|
||||||
|
|
||||||
|
@ -219,8 +221,18 @@ public:
|
||||||
private:
|
private:
|
||||||
struct priv;
|
struct priv;
|
||||||
std::unique_ptr<priv> p;
|
std::unique_ptr<priv> p;
|
||||||
|
|
||||||
|
friend class SuppressBackgroundProcessingUpdate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SuppressBackgroundProcessingUpdate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SuppressBackgroundProcessingUpdate();
|
||||||
|
~SuppressBackgroundProcessingUpdate();
|
||||||
|
private:
|
||||||
|
bool m_was_running;
|
||||||
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
|
@ -2314,6 +2314,40 @@ void TabPrinter::build_unregular_pages()
|
||||||
|
|
||||||
auto optgroup = page->new_optgroup(_(L("Size")));
|
auto optgroup = page->new_optgroup(_(L("Size")));
|
||||||
optgroup->append_single_option_line("nozzle_diameter", extruder_idx);
|
optgroup->append_single_option_line("nozzle_diameter", extruder_idx);
|
||||||
|
|
||||||
|
optgroup->m_on_change = [this, extruder_idx](const t_config_option_key& opt_key, boost::any value)
|
||||||
|
{
|
||||||
|
if (m_extruders_count > 1 && opt_key.find_first_of("nozzle_diameter") != std::string::npos)
|
||||||
|
{
|
||||||
|
SuppressBackgroundProcessingUpdate sbpu;
|
||||||
|
const double new_nd = boost::any_cast<double>(value);
|
||||||
|
std::vector<double> nozzle_diameters = static_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"))->values;
|
||||||
|
|
||||||
|
// if value was changed
|
||||||
|
if (fabs(nozzle_diameters[extruder_idx == 0 ? 1 : 0] - new_nd) > EPSILON)
|
||||||
|
{
|
||||||
|
const wxString msg_text = _(L("Do you want to change the diameter for all extruders?"));
|
||||||
|
auto dialog = new wxMessageDialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO);
|
||||||
|
|
||||||
|
DynamicPrintConfig new_conf = *m_config;
|
||||||
|
if (dialog->ShowModal() == wxID_YES) {
|
||||||
|
for (size_t i = 0; i < nozzle_diameters.size(); i++) {
|
||||||
|
if (i==extruder_idx)
|
||||||
|
continue;
|
||||||
|
nozzle_diameters[i] = new_nd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nozzle_diameters[extruder_idx] = nozzle_diameters[extruder_idx == 0 ? 1 : 0];
|
||||||
|
|
||||||
|
new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters));
|
||||||
|
load_config(new_conf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update_dirty();
|
||||||
|
update();
|
||||||
|
};
|
||||||
|
|
||||||
optgroup = page->new_optgroup(_(L("Layer height limits")));
|
optgroup = page->new_optgroup(_(L("Layer height limits")));
|
||||||
optgroup->append_single_option_line("min_layer_height", extruder_idx);
|
optgroup->append_single_option_line("min_layer_height", extruder_idx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue