diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 99f6c4cc9e..eebb4d54f8 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -458,7 +458,7 @@ static std::vector s_Preset_print_options { "infill_extruder", "solid_infill_extruder", "support_material_extruder", "support_material_interface_extruder", "ooze_prevention", "standby_temperature_delta", "interface_shells", "extrusion_width", "first_layer_extrusion_width", "perimeter_extrusion_width", "external_perimeter_extrusion_width", "infill_extrusion_width", "solid_infill_extrusion_width", - "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "infill_anchor", "infill_anchor_max", "bridge_flow_ratio", "clip_multipart_objects", + "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "infill_anchor", "infill_anchor_max", "bridge_flow_ratio", "elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "gcode_resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_brim_width", "wipe_tower_bridging", "single_extruder_multi_material_priming", "mmu_segmented_region_max_width", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index c843ec6eda..625b1a5549 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -598,14 +598,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.f)); - def = this->add("clip_multipart_objects", coBool); - def->label = L("Clip multi-part objects"); - def->tooltip = L("When printing multi-material objects, this settings will make Slic3r " - "to clip the overlapping object parts one by the other " - "(2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."); - def->mode = comExpert; - def->set_default_value(new ConfigOptionBool(true)); - def = this->add("colorprint_heights", coFloats); def->label = L("Colorprint height"); def->tooltip = L("Heights at which a filament change is to occur."); @@ -4052,6 +4044,22 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionFloat(0.001)); } +// Ignore the following obsolete configuration keys: +static std::set PrintConfigDef_ignore = { + "clip_multipart_objects", + "duplicate_x", "duplicate_y", "gcode_arcs", "multiply_x", "multiply_y", + "support_material_tool", "acceleration", "adjust_overhang_flow", + "standby_temperature", "scale", "rotate", "duplicate", "duplicate_grid", + "start_perimeters_at_concave_points", "start_perimeters_at_non_overhang", "randomize_start", + "seal_position", "vibration_limit", "bed_size", + "print_center", "g0", "threads", "pressure_advance", "wipe_tower_per_color_wipe", + "serial_port", "serial_speed", + // Introduced in some PrusaSlicer 2.3.1 alpha, later renamed or removed. + "fuzzy_skin_perimeter_mode", "fuzzy_skin_shape", + // Introduced in PrusaSlicer 2.3.0-alpha2, later replaced by automatic calculation based on extrusion width. + "wall_add_middle_threshold", "wall_split_middle_threshold", +}; + void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &value) { // handle legacy options @@ -4125,32 +4133,17 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } }*/ - // Ignore the following obsolete configuration keys: - static std::set ignore = { - "duplicate_x", "duplicate_y", "gcode_arcs", "multiply_x", "multiply_y", - "support_material_tool", "acceleration", "adjust_overhang_flow", - "standby_temperature", "scale", "rotate", "duplicate", "duplicate_grid", - "start_perimeters_at_concave_points", "start_perimeters_at_non_overhang", "randomize_start", - "seal_position", "vibration_limit", "bed_size", - "print_center", "g0", "threads", "pressure_advance", "wipe_tower_per_color_wipe", - "serial_port", "serial_speed", - // Introduced in some PrusaSlicer 2.3.1 alpha, later renamed or removed. - "fuzzy_skin_perimeter_mode", "fuzzy_skin_shape", - // Introduced in PrusaSlicer 2.3.0-alpha2, later replaced by automatic calculation based on extrusion width. - "wall_add_middle_threshold", "wall_split_middle_threshold", - }; - // In PrusaSlicer 2.3.0-alpha0 the "monotonous" infill was introduced, which was later renamed to "monotonic". if (value == "monotonous" && (opt_key == "top_fill_pattern" || opt_key == "bottom_fill_pattern" || opt_key == "fill_pattern")) value = "monotonic"; - if (ignore.find(opt_key) != ignore.end()) { - opt_key = ""; + if (PrintConfigDef_ignore.find(opt_key) != PrintConfigDef_ignore.end()) { + opt_key = {}; return; } if (! print_config_def.has(opt_key)) { - opt_key = ""; + opt_key = {}; return; } } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 6e732ce904..b899571490 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -487,7 +487,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, brim_separation)) ((ConfigOptionEnum, brim_type)) ((ConfigOptionFloat, brim_width)) - ((ConfigOptionBool, clip_multipart_objects)) ((ConfigOptionBool, dont_support_bridges)) ((ConfigOptionFloat, elefant_foot_compensation)) ((ConfigOptionFloatOrPercent, extrusion_width)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 1e45fb5740..80e26944ae 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -620,8 +620,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "slicing_mode") { steps.emplace_back(posSlice); } else if ( - opt_key == "clip_multipart_objects" - || opt_key == "elefant_foot_compensation" + opt_key == "elefant_foot_compensation" || opt_key == "support_material_contact_distance" || opt_key == "xy_size_compensation") { steps.emplace_back(posSlice); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 0d950b93ed..9dd74bfd70 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -237,9 +237,6 @@ static std::vector> slices_to_regions( const PrintObjectRegions &print_object_regions, const std::vector &zs, std::vector &&volume_slices, - // If clipping is disabled, then ExPolygons produced by different volumes will never be merged, thus they will be allowed to overlap. - // It is up to the model designer to handle these overlaps. - const bool clip_multipart_objects, const std::function &throw_on_cancel_callback) { model_volumes_sort_by_id(model_volumes); @@ -308,7 +305,7 @@ static std::vector> slices_to_regions( } tbb::parallel_for( tbb::blocked_range(0, zs_complex.size()), - [&slices_by_region, &print_object_regions, &zs_complex, &layer_ranges_regions_to_slices, clip_multipart_objects, &throw_on_cancel_callback] + [&slices_by_region, &print_object_regions, &zs_complex, &layer_ranges_regions_to_slices, &throw_on_cancel_callback] (const tbb::blocked_range &range) { float z = zs_complex[range.begin()].second; auto it_layer_range = layer_range_first(print_object_regions.layer_ranges, z); @@ -359,7 +356,7 @@ static std::vector> slices_to_regions( if (next_region_same_modifier) // To be used in the following iteration. temp_slices[idx_region + 1].expolygons = std::move(source); - } else if ((region.model_volume->is_model_part() && clip_multipart_objects) || region.model_volume->is_negative_volume()) { + } else if (region.model_volume->is_model_part() || region.model_volume->is_negative_volume()) { // Clip every non-zero region preceding it. for (int idx_region2 = 0; idx_region2 < idx_region; ++ idx_region2) if (! temp_slices[idx_region2].expolygons.empty()) { @@ -388,10 +385,7 @@ static std::vector> slices_to_regions( merged = true; } } - // Don't unite the regions if ! clip_multipart_objects. In that case it is user's responsibility - // to handle region overlaps. Indeed, one may intentionally let the regions overlap to produce crossing perimeters - // for example. - if (merged && clip_multipart_objects) + if (merged) expolygons = closing_ex(expolygons, float(scale_(EPSILON))); slices_by_region[temp_slices[i].region_id][z_idx] = std::move(expolygons); i = j; @@ -696,7 +690,6 @@ void PrintObject::slice_volumes() slice_volumes_inner( print->config(), this->config(), this->trafo_centered(), this->model_object()->volumes, m_shared_regions->layer_ranges, slice_zs, throw_on_cancel_callback), - m_config.clip_multipart_objects, throw_on_cancel_callback); for (size_t region_id = 0; region_id < region_slices.size(); ++ region_id) { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 2642cd0042..17ddd63abd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1641,9 +1641,6 @@ void TabPrint::build() optgroup->append_single_option_line("xy_size_compensation"); optgroup->append_single_option_line("elefant_foot_compensation", "elephant-foot-compensation_114487"); - optgroup = page->new_optgroup(L("Other")); - optgroup->append_single_option_line("clip_multipart_objects"); - optgroup = page->new_optgroup(L("Arachne perimeter generator")); optgroup->append_single_option_line("wall_transition_angle"); optgroup->append_single_option_line("wall_transition_filter_deviation");