EncDotNet.S100.Rendering.Scene
0.22.0
See the version list below for details.
dotnet add package EncDotNet.S100.Rendering.Scene --version 0.22.0
NuGet\Install-Package EncDotNet.S100.Rendering.Scene -Version 0.22.0
<PackageReference Include="EncDotNet.S100.Rendering.Scene" Version="0.22.0" />
<PackageVersion Include="EncDotNet.S100.Rendering.Scene" Version="0.22.0" />
<PackageReference Include="EncDotNet.S100.Rendering.Scene" />
paket add EncDotNet.S100.Rendering.Scene --version 0.22.0
#r "nuget: EncDotNet.S100.Rendering.Scene, 0.22.0"
#:package EncDotNet.S100.Rendering.Scene@0.22.0
#addin nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.22.0
#tool nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.22.0
EncDotNet.S100.Rendering.Scene
The backend-agnostic vector scene intermediate representation (IR) for the
S-100 portrayal pipeline. This assembly holds the neutral seam where resolved
S-100 Part 9 portrayal output is handed to a rendering backend — it depends only
on EncDotNet.S100.Core and EncDotNet.S100.Portrayals, never on SkiaSharp,
Mapsui, or any GUI framework.
What lives here
| Type | Role |
|---|---|
VectorScene / PaintOp (+ PointPaintOp, LinePaintOp, AreaPaintOp, PatternAreaPaintOp, TextPaintOp) |
Ordered list of fully-resolved paint operations — world coords in EPSG:3857 m, sizes in logical display px, colours resolved to RgbaColor, SCAMIN carried per-op. |
IVectorSceneRenderer<TSurface> |
The named rendering-backend contract: implement it to draw a VectorScene onto a backend-specific surface. SkiaDisplayListRenderer implements IVectorSceneRenderer<SKCanvas>; the Mapsui renderer is a conforming consumer of the IR rather than an implementer. |
WorldToScreen |
Backend-neutral EPSG:3857 world → pixel affine derived from a Viewport (the EPSG:3857 → pixels half of the Part 9 projection). Lets a Skia-free backend project the IR's world coordinates. Wraps ops across the ±180° antimeridian when the viewport is a seam-shifted frame (issue #413). |
SeamAwareBoundsAccumulator |
Computes a seam-aware EPSG:3857 auto-fit extent: detects geometry straddling the ±180° antimeridian (via a longitude-occupancy histogram + largest-empty-arc heuristic) and shifts the western cluster into a contiguous world-X window so dateline-spanning datasets are framed on their true extent (issue #413). |
ResolvedSymbol, SymbolAsset |
Resolved point-symbol content + pivot (S-100 Part 9 §11.5). |
VectorSceneBuilder |
Lowers a DrawingInstruction display list into a VectorScene. Pattern tiles are supplied as PNG bytes through an injected Func<string, byte[]?> delegate, so the builder stays rasteriser-free. When it lowers pattern fills it priority-clips them via PatternPriorityClipper. |
PatternPriorityClipper |
Backend-neutral NetTopologySuite priority-clipping of tiled pattern area fills (S-100 Part 9 §11.3): subtracts higher-priority pattern areas and opaque non-patterned solid fills (e.g. land) from each lower-priority pattern. Shared by both render paths (the Mapsui feature renderer delegates to it) so headless Skia, the Mapsui TiledScene subsystem, and the Mapsui feature path clip identically. |
PatternClipMemoizer |
Optional delegate a caller injects into VectorSceneBuilder to memoize the (palette-independent) pattern-clip result, so a re-build that only changes the palette reuses the geometry instead of repeating the overlay. The Mapsui renderer wires it to its pattern-clip cache for the default TiledScene subsystem. |
ColorResolver |
S-100 colour-token → RgbaColor resolution. |
ScaleVisibility |
S-100 Part 9 §11.1 scale-visibility semantics (SCAMIN inclusion). |
WebMercator |
Spherical EPSG:3857 forward projection (the lat/lon → 3857 half of the S-100 Part 9 projection). |
The rendering-backend seam
Because every backend consumes the same VectorScene, the IR is the blessed
pluggable rendering-backend contract: an embedder can implement
IVectorSceneRenderer<TSurface> (or consume the IR directly, as Mapsui does) to
render S-100 portrayal through a non-Skia/non-Mapsui backend — GPU, server-side
raster, PDF, SVG. See docs/design/rendering-backend-contract.md
for the end-to-end seam, the IR guarantees, the two shipped backends as worked
references, and an illustrative SVG backend.
Who consumes it
EncDotNet.S100.Renderers.Skia— headless rasteriser (SkiaDisplayListRenderer,HeadlessVectorRenderer).EncDotNet.S100.Renderers.Mapsui— Mapsui feature/style adapter.- The tiled/async render subsystem (see
docs/design/S100-Render-Subsystem-Design.md).
Because every backend consumes the same VectorScene, the IR is the A/B seam:
identical portrayal can be driven through different rendering backends for
apples-to-apples comparison.
Installation
dotnet add package EncDotNet.S100.Rendering.Scene
This package is Mapsui-free and GUI-free. Pair it with
EncDotNet.S100.Renderers.Skia to
rasterise a scene headlessly without taking the batteries-included
EncDotNet.S100 facade. See the
Embedding the renderer
guide for the end-to-end path.
Stability & versioning
The stable, supported surface of this package is the set of types documented
in What lives here: VectorScene, the PaintOp hierarchy
(PointPaintOp, LinePaintOp, AreaPaintOp, PatternAreaPaintOp,
TextPaintOp), VectorSceneBuilder, PatternPriorityClipper,
PatternClipMemoizer, ColorResolver, ScaleVisibility, and WebMercator.
Types that are internal or undocumented are implementation detail and may
change at any time.
All EncDotNet.S100.* packages share one version, derived from the release
git tag (there is no per-package version). Versioning follows
Semantic Versioning: once past 1.0.0, a breaking change
to the stable surface above lands only in a major bump. While the version is
below 1.0.0, the surface is still settling — breaking changes may occur in a
minor bump and will be called out in the release notes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- EncDotNet.S100.Core (>= 0.22.0)
- EncDotNet.S100.Portrayals (>= 0.22.0)
- NetTopologySuite (>= 2.6.0)
-
net8.0
- EncDotNet.S100.Core (>= 0.22.0)
- EncDotNet.S100.Portrayals (>= 0.22.0)
- NetTopologySuite (>= 2.6.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on EncDotNet.S100.Rendering.Scene:
| Package | Downloads |
|---|---|
|
EncDotNet.S100.Renderers.Skia
Headless SkiaSharp rasteriser for the IHO S-100 portrayal pipeline. Renders the backend-neutral scene IR from EncDotNet.S100.Rendering.Scene (VectorScene / PaintOp) to an image with no GUI or map framework: SkiaDisplayListRenderer.RenderOnto, HeadlessVectorRenderer, CoverageHeadlessRenderer, and the multi-layer HeadlessCompositeRenderer. Lets a consumer embed just the renderer + IR without the EncDotNet.S100 facade or Mapsui. |
|
|
EncDotNet.S100.Renderers.Mapsui
Libraries for manipulating S-100 based nautical charts. |
GitHub repositories
This package is not used by any popular GitHub repositories.