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
(cherry picked from commit fe8b904e7551cde83b1ead75922e9b60278b50ad)
This commit is contained in:
lane.wei
2024-08-06 16:31:32 +08:00
committed by Noisyfox
parent b2f2e41b80
commit 9142654795
7 changed files with 98 additions and 9 deletions

View File

@@ -1360,6 +1360,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");

View File

@@ -94,7 +94,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;
@@ -280,6 +280,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.
@@ -345,7 +349,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);

View File

@@ -895,7 +895,7 @@ static std::vector<std::string> s_Preset_printer_options {
"printable_area", "extruder_printable_area", "bed_exclude_area","bed_custom_texture", "bed_custom_model", "gcode_flavor",
"fan_kickstart", "fan_speedup_time", "fan_speedup_overhangs",
"single_extruder_multi_material", "manual_filament_change", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "printing_by_object_gcode", "layer_change_gcode", "time_lapse_gcode", "change_filament_gcode", "change_extrusion_role_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_height_to_lid", "extruder_clearance_height_to_rod",
"nozzle_height",
"default_print_profile", "inherits",

View File

@@ -41,6 +41,7 @@ static std::vector<std::string> s_project_options {
"wipe_tower_rotation_angle",
"curr_bed_type",
"flush_multiplier",
"nozzle_volume_type"
};
//Orca: add custom as default
@@ -1785,6 +1786,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"));

View File

@@ -4454,7 +4454,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);
@@ -6264,7 +6275,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", "travel_slope", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retraction_speed", "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",
@@ -7241,7 +7252,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",
"extruder_printable_area",
"min_layer_height",
"max_layer_height"