Class PatternAreaPaintOp
A resolved tiled-symbol pattern area fill (S-100 Part 9 §11.3 area fills with
a referenced AreaFill). The op carries the pre-rasterised pattern
tile as PNG bytes and the pattern reference so backends can cache the
decoded image across ops sharing the same pattern.
public sealed class PatternAreaPaintOp : PaintOp
- Inheritance
-
PatternAreaPaintOp
- Inherited Members
Remarks
The tile bytes are encoded as PNG — a renderer-neutral raster format
chosen to mirror the Mapsui pattern phase's existing
SkiaSvgRasterizer.RasterizePatternTile output. A future
non-Skia backend can decode the same bytes.
The headless Skia backend draws the tile via a repeat-tiled
SKShader anchored at world (0,0) projected to screen space, matching
the Mapsui AnchoredPatternFillStyle contract so the pattern is
seamless across overlapping polygons that share a global tile grid.
Priority clipping. When VectorSceneBuilder lowers pattern fills it priority-clips them via the shared PatternPriorityClipper (S-100 Part 9 §11.3): a lower-priority pattern op is clipped where a higher-priority pattern op — or an opaque non-patterned solid colour fill (e.g. land) — covers it, so the geometry carried here is already the visible portion. This is the identical clip the Mapsui feature path applies, so the headless Skia backend and the Mapsui TiledScene subsystem no longer bleed patterns across opaque overlay areas (resolves the issue #192 "as closely as practical" caveat). A clipped group can be a multi-polygon, so it is emitted as several ops (one shell + holes each).
Properties
PatternReference
The portrayal-catalogue area-fill name (e.g. DIAMOND1).
public required string PatternReference { get; init; }
Property Value
TilePng
The pre-rasterised pattern tile as PNG bytes.
public required byte[] TilePng { get; init; }
Property Value
- byte[]
WorldHoles
Interior (hole) rings in EPSG:3857 metres.
public IReadOnlyList<IReadOnlyList<(double X, double Y)>> WorldHoles { get; init; }
Property Value
- IReadOnlyList<IReadOnlyList<(double X, double Y)>>
WorldShell
Exterior ring in EPSG:3857 metres (closed or auto-closed by the backend).
public required IReadOnlyList<(double X, double Y)> WorldShell { get; init; }
Property Value
- IReadOnlyList<(double X, double Y)>