From 815dce79f8817500104a3b1026b462c9c4261958 Mon Sep 17 00:00:00 2001 From: "massimo.ferraro" Date: Tue, 30 Jun 2026 18:08:22 +0200 Subject: [PATCH 1/2] [nad-viewer] Add diagrams to test data for creation of SVG from metadata Signed-off-by: massimo.ferraro --- .../edge-router.ts | 14 +- .../half-edge-utils.test.ts | 18 +- .../half-edge-utils.ts | 9 +- .../svg-writer.test.ts | 49 +- .../nad-double-arrows-with-middle-values.svg | 73 +++ ...le-arrows-with-middle-values_metadata.json | 188 ++++++++ .../nad-eurostag-tutorial-example1.svg | 100 +++++ ...d-eurostag-tutorial-example1_metadata.json | 243 ++++++++++ .../nad-four-substations-multiple-labels.svg | 178 ++++++++ ...-substations-multiple-labels_metadata.json | 367 +++++++++++++++ .../test-data/nad-four-substations.svg | 139 ++++++ .../nad-four-substations_metadata.json | 303 +++++++++++++ ...d-ieee9-zeroimpedance-cdf-middle-arrow.svg | 172 +++++++ ...roimpedance-cdf-middle-arrow_metadata.json | 423 ++++++++++++++++++ .../test-data/nad-ieee9-zeroimpedance-cdf.svg | 110 +++++ .../nad-ieee9-zeroimpedance-cdf_metadata.json | 318 +++++++++++++ 16 files changed, 2683 insertions(+), 21 deletions(-) create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values_metadata.json create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1_metadata.json create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels_metadata.json create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-four-substations.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-four-substations_metadata.json create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow_metadata.json create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf.svg create mode 100644 packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf_metadata.json diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts index 58ac197f..45c6ab9c 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts @@ -176,29 +176,29 @@ export class EdgeRouter { const node2Angles: number[] = this.nodeAngles[edge.node2] ?? []; node2Angles.push(angle2); this.nodeAngles[edge.node2] = node2Angles; - this.storeEdgeInfos(edge, halfEdges); + this.storeEdgeInfos(edge, halfEdges, false); } - private storeEdgeInfos(edge: EdgeMetadata, halfEdges: HalfEdge[] | null[]) { + private storeEdgeInfos(edge: EdgeMetadata, halfEdges: HalfEdge[] | null[], isLoop: boolean) { if (edge.edgeInfo1 || edge.edgeInfo2) { - this.storeEdgeSideData(edge.svgId, halfEdges); + this.storeEdgeSideData(edge.svgId, halfEdges, isLoop); } if (edge.edgeInfoMiddle) { this.storeEdgeMiddleData(edge.svgId, halfEdges); } } - private storeEdgeSideData(edgeId: string, halfEdges: HalfEdge[] | null[]) { + private storeEdgeSideData(edgeId: string, halfEdges: HalfEdge[] | null[], isLoop: boolean) { if (!halfEdges[0] || !halfEdges[1]) { return; } this.edgeSideData[edgeId] = [ [ - HalfEdgeUtils.getInfoPoint(halfEdges[0], this.svgParameters), + isLoop ? halfEdges[0].edgePoints[1] : HalfEdgeUtils.getInfoPoint(halfEdges[0], this.svgParameters), HalfEdgeUtils.getArrowRotation(halfEdges[0]), ], [ - HalfEdgeUtils.getInfoPoint(halfEdges[1], this.svgParameters), + isLoop ? halfEdges[1].edgePoints[1] : HalfEdgeUtils.getInfoPoint(halfEdges[1], this.svgParameters), HalfEdgeUtils.getArrowRotation(halfEdges[1]), ], ]; @@ -366,7 +366,7 @@ export class EdgeRouter { return; } this.edgePoints[edge.svgId] = [halfEdges[0].edgePoints, halfEdges[1].edgePoints]; - this.storeEdgeInfos(edge, halfEdges); + this.storeEdgeInfos(edge, halfEdges, true); } private storeThreeWtEdges(edgesMap: Record) { diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.test.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.test.ts index f2d3e198..cbd8abb8 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.test.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.test.ts @@ -494,20 +494,22 @@ test('getHalfEdges', () => { expect(halfEdges[0]).not.toBeNull(); if (halfEdges[0]) { expect(halfEdges[0].edgePoints.length).toBe(3); - expect(round(halfEdges[0].edgePoints[0].x)).toBeCloseTo(-220.63); - expect(round(halfEdges[0].edgePoints[0].y)).toBeCloseTo(22.08); - expect(round(halfEdges[0].edgePoints[1].x)).toBeCloseTo(-173.6); - expect(round(halfEdges[0].edgePoints[1].y)).toBeCloseTo(-1.26); + expect(halfEdges[0].side).toBe('1'); + expect(round(halfEdges[0].edgePoints[0].x)).toBeCloseTo(117.43); + expect(round(halfEdges[0].edgePoints[0].y)).toBeCloseTo(43.39); + expect(round(halfEdges[0].edgePoints[1].x)).toBeCloseTo(73.7); + expect(round(halfEdges[0].edgePoints[1].y)).toBeCloseTo(14.33); expect(round(halfEdges[0].edgePoints[2].x)).toBeCloseTo(-49.95); expect(round(halfEdges[0].edgePoints[2].y)).toBeCloseTo(6.53); } expect(halfEdges[1]).not.toBeNull(); if (halfEdges[1]) { expect(halfEdges[1].edgePoints.length).toBe(3); - expect(round(halfEdges[1].edgePoints[0].x)).toBeCloseTo(117.43); - expect(round(halfEdges[1].edgePoints[0].y)).toBeCloseTo(43.39); - expect(round(halfEdges[1].edgePoints[1].x)).toBeCloseTo(73.7); - expect(round(halfEdges[1].edgePoints[1].y)).toBeCloseTo(14.33); + expect(halfEdges[1].side).toBe('2'); + expect(round(halfEdges[1].edgePoints[0].x)).toBeCloseTo(-220.63); + expect(round(halfEdges[1].edgePoints[0].y)).toBeCloseTo(22.08); + expect(round(halfEdges[1].edgePoints[1].x)).toBeCloseTo(-173.6); + expect(round(halfEdges[1].edgePoints[1].y)).toBeCloseTo(-1.26); expect(round(halfEdges[1].edgePoints[2].x)).toBeCloseTo(-49.95); expect(round(halfEdges[1].edgePoints[2].y)).toBeCloseTo(6.53); } diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts index 47452f5b..0bd5f1a7 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts @@ -278,7 +278,7 @@ export function getHalfEdges( edge.bendingPoints ); const halfEdge1: HalfEdge = { - side: '1', + side: point1.x == node1.x && point1.y == node1.y ? '1' : '2', fork: groupedEdgesCount > 1, busOuterRadius: nodeRadius1.busOuterRadius, voltageLevelRadius: nodeRadius1.voltageLevelRadius, @@ -286,14 +286,17 @@ export function getHalfEdges( edgePoints: edgePoints[0], }; const halfEdge2: HalfEdge = { - side: '2', + side: point2.x == node2.x && point2.y == node2.y ? '2' : '1', fork: groupedEdgesCount > 1, busOuterRadius: nodeRadius2.busOuterRadius, voltageLevelRadius: nodeRadius2.voltageLevelRadius, edgeInfoId: edge.edgeInfo2?.svgId, edgePoints: edgePoints[1], }; - return [halfEdge1, halfEdge2]; + return [ + point1.x == node1.x && point1.y == node1.y ? halfEdge1 : halfEdge2, + point2.x == node2.x && point2.y == node2.y ? halfEdge2 : halfEdge1, + ]; } export function getHalfEdgesLoop( diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/svg-writer.test.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/svg-writer.test.ts index 0e395b7b..4f9c70c8 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/svg-writer.test.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/svg-writer.test.ts @@ -7,14 +7,21 @@ */ import '../../../../global.d.ts'; -import IEE14CdfNetworkMetadata from '../resources/test-data/nad-ieee14cdf-solved_metadata.json'; + +import IEEE14CdfNetworkMetadata from '../resources/test-data/nad-ieee14cdf-solved_metadata.json'; import FourSubstationsNetworkCustomStyleMetadata from '../resources/test-data/nad-four-substations_custom_metadata.json'; +import EurostagNetworkMetadata from '../resources/test-data/nad-eurostag-tutorial-example1_metadata.json'; +import IEEE9NetworkMetadata from '../resources/test-data/nad-ieee9-zeroimpedance-cdf_metadata.json'; +import FourSubstationsNetworkMetadata from '../resources/test-data/nad-four-substations_metadata.json'; +import IEEE9NetworkMiddleArrowsMetadata from '../resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow_metadata.json'; +import FourSubstationsNetworkMultipleLabelsMetadata from '../resources/test-data/nad-four-substations-multiple-labels_metadata.json'; +import DoubleArrowsNetworkMetadata from '../resources/test-data/nad-double-arrows-with-middle-values_metadata.json'; import { SvgWriter } from './svg-writer'; import { getSvgFromFile } from './test-utils'; -test('testIEE14CdfNetwork', () => { - const actual = new SvgWriter(IEE14CdfNetworkMetadata).getSvg({ width: 0, height: 0 }); +test('testIEEE14CdfNetwork', () => { + const actual = new SvgWriter(IEEE14CdfNetworkMetadata).getSvg({ width: 0, height: 0 }); const expected = getSvgFromFile('../resources/test-data/nad-ieee14cdf-solved.svg'); expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); }); @@ -24,3 +31,39 @@ test('testFourSubstationsNetworkCustomStyle', () => { const expected = getSvgFromFile('../resources/test-data/nad-four-substations_custom.svg'); expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); }); + +test('testEurostagNetwork', () => { + const actual = new SvgWriter(EurostagNetworkMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-eurostag-tutorial-example1.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); + +test('testIEEE9Network', () => { + const actual = new SvgWriter(IEEE9NetworkMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-ieee9-zeroimpedance-cdf.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); + +test('testFourSubstationsNetwork', () => { + const actual = new SvgWriter(FourSubstationsNetworkMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-four-substations.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); + +test('testIEEE9NetworkMiddleArrows', () => { + const actual = new SvgWriter(IEEE9NetworkMiddleArrowsMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); + +test('testFourSubstationsNetworkMultipleLabelsNetwork', () => { + const actual = new SvgWriter(FourSubstationsNetworkMultipleLabelsMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-four-substations-multiple-labels.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); + +test('testDoubleArrowsNetwork', () => { + const actual = new SvgWriter(DoubleArrowsNetworkMetadata).getSvg({ width: 0, height: 0 }); + const expected = getSvgFromFile('../resources/test-data/nad-double-arrows-with-middle-values.svg'); + expect(actual).toEqualSvg(expected, { epsilon: 0.1 }); +}); diff --git a/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values.svg b/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values.svg new file mode 100644 index 00000000..860e16cb --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + 50 + + + + + 100 + 50 + + + + + 300 + 75 + + + + + 100 + 50 + + + + + + + + +
+
vl
+
+ kV / °
+
+
+ +
+
vl2
+
+ kV / °
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values_metadata.json new file mode 100644 index 00000000..29e3f645 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-double-arrows-with-middle-values_metadata.json @@ -0,0 +1,188 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "vl_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "0", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "7", + "equipmentId" : "vl2_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "4", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "9", + "equipmentId" : "dl1", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "8", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "vl", + "x" : -94.84, + "y" : -119.74, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "vl" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "4", + "equipmentId" : "vl2", + "x" : -432.32, + "y" : 17.46, + "legendSvgId" : "5", + "legendEdgeSvgId" : "6", + "legendHeader" : [ "vl2" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "8", + "equipmentId" : "dl1", + "x" : 194.24, + "y" : 101.91, + "type" : "BOUNDARY", + "classes" : [ "nad-boundary-node", "nad-vl300to500" ] + } ], + "edges" : [ { + "svgId" : "10", + "equipmentId" : "dl1", + "node1" : "0", + "node2" : "8", + "busNode1" : "3", + "busNode2" : "9", + "type" : "BoundaryLineEdge", + "edgeInfo1" : { + "svgId" : "11", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "50", + "labelB" : "100" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "12", + "equipmentId" : "hvdc", + "node1" : "0", + "node2" : "4", + "busNode1" : "3", + "busNode2" : "7", + "type" : "HvdcLineVscEdge", + "edgeInfo1" : { + "svgId" : "13", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "50", + "labelB" : "100" + }, + "edgeInfo2" : { + "svgId" : "14", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "75", + "labelB" : "300" + }, + "edgeInfoMiddle" : { + "svgId" : "15", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "50", + "labelB" : "100" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "vl", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "5", + "equipmentId" : "vl2", + "vlNode" : "4", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file diff --git a/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1.svg b/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1.svg new file mode 100644 index 00000000..9432387d --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NGEN_NHV1 + + + NHV1_NHV2_1 + + + NHV1_NHV2_2 + + + NHV1_NHV2_3 + + + NHV2_NLOAD + + + + + + + + + + +
+
VLGEN
+
+ kV / °
+
+
+ +
+
VLHV1
+
+ kV / °
+
+
+ +
+
VLHV2
+
+ kV / °
+
+
+ +
+
VLLOAD
+
+ kV / °
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1_metadata.json new file mode 100644 index 00000000..7865046d --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-eurostag-tutorial-example1_metadata.json @@ -0,0 +1,243 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "VLGEN_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "0", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "7", + "equipmentId" : "VLHV1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "4", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "11", + "equipmentId" : "VLHV2_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "8", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "15", + "equipmentId" : "VLLOAD_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "12", + "legend" : " kV / °", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "VLGEN", + "x" : -452.59, + "y" : -274.01, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "VLGEN" ], + "classes" : [ "nad-vl0to30" ] + }, { + "svgId" : "4", + "equipmentId" : "VLHV1", + "x" : -245.26, + "y" : 34.3, + "legendSvgId" : "5", + "legendEdgeSvgId" : "6", + "legendHeader" : [ "VLHV1" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "8", + "equipmentId" : "VLHV2", + "x" : 140.33, + "y" : 58.61, + "legendSvgId" : "9", + "legendEdgeSvgId" : "10", + "legendHeader" : [ "VLHV2" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "12", + "equipmentId" : "VLLOAD", + "x" : 430.9, + "y" : -174.05, + "legendSvgId" : "13", + "legendEdgeSvgId" : "14", + "legendHeader" : [ "VLLOAD" ], + "classes" : [ "nad-vl120to180" ] + } ], + "edges" : [ { + "svgId" : "16", + "equipmentId" : "NGEN_NHV1", + "node1" : "0", + "node2" : "4", + "busNode1" : "3", + "busNode2" : "7", + "type" : "TwoWtEdge", + "edgeInfoMiddle" : { + "svgId" : "17", + "infoTypeA" : "Name", + "labelA" : "NGEN_NHV1" + }, + "classes1" : [ "nad-vl0to30" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "18", + "equipmentId" : "NHV1_NHV2_1", + "node1" : "4", + "node2" : "8", + "busNode1" : "7", + "busNode2" : "11", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "19", + "infoTypeA" : "Name", + "labelA" : "NHV1_NHV2_1" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "20", + "equipmentId" : "NHV1_NHV2_2", + "node1" : "4", + "node2" : "8", + "busNode1" : "7", + "busNode2" : "11", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "21", + "infoTypeA" : "Name", + "labelA" : "NHV1_NHV2_2" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "22", + "equipmentId" : "NHV1_NHV2_3", + "node1" : "8", + "node2" : "4", + "busNode1" : "11", + "busNode2" : "7", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "23", + "infoTypeA" : "Name", + "labelA" : "NHV1_NHV2_3" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "24", + "equipmentId" : "NHV2_NLOAD", + "node1" : "8", + "node2" : "12", + "busNode1" : "11", + "busNode2" : "15", + "type" : "TwoWtEdge", + "edgeInfoMiddle" : { + "svgId" : "25", + "infoTypeA" : "Name", + "labelA" : "NHV2_NLOAD" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl120to180" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "VLGEN", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "5", + "equipmentId" : "VLHV1", + "vlNode" : "4", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "9", + "equipmentId" : "VLHV2", + "vlNode" : "8", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "13", + "equipmentId" : "VLLOAD", + "vlNode" : "12", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file diff --git a/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels.svg b/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels.svg new file mode 100644 index 00000000..ba6611be --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -80 + -10 + + + + + 80 + 5 + + + + 207 + TWT + + + + 81 + + + + -79 + + + LCC1 + + + + + 10 + -512 + + + + + -10 + -120 + + + + 739 + VSC1 + + + + + 110 + 190 + + + + + -110 + -185 + + + + 310 + LINE_S2S3 + + + + + 240 + 2 + + + + + -240 + 3 + + + + 346 + LINE_S3S4 + + + + + + + + + + + +
+
S1VL1
+
+ 224.6 kV / 2.3°
+
+
+ +
+
S1VL2
+
+ 400.0 kV / 0.0°
+
+
+ +
+
S2VL1
+
+ 408.8 kV / 0.7°
+
+
+ +
+
S3VL1
+
+ 400.0 kV / 0.0°
+
+
+ +
+
S4VL1
+
+ 400.0 kV / -1.1°
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels_metadata.json new file mode 100644 index 00000000..d4a4863d --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-four-substations-multiple-labels_metadata.json @@ -0,0 +1,367 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "S1VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "0", + "legend" : "224.6 kV / 2.3°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "7", + "equipmentId" : "S1VL2_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "4", + "legend" : "400.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "11", + "equipmentId" : "S2VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "8", + "legend" : "408.8 kV / 0.7°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "15", + "equipmentId" : "S3VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "12", + "legend" : "400.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "19", + "equipmentId" : "S4VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "16", + "legend" : "400.0 kV / -1.1°", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "S1VL1", + "x" : -220.4, + "y" : -515.14, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "S1VL1" ], + "classes" : [ "nad-vl180to300" ] + }, { + "svgId" : "4", + "equipmentId" : "S1VL2", + "x" : -152.34, + "y" : -133.8, + "legendSvgId" : "5", + "legendEdgeSvgId" : "6", + "legendHeader" : [ "S1VL2" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "8", + "equipmentId" : "S2VL1", + "x" : -162.93, + "y" : 231.51, + "legendSvgId" : "9", + "legendEdgeSvgId" : "10", + "legendHeader" : [ "S2VL1" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "12", + "equipmentId" : "S3VL1", + "x" : 171.13, + "y" : 91.69, + "legendSvgId" : "13", + "legendEdgeSvgId" : "14", + "legendHeader" : [ "S3VL1" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "16", + "equipmentId" : "S4VL1", + "x" : 497.34, + "y" : 302.31, + "legendSvgId" : "17", + "legendEdgeSvgId" : "18", + "legendHeader" : [ "S4VL1" ], + "classes" : [ "nad-vl300to500" ] + } ], + "edges" : [ { + "svgId" : "20", + "equipmentId" : "TWT", + "node1" : "0", + "node2" : "4", + "busNode1" : "3", + "busNode2" : "7", + "type" : "PstEdge", + "edgeInfo1" : { + "svgId" : "21", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "IN", + "directionB" : "IN", + "labelA" : "-10", + "labelB" : "-80" + }, + "edgeInfo2" : { + "svgId" : "22", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "5", + "labelB" : "80" + }, + "edgeInfoMiddle" : { + "svgId" : "23", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "TWT", + "labelB" : "207" + }, + "classes1" : [ "nad-vl180to300" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "24", + "equipmentId" : "HVDC2", + "node1" : "4", + "node2" : "12", + "busNode1" : "7", + "busNode2" : "15", + "type" : "HvdcLineLccEdge", + "edgeInfo1" : { + "svgId" : "25", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "81" + }, + "edgeInfo2" : { + "svgId" : "26", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-79" + }, + "edgeInfoMiddle" : { + "svgId" : "27", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "labelA" : "LCC1" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "28", + "equipmentId" : "HVDC1", + "node1" : "4", + "node2" : "8", + "busNode1" : "7", + "busNode2" : "11", + "type" : "HvdcLineVscEdge", + "edgeInfo1" : { + "svgId" : "29", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "IN", + "directionB" : "OUT", + "labelA" : "-512", + "labelB" : "10" + }, + "edgeInfo2" : { + "svgId" : "30", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "IN", + "directionB" : "IN", + "labelA" : "-120", + "labelB" : "-10" + }, + "edgeInfoMiddle" : { + "svgId" : "31", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "VSC1", + "labelB" : "739" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "32", + "equipmentId" : "LINE_S2S3", + "node1" : "8", + "node2" : "12", + "busNode1" : "11", + "busNode2" : "15", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "33", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "190", + "labelB" : "110" + }, + "edgeInfo2" : { + "svgId" : "34", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "IN", + "directionB" : "IN", + "labelA" : "-185", + "labelB" : "-110" + }, + "edgeInfoMiddle" : { + "svgId" : "35", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "LINE_S2S3", + "labelB" : "310" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "36", + "equipmentId" : "LINE_S3S4", + "node1" : "12", + "node2" : "16", + "busNode1" : "15", + "busNode2" : "19", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "37", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "OUT", + "labelA" : "2", + "labelB" : "240" + }, + "edgeInfo2" : { + "svgId" : "38", + "infoTypeA" : "ReactivePower", + "infoTypeB" : "ActivePower", + "directionA" : "OUT", + "directionB" : "IN", + "labelA" : "3", + "labelB" : "-240" + }, + "edgeInfoMiddle" : { + "svgId" : "39", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "LINE_S3S4", + "labelB" : "346" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "S1VL1", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "5", + "equipmentId" : "S1VL2", + "vlNode" : "4", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "9", + "equipmentId" : "S2VL1", + "vlNode" : "8", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "13", + "equipmentId" : "S3VL1", + "vlNode" : "12", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "17", + "equipmentId" : "S4VL1", + "vlNode" : "16", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file diff --git a/packages/network-viewer-core/src/resources/test-data/nad-four-substations.svg b/packages/network-viewer-core/src/resources/test-data/nad-four-substations.svg new file mode 100644 index 00000000..61e203a5 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-four-substations.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -80 + + + + 80 + + + + 81 + + + + -79 + + + + 10 + + + + -10 + + + + 110 + + + + -110 + + + + 240 + + + + -240 + + + + + + + + + + + +
+
S1VL1
+
+ 224.6 kV / 2.3°
+
+
+ +
+
S1VL2
+
+ 400.0 kV / 0.0°
+
+
+ +
+
S2VL1
+
+ 408.8 kV / 0.7°
+
+
+ +
+
S3VL1
+
+ 400.0 kV / 0.0°
+
+
+ +
+
S4VL1
+
+ 400.0 kV / -1.1°
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-four-substations_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-four-substations_metadata.json new file mode 100644 index 00000000..35c76957 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-four-substations_metadata.json @@ -0,0 +1,303 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "S1VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "0", + "legend" : "224.6 kV / 2.3°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "7", + "equipmentId" : "S1VL2_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "4", + "legend" : "400.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "11", + "equipmentId" : "S2VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "8", + "legend" : "408.8 kV / 0.7°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "15", + "equipmentId" : "S3VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "12", + "legend" : "400.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "19", + "equipmentId" : "S4VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "16", + "legend" : "400.0 kV / -1.1°", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "S1VL1", + "x" : -220.4, + "y" : -515.14, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "S1VL1" ], + "classes" : [ "nad-vl180to300" ] + }, { + "svgId" : "4", + "equipmentId" : "S1VL2", + "x" : -152.34, + "y" : -133.8, + "legendSvgId" : "5", + "legendEdgeSvgId" : "6", + "legendHeader" : [ "S1VL2" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "8", + "equipmentId" : "S2VL1", + "x" : -162.93, + "y" : 231.51, + "legendSvgId" : "9", + "legendEdgeSvgId" : "10", + "legendHeader" : [ "S2VL1" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "12", + "equipmentId" : "S3VL1", + "x" : 171.13, + "y" : 91.69, + "legendSvgId" : "13", + "legendEdgeSvgId" : "14", + "legendHeader" : [ "S3VL1" ], + "classes" : [ "nad-vl300to500" ] + }, { + "svgId" : "16", + "equipmentId" : "S4VL1", + "x" : 497.34, + "y" : 302.31, + "legendSvgId" : "17", + "legendEdgeSvgId" : "18", + "legendHeader" : [ "S4VL1" ], + "classes" : [ "nad-vl300to500" ] + } ], + "edges" : [ { + "svgId" : "20", + "equipmentId" : "TWT", + "node1" : "0", + "node2" : "4", + "busNode1" : "3", + "busNode2" : "7", + "type" : "PstEdge", + "edgeInfo1" : { + "svgId" : "21", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-80" + }, + "edgeInfo2" : { + "svgId" : "22", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "80" + }, + "classes1" : [ "nad-vl180to300" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "23", + "equipmentId" : "HVDC2", + "node1" : "4", + "node2" : "12", + "busNode1" : "7", + "busNode2" : "15", + "type" : "HvdcLineLccEdge", + "edgeInfo1" : { + "svgId" : "24", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "81" + }, + "edgeInfo2" : { + "svgId" : "25", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-79" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "26", + "equipmentId" : "HVDC1", + "node1" : "4", + "node2" : "8", + "busNode1" : "7", + "busNode2" : "11", + "type" : "HvdcLineVscEdge", + "edgeInfo1" : { + "svgId" : "27", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "10" + }, + "edgeInfo2" : { + "svgId" : "28", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-10" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "29", + "equipmentId" : "LINE_S2S3", + "node1" : "8", + "node2" : "12", + "busNode1" : "11", + "busNode2" : "15", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "30", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "110" + }, + "edgeInfo2" : { + "svgId" : "31", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-110" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + }, { + "svgId" : "32", + "equipmentId" : "LINE_S3S4", + "node1" : "12", + "node2" : "16", + "busNode1" : "15", + "busNode2" : "19", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "33", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "240" + }, + "edgeInfo2" : { + "svgId" : "34", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-240" + }, + "classes1" : [ "nad-vl300to500" ], + "classes2" : [ "nad-vl300to500" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "S1VL1", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "5", + "equipmentId" : "S1VL2", + "vlNode" : "4", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "9", + "equipmentId" : "S2VL1", + "vlNode" : "8", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "13", + "equipmentId" : "S3VL1", + "vlNode" : "12", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "17", + "equipmentId" : "S4VL1", + "vlNode" : "16", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file diff --git a/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow.svg b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow.svg new file mode 100644 index 00000000..cbcfbee0 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 78 + + + + -76 + + + + 444 + L7-5-0 + + + + 85 + + + + -85 + + + + 488 + L7-8-0 + + + + 15 + + + + -15 + + + + 83 + L9-8-0 + + + + -163 + + + + 163 + + + + 923 + T7-2-0 + + + + 70 + + + + 405 + L9-6-0 + + + + -85 + + + + 85 + + + + 484 + T9-3-0 + + + + -49 + + + + 364 + L5-4-0 + + + + + + + + + +
+
VL2
+
+ 102.5 kV / 8.2°
+
+ 101.9 kV / 2.6°
+
+ 101.9 kV / 2.6°
+
+
+ +
+
VL3
+
+ 102.5 kV / 6.0°
+
+ 103.3 kV / 3.3°
+
+
+ +
+
VL5
+
+ 99.3 kV / -4.4°
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow_metadata.json new file mode 100644 index 00000000..01b6097f --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf-middle-arrow_metadata.json @@ -0,0 +1,423 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "VL2_0", + "nbNeighbours" : 2, + "index" : 0, + "vlNode" : "0", + "legend" : "102.5 kV / 8.2°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "5", + "equipmentId" : "VL2_2", + "nbNeighbours" : 2, + "index" : 1, + "vlNode" : "0", + "legend" : "101.9 kV / 2.6°", + "classes" : [ "nad-bus-2" ] + }, { + "svgId" : "4", + "equipmentId" : "VL2_1", + "nbNeighbours" : 2, + "index" : 2, + "vlNode" : "0", + "legend" : "101.9 kV / 2.6°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "9", + "equipmentId" : "VL3_0", + "nbNeighbours" : 1, + "index" : 0, + "vlNode" : "6", + "legend" : "102.5 kV / 6.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "10", + "equipmentId" : "VL3_1", + "nbNeighbours" : 1, + "index" : 1, + "vlNode" : "6", + "legend" : "103.3 kV / 3.3°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "14", + "equipmentId" : "VL5_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "11", + "legend" : "99.3 kV / -4.4°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "18", + "equipmentId" : "VL1_0", + "nbNeighbours" : 1, + "index" : 0, + "vlNode" : "15", + "legend" : "104.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "19", + "equipmentId" : "VL1_1", + "nbNeighbours" : 1, + "index" : 1, + "vlNode" : "15", + "legend" : "102.5 kV / -2.2°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "23", + "equipmentId" : "VL6_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "20", + "legend" : "101.1 kV / -3.2°", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "VL2", + "x" : -214.48, + "y" : -93.81, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "VL2" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "6", + "equipmentId" : "VL3", + "x" : -216.54, + "y" : 296.32, + "legendSvgId" : "7", + "legendEdgeSvgId" : "8", + "legendHeader" : [ "VL3" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "11", + "equipmentId" : "VL5", + "x" : 109.34, + "y" : -313.91, + "legendSvgId" : "12", + "legendEdgeSvgId" : "13", + "legendHeader" : [ "VL5" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "15", + "equipmentId" : "VL1", + "x" : 427.7, + "y" : -499.68, + "invisible" : true, + "legendSvgId" : "16", + "legendEdgeSvgId" : "17", + "legendHeader" : [ "VL1" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "20", + "equipmentId" : "VL6", + "x" : 17.25, + "y" : 589.32, + "invisible" : true, + "legendSvgId" : "21", + "legendEdgeSvgId" : "22", + "legendHeader" : [ "VL6" ], + "classes" : [ "nad-vl70to120" ] + } ], + "edges" : [ { + "svgId" : "24", + "equipmentId" : "L7-5-0", + "node1" : "0", + "node2" : "11", + "busNode1" : "4", + "busNode2" : "14", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "25", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "78" + }, + "edgeInfo2" : { + "svgId" : "26", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-76" + }, + "edgeInfoMiddle" : { + "svgId" : "27", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "L7-5-0", + "labelB" : "444" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "28", + "equipmentId" : "L7-8-0", + "node1" : "0", + "node2" : "0", + "busNode1" : "4", + "busNode2" : "5", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "29", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "85" + }, + "edgeInfo2" : { + "svgId" : "30", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-85" + }, + "edgeInfoMiddle" : { + "svgId" : "31", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "L7-8-0", + "labelB" : "488" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "32", + "equipmentId" : "L9-8-0", + "node1" : "6", + "node2" : "0", + "busNode1" : "10", + "busNode2" : "5", + "type" : "LineEdge", + "edgeInfo1" : { + "svgId" : "33", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "15" + }, + "edgeInfo2" : { + "svgId" : "34", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-15" + }, + "edgeInfoMiddle" : { + "svgId" : "35", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "L9-8-0", + "labelB" : "83" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "36", + "equipmentId" : "T7-2-0", + "node1" : "0", + "node2" : "0", + "busNode1" : "4", + "busNode2" : "3", + "type" : "TwoWtEdge", + "edgeInfo1" : { + "svgId" : "37", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-163" + }, + "edgeInfo2" : { + "svgId" : "38", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "163" + }, + "edgeInfoMiddle" : { + "svgId" : "39", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "T7-2-0", + "labelB" : "923" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "40", + "equipmentId" : "L9-6-0", + "node1" : "6", + "node2" : "20", + "busNode1" : "10", + "busNode2" : "23", + "type" : "LineEdge", + "invisible2" : true, + "edgeInfo1" : { + "svgId" : "41", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "70" + }, + "edgeInfo2" : { + "svgId" : "42", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-68" + }, + "edgeInfoMiddle" : { + "svgId" : "43", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "L9-6-0", + "labelB" : "405" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "44", + "equipmentId" : "T9-3-0", + "node1" : "6", + "node2" : "6", + "busNode1" : "10", + "busNode2" : "9", + "type" : "TwoWtEdge", + "edgeInfo1" : { + "svgId" : "45", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-85" + }, + "edgeInfo2" : { + "svgId" : "46", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "85" + }, + "edgeInfoMiddle" : { + "svgId" : "47", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "T9-3-0", + "labelB" : "484" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "48", + "equipmentId" : "L5-4-0", + "node1" : "11", + "node2" : "15", + "busNode1" : "14", + "busNode2" : "19", + "type" : "LineEdge", + "invisible2" : true, + "edgeInfo1" : { + "svgId" : "49", + "infoTypeB" : "ActivePower", + "direction" : "IN", + "labelB" : "-49" + }, + "edgeInfo2" : { + "svgId" : "50", + "infoTypeB" : "ActivePower", + "direction" : "OUT", + "labelB" : "49" + }, + "edgeInfoMiddle" : { + "svgId" : "51", + "infoTypeA" : "Name", + "infoTypeB" : "Current", + "direction" : "OUT", + "labelA" : "L5-4-0", + "labelB" : "364" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "VL2", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "7", + "equipmentId" : "VL3", + "vlNode" : "6", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "12", + "equipmentId" : "VL5", + "vlNode" : "11", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file diff --git a/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf.svg b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf.svg new file mode 100644 index 00000000..a76a28e9 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L7-5-0 + + + L7-8-0 + + + L9-8-0 + + + T7-2-0 + + + L9-6-0 + + + T9-3-0 + + + L6-4-0 + + + + + + + + + +
+
VL2
+
+ 102.5 kV / 9.3°
+
+ 101.5 kV / 0.7°
+
+ 102.5 kV / 3.7°
+
+
+ +
+
VL3
+
+ 102.5 kV / 4.7°
+
+ 103.2 kV / 2.0°
+
+
+ +
+
VL6
+
+ 101.2 kV / -3.7°
+
+
+
+
diff --git a/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf_metadata.json b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf_metadata.json new file mode 100644 index 00000000..97686ef8 --- /dev/null +++ b/packages/network-viewer-core/src/resources/test-data/nad-ieee9-zeroimpedance-cdf_metadata.json @@ -0,0 +1,318 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "timeoutSeconds" : 15.0, + "textNodeEdgeConnectionYShift" : 25.0, + "injectionsAdded" : false, + "scaleFactor" : 1.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : false, + "svgWidthAndHeightAdded" : false, + "cssLocation" : "EXTERNAL_NO_IMPORT", + "sizeConstraint" : "FIXED_SCALE", + "fixedWidth" : -1, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "arrowPathIn" : "M-10 -10 H10 L0 10z", + "arrowPathOut" : "M-10 10 H10 L0 -10z", + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "percentageValuePrecision" : 0, + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "", + "highlightGraph" : false, + "injectionAperture" : 10.0, + "injectionEdgeLength" : 145.0, + "injectionCircleRadius" : 25.0, + "voltageLevelLegendsIncluded" : true, + "edgeInfosIncluded" : true, + "doubleArrowShiftFactorArrows" : 1.5, + "doubleArrowShiftFactorText" : 1.8 + }, + "busNodes" : [ { + "svgId" : "3", + "equipmentId" : "VL2_0", + "nbNeighbours" : 2, + "index" : 0, + "vlNode" : "0", + "legend" : "102.5 kV / 9.3°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "5", + "equipmentId" : "VL2_2", + "nbNeighbours" : 2, + "index" : 1, + "vlNode" : "0", + "legend" : "101.5 kV / 0.7°", + "classes" : [ "nad-bus-2" ] + }, { + "svgId" : "4", + "equipmentId" : "VL2_1", + "nbNeighbours" : 2, + "index" : 2, + "vlNode" : "0", + "legend" : "102.5 kV / 3.7°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "9", + "equipmentId" : "VL3_0", + "nbNeighbours" : 1, + "index" : 0, + "vlNode" : "6", + "legend" : "102.5 kV / 4.7°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "10", + "equipmentId" : "VL3_1", + "nbNeighbours" : 1, + "index" : 1, + "vlNode" : "6", + "legend" : "103.2 kV / 2.0°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "14", + "equipmentId" : "VL6_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "11", + "legend" : "101.2 kV / -3.7°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "18", + "equipmentId" : "VL1_0", + "nbNeighbours" : 1, + "index" : 0, + "vlNode" : "15", + "legend" : "104.0 kV / 0.0°", + "classes" : [ "nad-bus-0" ] + }, { + "svgId" : "19", + "equipmentId" : "VL1_1", + "nbNeighbours" : 1, + "index" : 1, + "vlNode" : "15", + "legend" : "102.5 kV / -2.2°", + "classes" : [ "nad-bus-1" ] + }, { + "svgId" : "23", + "equipmentId" : "VL5_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "20", + "legend" : "99.5 kV / -4.0°", + "classes" : [ "nad-bus-0" ] + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "VL2", + "x" : 73.67, + "y" : 333.18, + "legendSvgId" : "1", + "legendEdgeSvgId" : "2", + "legendHeader" : [ "VL2" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "6", + "equipmentId" : "VL3", + "x" : -231.89, + "y" : 82.3, + "legendSvgId" : "7", + "legendEdgeSvgId" : "8", + "legendHeader" : [ "VL3" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "11", + "equipmentId" : "VL6", + "x" : -206.52, + "y" : -309.9, + "legendSvgId" : "12", + "legendEdgeSvgId" : "13", + "legendHeader" : [ "VL6" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "15", + "equipmentId" : "VL1", + "x" : 57.4, + "y" : -578.13, + "invisible" : true, + "legendSvgId" : "16", + "legendEdgeSvgId" : "17", + "legendHeader" : [ "VL1" ], + "classes" : [ "nad-vl70to120" ] + }, { + "svgId" : "20", + "equipmentId" : "VL5", + "x" : 429.14, + "y" : 451.05, + "invisible" : true, + "legendSvgId" : "21", + "legendEdgeSvgId" : "22", + "legendHeader" : [ "VL5" ], + "classes" : [ "nad-vl70to120" ] + } ], + "edges" : [ { + "svgId" : "24", + "equipmentId" : "L7-5-0", + "node1" : "0", + "node2" : "20", + "busNode1" : "4", + "busNode2" : "23", + "type" : "LineEdge", + "invisible2" : true, + "edgeInfoMiddle" : { + "svgId" : "25", + "infoTypeA" : "Name", + "labelA" : "L7-5-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "26", + "equipmentId" : "L7-8-0", + "node1" : "0", + "node2" : "0", + "busNode1" : "4", + "busNode2" : "5", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "27", + "infoTypeA" : "Name", + "labelA" : "L7-8-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "28", + "equipmentId" : "L9-8-0", + "node1" : "6", + "node2" : "0", + "busNode1" : "10", + "busNode2" : "5", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "29", + "infoTypeA" : "Name", + "labelA" : "L9-8-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "30", + "equipmentId" : "T7-2-0", + "node1" : "0", + "node2" : "0", + "busNode1" : "4", + "busNode2" : "3", + "type" : "TwoWtEdge", + "edgeInfoMiddle" : { + "svgId" : "31", + "infoTypeA" : "Name", + "labelA" : "T7-2-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "32", + "equipmentId" : "L9-6-0", + "node1" : "6", + "node2" : "11", + "busNode1" : "10", + "busNode2" : "14", + "type" : "LineEdge", + "edgeInfoMiddle" : { + "svgId" : "33", + "infoTypeA" : "Name", + "labelA" : "L9-6-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "34", + "equipmentId" : "T9-3-0", + "node1" : "6", + "node2" : "6", + "busNode1" : "10", + "busNode2" : "9", + "type" : "TwoWtEdge", + "edgeInfoMiddle" : { + "svgId" : "35", + "infoTypeA" : "Name", + "labelA" : "T9-3-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + }, { + "svgId" : "36", + "equipmentId" : "L6-4-0", + "node1" : "11", + "node2" : "15", + "busNode1" : "14", + "busNode2" : "19", + "type" : "LineEdge", + "invisible2" : true, + "edgeInfoMiddle" : { + "svgId" : "37", + "infoTypeA" : "Name", + "labelA" : "L6-4-0" + }, + "classes1" : [ "nad-vl70to120" ], + "classes2" : [ "nad-vl70to120" ] + } ], + "textNodes" : [ { + "svgId" : "1", + "equipmentId" : "VL2", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "7", + "equipmentId" : "VL3", + "vlNode" : "6", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "12", + "equipmentId" : "VL6", + "vlNode" : "11", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +} \ No newline at end of file From a91750c8faf09aab114194acf0ea0b398ee42999 Mon Sep 17 00:00:00 2001 From: "massimo.ferraro" Date: Mon, 6 Jul 2026 19:44:39 +0200 Subject: [PATCH 2/2] Refactoring and addition of code comments after review Signed-off-by: massimo.ferraro --- demo/nad-created.html | 1 + .../network-area-diagram-viewer/edge-router.ts | 9 +++++++++ .../half-edge-utils.ts | 18 +++++++++++------- .../metadata-utils.test.ts | 13 +++++++++++++ .../metadata-utils.ts | 4 ++++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/demo/nad-created.html b/demo/nad-created.html index 036e2631..fa654400 100644 --- a/demo/nad-created.html +++ b/demo/nad-created.html @@ -113,6 +113,7 @@

Network Area Diagram SVGs created from diagram metadata

Edge info with double arrows from metadata
+
Custom style provider
diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts index 45c6ab9c..f229b097 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/edge-router.ts @@ -17,11 +17,17 @@ import { HalfEdge, LabelData } from './diagram-types'; export class EdgeRouter { diagramMetadata: DiagramMetadata; svgParameters: SvgParameters; + // points of each half edge of edges edgePoints: Record = {}; + // data (position and arrow angle) for side infos of each half edge of edges edgeSideData: Record = {}; + // label data (angle, internal and external shift and style) for side infos of each half edge of edges edgeSideLabelData: Record = {}; + // data (position and arrow angle) for middle infos of edges edgeMiddleData: Record = {}; + // label data (angle, internal and external shift and style) for middle infos of edges edgeMiddleLabelData: Record = {}; + // points of 3wt edges threeWTEdgePoints: Record = {}; nodeAngles: Record = {}; @@ -188,6 +194,9 @@ export class EdgeRouter { } } + // given an edge id and 2 half edges, store data for edge side infos + // the isLoop parameter is needed because the computation of the position of edge side info + // is different if we are dealing with loop edges private storeEdgeSideData(edgeId: string, halfEdges: HalfEdge[] | null[], isLoop: boolean) { if (!halfEdges[0] || !halfEdges[1]) { return; diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts index 0bd5f1a7..465268b0 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/half-edge-utils.ts @@ -23,7 +23,14 @@ import { isTransformerEdge, radToDeg, } from './diagram-utils'; -import { getBusNodeMetadata, getEdgePoints, getEdgeType, getNodeMetadata, getNodeRadius } from './metadata-utils'; +import { + getBusNodeMetadata, + getEdgePoints, + getEdgeType, + getNodeMetadata, + getNodeRadius, + samePosition, +} from './metadata-utils'; import { HalfEdge, LabelData } from './diagram-types'; import { getPathPoints, getTransform } from './svg-utils'; @@ -278,7 +285,7 @@ export function getHalfEdges( edge.bendingPoints ); const halfEdge1: HalfEdge = { - side: point1.x == node1.x && point1.y == node1.y ? '1' : '2', + side: samePosition(node1, point1) ? '1' : '2', fork: groupedEdgesCount > 1, busOuterRadius: nodeRadius1.busOuterRadius, voltageLevelRadius: nodeRadius1.voltageLevelRadius, @@ -286,17 +293,14 @@ export function getHalfEdges( edgePoints: edgePoints[0], }; const halfEdge2: HalfEdge = { - side: point2.x == node2.x && point2.y == node2.y ? '2' : '1', + side: samePosition(node2, point2) ? '2' : '1', fork: groupedEdgesCount > 1, busOuterRadius: nodeRadius2.busOuterRadius, voltageLevelRadius: nodeRadius2.voltageLevelRadius, edgeInfoId: edge.edgeInfo2?.svgId, edgePoints: edgePoints[1], }; - return [ - point1.x == node1.x && point1.y == node1.y ? halfEdge1 : halfEdge2, - point2.x == node2.x && point2.y == node2.y ? halfEdge2 : halfEdge1, - ]; + return [samePosition(node1, point1) ? halfEdge1 : halfEdge2, samePosition(node2, point2) ? halfEdge2 : halfEdge1]; } export function getHalfEdgesLoop( diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.test.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.test.ts index d7f540b5..f5170c8f 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.test.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.test.ts @@ -594,3 +594,16 @@ test('getEdgeType', () => { expect(MetadataUtils.getEdgeType(edge)).toBe(EdgeType.TWO_WINDINGS_TRANSFORMER); expect(MetadataUtils.getStringEdgeType(edge)).toBe('TWO_WINDINGS_TRANSFORMER'); }); + +test('samePosition', () => { + const node: NodeMetadata = { + svgId: '4', + equipmentId: 'VL', + x: 100, + y: 100, + }; + expect(MetadataUtils.samePosition(node, new Point(100, 100))).toBe(true); + expect(MetadataUtils.samePosition(node, new Point(90, 100))).toBe(false); + expect(MetadataUtils.samePosition(node, new Point(100, 90))).toBe(false); + expect(MetadataUtils.samePosition(node, new Point(90, 90))).toBe(false); +}); diff --git a/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.ts b/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.ts index 4cccf34e..611abefd 100644 --- a/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.ts +++ b/packages/network-viewer-core/src/network-area-diagram-viewer/metadata-utils.ts @@ -411,3 +411,7 @@ export function isBoundaryNode(node: NodeMetadata): boolean { export function getNodeType(node: NodeMetadata): NodeType { return node.type === undefined ? NodeType.UNKNOWN : (NodeTypeMapping[node.type] ?? NodeType.UNKNOWN); } + +export function samePosition(node: NodeMetadata, point: Point): boolean { + return point.x == node.x && point.y == node.y; +}