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!);