mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-01 10:02:01 +08:00
Fixed wipe tower lines outside its perimeter (SPE-2049, #11692)
This commit is contained in:
parent
4940f614df
commit
bbd7828dc1
@ -1490,6 +1490,11 @@ void WipeTower::save_on_last_wipe()
|
|||||||
// Which toolchange will finish_layer extrusions be subtracted from?
|
// Which toolchange will finish_layer extrusions be subtracted from?
|
||||||
int idx = first_toolchange_to_nonsoluble(m_layer_info->tool_changes);
|
int idx = first_toolchange_to_nonsoluble(m_layer_info->tool_changes);
|
||||||
|
|
||||||
|
if (idx == -1) {
|
||||||
|
// In this case, finish_layer will be called at the very beginning.
|
||||||
|
finish_layer().total_extrusion_length_in_plane();
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0; i<int(m_layer_info->tool_changes.size()); ++i) {
|
for (int i=0; i<int(m_layer_info->tool_changes.size()); ++i) {
|
||||||
auto& toolchange = m_layer_info->tool_changes[i];
|
auto& toolchange = m_layer_info->tool_changes[i];
|
||||||
tool_change(toolchange.new_tool);
|
tool_change(toolchange.new_tool);
|
||||||
@ -1501,9 +1506,9 @@ void WipeTower::save_on_last_wipe()
|
|||||||
m_perimeter_width, m_layer_info->height) - toolchange.first_wipe_line - length_to_save;
|
m_perimeter_width, m_layer_info->height) - toolchange.first_wipe_line - length_to_save;
|
||||||
|
|
||||||
length_to_wipe = std::max(length_to_wipe,0.f);
|
length_to_wipe = std::max(length_to_wipe,0.f);
|
||||||
float depth_to_wipe = m_perimeter_width * (std::floor(length_to_wipe/width) + ( length_to_wipe > 0.f ? 1.f : 0.f ) ) * m_extra_spacing;
|
float depth_to_wipe = m_perimeter_width * (std::floor(length_to_wipe/width) + ( length_to_wipe > 0.f ? 1.f : 0.f ) );
|
||||||
|
|
||||||
toolchange.required_depth = toolchange.ramming_depth + depth_to_wipe;
|
toolchange.required_depth = (toolchange.ramming_depth + depth_to_wipe) * m_extra_spacing;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1569,9 +1574,9 @@ void WipeTower::generate(std::vector<std::vector<WipeTower::ToolChangeResult>> &
|
|||||||
|
|
||||||
m_old_temperature = -1; // reset last temperature written in the gcode
|
m_old_temperature = -1; // reset last temperature written in the gcode
|
||||||
|
|
||||||
std::vector<WipeTower::ToolChangeResult> layer_result;
|
|
||||||
for (const WipeTower::WipeTowerInfo& layer : m_plan)
|
for (const WipeTower::WipeTowerInfo& layer : m_plan)
|
||||||
{
|
{
|
||||||
|
std::vector<WipeTower::ToolChangeResult> layer_result;
|
||||||
set_layer(layer.z, layer.height, 0, false/*layer.z == m_plan.front().z*/, layer.z == m_plan.back().z);
|
set_layer(layer.z, layer.height, 0, false/*layer.z == m_plan.front().z*/, layer.z == m_plan.back().z);
|
||||||
m_internal_rotation += 180.f;
|
m_internal_rotation += 180.f;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user