Describe the estimate's actual blind spots in the tower comments

The estimate no longer reports a tower for a single filament whose flush matrix
purges, so the comments that justify calling prime_tower_is_printed() instead of
reading a depth now cite what still holds: it reads neither enable_prime_tower
nor print_sequence. GCodeViewer's comments name render_scene(), the function
that replaced the render() they still pointed at, and the pass contract mentions
the toolhead boxes it draws.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Clifford Garwood
2026-09-21 17:10:23 -04:00
co-authored by Claude Opus 5
parent 2d80c6a24e
commit 1f1d13e3d9
4 changed files with 8 additions and 8 deletions
+2 -2
View File
@@ -45,8 +45,8 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase
double max_object_height);
// Whether a prime tower is PRINTED for a plate. The footprint estimate above answers how big a
// tower is and reports one for a single filament whenever the flush matrix purges, so it cannot
// answer this; the authority is DynamicPrintConfig::normalize_fdm_2(), which clears
// tower is and never reads enable_prime_tower or print_sequence, so it reports a size for a plate
// that prints no tower at all; the authority is DynamicPrintConfig::normalize_fdm_2(), which clears
// enable_prime_tower before the plate is sliced. This mirrors that rule so pre-slice consumers can
// ask it without mutating a config, and a test pins the two together.
//
+1 -1
View File
@@ -1633,7 +1633,7 @@ void GCodeViewer::reset()
// IDEX/IQEX: resolve where every secondary carriage marker sits, relative to the primary,
// for one (printer preset, active mode, plate bed) triple. This parses the mode string
// several times over and rebuilds the zone grid, and every one of its inputs is preset or
// plate state, so render() runs it only when GCodeViewer::ImexMarkerKey changes and replays
// plate state, so render_scene() runs it only when GCodeViewer::ImexMarkerKey changes and replays
// the returned plan on all the frames in between.
//
// `mode` is already resolved (the plate's mode beats the process preset). An empty
+2 -2
View File
@@ -214,7 +214,7 @@ private:
bool m_fold = {false};
std::string m_marker_filename; // cached for lazy secondary marker init
// IDEX/IQEX: everything render() needs to place the secondary carriage markers and the
// IDEX/IQEX: everything render_scene() needs to place the secondary carriage markers and the
// toolhead footprint boxes, resolved from the printer preset, the active mode and the
// plate bed. Resolving it walks the mode string through compute_imex_zone_layout()
// (several string parses plus a zone-grid rebuild), and none of its inputs change
@@ -365,7 +365,7 @@ public:
//BBS: add all plates filament statistics
void render_all_plates_stats(const std::vector<const GCodeProcessorResult*>& gcode_result_list, bool show = true) const;
//BBS: GUI refactor: add canvas width and height
// Shells, toolpaths and the sequential marker, drawn in 3D.
// Shells, toolpaths, the sequential markers and the IDEX/IQEX toolhead boxes, drawn in 3D.
void render_scene(int canvas_width, int canvas_height);
// Legend, sliders, the marker's position window and the G-code window, all ImGui.
void render_overlay(int canvas_width, int canvas_height, int right_margin);
+3 -3
View File
@@ -1122,9 +1122,9 @@ Polygon PartPlate::imex_wipe_tower_hull() const
// Whether a tower is PRINTED is normalize_fdm_2's rule, shared with the slicer through
// prime_tower_is_printed() rather than re-derived here - re-deriving it is what let this
// validate a tower the slicer had already cancelled. Do not substitute the footprint
// estimate: it reports a tower for a single filament whenever the flush matrix purges
// (SEMM + purge_in_prime_tower, the Klipper default), which hard-blocks a plate with
// nothing drawn on screen to move.
// estimate: it never reads enable_prime_tower or print_sequence, so it still sizes a tower
// for a plate that switched the tower off or prints by object, which would hard-block a
// plate with nothing drawn on screen to move.
//
// Counts are the ones normalize_fdm_2 is handed: filament slots as authored, so a mixed
// slot counts once, and distinct objects rather than instances. filament_is_mixed is a