Table of Contents

Class PaintOp

Namespace
EncDotNet.S100.Rendering.Scene
Assembly
EncDotNet.S100.Rendering.Scene.dll

A backend-agnostic, fully-resolved S-100 Part 9 paint operation — the intermediate representation (IR) produced by VectorSceneBuilder and consumed by both the headless SkiaDisplayListRenderer and the Mapsui display-list renderer.

public abstract class PaintOp
Inheritance
PaintOp
Derived
Inherited Members

Remarks

Unit contract. All coordinate values (World… members) are in EPSG:3857 Web-Mercator metres — the first half of the S-100 Part 9 projection (lat/lon → EPSG:3857). The second half (EPSG:3857 → screen pixels) is intentionally left to each backend: Mapsui performs it per-frame via its Navigator; the Skia backend applies a Viewport-derived affine.

All size values (stroke widths, dash lengths, offsets, font size, symbol scale) are already expressed in logical display pixels under the S-100 Part 9 §3.10.4 convention 1 px = 0.32 mm. They are resolution-independent device pixels — not world metres and not physical output pixels. A backend that draws geometry through a world→screen canvas transform must realise strokes, symbols, and text in device pixels (i.e. reset/compensate the transform for size realisation), otherwise sizes would scale with zoom.

All colours are already resolved to RgbaColor (palette token lookup + transparency applied). Resources (symbols, pattern tiles) are resolved to processed content rather than catalogue names.

Properties

FeatureReference

Identifier of the originating dataset feature (the S-100 feature reference), carried through so backends can tag rendered output for pick / hit-testing.

public required string FeatureReference { get; init; }

Property Value

string

ScaleMaximum

Maximum display scale denominator at which this op is visible (the most zoomed-in limit; S-100 Part 9 §11.1). Null means no upper bound.

public double? ScaleMaximum { get; init; }

Property Value

double?

ScaleMinimum

Minimum display scale denominator at which this op is visible (the most zoomed-out limit; S-100 Part 9 §11.1). Null means no lower bound. Carried as a denominator (not a backend resolution) so each backend applies the same inclusion semantics via IsVisibleAtScale(PaintOp, double).

public double? ScaleMinimum { get; init; }

Property Value

double?