using System; namespace OpenNest.CNC { internal static class PostMarkers { /// /// Refuses a nest whose marked programs a post cannot write: every marked part needs the /// post's , and rejects a malformed /// program with an . /// public static void EnsurePostable(Nest nest, bool hasCode, Func isMarked, Action validate, Func missingCode) { ArgumentNullException.ThrowIfNull(nest); foreach (var plate in nest.Plates) { foreach (var part in plate.Parts) { if (part?.Program == null || !isMarked(part.Program)) continue; var name = DisplayPerimeterTail.PartName(part); if (!hasCode) throw new InvalidOperationException(missingCode(name)); try { validate(part.Program); } catch (ArgumentException ex) { throw new InvalidOperationException($"{name} cannot be posted: {ex.Message}", ex); } } } } } }