EncDotNet.S100.Rendering.Scene
0.21.0
dotnet add package EncDotNet.S100.Rendering.Scene --version 0.21.0
NuGet\Install-Package EncDotNet.S100.Rendering.Scene -Version 0.21.0
<PackageReference Include="EncDotNet.S100.Rendering.Scene" Version="0.21.0" />
<PackageVersion Include="EncDotNet.S100.Rendering.Scene" Version="0.21.0" />
<PackageReference Include="EncDotNet.S100.Rendering.Scene" />
paket add EncDotNet.S100.Rendering.Scene --version 0.21.0
#r "nuget: EncDotNet.S100.Rendering.Scene, 0.21.0"
#:package EncDotNet.S100.Rendering.Scene@0.21.0
#addin nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.21.0
#tool nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.21.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. |
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, 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.21.0)
- EncDotNet.S100.Portrayals (>= 0.21.0)
-
net8.0
- EncDotNet.S100.Core (>= 0.21.0)
- EncDotNet.S100.Portrayals (>= 0.21.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.