Added "Filament spool weight" option to filament options
This commit is contained in:
parent
e83fb4582c
commit
3d3e36ba8d
@ -96,6 +96,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
|||||||
"filament_density",
|
"filament_density",
|
||||||
"filament_notes",
|
"filament_notes",
|
||||||
"filament_cost",
|
"filament_cost",
|
||||||
|
"filament_spool_weight",
|
||||||
"first_layer_acceleration",
|
"first_layer_acceleration",
|
||||||
"first_layer_bed_temperature",
|
"first_layer_bed_temperature",
|
||||||
"first_layer_speed",
|
"first_layer_speed",
|
||||||
|
@ -763,6 +763,13 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->set_default_value(new ConfigOptionFloats { 0. });
|
def->set_default_value(new ConfigOptionFloats { 0. });
|
||||||
|
|
||||||
|
def = this->add("filament_spool_weight", coFloats);
|
||||||
|
def->label = L("Spool weight");
|
||||||
|
def->tooltip = L("Enter your filament spool weight. This is only for statistical information.");
|
||||||
|
def->sidetext = L("g");
|
||||||
|
def->min = 0;
|
||||||
|
def->set_default_value(new ConfigOptionFloats { 1000. });
|
||||||
|
|
||||||
def = this->add("filament_settings_id", coStrings);
|
def = this->add("filament_settings_id", coStrings);
|
||||||
def->set_default_value(new ConfigOptionStrings { "" });
|
def->set_default_value(new ConfigOptionStrings { "" });
|
||||||
def->cli = ConfigOptionDef::nocli;
|
def->cli = ConfigOptionDef::nocli;
|
||||||
|
@ -617,6 +617,7 @@ public:
|
|||||||
ConfigOptionStrings filament_type;
|
ConfigOptionStrings filament_type;
|
||||||
ConfigOptionBools filament_soluble;
|
ConfigOptionBools filament_soluble;
|
||||||
ConfigOptionFloats filament_cost;
|
ConfigOptionFloats filament_cost;
|
||||||
|
ConfigOptionFloats filament_spool_weight;
|
||||||
ConfigOptionFloats filament_max_volumetric_speed;
|
ConfigOptionFloats filament_max_volumetric_speed;
|
||||||
ConfigOptionFloats filament_loading_speed;
|
ConfigOptionFloats filament_loading_speed;
|
||||||
ConfigOptionFloats filament_loading_speed_start;
|
ConfigOptionFloats filament_loading_speed_start;
|
||||||
@ -690,6 +691,7 @@ protected:
|
|||||||
OPT_PTR(filament_type);
|
OPT_PTR(filament_type);
|
||||||
OPT_PTR(filament_soluble);
|
OPT_PTR(filament_soluble);
|
||||||
OPT_PTR(filament_cost);
|
OPT_PTR(filament_cost);
|
||||||
|
OPT_PTR(filament_spool_weight);
|
||||||
OPT_PTR(filament_max_volumetric_speed);
|
OPT_PTR(filament_max_volumetric_speed);
|
||||||
OPT_PTR(filament_loading_speed);
|
OPT_PTR(filament_loading_speed);
|
||||||
OPT_PTR(filament_loading_speed_start);
|
OPT_PTR(filament_loading_speed_start);
|
||||||
|
@ -207,9 +207,11 @@ class SlicedInfo : public wxStaticBoxSizer
|
|||||||
public:
|
public:
|
||||||
SlicedInfo(wxWindow *parent);
|
SlicedInfo(wxWindow *parent);
|
||||||
void SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label="");
|
void SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label="");
|
||||||
|
void SetNoteAndShow(const wxString& text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::pair<wxStaticText*, wxStaticText*>> info_vec;
|
std::vector<std::pair<wxStaticText*, wxStaticText*>> info_vec;
|
||||||
|
wxStaticText* m_notes {nullptr};
|
||||||
};
|
};
|
||||||
|
|
||||||
SlicedInfo::SlicedInfo(wxWindow *parent) :
|
SlicedInfo::SlicedInfo(wxWindow *parent) :
|
||||||
@ -241,6 +243,10 @@ SlicedInfo::SlicedInfo(wxWindow *parent) :
|
|||||||
init_info_label(_(L("Number of tool changes")));
|
init_info_label(_(L("Number of tool changes")));
|
||||||
|
|
||||||
Add(grid_sizer, 0, wxEXPAND);
|
Add(grid_sizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
m_notes = new wxStaticText(parent, wxID_ANY, "N/A");
|
||||||
|
Add(m_notes, 0, wxEXPAND);
|
||||||
|
|
||||||
this->Show(false);
|
this->Show(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,6 +261,14 @@ void SlicedInfo::SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const w
|
|||||||
info_vec[idx].second->Show(show);
|
info_vec[idx].second->Show(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SlicedInfo::SetNoteAndShow(const wxString& text)
|
||||||
|
{
|
||||||
|
const bool show = text != "N/A";
|
||||||
|
if (show)
|
||||||
|
m_notes->SetLabelText(text);
|
||||||
|
m_notes->Show(show);
|
||||||
|
}
|
||||||
|
|
||||||
PresetComboBox::PresetComboBox(wxWindow *parent, Preset::Type preset_type) :
|
PresetComboBox::PresetComboBox(wxWindow *parent, Preset::Type preset_type) :
|
||||||
PresetBitmapComboBox(parent, wxSize(15 * wxGetApp().em_unit(), -1)),
|
PresetBitmapComboBox(parent, wxSize(15 * wxGetApp().em_unit(), -1)),
|
||||||
preset_type(preset_type),
|
preset_type(preset_type),
|
||||||
@ -1245,6 +1259,18 @@ void Sidebar::update_sliced_info_sizer()
|
|||||||
p->sliced_info->SetTextAndShow(siFilament_mm3, wxString::Format("%.2f", ps.total_extruded_volume));
|
p->sliced_info->SetTextAndShow(siFilament_mm3, wxString::Format("%.2f", ps.total_extruded_volume));
|
||||||
p->sliced_info->SetTextAndShow(siFilament_g, ps.total_weight == 0.0 ? "N/A" : wxString::Format("%.2f", ps.total_weight));
|
p->sliced_info->SetTextAndShow(siFilament_g, ps.total_weight == 0.0 ? "N/A" : wxString::Format("%.2f", ps.total_weight));
|
||||||
|
|
||||||
|
// Show a note information, if there is not enough filaments to complete a print
|
||||||
|
wxString note = "N/A";
|
||||||
|
DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_FILAMENT)->get_config();
|
||||||
|
auto filament_spool_weights = dynamic_cast<const ConfigOptionFloats*>(cfg->option("filament_spool_weight"))->values;
|
||||||
|
if (ps.total_weight > 0.0 && !filament_spool_weights.empty() && filament_spool_weights[0] > 0.0 &&
|
||||||
|
ps.total_weight > filament_spool_weights[0])
|
||||||
|
note = "\n" + _(L("WARNING")) + ":\n " +
|
||||||
|
_(L("There is not enough filaments to complete a print")) + ".\n " +
|
||||||
|
from_u8((boost::format(_utf8(L("You only have %.2f g of the required %.2f g."))) %
|
||||||
|
filament_spool_weights[0] % ps.total_weight).str());
|
||||||
|
p->sliced_info->SetNoteAndShow(note);
|
||||||
|
|
||||||
new_label = _(L("Cost"));
|
new_label = _(L("Cost"));
|
||||||
if (is_wipe_tower)
|
if (is_wipe_tower)
|
||||||
new_label += from_u8((boost::format(":\n - %1%\n - %2%") % _utf8(L("objects")) % _utf8(L("wipe tower"))).str());
|
new_label += from_u8((boost::format(":\n - %1%\n - %2%") % _utf8(L("objects")) % _utf8(L("wipe tower"))).str());
|
||||||
|
@ -432,7 +432,7 @@ const std::vector<std::string>& Preset::filament_options()
|
|||||||
{
|
{
|
||||||
static std::vector<std::string> s_opts {
|
static std::vector<std::string> s_opts {
|
||||||
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
|
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
|
||||||
"extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time",
|
"extrusion_multiplier", "filament_density", "filament_cost", "filament_spool_weight", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time",
|
||||||
"filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves",
|
"filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves",
|
||||||
"filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower",
|
"filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower",
|
||||||
"temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed",
|
"temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed",
|
||||||
|
@ -1100,6 +1100,12 @@ void Tab::update_frequently_changed_parameters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tab::update_sliced_info_on_plater()
|
||||||
|
{
|
||||||
|
wxGetApp().sidebar().update_sliced_info_sizer();
|
||||||
|
wxGetApp().sidebar().Layout();
|
||||||
|
}
|
||||||
|
|
||||||
void TabPrint::build()
|
void TabPrint::build()
|
||||||
{
|
{
|
||||||
m_presets = &m_preset_bundle->prints;
|
m_presets = &m_preset_bundle->prints;
|
||||||
@ -1484,6 +1490,19 @@ void TabFilament::build()
|
|||||||
optgroup->append_single_option_line("extrusion_multiplier");
|
optgroup->append_single_option_line("extrusion_multiplier");
|
||||||
optgroup->append_single_option_line("filament_density");
|
optgroup->append_single_option_line("filament_density");
|
||||||
optgroup->append_single_option_line("filament_cost");
|
optgroup->append_single_option_line("filament_cost");
|
||||||
|
optgroup->append_single_option_line("filament_spool_weight");
|
||||||
|
|
||||||
|
optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value)
|
||||||
|
{
|
||||||
|
update_dirty();
|
||||||
|
|
||||||
|
if (opt_key== "filament_spool_weight")
|
||||||
|
// Change of this option only has an influence to an update of "Sliced Info"
|
||||||
|
update_sliced_info_on_plater();
|
||||||
|
else
|
||||||
|
// update configuration for its check and to schedule a background process, if needed
|
||||||
|
update();
|
||||||
|
};
|
||||||
|
|
||||||
optgroup = page->new_optgroup(_(L("Temperature")) + wxString(" °C", wxConvUTF8));
|
optgroup = page->new_optgroup(_(L("Temperature")) + wxString(" °C", wxConvUTF8));
|
||||||
Line line = { _(L("Extruder")), "" };
|
Line line = { _(L("Extruder")), "" };
|
||||||
@ -3567,8 +3586,7 @@ void TabSLAMaterial::build()
|
|||||||
update_dirty();
|
update_dirty();
|
||||||
|
|
||||||
// Change of any from those options influences for an update of "Sliced Info"
|
// Change of any from those options influences for an update of "Sliced Info"
|
||||||
wxGetApp().sidebar().update_sliced_info_sizer();
|
update_sliced_info_on_plater();
|
||||||
wxGetApp().sidebar().Layout();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
optgroup = page->new_optgroup(_(L("Layers")));
|
optgroup = page->new_optgroup(_(L("Layers")));
|
||||||
|
@ -321,6 +321,7 @@ protected:
|
|||||||
void build_preset_description_line(ConfigOptionsGroup* optgroup);
|
void build_preset_description_line(ConfigOptionsGroup* optgroup);
|
||||||
void update_preset_description_line();
|
void update_preset_description_line();
|
||||||
void update_frequently_changed_parameters();
|
void update_frequently_changed_parameters();
|
||||||
|
void update_sliced_info_on_plater();
|
||||||
void fill_icon_descriptions();
|
void fill_icon_descriptions();
|
||||||
void set_tooltips_text();
|
void set_tooltips_text();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user