#15746·OrcaSlicer

False "G-code path exceeds the printable range" when an extruder area is inset on multiple sides

Author: cgarwood82Created Sep 17, 2026Updated Sep 17, 2026

Description

When extruder_printable_area is configured and an extruder's area is inset from the bed on two or more sides, slicing always reports:

Filament N is placed in the Tool N, but the generated G-code path exceeds the printable range of the Tool N.

even when every toolpath coordinate lies well inside that extruder's area.

Root cause

Print::get_extruder_unprintable_polygons() builds the unprintable region as a single boolean difference:

cpp
Polygons ploys = diff(printable_poly, Polygon::new_scale(e_printable_area));

If the extruder area is inset on two adjacent sides, that difference is one connected L-shaped polygon; if it is inset on all sides, it is a frame. In both cases the polygon's bounding box covers the entire bed.

GCodeProcessor::check_multi_extruder_gcode_valid() then tests only that bounding box:

cpp
// Simplified use bounding_box, Accurate calculation is not efficient
if (poly.bounding_box().overlap(bbox)) {
    ...
    m_result.gcode_check_result.print_area_error_infos[extruder_id].push_back(filament_to_object_id);
    valid = false;
}

so the test is true for any object anywhere on the plate and the error fires unconditionally.

The approximation is only valid when the unprintable region is a single edge strip — i.e. when the area is inset on exactly one side — which is why it goes unnoticed on common configurations.

Steps to reproduce

  1. Use a printer profile with more than one extruder and extruder_printable_area populated.
  2. Give one extruder an area inset from printable_area on two adjacent sides (or on all four).
  3. Place an object well inside that extruder's area and assign it to that extruder.
  4. Slice. The error appears even though no toolpath coordinate leaves the area.

Suggested fix

Emit the unprintable region as separate edge rectangles (left/right/front/rear) rather than one connected polygon, so each bounding box is tight and the existing approximation remains valid. Alternatively, test real polygon intersection instead of bounding boxes.

Version

Present on current main (52f4c68c41).