FIX: add gcode reserved tag

and fix block.finish_depth error

jira: none
Change-Id: If272b181430aa79a88ff0cb79670cf2c62a06020
(cherry picked from commit 0f4516f78186fb2a13b245eb38d13dfc2fce8bfc)
This commit is contained in:
jiangkai.zhao 2025-02-20 15:53:02 +08:00 committed by lane.wei
parent 93591aea12
commit 7e0078b24e
1 changed files with 23 additions and 7 deletions

View File

@ -854,12 +854,18 @@ public:
WipeTowerWriter &line(const WipeTower *wipe_tower, Vec2f p0, Vec2f p1,const float f = 0.f) WipeTowerWriter &line(const WipeTower *wipe_tower, Vec2f p0, Vec2f p1,const float f = 0.f)
{ {
bool need_change_flow = wipe_tower->need_thick_bridge_flow(p0.y()); bool need_change_flow = wipe_tower->need_thick_bridge_flow(p0.y());
if (need_change_flow) set_extrusion_flow(wipe_tower->extrusion_flow(0.2)); if (need_change_flow) {
set_extrusion_flow(wipe_tower->extrusion_flow(0.2));
append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) + std::to_string(0.2) + "\n");
}
if (abs(x() - p0.x()) > abs(x() - p1.x())) std::swap(p0, p1); if (abs(x() - p0.x()) > abs(x() - p1.x())) std::swap(p0, p1);
travel(p0.x(), y()); travel(p0.x(), y());
travel(x(), p0.y()); travel(x(), p0.y());
extrude(p1, f); extrude(p1, f);
set_extrusion_flow(wipe_tower->get_extrusion_flow()); if (need_change_flow) {
set_extrusion_flow(wipe_tower->get_extrusion_flow());
append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) + std::to_string(m_layer_height) + "\n");
}
return (*this); return (*this);
} }
@ -2804,10 +2810,8 @@ WipeTower::NozzleChangeResult WipeTower::nozzle_change_new(int old_filament_id,
for (int i = 0; true; ++i) { for (int i = 0; true; ++i) {
if (need_thick_bridge_flow(writer.pos().y())) { if (need_thick_bridge_flow(writer.pos().y())) {
writer.set_extrusion_flow(nozzle_change_extrusion_flow(0.2)); writer.set_extrusion_flow(nozzle_change_extrusion_flow(0.2));
writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) + std::to_string(0.2) + "\n");
need_change_flow = true; need_change_flow = true;
} else {
writer.set_extrusion_flow(nozzle_change_extrusion_flow(m_layer_height));
need_change_flow = false;
} }
if (m_left_to_right) if (m_left_to_right)
writer.extrude(xr + wipe_tower_wall_infill_overlap * m_perimeter_width, writer.y(), need_change_flow ? bridge_speed : nozzle_change_speed); writer.extrude(xr + wipe_tower_wall_infill_overlap * m_perimeter_width, writer.y(), need_change_flow ? bridge_speed : nozzle_change_speed);
@ -2817,10 +2821,17 @@ WipeTower::NozzleChangeResult WipeTower::nozzle_change_new(int old_filament_id,
if (i == nozzle_change_line_count - 1) if (i == nozzle_change_line_count - 1)
break; break;
if ((writer.y() + dy - cleaning_box.ru.y()+(m_nozzle_change_perimeter_width+m_perimeter_width)/2) > (float)EPSILON) break; if ((writer.y() + dy - cleaning_box.ru.y()+(m_nozzle_change_perimeter_width+m_perimeter_width)/2) > (float)EPSILON) break;
writer.extrude(writer.x(), writer.y() + dy, need_change_flow ? bridge_speed : nozzle_change_speed); if (need_change_flow) {
writer.set_extrusion_flow(nozzle_change_extrusion_flow(m_layer_height));
writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) + std::to_string(m_layer_height) + "\n");
need_change_flow = false;
}
writer.extrude(writer.x(), writer.y() + dy, nozzle_change_speed);
m_left_to_right = !m_left_to_right; m_left_to_right = !m_left_to_right;
} }
if (need_change_flow) {
writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) + std::to_string(m_layer_height) + "\n");
}
writer.set_extrusion_flow(nz_extrusion_flow); // Reset the extrusion flow. writer.set_extrusion_flow(nz_extrusion_flow); // Reset the extrusion flow.
block.cur_depth += real_nozzle_change_line_count * dy; block.cur_depth += real_nozzle_change_line_count * dy;
block.last_nozzle_change_id = old_filament_id; block.last_nozzle_change_id = old_filament_id;
@ -3759,6 +3770,9 @@ void WipeTower::generate_new(std::vector<std::vector<WipeTower::ToolChangeResult
timelapse_wall = only_generate_out_wall(true); timelapse_wall = only_generate_out_wall(true);
} }
finish_layer_tcr = finish_layer_new(m_enable_timelapse_print ? false : true, layer.extruder_fill); finish_layer_tcr = finish_layer_new(m_enable_timelapse_print ? false : true, layer.extruder_fill);
std::for_each(m_wipe_tower_blocks.begin(), m_wipe_tower_blocks.end(), [this](WipeTowerBlock &block) {
block.finish_depth[this->m_cur_layer_id] = block.start_depth;
});
} }
} }
@ -3801,6 +3815,7 @@ void WipeTower::generate_new(std::vector<std::vector<WipeTower::ToolChangeResult
} }
for (WipeTowerBlock& block : m_wipe_tower_blocks) { for (WipeTowerBlock& block : m_wipe_tower_blocks) {
block.finish_depth[m_cur_layer_id] = block.start_depth + block.depth;
if (block.cur_depth + EPSILON >= block.start_depth + block.layer_depths[m_cur_layer_id]-m_perimeter_width) { if (block.cur_depth + EPSILON >= block.start_depth + block.layer_depths[m_cur_layer_id]-m_perimeter_width) {
continue; continue;
} }
@ -3817,6 +3832,7 @@ void WipeTower::generate_new(std::vector<std::vector<WipeTower::ToolChangeResult
if (interface_solid ||(block.solid_infill[m_cur_layer_id] && block.filament_adhesiveness_category != m_filament_categories[wall_idx])) { if (interface_solid ||(block.solid_infill[m_cur_layer_id] && block.filament_adhesiveness_category != m_filament_categories[wall_idx])) {
interface_solid = interface_solid && !((block.solid_infill[m_cur_layer_id] && block.filament_adhesiveness_category != m_filament_categories[wall_idx]));//noly reduce speed when interface_solid = interface_solid && !((block.solid_infill[m_cur_layer_id] && block.filament_adhesiveness_category != m_filament_categories[wall_idx]));//noly reduce speed when
finish_block_tcr = finish_block_solid(block, finish_layer_filament, layer.extruder_fill, interface_solid); finish_block_tcr = finish_block_solid(block, finish_layer_filament, layer.extruder_fill, interface_solid);
block.finish_depth[m_cur_layer_id] = block.start_depth + block.depth;
} }
else { else {
finish_block_tcr = finish_block(block, finish_layer_filament, layer.extruder_fill); finish_block_tcr = finish_block(block, finish_layer_filament, layer.extruder_fill);