ENH:add flat_irong as print preset

jira: none
Change-Id: Ic29634780e1ece2d0cffddd0c2cf7cafb1318fa2
This commit is contained in:
jiangkai.zhao 2025-04-22 16:09:02 +08:00 committed by lane.wei
parent 7dc269f994
commit 2acd313f72
8 changed files with 18 additions and 10 deletions

View File

@ -153,5 +153,6 @@
"symmetric_infill_y_axis": "0", "symmetric_infill_y_axis": "0",
"prime_tower_lift_speed": "90", "prime_tower_lift_speed": "90",
"prime_tower_lift_height": "-1", "prime_tower_lift_height": "-1",
"prime_tower_max_speed": "90" "prime_tower_max_speed": "90",
"prime_tower_flat_ironing":"0"
} }

View File

@ -197,5 +197,6 @@
"80%", "80%",
"80%" "80%"
], ],
"z_direction_outwall_speed_continuous": "1" "z_direction_outwall_speed_continuous": "1",
"prime_tower_flat_ironing":"1"
} }

View File

@ -16,7 +16,6 @@
namespace Slic3r namespace Slic3r
{ {
bool flat_ironing = true; // Whether to enable flat ironing for the wipe tower
float flat_iron_area = 4.f; float flat_iron_area = 4.f;
constexpr float flat_iron_speed = 10.f * 60.f; constexpr float flat_iron_speed = 10.f * 60.f;
static const double wipe_tower_wall_infill_overlap = 0.0; 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_extra_spacing((float)config.prime_tower_infill_gap.value/100.f),
m_tower_framework(config.prime_tower_enable_framework.value), m_tower_framework(config.prime_tower_enable_framework.value),
m_max_speed((float)config.prime_tower_max_speed.value*60.f), 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_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(); m_normal_accels.clear();
for (auto value : config.default_acceleration.values) { for (auto value : config.default_acceleration.values) {
m_normal_accels.emplace_back((unsigned int) floor(value + 0.5)); 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 m_bed_bottom_left = m_bed_shape == RectangularBed
? Vec2f(bed_points.front().x(), bed_points.front().y()) ? Vec2f(bed_points.front().x(), bed_points.front().y())
: Vec2f::Zero(); : 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); 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.extrude(writer.x() + ironing_length, writer.y(), wipe_speed);
writer.retract(retract_length, retract_speed); writer.retract(retract_length, retract_speed);
writer.travel(writer.x() - 1.5 * ironing_length, writer.y(), 600.); 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.); writer.travel(writer.x() + 0.5f * ironing_length, writer.y(), 240.);
Vec2f pos{writer.x() + 1.f * ironing_length, writer.y()}; 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); 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.extrude(writer.x() - ironing_length, writer.y(), wipe_speed);
writer.retract(retract_length, retract_speed); writer.retract(retract_length, retract_speed);
writer.travel(writer.x() + 1.5 * ironing_length, writer.y(), 600.); 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.); writer.travel(writer.x() - 0.5f * ironing_length, writer.y(), 240.);
Vec2f pos{writer.x() - 1.0f * ironing_length, writer.y()}; 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); writer.spiral_flat_ironing(writer.pos(), flat_iron_area, m_perimeter_width, flat_iron_speed);

View File

@ -511,7 +511,7 @@ private:
std::vector<double> m_printable_height; std::vector<double> m_printable_height;
bool is_first_layer() const { return size_t(m_layer_info - m_plan.begin()) == m_first_layer_idx; } 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 is_valid_last_layer(int tool) const;
bool m_flat_ironing=false;
// Calculates length of extrusion line to extrude given volume // Calculates length of extrusion line to extrude given volume
float volume_to_length(float volume, float line_width, float layer_height) const { 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)))); return std::max(0.f, volume / (layer_height * (line_width - layer_height * (1.f - float(M_PI) / 4.f))));

View File

@ -881,7 +881,7 @@ static std::vector<std::string> s_Preset_print_options {
"elefant_foot_compensation", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_enable_framework", "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_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", "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", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits",
"flush_into_infill", "flush_into_objects", "flush_into_support","process_notes", "flush_into_infill", "flush_into_objects", "flush_into_support","process_notes",
// BBS // BBS

View File

@ -277,6 +277,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|| opt_key == "prime_tower_lift_height" || opt_key == "prime_tower_lift_height"
|| opt_key == "prime_tower_brim_width" || opt_key == "prime_tower_brim_width"
|| opt_key == "prime_tower_skip_points" || opt_key == "prime_tower_skip_points"
|| opt_key == "prime_tower_flat_ironing"
|| opt_key == "prime_tower_rib_wall" || opt_key == "prime_tower_rib_wall"
|| opt_key == "prime_tower_extra_rib_length" || opt_key == "prime_tower_extra_rib_length"
|| opt_key == "prime_tower_rib_width" || opt_key == "prime_tower_rib_width"

View File

@ -4559,6 +4559,10 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(true)); 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 = this->add("prime_tower_rib_wall", coBool);
def->label = L("Rib wall"); def->label = L("Rib wall");
def->tooltip = L("The wall of prime tower will add four ribs and make its " def->tooltip = L("The wall of prime tower will add four ribs and make its "

View File

@ -1236,6 +1236,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE(
((ConfigOptionFloat, prime_tower_rib_width)) ((ConfigOptionFloat, prime_tower_rib_width))
((ConfigOptionPercent, prime_tower_infill_gap)) ((ConfigOptionPercent, prime_tower_infill_gap))
((ConfigOptionBool, prime_tower_skip_points)) ((ConfigOptionBool, prime_tower_skip_points))
((ConfigOptionBool, prime_tower_flat_ironing))
((ConfigOptionBool, prime_tower_rib_wall)) ((ConfigOptionBool, prime_tower_rib_wall))
((ConfigOptionBool, prime_tower_fillet_wall)) ((ConfigOptionBool, prime_tower_fillet_wall))
//((ConfigOptionFloat, wipe_tower_bridging)) //((ConfigOptionFloat, wipe_tower_bridging))