FIX: Printable area check results in gcode_check_result

Added a check for Gcode traces outside the printable area after the backend slicer, allowing command-line slicers to detect abnormal results. The GCodeProcessor's m_result.gcode_check_result.error_code now includes not only dual-head print range checks, but also checks for the machine's plate print range, wrapping detection area, and height violations.

jira: none
Change-Id: I44072ece3b4b525c77328cec2f76e205eb559cc4
(cherry picked from commit 054f936243968687f536170374a233ec912e8e42)
This commit is contained in:
songwei.li 2025-08-06 20:37:53 +08:00 committed by Noisyfox
parent c0c12fcb1f
commit aa9fb1fd34
4 changed files with 108 additions and 42 deletions

View file

@ -1929,15 +1929,14 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu
m_processor.result().filament_printable_reuslt = FilamentPrintableResult(conflict_filament, bed_type_to_gcode_string(m_config.curr_bed_type));
}
// check gcode is valid in multi_extruder printabele area
// check gcode is valid in machine printabele area and multi_extruder printabele area
int extruder_size = m_print->config().nozzle_diameter.values.size();
if (extruder_size > 1) {
std::vector<Polygons> extruder_unprintable_polys = m_print->get_extruder_unprintable_polygons();
m_processor.check_multi_extruder_gcode_valid(extruder_unprintable_polys,
m_print->get_extruder_printable_height(),
m_print->get_filament_maps(),
m_print->get_physical_unprintable_filaments(m_print->get_slice_used_filaments(false)));
}
std::vector<Polygons> extruder_unprintable_polys = m_print->get_extruder_unprintable_polygons();
Pointfs plate_printable_area = m_print->config().printable_area.values;
Pointfs wrapping_exclude_area_points = m_print->config().wrapping_exclude_area.values;
m_processor.check_multi_extruder_gcode_valid(extruder_size, plate_printable_area, m_print->config().printable_height.value, wrapping_exclude_area_points,
extruder_unprintable_polys, m_print->get_extruder_printable_height(), m_print->get_filament_maps(),
m_print->get_physical_unprintable_filaments(m_print->get_slice_used_filaments(false)));
m_processor.finalize(true);
// DoExport::update_print_estimated_times_stats(m_processor, print->m_print_statistics);