From 2acd313f72d5e9531cf1394c218dc3bc6b8d9521 Mon Sep 17 00:00:00 2001 From: "jiangkai.zhao" Date: Tue, 22 Apr 2025 16:09:02 +0800 Subject: [PATCH] ENH:add flat_irong as print preset jira: none Change-Id: Ic29634780e1ece2d0cffddd0c2cf7cafb1318fa2 --- .../profiles/BBL/process/fdm_process_common.json | 3 ++- .../BBL/process/fdm_process_dual_common.json | 3 ++- src/libslic3r/GCode/WipeTower.cpp | 12 ++++++------ src/libslic3r/GCode/WipeTower.hpp | 2 +- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 1 + src/libslic3r/PrintConfig.cpp | 4 ++++ src/libslic3r/PrintConfig.hpp | 1 + 8 files changed, 18 insertions(+), 10 deletions(-) diff --git a/resources/profiles/BBL/process/fdm_process_common.json b/resources/profiles/BBL/process/fdm_process_common.json index add9709f6..5b55ef946 100644 --- a/resources/profiles/BBL/process/fdm_process_common.json +++ b/resources/profiles/BBL/process/fdm_process_common.json @@ -153,5 +153,6 @@ "symmetric_infill_y_axis": "0", "prime_tower_lift_speed": "90", "prime_tower_lift_height": "-1", - "prime_tower_max_speed": "90" + "prime_tower_max_speed": "90", + "prime_tower_flat_ironing":"0" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_dual_common.json b/resources/profiles/BBL/process/fdm_process_dual_common.json index ae9ff8deb..33bc7cb39 100644 --- a/resources/profiles/BBL/process/fdm_process_dual_common.json +++ b/resources/profiles/BBL/process/fdm_process_dual_common.json @@ -197,5 +197,6 @@ "80%", "80%" ], - "z_direction_outwall_speed_continuous": "1" + "z_direction_outwall_speed_continuous": "1", + "prime_tower_flat_ironing":"1" } \ No newline at end of file diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 3837e96cc..004ff9f87 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -16,7 +16,6 @@ namespace Slic3r { -bool flat_ironing = true; // Whether to enable flat ironing for the wipe tower float flat_iron_area = 4.f; constexpr float flat_iron_speed = 10.f * 60.f; static const double wipe_tower_wall_infill_overlap = 0.0; @@ -1596,10 +1595,12 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi m_extra_spacing((float)config.prime_tower_infill_gap.value/100.f), m_tower_framework(config.prime_tower_enable_framework.value), m_max_speed((float)config.prime_tower_max_speed.value*60.f), - m_printable_height(config.extruder_printable_height.values), m_accel_to_decel_enable(config.accel_to_decel_enable.value), - m_accel_to_decel_factor(config.accel_to_decel_factor.value) + m_accel_to_decel_factor(config.accel_to_decel_factor.value), + m_printable_height(config.extruder_printable_height.values), + m_flat_ironing(config.prime_tower_flat_ironing.value) { + m_flat_ironing = (m_flat_ironing && m_use_gap_wall); m_normal_accels.clear(); for (auto value : config.default_acceleration.values) { m_normal_accels.emplace_back((unsigned int) floor(value + 0.5)); @@ -1663,7 +1664,6 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi m_bed_bottom_left = m_bed_shape == RectangularBed ? Vec2f(bed_points.front().x(), bed_points.front().y()) : Vec2f::Zero(); - flat_ironing = config.nozzle_diameter.values.size() > 1;//Only used for dual extrusion m_last_layer_id.resize(config.nozzle_diameter.size(), -1); } @@ -3616,7 +3616,7 @@ void WipeTower::toolchange_wipe_new(WipeTowerWriter &writer, const box_coordinat writer.extrude(writer.x() + ironing_length, writer.y(), wipe_speed); writer.retract(retract_length, retract_speed); writer.travel(writer.x() - 1.5 * ironing_length, writer.y(), 600.); - if (flat_ironing) { + if (m_flat_ironing) { writer.travel(writer.x() + 0.5f * ironing_length, writer.y(), 240.); Vec2f pos{writer.x() + 1.f * ironing_length, writer.y()}; writer.spiral_flat_ironing(writer.pos(), flat_iron_area, m_perimeter_width, flat_iron_speed); @@ -3631,7 +3631,7 @@ void WipeTower::toolchange_wipe_new(WipeTowerWriter &writer, const box_coordinat writer.extrude(writer.x() - ironing_length, writer.y(), wipe_speed); writer.retract(retract_length, retract_speed); writer.travel(writer.x() + 1.5 * ironing_length, writer.y(), 600.); - if (flat_ironing) { + if (m_flat_ironing) { writer.travel(writer.x() - 0.5f * ironing_length, writer.y(), 240.); Vec2f pos{writer.x() - 1.0f * ironing_length, writer.y()}; writer.spiral_flat_ironing(writer.pos(), flat_iron_area, m_perimeter_width, flat_iron_speed); diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 28bbd164c..0ac5a7756 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -511,7 +511,7 @@ private: std::vector m_printable_height; bool is_first_layer() const { return size_t(m_layer_info - m_plan.begin()) == m_first_layer_idx; } bool is_valid_last_layer(int tool) const; - + bool m_flat_ironing=false; // Calculates length of extrusion line to extrude given volume float volume_to_length(float volume, float line_width, float layer_height) const { return std::max(0.f, volume / (layer_height * (line_width - layer_height * (1.f - float(M_PI) / 4.f)))); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 0b457c811..ee028d811 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -881,7 +881,7 @@ static std::vector s_Preset_print_options { "elefant_foot_compensation", "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_max_speed", "prime_tower_rib_wall","prime_tower_extra_rib_length","prime_tower_rib_width","prime_tower_fillet_wall","prime_tower_infill_gap","prime_tower_lift_speed","prime_tower_lift_height", - "enable_circle_compensation", "circle_compensation_manual_offset", "apply_scarf_seam_on_circles", + "prime_tower_flat_ironing","enable_circle_compensation", "circle_compensation_manual_offset", "apply_scarf_seam_on_circles", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", "flush_into_infill", "flush_into_objects", "flush_into_support","process_notes", // BBS diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5f2c18666..48d1b2d8d 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -277,6 +277,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "prime_tower_lift_height" || opt_key == "prime_tower_brim_width" || opt_key == "prime_tower_skip_points" + || opt_key == "prime_tower_flat_ironing" || opt_key == "prime_tower_rib_wall" || opt_key == "prime_tower_extra_rib_length" || opt_key == "prime_tower_rib_width" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3d59f82c3..942d9b1e8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4559,6 +4559,10 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("prime_tower_flat_ironing", coBool); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("prime_tower_rib_wall", coBool); def->label = L("Rib wall"); def->tooltip = L("The wall of prime tower will add four ribs and make its " diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 1f3e4bf87..3d1e89925 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1236,6 +1236,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, prime_tower_rib_width)) ((ConfigOptionPercent, prime_tower_infill_gap)) ((ConfigOptionBool, prime_tower_skip_points)) + ((ConfigOptionBool, prime_tower_flat_ironing)) ((ConfigOptionBool, prime_tower_rib_wall)) ((ConfigOptionBool, prime_tower_fillet_wall)) //((ConfigOptionFloat, wipe_tower_bridging))