forked from 1b-agent/opencadstudio-upstream
`HatchModel.boundary` stores multi-region hatches as a single Vec with NaN-NaN sentinels separating each disconnected sub-path (documented on the field). The paper-canvas hatch fill ignored the sentinels and forwarded every vertex straight to the iced canvas path builder. When a layout contained a multi-region hatch, lyon received a polygon containing NaN coordinates and panicked with `Tessellate path.: Internal(IncorrectActiveEdgeOrder(4))` from inside `iced_wgpu::geometry::Frame::fill`, taking the whole app down the first time Layout 1 painted. Walk the boundary instead, opening a fresh sub-path on each sentinel and closing whichever was active. Each region is now filled as its own closed polygon. Reproduces with #22. Co-Authored-By: Claude Opus 4.7 <[email protected]>