Harden wait_for_temp_on_wipe_tower parking and temperature deferral

Share one wait_for_temp_enabled gate between the tower and append_tcr2 so a
SEMM profile carrying the flag keeps its blocking ooze-prevention wait.
Park beside the tower on custom polygonal beds via point-in-polygon, clamp
the near-side park toward the bed edge before crossing to the far side, and
start non-blocking heating at the toolchange when ooze prevention emits
nothing so heat-up overlaps the travel.
This commit is contained in:
SoftFever
2026-08-03 15:18:38 +08:00
parent 0f48ad4157
commit 4d421918ef
3 changed files with 76 additions and 20 deletions

View File

@@ -41,6 +41,11 @@ public:
// Shared with the entry routing in GCode.cpp so the router and the tower agree.
static bool use_gap_wall(const PrintConfig& config);
// Whether the blocking toolchange temperature wait moves onto the wipe tower.
// Shared with the defer flag in GCode.cpp append_tcr2 so the deferral and the
// tower's tagged M109 can never disagree.
static bool wait_for_temp_enabled(const PrintConfig& config);
// x -- x coordinates of wipe tower in mm ( left bottom corner )
// y -- y coordinates of wipe tower in mm ( left bottom corner )
// width -- width of wipe tower in mm ( default 60 mm - leave as it is )
@@ -268,6 +273,7 @@ private:
float m_bed_width; // width of the bed bounding box
Vec2f m_bed_bottom_left; // bottom-left corner coordinates (for rectangular beds)
BoundingBoxf m_bed_bbox; // bounding box of the printable area
Polygon m_bed_polygon; // printable_area contour (scaled), for beds neither rectangular nor circular
float m_perimeter_width = 0.4f * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill.
float m_extrusion_flow = 0.038f; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.