diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 1a1d1bcbff..40743dd5ca 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -8084,7 +8084,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, _mm3_per_mm *= filament_flow_ratio; if (path.role() == erTopSolidInfill) { - _mm3_per_mm *= m_config.top_solid_infill_flow_ratio; + _mm3_per_mm *= NOZZLE_CONFIG(top_solid_infill_flow_ratio); } else if (path.role() == erBottomSurface) { _mm3_per_mm *= m_config.bottom_solid_infill_flow_ratio; } else if (path.role() == erInternalBridgeInfill) { diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 023e08f0ce..9f317d21af 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1522,7 +1522,7 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(1)); - def = this->add("top_solid_infill_flow_ratio", coFloat); + def = this->add("top_solid_infill_flow_ratio", coFloats); def->label = L("Top surface flow ratio"); def->category = L("Advanced"); def->tooltip = L("This factor affects the amount of material for top solid infill. " @@ -1531,7 +1531,8 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 2; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(1)); + def->nullable = true; + def->set_default_value(new ConfigOptionFloatsNullable{1}); def = this->add("bottom_solid_infill_flow_ratio", coFloat); def->label = L("Bottom surface flow ratio"); @@ -9397,7 +9398,8 @@ std::set print_options_with_variant = { "initial_layer_travel_jerk", "default_junction_deviation", "print_extruder_id", //coInts - "print_extruder_variant" //coStrings + "print_extruder_variant", //coStrings + "top_solid_infill_flow_ratio" }; std::set filament_options_with_variant = { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index eb03c8798e..9a485ff271 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1403,7 +1403,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatsNullable, small_perimeter_threshold)) ((ConfigOptionFloatsOrPercentsNullable, small_support_perimeter_speed)) ((ConfigOptionFloatsNullable, small_support_perimeter_threshold)) - ((ConfigOptionFloat, top_solid_infill_flow_ratio)) + ((ConfigOptionFloatsNullable, top_solid_infill_flow_ratio)) ((ConfigOptionFloat, bottom_solid_infill_flow_ratio)) ((ConfigOptionFloatOrPercent, infill_anchor)) ((ConfigOptionFloatOrPercent, infill_anchor_max)) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5eb36f20f9..607ec64174 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16410,7 +16410,9 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i _obj->config.set_key_value("internal_solid_infill_line_width", new ConfigOptionFloatOrPercent(nozzle_diameter * 1.2f, false)); // ORCA: use the pattern parameter _obj->config.set_key_value("top_surface_pattern", new ConfigOptionEnum(pattern)); - _obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f)); + const auto *top_solid_flow = dynamic_cast(_obj->config.option("top_solid_infill_flow_ratio")); + _obj->config.set_key_value("top_solid_infill_flow_ratio", + new ConfigOptionFloatsNullable(top_solid_flow ? top_solid_flow->size() : 1, 1.0f)); _obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45)); _obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135)); _obj->config.set_key_value("center_of_surface_pattern", new ConfigOptionEnum(CenterOfSurfacePattern::Each_Surface)); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 78b974c86d..9f2dbd28ee 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2791,7 +2791,7 @@ void TabPrint::build() optgroup->append_single_option_line("is_infill_first", "quality_settings_wall_and_surfaces#print-infill-first"); optgroup->append_single_option_line("wall_direction", "quality_settings_wall_and_surfaces#wall-loop-direction"); optgroup->append_single_option_line("print_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); - optgroup->append_single_option_line("top_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("top_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio", 0); optgroup->append_single_option_line("bottom_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("set_other_flow_ratios", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("first_layer_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index e432ccc152..00a36947dc 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -753,7 +753,9 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString _obj->config.set_key_value("top_surface_line_width", new ConfigOptionFloatOrPercent(nozzle_diameter * 1.2f, false)); _obj->config.set_key_value("internal_solid_infill_line_width", new ConfigOptionFloatOrPercent(nozzle_diameter * 1.2f, false)); _obj->config.set_key_value("top_surface_pattern", new ConfigOptionEnum(ipMonotonic)); - _obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f)); + const auto *top_solid_flow = dynamic_cast(_obj->config.option("top_solid_infill_flow_ratio")); + _obj->config.set_key_value("top_solid_infill_flow_ratio", + new ConfigOptionFloatsNullable(top_solid_flow ? top_solid_flow->size() : 1, 1.0f)); _obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45)); _obj->config.set_key_value("ironing_type", new ConfigOptionEnum(IroningType::NoIroning)); _obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloatsNullable({internal_solid_speed}));