From e1e5e1d4027eb00747b872d4e719a2af3548a858 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 10 Jul 2026 16:35:14 +0000 Subject: [PATCH] perf(nad): expose geometryPrecision as a viewer parameter Forward the SVG-writer geometryPrecision option through the viewer so consumers can set it once via NadViewerParametersOptions instead of constructing the writer themselves. NadViewerParameters.getGeometryPrecision() returns the configured value or undefined, and both new SvgWriter(...) call sites in the viewer (initial empty-SVG build and adaptive-zoom redraw) pass it through. Undefined leaves the writer on its default precision (2), so behaviour is unchanged unless a consumer opts in. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01T1fMV9gtgHLBKoSAShYSdA --- .../nad-viewer-parameters.test.ts | 19 +++++++++++++++++++ .../nad-viewer-parameters.ts | 12 ++++++++++++ .../network-area-diagram-viewer.ts | 6 +++++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.test.ts diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.test.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.test.ts new file mode 100644 index 00000000..5267ecb4 --- /dev/null +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.test.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * SPDX-License-Identifier: MPL-2.0 + */ + +import { NadViewerParameters } from './nad-viewer-parameters'; + +test('getGeometryPrecision returns undefined when unset, so the writer applies its default', () => { + expect(new NadViewerParameters(undefined).getGeometryPrecision()).toBeUndefined(); + expect(new NadViewerParameters({}).getGeometryPrecision()).toBeUndefined(); +}); + +test('getGeometryPrecision returns the configured value', () => { + expect(new NadViewerParameters({ geometryPrecision: 1 }).getGeometryPrecision()).toBe(1); + expect(new NadViewerParameters({ geometryPrecision: 0 }).getGeometryPrecision()).toBe(0); +}); diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.ts index adf7a947..a7db2759 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/nad-viewer-parameters.ts @@ -151,6 +151,12 @@ export interface NadViewerParametersOptions { // Whether to create the SVG from diagram metadata, instead of using the SVG content provided as input createSvgFromMetadata?: boolean; + + // Number of decimal places for the SVG geometry coordinates when the SVG is (re)built from + // metadata (see createSvgFromMetadata and the adaptive zoom). Fewer decimals produce a smaller, + // faster-to-parse SVG at the cost of coordinate accuracy. Defaults to 2, which keeps the + // generated SVG identical to before this option existed. + geometryPrecision?: number; } export class NadViewerParameters { @@ -266,4 +272,10 @@ export class NadViewerParameters { NadViewerParameters.CREATE_SVG_FROM_METADATA_DEFAULT ); } + + // Returns the configured geometry precision, or undefined to let the SVG writer apply its own + // default (DEFAULT_GEOMETRY_PRECISION). + public getGeometryPrecision(): number | undefined { + return this.nadViewerParametersOptions?.geometryPrecision; + } } diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/network-area-diagram-viewer.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/network-area-diagram-viewer.ts index 48231f24..4995419b 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/network-area-diagram-viewer.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/network-area-diagram-viewer.ts @@ -176,7 +176,10 @@ export class NetworkAreaDiagramViewer { this.diagramMetadata = diagramMetadata; this.nadViewerParameters = new NadViewerParameters(nadViewerParametersOptions ?? undefined); if (this.nadViewerParameters.getCreateSvgFromMetadata() && this.diagramMetadata != null) { - this.svgWriter = new SvgWriter({ diagramMetadata: this.diagramMetadata }); + this.svgWriter = new SvgWriter({ + diagramMetadata: this.diagramMetadata, + geometryPrecision: this.nadViewerParameters.getGeometryPrecision(), + }); this.svgContent = this.svgWriter.getEmptySvg(); } this.width = 0; @@ -2194,6 +2197,7 @@ export class NetworkAreaDiagramViewer { diagramMetadata: this.diagramMetadata, elementList: { nodes: nodes, edges: edges }, voltageLevels: maxDisplayedSize > nodeVlThreshold.threshold ? nodeVlThreshold.voltageLevels : undefined, + geometryPrecision: this.nadViewerParameters.getGeometryPrecision(), }); svgWriter.addNodes(this.nodesSection!); svgWriter.addEdgesAndInfos(this.edgesSection!);