mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-06 14:12:10 -04:00
PlateOverlapAnalyzer converted clean programs directly with ConvertProgram.ToGeometry, which adds call offsets only to incremental moves, so holes in absolute-mode subprograms were read at their frame origin. A square with two absolute holes reported "Native material contours cross or touch", and the Plan Cutting overlap gate blocked it while the incremental twin passed. Convert an owned incremental-mode copy instead (PreparedContours.CopyForGeometry, now internal, the same normalization the cutting planner uses). The analyzer also threw on a program whose Codes list was null and cast or cloned instructions it does not know. It now refuses a missing list and anything other than the exact built-in instruction types as an incomplete check, before any copy or conversion runs. Pre-post verification and the plate overlap overlay share this path.