srecord noeq RegionHoleBounds(IImageRegion region) { new L holeBounds; BoundsFinder bf; L get() { if (region == null) ret holeBounds; var borderWalker = new RegionBorder_innerPoints_v2(region); borderWalker.onNewTrace(isHole -> { if (isHole) { if (bf != null) holeBounds.add(bf!); bf = new BoundsFinder; } else bf = null; }); borderWalker.onFoundPoint(p -> { bf?.addPt(p); }); borderWalker.run(); if (bf != null) holeBounds.add(bf!); ret holeBounds; } }