ENH: config: add default_nozzle_volume_type in printer
1. also remove original nozzle_volume_type from printer and move into project config 2. support save nozzle_volume_type into appconfig and load from it at beginning or printer switch jira: no-jira Change-Id: I01fc82d142fc633fc59a238796a71b9f8d180efb
This commit is contained in:
parent
8bdac292a0
commit
fe8b904e75
|
@ -1268,6 +1268,32 @@ std::vector<std::string> AppConfig::get_custom_color_from_config()
|
|||
return colors;
|
||||
}
|
||||
|
||||
void AppConfig::save_nozzle_volume_types_to_config(const std::string& printer_name, const std::string& nozzle_volume_types)
|
||||
{
|
||||
if (!has_section("nozzle_volume_types")) {
|
||||
std::map<std::string, std::string> data;
|
||||
data[printer_name] = nozzle_volume_types;
|
||||
set_section("nozzle_volume_types", data);
|
||||
} else {
|
||||
auto data = get_section("nozzle_volume_types");
|
||||
auto data_modify = const_cast<std::map<std::string, std::string>&>(data);
|
||||
data_modify[printer_name] = nozzle_volume_types;
|
||||
set_section("nozzle_volume_types", data_modify);
|
||||
}
|
||||
}
|
||||
|
||||
std::string AppConfig::get_nozzle_volume_types_from_config(const std::string& printer_name)
|
||||
{
|
||||
std::string nozzle_volume_types;
|
||||
if (has_section("nozzle_volume_types")) {
|
||||
auto data = get_section("nozzle_volume_types");
|
||||
if (data.find(printer_name) != data.end())
|
||||
nozzle_volume_types = data[printer_name];
|
||||
}
|
||||
|
||||
return nozzle_volume_types;
|
||||
}
|
||||
|
||||
void AppConfig::reset_selections()
|
||||
{
|
||||
auto it = m_storage.find("presets");
|
||||
|
|
|
@ -71,7 +71,7 @@ public:
|
|||
if (it == m_storage.end())
|
||||
return false;
|
||||
auto it2 = it->second.find(key);
|
||||
if (it2 == it->second.end())
|
||||
if (it2 == it->second.end())
|
||||
return false;
|
||||
value = it2->second;
|
||||
return true;
|
||||
|
@ -203,6 +203,10 @@ public:
|
|||
|
||||
void save_custom_color_to_config(const std::vector<std::string> &colors);
|
||||
std::vector<std::string> get_custom_color_from_config();
|
||||
|
||||
void save_nozzle_volume_types_to_config(const std::string& printer_name, const std::string& nozzle_volume_types);
|
||||
std::string get_nozzle_volume_types_from_config(const std::string& printer_name);
|
||||
|
||||
// reset the current print / filament / printer selections, so that
|
||||
// the PresetBundle::load_selections(const AppConfig &config) call will select
|
||||
// the first non-default preset when called.
|
||||
|
@ -252,7 +256,7 @@ public:
|
|||
|
||||
private:
|
||||
template<typename T>
|
||||
bool get_3dmouse_device_numeric_value(const std::string &device_name, const char *parameter_name, T &out) const
|
||||
bool get_3dmouse_device_numeric_value(const std::string &device_name, const char *parameter_name, T &out) const
|
||||
{
|
||||
std::string key = std::string("mouse_device:") + device_name;
|
||||
auto it = m_storage.find(key);
|
||||
|
|
|
@ -944,7 +944,7 @@ static std::vector<std::string> s_Preset_printer_options {
|
|||
"printer_technology",
|
||||
"printable_area", "bed_exclude_area","bed_custom_texture", "bed_custom_model", "gcode_flavor",
|
||||
"single_extruder_multi_material", "machine_start_gcode", "machine_end_gcode","printing_by_object_gcode","before_layer_change_gcode", "layer_change_gcode", "time_lapse_gcode", "change_filament_gcode",
|
||||
"printer_model", "printer_variant", "printer_extruder_id", "printer_extruder_variant", "extruder_variant_list", "nozzle_volume_type",
|
||||
"printer_model", "printer_variant", "printer_extruder_id", "printer_extruder_variant", "extruder_variant_list", "default_nozzle_volume_type",
|
||||
"printable_height", "extruder_clearance_radius", "extruder_clearance_max_radius","extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod",
|
||||
"nozzle_height",
|
||||
"default_print_profile", "inherits",
|
||||
|
|
|
@ -41,6 +41,7 @@ static std::vector<std::string> s_project_options {
|
|||
"wipe_tower_rotation_angle",
|
||||
"curr_bed_type",
|
||||
"flush_multiplier",
|
||||
"nozzle_volume_type"
|
||||
};
|
||||
|
||||
//BBS: add BBL as default
|
||||
|
@ -1674,6 +1675,23 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p
|
|||
}
|
||||
}
|
||||
|
||||
const Preset& current_printer = printers.get_selected_preset();
|
||||
const Preset* base_printer = printers.get_preset_base(current_printer);
|
||||
bool use_default_nozzle_volume_type = true;
|
||||
if (base_printer) {
|
||||
std::string prev_nozzle_volume_type = config.get_nozzle_volume_types_from_config(base_printer->name);
|
||||
if (!prev_nozzle_volume_type.empty()) {
|
||||
ConfigOptionEnumsGeneric* nozzle_volume_type_option = project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
if (nozzle_volume_type_option->deserialize(prev_nozzle_volume_type)) {
|
||||
use_default_nozzle_volume_type = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (use_default_nozzle_volume_type) {
|
||||
project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type")->values = current_printer.config.option<ConfigOptionEnumsGeneric>("default_nozzle_volume_type")->values;
|
||||
}
|
||||
|
||||
// Parse the initial physical printer name.
|
||||
std::string initial_physical_printer_name = remove_ini_suffix(config.get("presets", "physical_printer"));
|
||||
|
||||
|
|
|
@ -3078,7 +3078,18 @@ void PrintConfigDef::init_fff_params()
|
|||
def->enum_values.push_back("Big Traffic");
|
||||
def->enum_labels.push_back(L("Normal"));
|
||||
def->enum_labels.push_back(L("Big Traffic"));
|
||||
def->mode = comAdvanced;
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionEnumsGeneric{ NozzleVolumeType::nvtNormal });
|
||||
|
||||
def = this->add("default_nozzle_volume_type", coEnums);
|
||||
def->label = L("Default Nozzle Volume Type");
|
||||
def->tooltip = ("Default Nozzle volume type for extruders in this printer");
|
||||
def->enum_keys_map = &ConfigOptionEnum<NozzleVolumeType>::get_enum_values();
|
||||
def->enum_values.push_back("Normal");
|
||||
def->enum_values.push_back("Big Traffic");
|
||||
def->enum_labels.push_back(L("Normal"));
|
||||
def->enum_labels.push_back(L("Big Traffic"));
|
||||
def->mode = comDevelop;
|
||||
def->set_default_value(new ConfigOptionEnumsGeneric{ NozzleVolumeType::nvtNormal });
|
||||
|
||||
def = this->add("extruder_variant_list", coStrings);
|
||||
|
@ -4265,7 +4276,7 @@ void PrintConfigDef::init_extruder_option_keys()
|
|||
{
|
||||
// ConfigOptionFloats, ConfigOptionPercents, ConfigOptionBools, ConfigOptionStrings
|
||||
m_extruder_option_keys = {
|
||||
"extruder_type", "nozzle_diameter", "nozzle_volume_type", "min_layer_height", "max_layer_height", "extruder_offset",
|
||||
"extruder_type", "nozzle_diameter", "default_nozzle_volume_type", "min_layer_height", "max_layer_height", "extruder_offset",
|
||||
"retraction_length", "z_hop", "z_hop_types", "retraction_speed", "retract_lift_above", "retract_lift_below","deretraction_speed",
|
||||
"retract_before_wipe", "retract_restart_extra", "retraction_minimum_travel", "wipe", "wipe_distance",
|
||||
"retract_when_changing_layer", "retract_length_toolchange", "retract_restart_extra_toolchange", "extruder_colour",
|
||||
|
@ -5143,7 +5154,7 @@ std::set<std::string> filament_options_with_variant = {
|
|||
std::set<std::string> printer_extruder_options = {
|
||||
"extruder_type",
|
||||
"nozzle_diameter",
|
||||
"nozzle_volume_type",
|
||||
"default_nozzle_volume_type",
|
||||
"min_layer_height",
|
||||
"max_layer_height"
|
||||
};
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace Slic3r { namespace GUI {
|
|||
constexpr int titleWidth = 20;
|
||||
|
||||
// get the param index of cur_exturder
|
||||
int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id)
|
||||
int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id, NozzleVolumeType nozzle_volume_type)
|
||||
{
|
||||
if (printer_extruder_options.find(opt_key) != printer_extruder_options.end()) {
|
||||
return cur_extruder_id;
|
||||
|
@ -37,13 +37,13 @@ int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_ke
|
|||
assert(cur_extruder_id < extruder_count);
|
||||
const DynamicPrintConfig& cur_printer_config = wxGetApp().preset_bundle->printers.get_selected_preset().config;
|
||||
auto opt_extruder_type = dynamic_cast<const ConfigOptionEnumsGeneric *>(cur_printer_config.option("extruder_type"));
|
||||
auto opt_nozzle_volume_type = dynamic_cast<const ConfigOptionEnumsGeneric *>(cur_printer_config.option("nozzle_volume_type"));
|
||||
//auto opt_nozzle_volume_type = dynamic_cast<const ConfigOptionEnumsGeneric *>(cur_printer_config.option("default_nozzle_volume_type"));
|
||||
|
||||
if (!opt_extruder_type || !opt_nozzle_volume_type)
|
||||
if (!opt_extruder_type)
|
||||
return 0;
|
||||
|
||||
ExtruderType extruder_type = (ExtruderType) (opt_extruder_type->get_at(cur_extruder_id));
|
||||
NozzleVolumeType nozzle_volume_type = (NozzleVolumeType) (opt_nozzle_volume_type->get_at(cur_extruder_id));
|
||||
//NozzleVolumeType nozzle_volume_type = (NozzleVolumeType) (opt_nozzle_volume_type->get_at(cur_extruder_id));
|
||||
|
||||
std::string id_name, variant_name;
|
||||
unsigned int stride = 1;
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
extern int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id);
|
||||
extern int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id, NozzleVolumeType nozzle_volume_type);
|
||||
|
||||
// Thrown if the building of a parameter page is canceled.
|
||||
class UIBuildCanceled : public std::exception {};
|
||||
|
|
|
@ -1529,8 +1529,8 @@ void Sidebar::update_presets(Preset::Type preset_type)
|
|||
if (extruder_variants->size() == 2) {
|
||||
auto extruders_def = printer_preset.config.def()->get("extruder_type");
|
||||
auto extruders = printer_preset.config.option<ConfigOptionEnumsGeneric>("extruder_type");
|
||||
auto nozzle_volumes_def = printer_preset.config.def()->get("nozzle_volume_type");
|
||||
auto nozzle_volumes = printer_preset.config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto nozzle_volumes_def = wxGetApp().preset_bundle->project_config.def()->get("nozzle_volume_type");
|
||||
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto update_extruder_variant = [extruders_def, extruders, nozzle_volumes_def, nozzle_volumes, extruder_variants](ComboBox &box, int index) {
|
||||
box.Clear();
|
||||
auto extruder = extruders_def->enum_labels[extruders->values[index]];
|
||||
|
|
|
@ -4160,6 +4160,27 @@ void TabPrinter::build_unregular_pages(bool from_initial_build/* = false*/)
|
|||
void TabPrinter::on_preset_loaded()
|
||||
{
|
||||
// BBS
|
||||
//update nozzle_volume_type
|
||||
const Preset& current_printer = m_preset_bundle->printers.get_selected_preset();
|
||||
const Preset* base_printer = m_preset_bundle->printers.get_preset_base(current_printer);
|
||||
if (!base_printer)
|
||||
base_printer = ¤t_printer;
|
||||
std::string base_name = base_printer->name;
|
||||
if (base_name != m_base_preset_name) {
|
||||
bool use_default_nozzle_volume_type = true;
|
||||
m_base_preset_name = base_name;
|
||||
std::string prev_nozzle_volume_type = wxGetApp().app_config->get_nozzle_volume_types_from_config(base_name);
|
||||
if (!prev_nozzle_volume_type.empty()) {
|
||||
ConfigOptionEnumsGeneric* nozzle_volume_type_option = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
if (nozzle_volume_type_option->deserialize(prev_nozzle_volume_type)) {
|
||||
use_default_nozzle_volume_type = false;
|
||||
}
|
||||
}
|
||||
if (use_default_nozzle_volume_type) {
|
||||
m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type")->values = current_printer.config.option<ConfigOptionEnumsGeneric>("default_nozzle_volume_type")->values;
|
||||
}
|
||||
}
|
||||
|
||||
// update the extruders count field
|
||||
auto *nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"));
|
||||
size_t extruders_count = nozzle_diameter->values.size();
|
||||
|
@ -5702,11 +5723,19 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep
|
|||
|
||||
void TabPrinter::set_extruder_volume_type(int extruder_id, NozzleVolumeType type)
|
||||
{
|
||||
auto nozzle_volumes = m_config->option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
assert(nozzle_volumes->values.size() > (size_t)extruder_id);
|
||||
nozzle_volumes->values[extruder_id] = type;
|
||||
on_value_change((boost::format("nozzle_volume_type#%1%") % extruder_id).str(), int(type));
|
||||
update_dirty();
|
||||
|
||||
//save to app config
|
||||
if (!m_base_preset_name.empty()) {
|
||||
ConfigOptionEnumsGeneric* nozzle_volume_type_option = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
std::string nozzle_volume_type_str = nozzle_volume_type_option->serialize();
|
||||
wxGetApp().app_config->save_nozzle_volume_types_to_config(m_base_preset_name, nozzle_volume_type_str);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Return a callback to create a TabPrinter widget to edit bed shape
|
||||
|
@ -5856,7 +5885,7 @@ void Tab::update_extruder_variants(int extruder_id, bool reload)
|
|||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << extruder_id;
|
||||
if (m_extruder_switch) {
|
||||
Preset &printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
|
||||
auto nozzle_volumes = printer_preset.config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
if (nozzle_volumes->size() == 2) {
|
||||
auto nozzle_volumes_def = printer_preset.config.def()->get("nozzle_volume_type");
|
||||
wxString left, right;
|
||||
|
@ -5894,7 +5923,7 @@ void Tab::update_extruder_variants(int extruder_id, bool reload)
|
|||
void Tab::switch_excluder(int extruder_id, bool reload)
|
||||
{
|
||||
Preset & printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
|
||||
auto nozzle_volumes = printer_preset.config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
auto extruders = printer_preset.config.option<ConfigOptionEnumsGeneric>("extruder_type");
|
||||
std::pair<std::string, std::string> variant_keys[]{
|
||||
{}, {"print_extruder_id", "print_extruder_variant"}, // Preset::TYPE_PRINT
|
||||
|
|
|
@ -602,6 +602,7 @@ public:
|
|||
size_t m_initial_extruders_count;
|
||||
size_t m_sys_extruders_count;
|
||||
size_t m_cache_extruder_count = 0;
|
||||
std::string m_base_preset_name;
|
||||
|
||||
PrinterTechnology m_printer_technology = ptFFF;
|
||||
|
||||
|
|
Loading…
Reference in New Issue