From a0b5cdfbb2ec84676f50222e46e5555738ba242b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 21 Jan 2025 15:39:42 +0800 Subject: [PATCH] ENH: generate framework for all layers jira: none Change-Id: I95f35ba45fe9f544c53bdf0c5a52a70bd45ee7a9 (cherry picked from commit 3e0b6eb2289eab383c6e616d37559b0c6619eca1) --- .../profiles/BBL/process/fdm_process_common.json | 1 + src/libslic3r/GCode/WipeTower.cpp | 13 ++++++++++++- src/libslic3r/GCode/WipeTower.hpp | 1 + src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 1 + src/libslic3r/PrintConfig.cpp | 6 ++++++ src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/ConfigManipulation.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 1 + 10 files changed, 26 insertions(+), 4 deletions(-) diff --git a/resources/profiles/BBL/process/fdm_process_common.json b/resources/profiles/BBL/process/fdm_process_common.json index 3bb0145f86..46db5c744e 100644 --- a/resources/profiles/BBL/process/fdm_process_common.json +++ b/resources/profiles/BBL/process/fdm_process_common.json @@ -110,5 +110,6 @@ "scarf_angle_threshold": "155", "infill_shift_step": "0.4", "infill_rotate_step": "0", + "prime_tower_enable_framework": "0", "symmetric_infill_y_axis": "0" } \ No newline at end of file diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 3d9146d811..42ffa0b14c 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1390,7 +1390,8 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi m_extra_rib_length((float)config.prime_tower_extra_rib_length.value), m_rib_width((float)config.prime_tower_rib_width.value), m_used_fillet(config.prime_tower_fillet_wall.value), - m_extra_spacing((float)config.prime_tower_infill_gap.value/100.f) + m_extra_spacing((float)config.prime_tower_infill_gap.value/100.f), + m_tower_framework(config.prime_tower_enable_framework.value) { // Read absolute value of first layer speed, if given as percentage, // it is taken over following default. Speeds from config are not @@ -3543,6 +3544,16 @@ void WipeTower::generate_wipe_tower_blocks() m_plan[layer_id].depth += block.layer_depths[layer_id]; } } + + if (m_tower_framework) { + for (int layer_id = 1; layer_id < m_plan.size(); ++layer_id) { + m_plan[layer_id].depth = 0; + for (auto &block : m_wipe_tower_blocks) { + block.layer_depths[layer_id] = block.layer_depths[0]; + m_plan[layer_id].depth += block.layer_depths[layer_id]; + } + } + } } void WipeTower::plan_tower_new() diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index faa3650c45..19df119ed1 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -435,6 +435,7 @@ private: float m_extra_rib_length=0.f; bool m_used_fillet{false}; Vec2f m_rib_offset{Vec2f(0.f, 0.f)}; + bool m_tower_framework{false}; // G-code generator parameters. float m_cooling_tube_retraction = 0.f; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index c351fd20f8..fb1b9d0d2c 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -814,7 +814,7 @@ static std::vector s_Preset_print_options { "outer_wall_line_width", "sparse_infill_line_width", "internal_solid_infill_line_width", "skin_infill_line_width","skeleton_infill_line_width", "top_surface_line_width", "support_line_width", "infill_wall_overlap","top_bottom_infill_wall_overlap", "bridge_flow", "internal_bridge_flow", - "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", + "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_enable_framework", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_rib_wall","prime_tower_extra_rib_length","prime_tower_rib_width","prime_tower_fillet_wall","prime_tower_infill_gap", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5dff1b32d6..3b23814d7c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -295,6 +295,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "hot_plate_temp" || opt_key == "textured_plate_temp" || opt_key == "enable_prime_tower" + || opt_key == "prime_tower_enable_framework" || opt_key == "prime_tower_width" || opt_key == "prime_tower_brim_width" || opt_key == "prime_tower_skip_points" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 943d5e4ca3..491432f246 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -5890,6 +5890,12 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("prime_tower_enable_framework", coBool); + def->label = L("Internal ribs"); + def->tooltip = L(""); + def->mode = comSimple; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("flush_volumes_vector", coFloats); // BBS: remove _L() def->label = ("Purging volumes - load/unload volumes"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index d41da78498..cf139c32f5 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1443,6 +1443,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionInts, nozzle_temperature_range_high)) ((ConfigOptionFloats, wipe_distance)) ((ConfigOptionBool, enable_prime_tower)) + ((ConfigOptionBool, prime_tower_enable_framework)) // BBS: change wipe_tower_x and wipe_tower_y data type to floats to add partplate logic ((ConfigOptionFloats, wipe_tower_x)) ((ConfigOptionFloats, wipe_tower_y)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 170ead5ceb..54fa8de0b2 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -759,7 +759,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("preheat_steps", have_ooze_prevention && (preheat_steps > 0)); bool have_prime_tower = config->opt_bool("enable_prime_tower"); - for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_rib_wall", "prime_tower_infill_gap"}) + for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_rib_wall", "prime_tower_infill_gap","prime_tower_enable_framework"}) toggle_line(el, have_prime_tower); bool have_rib_wall = config->opt_bool("prime_tower_rib_wall")&&have_prime_tower; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index c4e6887200..427cc9b790 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4039,7 +4039,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "nozzle_height", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle", "brim_width", "brim_object_gap", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation", - "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", + "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_enable_framework", "prime_tower_rib_wall","prime_tower_extra_rib_length", "prime_tower_rib_width","prime_tower_fillet_wall", "prime_tower_infill_gap","filament_prime_volume", "extruder_colour", "filament_colour", "filament_type", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology", // These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor. diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 96b46856fe..017ba69df5 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2476,6 +2476,7 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Prime tower"), L"param_tower"); optgroup->append_single_option_line("enable_prime_tower", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("prime_tower_skip_points", "parameter/prime-tower"); + optgroup->append_single_option_line("prime_tower_enable_framework", "parameter/prime-tower"); optgroup->append_single_option_line("prime_tower_width", "multimaterial_settings_prime_tower#width"); optgroup->append_single_option_line("prime_tower_brim_width", "multimaterial_settings_prime_tower#brim-width"); optgroup->append_single_option_line("prime_tower_infill_gap","parameter/prime-tower");