mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-31 06:42:07 +00:00
Scrub the WipeTower2 toolchange entry with the BBL flat-ironing spiral
The entry scrub now matches the BBL tower's toolchange_wipe_new sequence: after the ironing drag the retracted nozzle runs a dry expanding-square spiral centred on the wall-gap entry point before resuming the purge row. The spiral runs whenever the gap wall is on (disable per filament via filament_tower_ironing_area = 0); WipeTower2 no longer reads prime_tower_flat_ironing.
This commit is contained in:
@@ -24,7 +24,6 @@
|
|||||||
namespace Slic3r
|
namespace Slic3r
|
||||||
{
|
{
|
||||||
|
|
||||||
static constexpr 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;
|
||||||
static constexpr double WIPE_TOWER_RESOLUTION = 0.1;
|
static constexpr double WIPE_TOWER_RESOLUTION = 0.1;
|
||||||
@@ -1364,7 +1363,6 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau
|
|||||||
m_wall_type((int)config.wipe_tower_wall_type),
|
m_wall_type((int)config.wipe_tower_wall_type),
|
||||||
// The cone wall has its own fully separate generator with no gap machinery.
|
// The cone wall has its own fully separate generator with no gap machinery.
|
||||||
m_use_gap_wall(config.prime_tower_skip_points.value && config.wipe_tower_wall_type.value != wtwCone),
|
m_use_gap_wall(config.prime_tower_skip_points.value && config.wipe_tower_wall_type.value != wtwCone),
|
||||||
m_flat_ironing(config.prime_tower_flat_ironing.value),
|
|
||||||
m_enable_tower_interface_features(config.enable_tower_interface_features.value),
|
m_enable_tower_interface_features(config.enable_tower_interface_features.value),
|
||||||
m_enable_tower_interface_cooldown_during_tower(config.enable_tower_interface_cooldown_during_tower.value)
|
m_enable_tower_interface_cooldown_during_tower(config.enable_tower_interface_cooldown_during_tower.value)
|
||||||
{
|
{
|
||||||
@@ -2060,9 +2058,6 @@ void WipeTower2::toolchange_Wipe(
|
|||||||
m_left_to_right = !m_left_to_right;
|
m_left_to_right = !m_left_to_right;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool do_ironing = m_flat_ironing && (!interface_layer || !m_enable_tower_interface_features);
|
|
||||||
const float ironing_area = m_filpar[m_current_tool].tower_ironing_area;
|
|
||||||
|
|
||||||
// now the wiping itself:
|
// now the wiping itself:
|
||||||
for (int i = 0; true; ++i) {
|
for (int i = 0; true; ++i) {
|
||||||
if (i!=0) {
|
if (i!=0) {
|
||||||
@@ -2075,10 +2070,12 @@ void WipeTower2::toolchange_Wipe(
|
|||||||
float traversed_x = writer.x();
|
float traversed_x = writer.x();
|
||||||
|
|
||||||
// BBS gap wall: iron the first few mm of the purge, then drag the retracted nozzle
|
// BBS gap wall: iron the first few mm of the purge, then drag the retracted nozzle
|
||||||
// back out through the wall gap so the toolchange start blob is not left on the wall.
|
// back out through the wall gap and scrub it with a dry spiral centred on the entry
|
||||||
// WT2's entry gap always sits at the left-edge entry point, so only iron when the
|
// point so the toolchange start blob is not left on the wall (same sequence as the
|
||||||
// purge actually starts there heading right (in-place toolchangers do; SEMM
|
// BBL tower's toolchange_wipe_new; the spiral self-disables when the filament's
|
||||||
// ram/cooling moves leave the nozzle mid-box, far from any gap).
|
// tower ironing area is 0). WT2's entry gap always sits at the left-edge entry
|
||||||
|
// point, so only iron when the purge actually starts there heading right (in-place
|
||||||
|
// toolchangers do; SEMM ram/cooling moves leave the nozzle mid-box, far from any gap).
|
||||||
if (i == 0 && m_use_gap_wall && !interface_layer && !priming && m_left_to_right &&
|
if (i == 0 && m_use_gap_wall && !interface_layer && !priming && m_left_to_right &&
|
||||||
writer.x() - xl < 2.5f * line_width) {
|
writer.x() - xl < 2.5f * line_width) {
|
||||||
float ironing_length = 3.f;
|
float ironing_length = 3.f;
|
||||||
@@ -2089,7 +2086,10 @@ void WipeTower2::toolchange_Wipe(
|
|||||||
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.5f * ironing_length, writer.y(), 600.f);
|
writer.travel(writer.x() - 1.5f * ironing_length, writer.y(), 600.f);
|
||||||
writer.travel(writer.x() + 1.5f * ironing_length, writer.y(), 240.f);
|
writer.travel(writer.x() + 0.5f * ironing_length, writer.y(), 240.f);
|
||||||
|
const Vec2f iron_end(writer.x() + ironing_length, writer.y());
|
||||||
|
writer.spiral_flat_ironing(writer.pos(), m_filpar[m_current_tool].tower_ironing_area, m_perimeter_width, flat_iron_speed);
|
||||||
|
writer.travel(iron_end, wipe_speed);
|
||||||
writer.retract(-retract_length, retract_speed);
|
writer.retract(-retract_length, retract_speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2098,11 +2098,6 @@ void WipeTower2::toolchange_Wipe(
|
|||||||
else
|
else
|
||||||
writer.extrude(xl + (i % 4 == 1 ? 0 : 1.5f*line_width), writer.y(), wipe_speed);
|
writer.extrude(xl + (i % 4 == 1 ? 0 : 1.5f*line_width), writer.y(), wipe_speed);
|
||||||
|
|
||||||
if (i == 0 && do_ironing && ironing_area > 0.f) {
|
|
||||||
writer.travel(writer.x(), writer.y(), 600.f);
|
|
||||||
writer.spiral_flat_ironing(writer.pos(), ironing_area, m_perimeter_width, 10.f * 60.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (writer.y()+float(EPSILON) > cleaning_box.lu.y()-0.5f*line_width)
|
if (writer.y()+float(EPSILON) > cleaning_box.lu.y()-0.5f*line_width)
|
||||||
break; // in case next line would not fit
|
break; // in case next line would not fit
|
||||||
|
|
||||||
|
|||||||
@@ -221,7 +221,6 @@ private:
|
|||||||
float m_perimeter_speed = 0.f;
|
float m_perimeter_speed = 0.f;
|
||||||
float m_first_layer_speed = 0.f;
|
float m_first_layer_speed = 0.f;
|
||||||
size_t m_first_layer_idx = size_t(-1);
|
size_t m_first_layer_idx = size_t(-1);
|
||||||
bool m_flat_ironing = false;
|
|
||||||
bool m_enable_tower_interface_features = false;
|
bool m_enable_tower_interface_features = false;
|
||||||
bool m_enable_tower_interface_cooldown_during_tower = false;
|
bool m_enable_tower_interface_cooldown_during_tower = false;
|
||||||
bool m_prev_layer_had_interface = false;
|
bool m_prev_layer_had_interface = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user