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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EncDotNet.S100.Rendering.Scene" Version="0.21.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EncDotNet.S100.Rendering.Scene" Version="0.21.0" />
                    
Directory.Packages.props
<PackageReference Include="EncDotNet.S100.Rendering.Scene" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EncDotNet.S100.Rendering.Scene --version 0.21.0
                    
#r "nuget: EncDotNet.S100.Rendering.Scene, 0.21.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EncDotNet.S100.Rendering.Scene@0.21.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.21.0
                    
Install as a Cake Addin
#tool nuget:?package=EncDotNet.S100.Rendering.Scene&version=0.21.0
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.

Version Downloads Last Updated
0.21.0 166 7/10/2026
0.20.0 184 6/29/2026
0.19.0 180 6/27/2026