From 844cca23497781b5a7cac777e82e7e04000f83fe Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Wed, 15 Jan 2025 10:28:57 +0100 Subject: [PATCH 1/8] Represent subnetworks in network-area diagrams Signed-off-by: Giovanni Ferrari --- .../nad/build/iidm/NetworkGraphBuilder.java | 13 +- .../com/powsybl/nad/model/BoundaryNode.java | 4 +- .../com/powsybl/nad/model/BranchEdge.java | 16 +- .../com/powsybl/nad/model/ThreeWtEdge.java | 12 +- .../powsybl/nad/model/VoltageLevelNode.java | 12 +- .../com/powsybl/nad/svg/StyleProvider.java | 3 +- .../java/com/powsybl/nad/svg/SvgWriter.java | 61 ++- .../src/main/resources/nominalStyle.css | 6 +- .../src/main/resources/topologicalStyle.css | 6 +- .../nad/svg/SubnetworkHighlightTest.java | 457 ++++++++++++++++++ .../src/test/resources/3wt.svg | 6 +- .../src/test/resources/3wt_disconnected.svg | 6 +- .../3wt_disconnected_topological.svg | 6 +- .../src/test/resources/3wt_partial.svg | 6 +- .../src/test/resources/IEEE_118_bus.svg | 6 +- .../test/resources/IEEE_118_bus_partial.svg | 6 +- .../IEEE_118_bus_partial_non_connected.svg | 6 +- .../src/test/resources/IEEE_14_bus.svg | 6 +- .../resources/IEEE_14_bus_disconnection.svg | 6 +- .../test/resources/IEEE_14_bus_fictitious.svg | 6 +- .../test/resources/IEEE_14_bus_text_nodes.svg | 6 +- .../resources/IEEE_14_bus_voltage_filter1.svg | 6 +- .../resources/IEEE_14_bus_voltage_filter2.svg | 6 +- .../resources/IEEE_14_bus_voltage_filter3.svg | 6 +- .../resources/IEEE_14_bus_voltage_filter4.svg | 6 +- .../resources/IEEE_14_bus_voltage_filter5.svg | 6 +- .../IEEE_14_bus_voltage_nofilter.svg | 6 +- .../test/resources/IEEE_14_id_prefixed.svg | 6 +- .../src/test/resources/IEEE_24_bus.svg | 6 +- .../src/test/resources/IEEE_30_bus.svg | 6 +- .../src/test/resources/IEEE_57_bus.svg | 6 +- .../src/test/resources/current_limits.svg | 6 +- .../resources/dangling_line_connected.svg | 6 +- .../resources/dangling_line_disconnected.svg | 6 +- .../src/test/resources/detailed_text_node.svg | 6 +- .../detailed_text_node_no_legend.svg | 6 +- .../diamond-spring-repulsion-factor-0.0.svg | 6 +- .../diamond-spring-repulsion-factor-0.2.svg | 6 +- .../src/test/resources/edge_info_current.svg | 6 +- .../resources/edge_info_double_labels.svg | 6 +- .../resources/edge_info_missing_label.svg | 6 +- .../edge_info_perpendicular_label.svg | 6 +- .../resources/edge_info_reactive_power.svg | 6 +- .../src/test/resources/edge_info_shift.svg | 6 +- .../src/test/resources/edge_with_id.svg | 6 +- .../src/test/resources/edge_without_id.svg | 6 +- .../src/test/resources/hvdc-vl-depth-1.svg | 6 +- .../src/test/resources/hvdc.svg | 6 +- .../test/resources/parallel_transformers.svg | 6 +- .../production_consumption_text_node.svg | 6 +- .../production_consumption_text_node_nan.svg | 6 +- .../src/test/resources/simple-eu-loop100.svg | 6 +- .../src/test/resources/simple-eu-loop80.svg | 6 +- .../src/test/resources/simple-eu.svg | 6 +- .../test/resources/subnetwork_highlight.svg | 383 +++++++++++++++ .../src/test/resources/tie_line.svg | 6 +- .../src/test/resources/tie_line_filtered.svg | 6 +- .../src/test/resources/vl_description_id.svg | 6 +- .../resources/vl_description_substation.svg | 6 +- .../vl_description_substation_id.svg | 6 +- .../src/test/resources/voltage_limits.svg | 6 +- 61 files changed, 1193 insertions(+), 80 deletions(-) create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java create mode 100644 network-area-diagram/src/test/resources/subnetwork_highlight.svg diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java index 866802e34..a51679458 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -64,7 +64,7 @@ public List getVoltageLevels() { } private VoltageLevelNode addVoltageLevelGraphNode(VoltageLevel vl, Graph graph, boolean visible) { - VoltageLevelNode vlNode = new VoltageLevelNode(idProvider.createId(vl), vl.getId(), vl.getNameOrId(), vl.isFictitious(), visible); + VoltageLevelNode vlNode = new VoltageLevelNode(vl.getParentNetwork().getId(), idProvider.createId(vl), vl.getId(), vl.getNameOrId(), vl.isFictitious(), visible); vl.getBusView().getBusStream() .map(bus -> new BusNode(idProvider.createId(bus), bus.getId())) .forEach(vlNode::addBusNode); @@ -112,7 +112,7 @@ private void visitThreeWindingsTransformer(VoltageLevel vl, ThreeWindingsTransfo private void visitDanglingLine(DanglingLine dl, Graph graph) { if (!dl.isPaired()) { - BoundaryNode boundaryNode = new BoundaryNode(idProvider.createId(dl), dl.getId(), dl.getNameOrId()); + BoundaryNode boundaryNode = new BoundaryNode(dl.getParentNetwork().getId(), idProvider.createId(dl), dl.getId(), dl.getNameOrId()); BusNode boundaryBusNode = new BoundaryBusNode(idProvider.createId(dl), dl.getId()); boundaryNode.addBusNode(boundaryBusNode); graph.addNode(boundaryNode); @@ -162,10 +162,11 @@ private void addEdge(Graph graph, Terminal terminalA, Terminal terminalB, Identi BusNode busNodeA = getBusNode(graph, terminalA); BusNode busNodeB = getBusNode(graph, terminalB); - BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType); if (!terminalsInReversedOrder) { + BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType, vlNodeA.getParentNetworkId(), vlNodeB.getParentNetworkId()); graph.addEdge(vlNodeA, busNodeA, vlNodeB, busNodeB, edge); } else { + BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType, vlNodeB.getParentNetworkId(), vlNodeA.getParentNetworkId()); graph.addEdge(vlNodeB, busNodeB, vlNodeA, busNodeA, edge); } } @@ -174,7 +175,7 @@ private void addThreeWtEdge(Graph graph, ThreeWindingsTransformer twt, ThreeWtNo Terminal terminal = twt.getTerminal(side); VoltageLevelNode vlNode = getVoltageLevelNode(graph, terminal); ThreeWtEdge edge = new ThreeWtEdge(idProvider.createId(IidmUtils.get3wtLeg(twt, side)), - twt.getId(), twt.getNameOrId(), IidmUtils.getThreeWtEdgeSideFromIidmSide(side), vlNode.isVisible()); + twt.getId(), twt.getNameOrId(), IidmUtils.getThreeWtEdgeSideFromIidmSide(side), vlNode.isVisible(), vlNode.getParentNetworkId()); graph.addEdge(vlNode, getBusNode(graph, terminal), tn, edge); } @@ -182,7 +183,7 @@ private void addEdge(Graph graph, DanglingLine dl, BoundaryNode boundaryVlNode, Terminal terminal = dl.getTerminal(); VoltageLevelNode vlNode = getVoltageLevelNode(graph, terminal); BranchEdge edge = new BranchEdge(idProvider.createId(dl), - dl.getId(), dl.getNameOrId(), BranchEdge.DANGLING_LINE_EDGE); + dl.getId(), dl.getNameOrId(), BranchEdge.DANGLING_LINE_EDGE, vlNode.getParentNetworkId(), vlNode.getParentNetworkId()); graph.addEdge(vlNode, getBusNode(graph, terminal), boundaryVlNode, boundaryBusNode, edge); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java index 02b05c048..5a06e69f4 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java @@ -12,8 +12,8 @@ */ public class BoundaryNode extends VoltageLevelNode { - public BoundaryNode(String diagramId, String equipmentId, String nameOrId) { - super(diagramId, equipmentId, nameOrId, false); + public BoundaryNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId) { + super(parentNetworkId, diagramId, equipmentId, nameOrId, false); } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java index 04625137a..5749fae24 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -38,9 +38,21 @@ public int getNum() { private List points1 = Collections.emptyList(); private List points2 = Collections.emptyList(); private final boolean[] visible = new boolean[] {true, true}; + private String parentNetworkId1; + private String parentNetworkId2; - public BranchEdge(String diagramId, String equipmentId, String nameOrId, String type) { + public BranchEdge(String diagramId, String equipmentId, String nameOrId, String type, String parentNetworkId1, String parentNetworkId2) { super(diagramId, equipmentId, nameOrId, type); + this.parentNetworkId1 = parentNetworkId1; + this.parentNetworkId2 = parentNetworkId2; + } + + public String getParentNetworkId1() { + return parentNetworkId1; + } + + public String getParentNetworkId2() { + return parentNetworkId2; } public boolean isTransformerEdge() { diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java index e117f7465..873ef893a 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -27,10 +27,13 @@ public enum Side { private final boolean visible; - public ThreeWtEdge(String diagramId, String equipmentId, String transformerName, Side side, boolean visible) { + private String parentNetworkId; + + public ThreeWtEdge(String diagramId, String equipmentId, String transformerName, Side side, boolean visible, String parentNetworkId) { super(diagramId, equipmentId, transformerName, THREE_WT_EDGE); this.side = side; this.visible = visible; + this.parentNetworkId = parentNetworkId; } public void setPoints(Point point1, Point point2) { @@ -52,4 +55,9 @@ public Side getSide() { public double getEdgeAngle() { return points.get(0).getAngle(points.get(1)); } + + public String getParentNetworkId() { + return parentNetworkId; + } + } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java index 27535f3e9..9221b5cb0 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java @@ -17,14 +17,20 @@ public class VoltageLevelNode extends AbstractNode { private final List busNodes = new ArrayList<>(); private final boolean visible; private boolean hasUnknownBusNode = false; + private String parentNetworkId; - public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious) { - this(diagramId, equipmentId, nameOrId, fictitious, true); + public VoltageLevelNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId, boolean fictitious) { + this(parentNetworkId, diagramId, equipmentId, nameOrId, fictitious, true); } - public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { + public VoltageLevelNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { super(diagramId, equipmentId, nameOrId, fictitious); this.visible = visible; + this.parentNetworkId = parentNetworkId; + } + + public String getParentNetworkId() { + return parentNetworkId; } public void addBusNode(BusNode busNode) { diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java index 45a185801..73724f7d9 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -45,6 +45,7 @@ public interface StyleProvider { String STRETCHABLE_CLASS = CLASSES_PREFIX + "stretchable"; String GLUED_CLASS = CLASSES_PREFIX + "glued"; String GLUED_CENTER_CLASS = CLASSES_PREFIX + "glued-center"; + String HIGHLIGHT_CLASS = CLASSES_PREFIX + "highlight"; List getCssFilenames(); diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index b640d2c11..adc44ae3d 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -44,6 +44,7 @@ public class SvgWriter { private static final String TABLE_ELEMENT_NAME = "table"; private static final String TABLE_ROW_ELEMENT_NAME = "tr"; private static final String TABLE_DATA_ELEMENT_NAME = "td"; + private static final String USE_ELEMENT_NAME = "use"; private static final String ID_ATTRIBUTE = "id"; private static final String WIDTH_ATTRIBUTE = "width"; private static final String HEIGHT_ATTRIBUTE = "height"; @@ -57,11 +58,13 @@ public class SvgWriter { private static final String Y_ATTRIBUTE = "y"; private static final String DY_ATTRIBUTE = "dy"; private static final String POINTS_ATTRIBUTE = "points"; + private static final String HREF_ATTRIBUTE = "href"; private final SvgParameters svgParameters; private final StyleProvider styleProvider; private final LabelProvider labelProvider; private final EdgeRendering edgeRendering; + private final HashMap subnetworksHighlightMap = new HashMap<>(); public SvgWriter(SvgParameters svgParameters, StyleProvider styleProvider, LabelProvider labelProvider) { this.svgParameters = Objects.requireNonNull(svgParameters); @@ -103,19 +106,30 @@ private void writeSvg(Graph graph, OutputStream svgOs) { XMLStreamWriter writer = XmlUtil.initializeWriter(true, INDENT, svgOs); addSvgRoot(graph, writer); addStyle(writer); - drawVoltageLevelNodes(graph, writer); - drawBranchEdges(graph, writer); - drawThreeWtEdges(graph, writer); + buildSubnetworksHighlightMap(graph); + boolean higlightSubnetworks = subnetworksHighlightMap.size() > 1; + drawVoltageLevelNodes(graph, writer, higlightSubnetworks); + drawBranchEdges(graph, writer, higlightSubnetworks); + drawThreeWtEdges(graph, writer, higlightSubnetworks); drawThreeWtNodes(graph, writer); drawTextEdges(graph, writer); drawTextNodes(graph, writer); + writer.writeEndDocument(); } catch (XMLStreamException e) { throw new UncheckedXmlStreamException(e); } } - private void drawBranchEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + private void buildSubnetworksHighlightMap(Graph graph) { + graph.getVoltageLevelNodesStream().forEach(vlNode -> subnetworksHighlightMap.computeIfAbsent(vlNode.getParentNetworkId(), k -> getHighlightClass(subnetworksHighlightMap.size()))); + } + + private String getHighlightClass(int index) { + return StyleProvider.HIGHLIGHT_CLASS + "-" + index % 5; + } + + private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); for (BranchEdge edge : graph.getBranchEdges()) { @@ -124,8 +138,8 @@ private void drawBranchEdges(Graph graph, XMLStreamWriter writer) throws XMLStre writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); insertName(writer, edge::getName); - drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE); - drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO); + drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE, highlight); + drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO, highlight); drawEdgeCenter(writer, edge); @@ -229,7 +243,7 @@ private void drawConverterStation(XMLStreamWriter writer, BranchEdge edge) throw writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.HVDC_CLASS); } - private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { List threeWtEdges = graph.getThreeWtEdges(); if (threeWtEdges.isEmpty()) { return; @@ -238,12 +252,12 @@ private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer) throws XMLStr writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_EDGES_CLASS); for (ThreeWtEdge edge : threeWtEdges) { - drawThreeWtEdge(graph, writer, edge); + drawThreeWtEdge(graph, writer, edge, highlight); } writer.writeEndElement(); } - private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { + private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, boolean highlight) throws XMLStreamException { // the half edge is only drawn if visible, but if the edge is a TwoWtEdge, the transformer is still drawn if (!edge.isVisible(side) && !(edge.isTransformerEdge())) { return; @@ -254,6 +268,12 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, if (edge.isVisible(side)) { Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge, side); if (!graph.isLoop(edge)) { + if (highlight) { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + String parentNetworkId = side.equals(BranchEdge.Side.ONE) ? edge.getParentNetworkId1() : edge.getParentNetworkId2(); + writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + } writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); @@ -291,7 +311,7 @@ private String getLoopPathString(BranchEdge edge, BranchEdge.Side side) { return String.format(Locale.US, "M%.2f,%.2f L%.2f,%.2f C%.2f,%.2f %.2f,%.2f %.2f,%.2f", points); } - private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { + private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge, boolean highlight) throws XMLStreamException { if (!edge.isVisible()) { return; } @@ -300,6 +320,13 @@ private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge ed writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); insertName(writer, edge::getName); + if (highlight) { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + String parentNetworkId = edge.getParentNetworkId(); + writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); + } + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); @@ -513,10 +540,13 @@ private String getPstArrowPath(double arrowSize) { return String.format("M%s,0 0,%s M%s,0 %s,0 %s,%s", d1, d1, d2, d1, d1, dh); } - private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.VOLTAGE_LEVEL_NODES_CLASS); for (VoltageLevelNode vlNode : graph.getVoltageLevelNodesStream().filter(VoltageLevelNode::isVisible).collect(Collectors.toList())) { + if (highlight) { + drawHighlightedNode(writer, vlNode); + } writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(TRANSFORM_ATTRIBUTE, getTranslateString(vlNode)); drawNode(graph, writer, vlNode); @@ -525,6 +555,13 @@ private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer) throws X writer.writeEndElement(); } + private void drawHighlightedNode(XMLStreamWriter writer, VoltageLevelNode vlNode) throws XMLStreamException { + writer.writeStartElement(USE_ELEMENT_NAME); + writer.writeAttribute(HREF_ATTRIBUTE, "#" + getPrefixedId(vlNode.getDiagramId())); + writer.writeAttribute(CLASS_ATTRIBUTE, subnetworksHighlightMap.get(vlNode.getParentNetworkId())); + writer.writeEndElement(); + } + private void drawTextNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.TEXT_NODES_CLASS); diff --git a/network-area-diagram/src/main/resources/nominalStyle.css b/network-area-diagram/src/main/resources/nominalStyle.css index 3b996f571..21771f9ab 100644 --- a/network-area-diagram/src/main/resources/nominalStyle.css +++ b/network-area-diagram/src/main/resources/nominalStyle.css @@ -27,7 +27,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/main/resources/topologicalStyle.css b/network-area-diagram/src/main/resources/topologicalStyle.css index 6f4e9f59c..2294f546d 100644 --- a/network-area-diagram/src/main/resources/topologicalStyle.css +++ b/network-area-diagram/src/main/resources/topologicalStyle.css @@ -92,7 +92,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java new file mode 100644 index 000000000..13511237d --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java @@ -0,0 +1,457 @@ +/** + * Copyright (c) 2025, 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 + */ +package com.powsybl.nad.svg; + +import com.google.common.jimfs.*; +import com.powsybl.iidm.network.Bus; +import com.powsybl.iidm.network.Country; +import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.Generator; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.NetworkFactory; +import com.powsybl.iidm.network.RatioTapChanger; +import com.powsybl.iidm.network.Substation; +import com.powsybl.iidm.network.ThreeWindingsTransformer; +import com.powsybl.iidm.network.TopologyKind; +import com.powsybl.iidm.network.TwoWindingsTransformer; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory; +import com.powsybl.nad.*; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import java.io.FileNotFoundException; +import java.time.ZonedDateTime; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SubnetworkHighlightTest extends AbstractTest { + + protected java.nio.file.FileSystem fileSystem; + + @BeforeEach + void setup() { + fileSystem = Jimfs.newFileSystem(Configuration.unix()); + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()) { + }; + } + + @Test + void testSubnetworkHighlight() throws FileNotFoundException { + Network network = createWithTieLines(); + assertEquals(toString("/subnetwork_highlight.svg"), generateSvgString(network, "/subnetwork_highlight.svg")); + } + + public static Network createWithTieLines() { + Network network = createWithLFResults(NetworkFactory.findDefault()); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).remove(); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).remove(); + + DanglingLine nhv1xnode1 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV1) + .newDanglingLine() + .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE1_1) + .setP0(0.0) + .setQ0(0.0) + .setR(1.5) + .setX(20.0) + .setG(1E-6) + .setB(386E-6 / 2) + .setPairingKey(EurostagTutorialExample1Factory.XNODE_1) + .setBus(EurostagTutorialExample1Factory.NHV1) + .add(); + DanglingLine xnode1nhv2 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV2) + .newDanglingLine() + .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE1_2) + .setP0(0.0) + .setQ0(0.0) + .setR(1.5) + .setX(13.0) + .setG(2E-6) + .setB(386E-6 / 2) + .setBus("NHV2") + .setPairingKey(EurostagTutorialExample1Factory.XNODE_1) + .add(); + network.newTieLine() + .setId(EurostagTutorialExample1Factory.NHV1_NHV2_1) + .setDanglingLine1(nhv1xnode1.getId()) + .setDanglingLine2(xnode1nhv2.getId()) + .add(); + DanglingLine nhv1xnode2 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV1) + .newDanglingLine() + .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE2_1) + .setP0(0.0) + .setQ0(0.0) + .setR(1.5) + .setX(20.0) + .setG(1E-6) + .setB(386E-6 / 2) + .setBus(EurostagTutorialExample1Factory.NHV1) + .setPairingKey("XNODE2") + .add(); + DanglingLine xnode2nhv2 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV2) + .newDanglingLine() + .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE2_2) + .setP0(0.0) + .setQ0(0.0) + .setR(1.5) + .setX(13.0) + .setG(2E-6) + .setB(386E-6 / 2) + .setBus("NHV2") + .setPairingKey("XNODE2") + .add(); + network.newTieLine() + .setId(EurostagTutorialExample1Factory.NHV1_NHV2_2) + .setDanglingLine1(nhv1xnode2.getId()) + .setDanglingLine2(xnode2nhv2.getId()) + .add(); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getDanglingLine1().getTerminal() + .setP(302.4440612792969) + .setQ(98.74027252197266); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getDanglingLine2().getTerminal() + .setP(-300.43389892578125) + .setQ(-137.18849182128906); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getDanglingLine1().getTerminal() + .setP(302.4440612792969) + .setQ(98.74027252197266); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getDanglingLine2().getTerminal() + .setP(-300.43389892578125) + .setQ(-137.188491821289060); + + return network; + } + + public static Network createWithLFResults(NetworkFactory factory) { + Network network = createwith3wt(factory); + network.setCaseDate(ZonedDateTime.parse("2013-01-15T18:45:00.000+01:00")); + network.getBusBreakerView().getBus(EurostagTutorialExample1Factory.NGEN) + .setV(24.500000610351563) + .setAngle(2.3259763717651367); + network.getBusBreakerView().getBus(EurostagTutorialExample1Factory.NHV1) + .setV(402.1428451538086) + .setAngle(0.0); + network.getBusBreakerView().getBus("NHV2") + .setV(389.9526763916016) + .setAngle(-3.5063576698303223); + network.getBusBreakerView().getBus("NLOAD") + .setV(147.57861328125) + .setAngle(-9.614486694335938); + + network.getBusBreakerView().getBus("BUS_3") + .setV(197.57861328125) + .setAngle(3.0); + + network.getBusBreakerView().getBus("BUS_4") + .setV(197.57861328125) + .setAngle(3.0); + + network.getBusBreakerView().getBus("BUS_5") + .setV(197.57861328125) + .setAngle(3.0); + + network.getGenerator("GEN").getTerminal() + .setP(-605.558349609375) + .setQ(-225.2825164794922); + network.getTwoWindingsTransformer(EurostagTutorialExample1Factory.NGEN_NHV1).getTerminal1() + .setP(605.558349609375) + .setQ(225.2825164794922); + network.getTwoWindingsTransformer(EurostagTutorialExample1Factory.NGEN_NHV1).getTerminal2() + .setP(-604.8909301757812) + .setQ(-197.48046875); + network.getLoad("LOAD").getTerminal() + .setP(600.0) + .setQ(200.0); + network.getTwoWindingsTransformer(EurostagTutorialExample1Factory.NHV2_NLOAD).getTerminal1() + .setP(600.8677978515625) + .setQ(274.3769836425781); + network.getTwoWindingsTransformer(EurostagTutorialExample1Factory.NHV2_NLOAD).getTerminal2() + .setP(-600.0) + .setQ(-200.0); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getTerminal1() + .setP(302.4440612792969) + .setQ(98.74027252197266); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getTerminal2() + .setP(-300.43389892578125) + .setQ(-137.18849182128906); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getTerminal1() + .setP(302.4440612792969) + .setQ(98.74027252197266); + network.getLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getTerminal2() + .setP(-300.43389892578125) + .setQ(-137.188491821289060); + + return network; + } + + public static Network createwith3wt(NetworkFactory networkFactory) { + Network network0 = networkFactory.createNetwork("sim1", "test"); + Network network1 = network0.createSubnetwork("sub1", "subnetwork1", "test"); + Network network2 = network0.createSubnetwork("sub2", "subnetwork2", "test"); + Network network3 = network0.createSubnetwork("sub3", "subnetwork3", "test"); + + Substation p1 = network1.newSubstation() + .setId("P1") + .setCountry(Country.FR) + .setTso("RTE") + .setGeographicalTags("A") + .add(); + Substation p2 = network2.newSubstation() + .setId("P2") + .setCountry(Country.FR) + .setTso("RTE") + .setGeographicalTags("B") + .add(); + Substation p3 = network3.newSubstation() + .setId("P3") + .setCountry(Country.FR) + .setTso("RTE") + .setGeographicalTags("B") + .add(); + VoltageLevel vlgen = p1.newVoltageLevel() + .setId(EurostagTutorialExample1Factory.VLGEN) + .setNominalV(24.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + VoltageLevel vlhv1 = p1.newVoltageLevel() + .setId(EurostagTutorialExample1Factory.VLHV1) + .setNominalV(380.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + VoltageLevel vlhv2 = p2.newVoltageLevel() + .setId(EurostagTutorialExample1Factory.VLHV2) + .setNominalV(380.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + VoltageLevel vlload = p2.newVoltageLevel() + .setId(EurostagTutorialExample1Factory.VLLOAD) + .setNominalV(150.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + Bus ngen = vlgen.getBusBreakerView().newBus() + .setId(EurostagTutorialExample1Factory.NGEN) + .add(); + Bus nhv1 = vlhv1.getBusBreakerView().newBus() + .setId(EurostagTutorialExample1Factory.NHV1) + .add(); + Bus nhv2 = vlhv2.getBusBreakerView().newBus() + .setId("NHV2") + .add(); + Bus nload = vlload.getBusBreakerView().newBus() + .setId("NLOAD") + .add(); + + VoltageLevel vlhv3 = p3.newVoltageLevel() + .setId("VLHV3") + .setNominalV(380.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + VoltageLevel vlhv4 = p3.newVoltageLevel() + .setId("VLHV4") + .setNominalV(380.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + VoltageLevel vlhv5 = p3.newVoltageLevel() + .setId("VLHV5") + .setNominalV(380.0) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + Bus bus3 = vlhv3.getBusBreakerView().newBus() + .setId("BUS_3") + .add(); + bus3.setV(197.57861328125).setAngle(3.0); + + Bus bus4 = vlhv4.getBusBreakerView().newBus() + .setId("BUS_4") + .add(); + bus4.setV(197.57861328125).setAngle(3.0); + + Bus bus5 = vlhv5.getBusBreakerView().newBus() + .setId("BUS_5") + .add(); + bus5.setV(197.57861328125).setAngle(3.0); + + network0.newLine() + .setId(EurostagTutorialExample1Factory.NHV1_NHV2_1) + .setVoltageLevel1(vlhv1.getId()) + .setBus1(nhv1.getId()) + .setConnectableBus1(nhv1.getId()) + .setVoltageLevel2(vlhv2.getId()) + .setBus2(nhv2.getId()) + .setConnectableBus2(nhv2.getId()) + .setR(3.0) + .setX(33.0) + .setG1(0.0) + .setB1(386E-6 / 2) + .setG2(0.0) + .setB2(386E-6 / 2) + .add(); + network0.newLine() + .setId(EurostagTutorialExample1Factory.NHV1_NHV2_2) + .setVoltageLevel1(vlhv1.getId()) + .setBus1(nhv1.getId()) + .setConnectableBus1(nhv1.getId()) + .setVoltageLevel2(vlhv2.getId()) + .setBus2(nhv2.getId()) + .setConnectableBus2(nhv2.getId()) + .setR(3.0) + .setX(33.0) + .setG1(0.0) + .setB1(386E-6 / 2) + .setG2(0.0) + .setB2(386E-6 / 2) + .add(); + + network0.newLine() + .setId("NHV2_NHV2_3") + .setVoltageLevel1(vlhv2.getId()) + .setBus1(nhv2.getId()) + .setConnectableBus1(nhv2.getId()) + .setVoltageLevel2(vlhv3.getId()) + .setBus2(bus3.getId()) + .setConnectableBus2(bus3.getId()) + .setR(3.0) + .setX(33.0) + .setG1(0.0) + .setB1(386E-6 / 2) + .setG2(0.0) + .setB2(386E-6 / 2) + .add(); + int zb380 = 380 * 380 / 100; + p1.newTwoWindingsTransformer() + .setId(EurostagTutorialExample1Factory.NGEN_NHV1) + .setVoltageLevel1(vlgen.getId()) + .setBus1(ngen.getId()) + .setConnectableBus1(ngen.getId()) + .setRatedU1(24.0) + .setVoltageLevel2(vlhv1.getId()) + .setBus2(nhv1.getId()) + .setConnectableBus2(nhv1.getId()) + .setRatedU2(400.0) + .setR(0.24 / 1300 * zb380) + .setX(Math.sqrt(10 * 10 - 0.24 * 0.24) / 1300 * zb380) + .setG(0.0) + .setB(0.0) + .add(); + int zb150 = 150 * 150 / 100; + TwoWindingsTransformer nhv2Nload = p2.newTwoWindingsTransformer() + .setId(EurostagTutorialExample1Factory.NHV2_NLOAD) + .setVoltageLevel1(vlhv2.getId()) + .setBus1(nhv2.getId()) + .setConnectableBus1(nhv2.getId()) + .setRatedU1(400.0) + .setVoltageLevel2(vlload.getId()) + .setBus2(nload.getId()) + .setConnectableBus2(nload.getId()) + .setRatedU2(158.0) + .setR(0.21 / 1000 * zb150) + .setX(Math.sqrt(18 * 18 - 0.21 * 0.21) / 1000 * zb150) + .setG(0.0) + .setB(0.0) + .add(); + double a = (158.0 / 150.0) / (400.0 / 380.0); + nhv2Nload.newRatioTapChanger() + .beginStep() + .setRho(0.85f * a) + .setR(0.0) + .setX(0.0) + .setG(0.0) + .setB(0.0) + .endStep() + .beginStep() + .setRho(a) + .setR(0.0) + .setX(0.0) + .setG(0.0) + .setB(0.0) + .endStep() + .beginStep() + .setRho(1.15f * a) + .setR(0.0) + .setX(0.0) + .setG(0.0) + .setB(0.0) + .endStep() + .setTapPosition(1) + .setLoadTapChangingCapabilities(true) + .setRegulating(true) + .setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE) + .setRegulationValue(158.0) + .setTargetDeadband(0) + .setRegulationTerminal(nhv2Nload.getTerminal2()) + .add(); + vlload.newLoad() + .setId("LOAD") + .setBus(nload.getId()) + .setConnectableBus(nload.getId()) + .setP0(600.0) + .setQ0(200.0) + .add(); + Generator generator = vlgen.newGenerator() + .setId("GEN") + .setBus(ngen.getId()) + .setConnectableBus(ngen.getId()) + .setMinP(-9999.99) + .setMaxP(9999.99) + .setVoltageRegulatorOn(true) + .setTargetV(24.5) + .setTargetP(607.0) + .setTargetQ(301.0) + .add(); + generator.newMinMaxReactiveLimits() + .setMinQ(-9999.99) + .setMaxQ(9999.99) + .add(); + + ThreeWindingsTransformer twt = p3.newThreeWindingsTransformer() + .setId("3WT") + .setRatedU0(132.0) + .newLeg1() + .setR(17.424) + .setX(1.7424) + .setG(0.00573921028466483) + .setB(0.000573921028466483) + .setRatedU(132.0) + .setVoltageLevel(vlhv5.getId()) + .setBus(bus5.getId()) + .add() + .newLeg2() + .setR(1.089) + .setX(0.1089) + .setG(0.0) + .setB(0.0) + .setRatedU(33.0) + .setVoltageLevel(vlhv3.getId()) + .setBus(bus3.getId()) + .add() + .newLeg3() + .setR(0.121) + .setX(0.0121) + .setG(0.0) + .setB(0.0) + .setRatedU(11.0) + .setVoltageLevel(vlhv4.getId()) + .setBus(bus4.getId()) + .add() + .add(); + return network0; + } +} diff --git a/network-area-diagram/src/test/resources/3wt.svg b/network-area-diagram/src/test/resources/3wt.svg index 92565a226..2f3c06b80 100644 --- a/network-area-diagram/src/test/resources/3wt.svg +++ b/network-area-diagram/src/test/resources/3wt.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_disconnected.svg b/network-area-diagram/src/test/resources/3wt_disconnected.svg index ff2b29f45..f5e341f51 100644 --- a/network-area-diagram/src/test/resources/3wt_disconnected.svg +++ b/network-area-diagram/src/test/resources/3wt_disconnected.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg b/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg index 04d96cd66..ae0d66fa9 100644 --- a/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg +++ b/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_partial.svg b/network-area-diagram/src/test/resources/3wt_partial.svg index be18bf2b6..dd97501cd 100644 --- a/network-area-diagram/src/test/resources/3wt_partial.svg +++ b/network-area-diagram/src/test/resources/3wt_partial.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus.svg b/network-area-diagram/src/test/resources/IEEE_118_bus.svg index 9ef2993ff..ae95261f6 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg index 8df413a5d..09610780d 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg index 9873dde28..3417d91f4 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus.svg b/network-area-diagram/src/test/resources/IEEE_14_bus.svg index 082801d12..086e8c8c4 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg index d4b95b9d5..fcf9669fa 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg index 1d759fa02..f2c0f3ffe 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg index a88e18713..116e5afa4 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg index 3fb8c481c..dca55ed57 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg index 5564ebfdc..0554d207d 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg index 8df69e1b3..26d45ef97 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg index 4fad0b8b2..e5b70308d 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg index c8d7806fb..91f6a147e 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg index aec83ef0b..b8be1efca 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg index f332ca83e..c8f0c2946 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_24_bus.svg b/network-area-diagram/src/test/resources/IEEE_24_bus.svg index 3c4ccabeb..fb466f4a5 100644 --- a/network-area-diagram/src/test/resources/IEEE_24_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_24_bus.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_30_bus.svg b/network-area-diagram/src/test/resources/IEEE_30_bus.svg index 66c3a84d2..ae4dffa72 100644 --- a/network-area-diagram/src/test/resources/IEEE_30_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_30_bus.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_57_bus.svg b/network-area-diagram/src/test/resources/IEEE_57_bus.svg index 2fe2bbded..3e5b376b5 100644 --- a/network-area-diagram/src/test/resources/IEEE_57_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_57_bus.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/current_limits.svg b/network-area-diagram/src/test/resources/current_limits.svg index a8c0a3711..67bcda91d 100644 --- a/network-area-diagram/src/test/resources/current_limits.svg +++ b/network-area-diagram/src/test/resources/current_limits.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/dangling_line_connected.svg b/network-area-diagram/src/test/resources/dangling_line_connected.svg index 9863b351c..db8704b88 100644 --- a/network-area-diagram/src/test/resources/dangling_line_connected.svg +++ b/network-area-diagram/src/test/resources/dangling_line_connected.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/dangling_line_disconnected.svg b/network-area-diagram/src/test/resources/dangling_line_disconnected.svg index 866a2438f..c5ae171ad 100644 --- a/network-area-diagram/src/test/resources/dangling_line_disconnected.svg +++ b/network-area-diagram/src/test/resources/dangling_line_disconnected.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/detailed_text_node.svg b/network-area-diagram/src/test/resources/detailed_text_node.svg index a9f3d4992..2143c6da5 100644 --- a/network-area-diagram/src/test/resources/detailed_text_node.svg +++ b/network-area-diagram/src/test/resources/detailed_text_node.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg b/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg index c8344a3d9..897ddbfa7 100644 --- a/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg +++ b/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg index 2571ecaa5..5c1b9811d 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg index 44ece95a8..040ed794d 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_current.svg b/network-area-diagram/src/test/resources/edge_info_current.svg index b22b3080d..689d391e8 100644 --- a/network-area-diagram/src/test/resources/edge_info_current.svg +++ b/network-area-diagram/src/test/resources/edge_info_current.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_double_labels.svg b/network-area-diagram/src/test/resources/edge_info_double_labels.svg index baebf541f..6144a98a0 100644 --- a/network-area-diagram/src/test/resources/edge_info_double_labels.svg +++ b/network-area-diagram/src/test/resources/edge_info_double_labels.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_missing_label.svg b/network-area-diagram/src/test/resources/edge_info_missing_label.svg index f907126f4..7303dae9c 100644 --- a/network-area-diagram/src/test/resources/edge_info_missing_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_missing_label.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg index 40abb80b3..0abb0e518 100644 --- a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_reactive_power.svg b/network-area-diagram/src/test/resources/edge_info_reactive_power.svg index fee1a255d..b1938e25b 100644 --- a/network-area-diagram/src/test/resources/edge_info_reactive_power.svg +++ b/network-area-diagram/src/test/resources/edge_info_reactive_power.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_shift.svg b/network-area-diagram/src/test/resources/edge_info_shift.svg index 69f6e77a0..a9656d6f7 100644 --- a/network-area-diagram/src/test/resources/edge_info_shift.svg +++ b/network-area-diagram/src/test/resources/edge_info_shift.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_with_id.svg b/network-area-diagram/src/test/resources/edge_with_id.svg index ec5a45fa7..7e81a03c8 100644 --- a/network-area-diagram/src/test/resources/edge_with_id.svg +++ b/network-area-diagram/src/test/resources/edge_with_id.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_without_id.svg b/network-area-diagram/src/test/resources/edge_without_id.svg index 9863b351c..db8704b88 100644 --- a/network-area-diagram/src/test/resources/edge_without_id.svg +++ b/network-area-diagram/src/test/resources/edge_without_id.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg index 73c1f6cbd..3823d6566 100644 --- a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg +++ b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/hvdc.svg b/network-area-diagram/src/test/resources/hvdc.svg index 370ea708f..c0a74fb75 100644 --- a/network-area-diagram/src/test/resources/hvdc.svg +++ b/network-area-diagram/src/test/resources/hvdc.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/parallel_transformers.svg b/network-area-diagram/src/test/resources/parallel_transformers.svg index acc31c5d3..c70d3f74f 100644 --- a/network-area-diagram/src/test/resources/parallel_transformers.svg +++ b/network-area-diagram/src/test/resources/parallel_transformers.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/production_consumption_text_node.svg b/network-area-diagram/src/test/resources/production_consumption_text_node.svg index 75efeee80..ffb8bc101 100644 --- a/network-area-diagram/src/test/resources/production_consumption_text_node.svg +++ b/network-area-diagram/src/test/resources/production_consumption_text_node.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg b/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg index ecb1153b5..5780144f8 100644 --- a/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg +++ b/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop100.svg b/network-area-diagram/src/test/resources/simple-eu-loop100.svg index fc0a48626..1b3382054 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop100.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop100.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop80.svg b/network-area-diagram/src/test/resources/simple-eu-loop80.svg index 9a845f3bb..8c0a76687 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop80.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop80.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu.svg b/network-area-diagram/src/test/resources/simple-eu.svg index 1afdbc167..c508fb153 100644 --- a/network-area-diagram/src/test/resources/simple-eu.svg +++ b/network-area-diagram/src/test/resources/simple-eu.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/subnetwork_highlight.svg b/network-area-diagram/src/test/resources/subnetwork_highlight.svg new file mode 100644 index 000000000..139138ab7 --- /dev/null +++ b/network-area-diagram/src/test/resources/subnetwork_highlight.svg @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 606 + + + + + + + + + + + + + -605 + + + + + + + + + + + + + + + + + + + 302 + + + + + + + + + + + + + -300 + + + + + + + + + + + + + + + + 302 + + + + + + + + + + + + + -300 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 601 + + + + + + + + + + + + + -600 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VLGEN
+ + + + + +
+
+
24.5 kV / 2.3°
+
+
+ +
+
VLHV1
+ + + + + +
+
+
402.1 kV / 0.0°
+
+
+ +
+
VLHV2
+ + + + + +
+
+
390.0 kV / -3.5°
+
+
+ +
+
VLHV3
+ + + + + +
+
+
197.6 kV / 3.0°
+
+
+ +
+
VLHV4
+ + + + + +
+
+
197.6 kV / 3.0°
+
+
+ +
+
VLHV5
+ + + + + +
+
+
197.6 kV / 3.0°
+
+
+ +
+
VLLOAD
+ + + + + +
+
+
147.6 kV / -9.6°
+
+
+
+
diff --git a/network-area-diagram/src/test/resources/tie_line.svg b/network-area-diagram/src/test/resources/tie_line.svg index eae95bd6f..0b61c7005 100644 --- a/network-area-diagram/src/test/resources/tie_line.svg +++ b/network-area-diagram/src/test/resources/tie_line.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/tie_line_filtered.svg b/network-area-diagram/src/test/resources/tie_line_filtered.svg index e6d3e8b63..fde8aebdc 100644 --- a/network-area-diagram/src/test/resources/tie_line_filtered.svg +++ b/network-area-diagram/src/test/resources/tie_line_filtered.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_id.svg b/network-area-diagram/src/test/resources/vl_description_id.svg index 932a2a636..8fc82f703 100644 --- a/network-area-diagram/src/test/resources/vl_description_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_id.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_substation.svg b/network-area-diagram/src/test/resources/vl_description_substation.svg index be95e634e..9de7bc650 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_substation_id.svg b/network-area-diagram/src/test/resources/vl_description_substation_id.svg index 60a74b4f9..4a364817d 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation_id.svg @@ -95,7 +95,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/voltage_limits.svg b/network-area-diagram/src/test/resources/voltage_limits.svg index 80204ff51..4288ccd12 100644 --- a/network-area-diagram/src/test/resources/voltage_limits.svg +++ b/network-area-diagram/src/test/resources/voltage_limits.svg @@ -30,7 +30,11 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} - +.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} From 09236a1af6bf8fba94b82bf88fd3d77749cf1502 Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Tue, 21 Jan 2025 09:41:26 +0100 Subject: [PATCH 2/8] Fix sonar issues Signed-off-by: Giovanni Ferrari --- .../java/com/powsybl/nad/svg/SvgWriter.java | 44 +++++++++++-------- .../nad/svg/SubnetworkHighlightTest.java | 6 +-- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index adc44ae3d..acb461caa 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -268,30 +268,38 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, if (edge.isVisible(side)) { Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge, side); if (!graph.isLoop(edge)) { - if (highlight) { - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - String parentNetworkId = side.equals(BranchEdge.Side.ONE) ? edge.getParentNetworkId1() : edge.getParentNetworkId2(); - writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - } - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - if (edgeInfo.isPresent()) { - drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); - } + drawHalfEdge(graph, writer, edge, side, edgeInfo, highlight); } else { - writer.writeEmptyElement(PATH_ELEMENT_NAME); - writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); - writer.writeAttribute(PATH_D_ATTRIBUTE, getLoopPathString(edge, side)); - if (edgeInfo.isPresent()) { - drawLoopEdgeInfo(writer, edge, side, edgeInfo.get()); - } + drawLoopEdge(graph, writer, edge, side, edgeInfo); } } writer.writeEndElement(); } + private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo, boolean highlight) throws XMLStreamException { + if (highlight) { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + String parentNetworkId = side.equals(BranchEdge.Side.ONE) ? edge.getParentNetworkId1() : edge.getParentNetworkId2(); + writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + } + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + if (edgeInfo.isPresent()) { + drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); + } + } + + private void drawLoopEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo) throws XMLStreamException { + writer.writeEmptyElement(PATH_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); + writer.writeAttribute(PATH_D_ATTRIBUTE, getLoopPathString(edge, side)); + if (edgeInfo.isPresent()) { + drawLoopEdgeInfo(writer, edge, side, edgeInfo.get()); + } + } + private String getPolylinePointsString(BranchEdge edge, BranchEdge.Side side) { return getPolylinePointsString(edge.getPoints(side)); } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java index 13511237d..831b43c9d 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java @@ -16,7 +16,6 @@ import com.powsybl.iidm.network.NetworkFactory; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.Substation; -import com.powsybl.iidm.network.ThreeWindingsTransformer; import com.powsybl.iidm.network.TopologyKind; import com.powsybl.iidm.network.TwoWindingsTransformer; import com.powsybl.iidm.network.VoltageLevel; @@ -27,7 +26,6 @@ import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.io.FileNotFoundException; import java.time.ZonedDateTime; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -56,7 +54,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testSubnetworkHighlight() throws FileNotFoundException { + void testSubnetworkHighlight() { Network network = createWithTieLines(); assertEquals(toString("/subnetwork_highlight.svg"), generateSvgString(network, "/subnetwork_highlight.svg")); } @@ -421,7 +419,7 @@ public static Network createwith3wt(NetworkFactory networkFactory) { .setMaxQ(9999.99) .add(); - ThreeWindingsTransformer twt = p3.newThreeWindingsTransformer() + p3.newThreeWindingsTransformer() .setId("3WT") .setRatedU0(132.0) .newLeg1() From 5318844e1814bcc108e1a72bb1959d84e7cf266f Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Tue, 21 Jan 2025 09:53:25 +0100 Subject: [PATCH 3/8] Fix sonar issue Signed-off-by: Giovanni Ferrari --- .../src/main/java/com/powsybl/nad/svg/SvgWriter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index acb461caa..ec205069b 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -270,7 +270,7 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, if (!graph.isLoop(edge)) { drawHalfEdge(graph, writer, edge, side, edgeInfo, highlight); } else { - drawLoopEdge(graph, writer, edge, side, edgeInfo); + drawLoopEdge(writer, edge, side, edgeInfo); } } writer.writeEndElement(); @@ -291,7 +291,7 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, } } - private void drawLoopEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo) throws XMLStreamException { + private void drawLoopEdge(XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo) throws XMLStreamException { writer.writeEmptyElement(PATH_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); writer.writeAttribute(PATH_D_ATTRIBUTE, getLoopPathString(edge, side)); From bed6cc19f00175c40cf600b0e7961f0b11f25bf3 Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Thu, 30 Jan 2025 10:42:00 +0100 Subject: [PATCH 4/8] Move highlight logic to StyleProvider Signed-off-by: Giovanni Ferrari --- .../nad/build/iidm/NetworkGraphBuilder.java | 13 ++- .../com/powsybl/nad/model/BoundaryNode.java | 4 +- .../com/powsybl/nad/model/BranchEdge.java | 16 +--- .../com/powsybl/nad/model/ThreeWtEdge.java | 12 +-- .../powsybl/nad/model/VoltageLevelNode.java | 12 +-- .../com/powsybl/nad/svg/StyleProvider.java | 6 ++ .../com/powsybl/nad/svg/SvgParameters.java | 13 ++- .../java/com/powsybl/nad/svg/SvgWriter.java | 20 +---- .../iidm/AbstractVoltageStyleProvider.java | 80 ++++++++++++++++++- .../nad/svg/SubnetworkHighlightTest.java | 3 +- .../src/test/resources/3wt_metadata.json | 3 +- .../IEEE_14_bus_fictitious_metadata.json | 3 +- .../IEEE_14_bus_voltage_filter2_metadata.json | 3 +- .../IEEE_14_bus_voltage_filter5_metadata.json | 3 +- ...IEEE_14_bus_voltage_nofilter_metadata.json | 3 +- .../src/test/resources/hvdc_metadata.json | 3 +- 16 files changed, 129 insertions(+), 68 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java index a51679458..866802e34 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021-2025, RTE (http://www.rte-france.com) + * Copyright (c) 2021, 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/. @@ -64,7 +64,7 @@ public List getVoltageLevels() { } private VoltageLevelNode addVoltageLevelGraphNode(VoltageLevel vl, Graph graph, boolean visible) { - VoltageLevelNode vlNode = new VoltageLevelNode(vl.getParentNetwork().getId(), idProvider.createId(vl), vl.getId(), vl.getNameOrId(), vl.isFictitious(), visible); + VoltageLevelNode vlNode = new VoltageLevelNode(idProvider.createId(vl), vl.getId(), vl.getNameOrId(), vl.isFictitious(), visible); vl.getBusView().getBusStream() .map(bus -> new BusNode(idProvider.createId(bus), bus.getId())) .forEach(vlNode::addBusNode); @@ -112,7 +112,7 @@ private void visitThreeWindingsTransformer(VoltageLevel vl, ThreeWindingsTransfo private void visitDanglingLine(DanglingLine dl, Graph graph) { if (!dl.isPaired()) { - BoundaryNode boundaryNode = new BoundaryNode(dl.getParentNetwork().getId(), idProvider.createId(dl), dl.getId(), dl.getNameOrId()); + BoundaryNode boundaryNode = new BoundaryNode(idProvider.createId(dl), dl.getId(), dl.getNameOrId()); BusNode boundaryBusNode = new BoundaryBusNode(idProvider.createId(dl), dl.getId()); boundaryNode.addBusNode(boundaryBusNode); graph.addNode(boundaryNode); @@ -162,11 +162,10 @@ private void addEdge(Graph graph, Terminal terminalA, Terminal terminalB, Identi BusNode busNodeA = getBusNode(graph, terminalA); BusNode busNodeB = getBusNode(graph, terminalB); + BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType); if (!terminalsInReversedOrder) { - BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType, vlNodeA.getParentNetworkId(), vlNodeB.getParentNetworkId()); graph.addEdge(vlNodeA, busNodeA, vlNodeB, busNodeB, edge); } else { - BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType, vlNodeB.getParentNetworkId(), vlNodeA.getParentNetworkId()); graph.addEdge(vlNodeB, busNodeB, vlNodeA, busNodeA, edge); } } @@ -175,7 +174,7 @@ private void addThreeWtEdge(Graph graph, ThreeWindingsTransformer twt, ThreeWtNo Terminal terminal = twt.getTerminal(side); VoltageLevelNode vlNode = getVoltageLevelNode(graph, terminal); ThreeWtEdge edge = new ThreeWtEdge(idProvider.createId(IidmUtils.get3wtLeg(twt, side)), - twt.getId(), twt.getNameOrId(), IidmUtils.getThreeWtEdgeSideFromIidmSide(side), vlNode.isVisible(), vlNode.getParentNetworkId()); + twt.getId(), twt.getNameOrId(), IidmUtils.getThreeWtEdgeSideFromIidmSide(side), vlNode.isVisible()); graph.addEdge(vlNode, getBusNode(graph, terminal), tn, edge); } @@ -183,7 +182,7 @@ private void addEdge(Graph graph, DanglingLine dl, BoundaryNode boundaryVlNode, Terminal terminal = dl.getTerminal(); VoltageLevelNode vlNode = getVoltageLevelNode(graph, terminal); BranchEdge edge = new BranchEdge(idProvider.createId(dl), - dl.getId(), dl.getNameOrId(), BranchEdge.DANGLING_LINE_EDGE, vlNode.getParentNetworkId(), vlNode.getParentNetworkId()); + dl.getId(), dl.getNameOrId(), BranchEdge.DANGLING_LINE_EDGE); graph.addEdge(vlNode, getBusNode(graph, terminal), boundaryVlNode, boundaryBusNode, edge); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java index 5a06e69f4..02b05c048 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BoundaryNode.java @@ -12,8 +12,8 @@ */ public class BoundaryNode extends VoltageLevelNode { - public BoundaryNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId) { - super(parentNetworkId, diagramId, equipmentId, nameOrId, false); + public BoundaryNode(String diagramId, String equipmentId, String nameOrId) { + super(diagramId, equipmentId, nameOrId, false); } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java index 5749fae24..04625137a 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021-2025, RTE (http://www.rte-france.com) + * Copyright (c) 2021, 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/. @@ -38,21 +38,9 @@ public int getNum() { private List points1 = Collections.emptyList(); private List points2 = Collections.emptyList(); private final boolean[] visible = new boolean[] {true, true}; - private String parentNetworkId1; - private String parentNetworkId2; - public BranchEdge(String diagramId, String equipmentId, String nameOrId, String type, String parentNetworkId1, String parentNetworkId2) { + public BranchEdge(String diagramId, String equipmentId, String nameOrId, String type) { super(diagramId, equipmentId, nameOrId, type); - this.parentNetworkId1 = parentNetworkId1; - this.parentNetworkId2 = parentNetworkId2; - } - - public String getParentNetworkId1() { - return parentNetworkId1; - } - - public String getParentNetworkId2() { - return parentNetworkId2; } public boolean isTransformerEdge() { diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java index 873ef893a..e117f7465 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021-2025, RTE (http://www.rte-france.com) + * Copyright (c) 2021, 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/. @@ -27,13 +27,10 @@ public enum Side { private final boolean visible; - private String parentNetworkId; - - public ThreeWtEdge(String diagramId, String equipmentId, String transformerName, Side side, boolean visible, String parentNetworkId) { + public ThreeWtEdge(String diagramId, String equipmentId, String transformerName, Side side, boolean visible) { super(diagramId, equipmentId, transformerName, THREE_WT_EDGE); this.side = side; this.visible = visible; - this.parentNetworkId = parentNetworkId; } public void setPoints(Point point1, Point point2) { @@ -55,9 +52,4 @@ public Side getSide() { public double getEdgeAngle() { return points.get(0).getAngle(points.get(1)); } - - public String getParentNetworkId() { - return parentNetworkId; - } - } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java index 9221b5cb0..27535f3e9 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java @@ -17,20 +17,14 @@ public class VoltageLevelNode extends AbstractNode { private final List busNodes = new ArrayList<>(); private final boolean visible; private boolean hasUnknownBusNode = false; - private String parentNetworkId; - public VoltageLevelNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId, boolean fictitious) { - this(parentNetworkId, diagramId, equipmentId, nameOrId, fictitious, true); + public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious) { + this(diagramId, equipmentId, nameOrId, fictitious, true); } - public VoltageLevelNode(String parentNetworkId, String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { + public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { super(diagramId, equipmentId, nameOrId, fictitious); this.visible = visible; - this.parentNetworkId = parentNetworkId; - } - - public String getParentNetworkId() { - return parentNetworkId; } public void addBusNode(BusNode busNode) { diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java index 73724f7d9..57045796a 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java @@ -53,13 +53,19 @@ public interface StyleProvider { List getNodeStyleClasses(Node node); + List getHighlightNodeStyleClasses(Node node); + List getNodeStyleClasses(BusNode busNode); List getEdgeStyleClasses(Edge edge); List getSideEdgeStyleClasses(BranchEdge edge, BranchEdge.Side side); + List getHighlightSideEdgeStyleClasses(BranchEdge edge, BranchEdge.Side side); + List getEdgeInfoStyles(EdgeInfo info); List getThreeWtNodeStyle(ThreeWtNode threeWtNode, ThreeWtEdge.Side one); + + List getHighlightThreeWtEdgStyleClasses(ThreeWtEdge edge); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java index d9d951508..d9a2b0ebd 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, RTE (http://www.rte-france.com) + * Copyright (c) 2021-2025, 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/. @@ -55,7 +55,7 @@ public class SvgParameters { private EdgeInfoEnum edgeInfoDisplayed = EdgeInfoEnum.ACTIVE_POWER; private double pstArrowHeadSize = 8; private String undefinedValueSymbol = ""; - + private boolean highlightSubnetwors; public enum CssLocation { INSERTED_IN_SVG, EXTERNAL_IMPORTED, EXTERNAL_NO_IMPORT @@ -491,4 +491,13 @@ public SvgParameters setUndefinedValueSymbol(String undefinedValueSymbol) { this.undefinedValueSymbol = undefinedValueSymbol; return this; } + + public boolean isHighlightSubnetwors() { + return highlightSubnetwors; + } + + public SvgParameters setHighlightSubnetwors(boolean highlightSubnetwors) { + this.highlightSubnetwors = highlightSubnetwors; + return this; + } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index ec205069b..2d5942dc1 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -64,7 +64,6 @@ public class SvgWriter { private final StyleProvider styleProvider; private final LabelProvider labelProvider; private final EdgeRendering edgeRendering; - private final HashMap subnetworksHighlightMap = new HashMap<>(); public SvgWriter(SvgParameters svgParameters, StyleProvider styleProvider, LabelProvider labelProvider) { this.svgParameters = Objects.requireNonNull(svgParameters); @@ -106,8 +105,7 @@ private void writeSvg(Graph graph, OutputStream svgOs) { XMLStreamWriter writer = XmlUtil.initializeWriter(true, INDENT, svgOs); addSvgRoot(graph, writer); addStyle(writer); - buildSubnetworksHighlightMap(graph); - boolean higlightSubnetworks = subnetworksHighlightMap.size() > 1; + boolean higlightSubnetworks = this.svgParameters.isHighlightSubnetwors(); drawVoltageLevelNodes(graph, writer, higlightSubnetworks); drawBranchEdges(graph, writer, higlightSubnetworks); drawThreeWtEdges(graph, writer, higlightSubnetworks); @@ -121,14 +119,6 @@ private void writeSvg(Graph graph, OutputStream svgOs) { } } - private void buildSubnetworksHighlightMap(Graph graph) { - graph.getVoltageLevelNodesStream().forEach(vlNode -> subnetworksHighlightMap.computeIfAbsent(vlNode.getParentNetworkId(), k -> getHighlightClass(subnetworksHighlightMap.size()))); - } - - private String getHighlightClass(int index) { - return StyleProvider.HIGHLIGHT_CLASS + "-" + index % 5; - } - private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); @@ -279,8 +269,7 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo, boolean highlight) throws XMLStreamException { if (highlight) { writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - String parentNetworkId = side.equals(BranchEdge.Side.ONE) ? edge.getParentNetworkId1() : edge.getParentNetworkId2(); - writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writeStyleClasses(writer, styleProvider.getHighlightSideEdgeStyleClasses(edge, side), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); } writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); @@ -330,8 +319,7 @@ private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge ed if (highlight) { writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - String parentNetworkId = edge.getParentNetworkId(); - writeStyleClasses(writer, subnetworksHighlightMap.get(parentNetworkId), StyleProvider.STRETCHABLE_CLASS); + writeStyleClasses(writer, styleProvider.getHighlightThreeWtEdgStyleClasses(edge), StyleProvider.STRETCHABLE_CLASS); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); } @@ -566,7 +554,7 @@ private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer, boolean private void drawHighlightedNode(XMLStreamWriter writer, VoltageLevelNode vlNode) throws XMLStreamException { writer.writeStartElement(USE_ELEMENT_NAME); writer.writeAttribute(HREF_ATTRIBUTE, "#" + getPrefixedId(vlNode.getDiagramId())); - writer.writeAttribute(CLASS_ATTRIBUTE, subnetworksHighlightMap.get(vlNode.getParentNetworkId())); + writeStyleClasses(writer, styleProvider.getHighlightNodeStyleClasses(vlNode)); writer.writeEndElement(); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java index 981040fe6..e786eb1c2 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2022, RTE (http://www.rte-france.com) + * Copyright (c) 2022-2025, 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/. @@ -11,7 +11,11 @@ import com.powsybl.iidm.network.Bus; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.Terminal; +import com.powsybl.iidm.network.ThreeSides; +import com.powsybl.iidm.network.TwoSides; +import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.nad.model.*; +import com.powsybl.nad.model.BranchEdge.Side; import com.powsybl.nad.svg.AbstractStyleProvider; import com.powsybl.nad.svg.StyleProvider; import com.powsybl.nad.utils.iidm.IidmUtils; @@ -24,14 +28,18 @@ public abstract class AbstractVoltageStyleProvider extends AbstractStyleProvider { protected final Network network; + private final HashMap subnetworksHighlightMap = new HashMap<>(); + private final HashMap subnetworkEquipmentMap = new HashMap<>(); protected AbstractVoltageStyleProvider(Network network) { this.network = network; + buildSubnetworkMaps(); } protected AbstractVoltageStyleProvider(Network network, BaseVoltagesConfig baseVoltageStyle) { super(baseVoltageStyle); this.network = network; + buildSubnetworkMaps(); } @Override @@ -117,4 +125,74 @@ protected Optional getBaseVoltageStyle(BranchEdge edge, BranchEdge.Side } protected abstract Optional getBaseVoltageStyle(Terminal terminal); + + @Override + public List getHighlightNodeStyleClasses(Node node) { + String subnetworkId = subnetworkEquipmentMap.get(node.getEquipmentId()); + return List.of(subnetworksHighlightMap.get(subnetworkId)); + } + + @Override + public List getHighlightSideEdgeStyleClasses(BranchEdge edge, BranchEdge.Side side) { + String subnetworkId = getSubnetworkId(edge, side); + return List.of(subnetworksHighlightMap.get(subnetworkId)); + } + + @Override + public List getHighlightThreeWtEdgStyleClasses(ThreeWtEdge edge) { + String subnetworkId = getSubnetworkId(edge.getEquipmentId(), edge.getSide()); + return List.of(subnetworksHighlightMap.get(subnetworkId)); + } + + private String getSubnetworkId(BranchEdge edge, Side side) { + String subnetworId = null; + switch (edge.getType()) { + case BranchEdge.LINE_EDGE: + TwoSides lineSide = side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO; + subnetworId = network.getLine(edge.getEquipmentId()).getTerminal(lineSide).getVoltageLevel().getParentNetwork().getId(); + break; + case BranchEdge.TWO_WT_EDGE: + case BranchEdge.PST_EDGE: + TwoSides twSide = side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO; + subnetworId = network.getTwoWindingsTransformer(edge.getEquipmentId()).getTerminal(twSide).getVoltageLevel().getParentNetwork().getId(); + break; + case BranchEdge.DANGLING_LINE_EDGE: + subnetworId = network.getDanglingLine(edge.getEquipmentId()).getTerminal().getVoltageLevel().getParentNetwork().getId(); + break; + case BranchEdge.TIE_LINE_EDGE: + subnetworId = network.getTieLine(edge.getEquipmentId()).getTerminal(side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO).getVoltageLevel().getParentNetwork().getId(); + break; + case BranchEdge.HVDC_LINE_EDGE: + subnetworId = network.getHvdcLine(edge.getEquipmentId()).getConverterStation(side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO).getTerminal().getVoltageLevel().getParentNetwork().getId(); + break; + default: + break; + } + return subnetworId; + } + + private String getSubnetworkId(String id, ThreeWtEdge.Side side) { + return network.getThreeWindingsTransformer(id).getLeg(ThreeSides.valueOf(side.name())).getTerminal().getVoltageLevel().getParentNetwork().getId(); + } + + private void buildSubnetworkMaps() { + List voltageLevels = getVoltageLevels(); + voltageLevels.forEach(vl -> addNode(vl.getId(), vl.getParentNetwork().getId())); + network.getDanglingLineStream().forEach(dl -> addNode(dl.getId(), dl.getTerminal().getVoltageLevel().getParentNetwork().getId())); + } + + private void addNode(String id, String subnetworkId) { + subnetworkEquipmentMap.put(id, subnetworkId); + subnetworksHighlightMap.computeIfAbsent(subnetworkId, k -> getHighlightClass(subnetworksHighlightMap.size())); + } + + private String getHighlightClass(int index) { + return StyleProvider.HIGHLIGHT_CLASS + "-" + index % 5; + } + + private List getVoltageLevels() { + return network.getVoltageLevelStream() + .sorted(Comparator.comparing(VoltageLevel::getId)) + .toList(); + } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java index 831b43c9d..5b6d42e14 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java @@ -39,7 +39,8 @@ void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() .setSvgWidthAndHeightAdded(true) - .setFixedWidth(800)); + .setFixedWidth(800) + .setHighlightSubnetwors(true)); } @Override diff --git a/network-area-diagram/src/test/resources/3wt_metadata.json b/network-area-diagram/src/test/resources/3wt_metadata.json index 2265c7af7..7bdc3a43b 100644 --- a/network-area-diagram/src/test/resources/3wt_metadata.json +++ b/network-area-diagram/src/test/resources/3wt_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json index d1066833d..b56239649 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json index deee2ad53..3444f682b 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json index 490524560..e563d4760 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json index 56386ae3f..4b2f1bb75 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/hvdc_metadata.json b/network-area-diagram/src/test/resources/hvdc_metadata.json index f49c239a1..79836c148 100644 --- a/network-area-diagram/src/test/resources/hvdc_metadata.json +++ b/network-area-diagram/src/test/resources/hvdc_metadata.json @@ -53,7 +53,8 @@ "currentValuePrecision" : 0, "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, - "undefinedValueSymbol" : "" + "undefinedValueSymbol" : "", + "highlightSubnetwors" : false }, "busNodes" : [ { "svgId" : "1", From 03a71a1fca3826c1d1c828cea0de4b9aa6e9e0c1 Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Fri, 31 Jan 2025 11:59:07 +0100 Subject: [PATCH 5/8] Svg separated highlight section Signed-off-by: Giovanni Ferrari --- .../java/com/powsybl/nad/svg/SvgWriter.java | 69 +++++++++----- .../src/main/resources/nominalStyle.css | 11 ++- .../src/main/resources/topologicalStyle.css | 11 ++- .../src/test/resources/3wt.svg | 11 ++- .../src/test/resources/3wt_disconnected.svg | 11 ++- .../3wt_disconnected_topological.svg | 11 ++- .../src/test/resources/3wt_partial.svg | 11 ++- .../src/test/resources/IEEE_118_bus.svg | 11 ++- .../test/resources/IEEE_118_bus_partial.svg | 11 ++- .../IEEE_118_bus_partial_non_connected.svg | 11 ++- .../src/test/resources/IEEE_14_bus.svg | 11 ++- .../resources/IEEE_14_bus_disconnection.svg | 11 ++- .../test/resources/IEEE_14_bus_fictitious.svg | 11 ++- .../test/resources/IEEE_14_bus_text_nodes.svg | 11 ++- .../resources/IEEE_14_bus_voltage_filter1.svg | 11 ++- .../resources/IEEE_14_bus_voltage_filter2.svg | 11 ++- .../resources/IEEE_14_bus_voltage_filter3.svg | 11 ++- .../resources/IEEE_14_bus_voltage_filter4.svg | 11 ++- .../resources/IEEE_14_bus_voltage_filter5.svg | 11 ++- .../IEEE_14_bus_voltage_nofilter.svg | 11 ++- .../test/resources/IEEE_14_id_prefixed.svg | 11 ++- .../src/test/resources/IEEE_24_bus.svg | 11 ++- .../src/test/resources/IEEE_30_bus.svg | 11 ++- .../src/test/resources/IEEE_57_bus.svg | 11 ++- .../src/test/resources/current_limits.svg | 11 ++- .../resources/dangling_line_connected.svg | 11 ++- .../resources/dangling_line_disconnected.svg | 11 ++- .../src/test/resources/detailed_text_node.svg | 11 ++- .../detailed_text_node_no_legend.svg | 11 ++- .../diamond-spring-repulsion-factor-0.0.svg | 11 ++- .../diamond-spring-repulsion-factor-0.2.svg | 11 ++- .../src/test/resources/edge_info_current.svg | 11 ++- .../resources/edge_info_double_labels.svg | 11 ++- .../resources/edge_info_missing_label.svg | 11 ++- .../edge_info_perpendicular_label.svg | 11 ++- .../resources/edge_info_reactive_power.svg | 11 ++- .../src/test/resources/edge_info_shift.svg | 11 ++- .../src/test/resources/edge_with_id.svg | 11 ++- .../src/test/resources/edge_without_id.svg | 11 ++- .../src/test/resources/hvdc-vl-depth-1.svg | 11 ++- .../src/test/resources/hvdc.svg | 11 ++- .../test/resources/parallel_transformers.svg | 11 ++- .../production_consumption_text_node.svg | 11 ++- .../production_consumption_text_node_nan.svg | 11 ++- .../src/test/resources/simple-eu-loop100.svg | 11 ++- .../src/test/resources/simple-eu-loop80.svg | 11 ++- .../src/test/resources/simple-eu.svg | 11 ++- .../test/resources/subnetwork_highlight.svg | 95 ++++++++++++++----- .../src/test/resources/tie_line.svg | 11 ++- .../src/test/resources/tie_line_filtered.svg | 11 ++- .../src/test/resources/vl_description_id.svg | 11 ++- .../resources/vl_description_substation.svg | 11 ++- .../vl_description_substation_id.svg | 11 ++- .../src/test/resources/voltage_limits.svg | 11 ++- 54 files changed, 426 insertions(+), 310 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index 2d5942dc1..d055fe98e 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -106,9 +106,12 @@ private void writeSvg(Graph graph, OutputStream svgOs) { addSvgRoot(graph, writer); addStyle(writer); boolean higlightSubnetworks = this.svgParameters.isHighlightSubnetwors(); - drawVoltageLevelNodes(graph, writer, higlightSubnetworks); - drawBranchEdges(graph, writer, higlightSubnetworks); - drawThreeWtEdges(graph, writer, higlightSubnetworks); + if (higlightSubnetworks) { + drawHighlightedSection(graph, writer); + } + drawVoltageLevelNodes(graph, writer); + drawBranchEdges(graph, writer, false); + drawThreeWtEdges(graph, writer, false); drawThreeWtNodes(graph, writer); drawTextEdges(graph, writer); drawTextNodes(graph, writer); @@ -119,6 +122,15 @@ private void writeSvg(Graph graph, OutputStream svgOs) { } } + private void drawHighlightedSection(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.HIGHLIGHT_CLASS); + drawHighlighVoltageLevelNodes(graph, writer); + drawBranchEdges(graph, writer, true); + drawThreeWtEdges(graph, writer, true); + writer.writeEndElement(); + } + private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); @@ -131,8 +143,9 @@ private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highli drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE, highlight); drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO, highlight); - drawEdgeCenter(writer, edge); - + if (!highlight) { + drawEdgeCenter(writer, edge); + } writer.writeEndElement(); } writer.writeEndElement(); @@ -271,12 +284,13 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); writeStyleClasses(writer, styleProvider.getHighlightSideEdgeStyleClasses(edge, side), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - } - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - if (edgeInfo.isPresent()) { - drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); + } else { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + if (edgeInfo.isPresent()) { + drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); + } } } @@ -315,23 +329,22 @@ private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge ed writer.writeStartElement(GROUP_ELEMENT_NAME); writeId(writer, edge); writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); - insertName(writer, edge::getName); if (highlight) { writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); writeStyleClasses(writer, styleProvider.getHighlightThreeWtEdgStyleClasses(edge), StyleProvider.STRETCHABLE_CLASS); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); - } - - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); + } else { + insertName(writer, edge::getName); + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); - Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge); - if (edgeInfo.isPresent()) { - drawThreeWtEdgeInfo(graph, writer, edge, edgeInfo.get()); + Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge); + if (edgeInfo.isPresent()) { + drawThreeWtEdgeInfo(graph, writer, edge, edgeInfo.get()); + } } - writer.writeEndElement(); } @@ -536,13 +549,10 @@ private String getPstArrowPath(double arrowSize) { return String.format("M%s,0 0,%s M%s,0 %s,0 %s,%s", d1, d1, d2, d1, d1, dh); } - private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { + private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.VOLTAGE_LEVEL_NODES_CLASS); for (VoltageLevelNode vlNode : graph.getVoltageLevelNodesStream().filter(VoltageLevelNode::isVisible).collect(Collectors.toList())) { - if (highlight) { - drawHighlightedNode(writer, vlNode); - } writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(TRANSFORM_ATTRIBUTE, getTranslateString(vlNode)); drawNode(graph, writer, vlNode); @@ -551,6 +561,15 @@ private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer, boolean writer.writeEndElement(); } + private void drawHighlighVoltageLevelNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.VOLTAGE_LEVEL_NODES_CLASS); + for (VoltageLevelNode vlNode : graph.getVoltageLevelNodesStream().filter(VoltageLevelNode::isVisible).collect(Collectors.toList())) { + drawHighlightedNode(writer, vlNode); + } + writer.writeEndElement(); + } + private void drawHighlightedNode(XMLStreamWriter writer, VoltageLevelNode vlNode) throws XMLStreamException { writer.writeStartElement(USE_ELEMENT_NAME); writer.writeAttribute(HREF_ATTRIBUTE, "#" + getPrefixedId(vlNode.getDiagramId())); diff --git a/network-area-diagram/src/main/resources/nominalStyle.css b/network-area-diagram/src/main/resources/nominalStyle.css index 21771f9ab..5bbc225c9 100644 --- a/network-area-diagram/src/main/resources/nominalStyle.css +++ b/network-area-diagram/src/main/resources/nominalStyle.css @@ -27,11 +27,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/main/resources/topologicalStyle.css b/network-area-diagram/src/main/resources/topologicalStyle.css index 2294f546d..1ac56594b 100644 --- a/network-area-diagram/src/main/resources/topologicalStyle.css +++ b/network-area-diagram/src/main/resources/topologicalStyle.css @@ -92,11 +92,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt.svg b/network-area-diagram/src/test/resources/3wt.svg index 2f3c06b80..644a84d24 100644 --- a/network-area-diagram/src/test/resources/3wt.svg +++ b/network-area-diagram/src/test/resources/3wt.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_disconnected.svg b/network-area-diagram/src/test/resources/3wt_disconnected.svg index f5e341f51..0a2de872f 100644 --- a/network-area-diagram/src/test/resources/3wt_disconnected.svg +++ b/network-area-diagram/src/test/resources/3wt_disconnected.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg b/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg index ae0d66fa9..086251eae 100644 --- a/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg +++ b/network-area-diagram/src/test/resources/3wt_disconnected_topological.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/3wt_partial.svg b/network-area-diagram/src/test/resources/3wt_partial.svg index dd97501cd..c82e17953 100644 --- a/network-area-diagram/src/test/resources/3wt_partial.svg +++ b/network-area-diagram/src/test/resources/3wt_partial.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus.svg b/network-area-diagram/src/test/resources/IEEE_118_bus.svg index ae95261f6..96793e3d2 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg index 09610780d..f8df539d1 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg index 3417d91f4..93c518298 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus.svg b/network-area-diagram/src/test/resources/IEEE_14_bus.svg index 086e8c8c4..5bd24bfbb 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg index fcf9669fa..87c77d26e 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg index f2c0f3ffe..361591b4c 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg index 116e5afa4..9290cccc1 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg index dca55ed57..467b1d9dd 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter1.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg index 0554d207d..52cc7fdd6 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg index 26d45ef97..53084f1e2 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg index e5b70308d..762699722 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter4.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg index 91f6a147e..a8ceb1d76 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg index b8be1efca..d86e28dd1 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg index c8f0c2946..348cba55b 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_24_bus.svg b/network-area-diagram/src/test/resources/IEEE_24_bus.svg index fb466f4a5..d6c93e5eb 100644 --- a/network-area-diagram/src/test/resources/IEEE_24_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_24_bus.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_30_bus.svg b/network-area-diagram/src/test/resources/IEEE_30_bus.svg index ae4dffa72..9248b7d14 100644 --- a/network-area-diagram/src/test/resources/IEEE_30_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_30_bus.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/IEEE_57_bus.svg b/network-area-diagram/src/test/resources/IEEE_57_bus.svg index 3e5b376b5..ea7496fa6 100644 --- a/network-area-diagram/src/test/resources/IEEE_57_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_57_bus.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/current_limits.svg b/network-area-diagram/src/test/resources/current_limits.svg index 67bcda91d..625ca8447 100644 --- a/network-area-diagram/src/test/resources/current_limits.svg +++ b/network-area-diagram/src/test/resources/current_limits.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/dangling_line_connected.svg b/network-area-diagram/src/test/resources/dangling_line_connected.svg index db8704b88..30ae6919f 100644 --- a/network-area-diagram/src/test/resources/dangling_line_connected.svg +++ b/network-area-diagram/src/test/resources/dangling_line_connected.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/dangling_line_disconnected.svg b/network-area-diagram/src/test/resources/dangling_line_disconnected.svg index c5ae171ad..eeed58a01 100644 --- a/network-area-diagram/src/test/resources/dangling_line_disconnected.svg +++ b/network-area-diagram/src/test/resources/dangling_line_disconnected.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/detailed_text_node.svg b/network-area-diagram/src/test/resources/detailed_text_node.svg index 2143c6da5..f9202d6b8 100644 --- a/network-area-diagram/src/test/resources/detailed_text_node.svg +++ b/network-area-diagram/src/test/resources/detailed_text_node.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg b/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg index 897ddbfa7..f43c2dd24 100644 --- a/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg +++ b/network-area-diagram/src/test/resources/detailed_text_node_no_legend.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg index 5c1b9811d..a5a2e12dc 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg index 040ed794d..426d38baf 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_current.svg b/network-area-diagram/src/test/resources/edge_info_current.svg index 689d391e8..3706a22e6 100644 --- a/network-area-diagram/src/test/resources/edge_info_current.svg +++ b/network-area-diagram/src/test/resources/edge_info_current.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_double_labels.svg b/network-area-diagram/src/test/resources/edge_info_double_labels.svg index 6144a98a0..734935f69 100644 --- a/network-area-diagram/src/test/resources/edge_info_double_labels.svg +++ b/network-area-diagram/src/test/resources/edge_info_double_labels.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_missing_label.svg b/network-area-diagram/src/test/resources/edge_info_missing_label.svg index 7303dae9c..2a7d88d3b 100644 --- a/network-area-diagram/src/test/resources/edge_info_missing_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_missing_label.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg index 0abb0e518..6b6961782 100644 --- a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_reactive_power.svg b/network-area-diagram/src/test/resources/edge_info_reactive_power.svg index b1938e25b..58a776d22 100644 --- a/network-area-diagram/src/test/resources/edge_info_reactive_power.svg +++ b/network-area-diagram/src/test/resources/edge_info_reactive_power.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_info_shift.svg b/network-area-diagram/src/test/resources/edge_info_shift.svg index a9656d6f7..784a02c5c 100644 --- a/network-area-diagram/src/test/resources/edge_info_shift.svg +++ b/network-area-diagram/src/test/resources/edge_info_shift.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_with_id.svg b/network-area-diagram/src/test/resources/edge_with_id.svg index 7e81a03c8..e8df56746 100644 --- a/network-area-diagram/src/test/resources/edge_with_id.svg +++ b/network-area-diagram/src/test/resources/edge_with_id.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/edge_without_id.svg b/network-area-diagram/src/test/resources/edge_without_id.svg index db8704b88..30ae6919f 100644 --- a/network-area-diagram/src/test/resources/edge_without_id.svg +++ b/network-area-diagram/src/test/resources/edge_without_id.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg index 3823d6566..cc2427bed 100644 --- a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg +++ b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/hvdc.svg b/network-area-diagram/src/test/resources/hvdc.svg index c0a74fb75..062a4cf3f 100644 --- a/network-area-diagram/src/test/resources/hvdc.svg +++ b/network-area-diagram/src/test/resources/hvdc.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/parallel_transformers.svg b/network-area-diagram/src/test/resources/parallel_transformers.svg index c70d3f74f..618780111 100644 --- a/network-area-diagram/src/test/resources/parallel_transformers.svg +++ b/network-area-diagram/src/test/resources/parallel_transformers.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/production_consumption_text_node.svg b/network-area-diagram/src/test/resources/production_consumption_text_node.svg index ffb8bc101..dcd3e6988 100644 --- a/network-area-diagram/src/test/resources/production_consumption_text_node.svg +++ b/network-area-diagram/src/test/resources/production_consumption_text_node.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg b/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg index 5780144f8..a44ede96c 100644 --- a/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg +++ b/network-area-diagram/src/test/resources/production_consumption_text_node_nan.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop100.svg b/network-area-diagram/src/test/resources/simple-eu-loop100.svg index 1b3382054..7192e2374 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop100.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop100.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop80.svg b/network-area-diagram/src/test/resources/simple-eu-loop80.svg index 8c0a76687..4560cb6ad 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop80.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop80.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/simple-eu.svg b/network-area-diagram/src/test/resources/simple-eu.svg index c508fb153..ffc10e6c8 100644 --- a/network-area-diagram/src/test/resources/simple-eu.svg +++ b/network-area-diagram/src/test/resources/simple-eu.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/subnetwork_highlight.svg b/network-area-diagram/src/test/resources/subnetwork_highlight.svg index 139138ab7..b934e472a 100644 --- a/network-area-diagram/src/test/resources/subnetwork_highlight.svg +++ b/network-area-diagram/src/test/resources/subnetwork_highlight.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} @@ -48,32 +49,89 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} 40% {stroke: #00BCD4; stroke-width: 15} } ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - @@ -81,7 +139,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -94,7 +151,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -113,7 +169,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -126,7 +181,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -142,7 +196,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -155,7 +208,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -171,7 +223,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -184,7 +235,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -199,7 +249,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -212,7 +261,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -232,7 +280,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -245,7 +292,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - @@ -258,7 +304,6 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - diff --git a/network-area-diagram/src/test/resources/tie_line.svg b/network-area-diagram/src/test/resources/tie_line.svg index 0b61c7005..f0901ccac 100644 --- a/network-area-diagram/src/test/resources/tie_line.svg +++ b/network-area-diagram/src/test/resources/tie_line.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/tie_line_filtered.svg b/network-area-diagram/src/test/resources/tie_line_filtered.svg index fde8aebdc..2ae8efe59 100644 --- a/network-area-diagram/src/test/resources/tie_line_filtered.svg +++ b/network-area-diagram/src/test/resources/tie_line_filtered.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_id.svg b/network-area-diagram/src/test/resources/vl_description_id.svg index 8fc82f703..60c5dee67 100644 --- a/network-area-diagram/src/test/resources/vl_description_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_id.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_substation.svg b/network-area-diagram/src/test/resources/vl_description_substation.svg index 9de7bc650..ffe78862d 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/vl_description_substation_id.svg b/network-area-diagram/src/test/resources/vl_description_substation_id.svg index 4a364817d..88831932d 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation_id.svg @@ -95,11 +95,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} diff --git a/network-area-diagram/src/test/resources/voltage_limits.svg b/network-area-diagram/src/test/resources/voltage_limits.svg index 4288ccd12..a87a6452b 100644 --- a/network-area-diagram/src/test/resources/voltage_limits.svg +++ b/network-area-diagram/src/test/resources/voltage_limits.svg @@ -30,11 +30,12 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} .nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} .nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} .nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} -.nad-highlight-0 {stroke: #e6e600; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-1 {stroke: #b300b3; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-2 {stroke: #2eb82e; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-3 {stroke: #e67300; stroke-width: 25; opacity: 0.2; fill: none;} -.nad-highlight-4 {stroke: #0000ff; stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight {stroke-width: 25; opacity: 0.2; fill: none;} +.nad-highlight-0 {stroke: #e6e600;} +.nad-highlight-1 {stroke: #b300b3;} +.nad-highlight-2 {stroke: #2eb82e;} +.nad-highlight-3 {stroke: #e67300;} +.nad-highlight-4 {stroke: #0000ff;} @keyframes line-blink { 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} 40% {stroke: #FFEB3B; stroke-width: 15} From 8510e07c2d7edcd6ecf0023170d977c7bbadb331 Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Fri, 31 Jan 2025 15:35:39 +0100 Subject: [PATCH 6/8] Fix sonar issue. Remove unnecessary attributes from highligh section Signed-off-by: Giovanni Ferrari --- .../java/com/powsybl/nad/svg/SvgWriter.java | 123 ++++++++++++------ .../iidm/AbstractVoltageStyleProvider.java | 3 +- .../test/resources/subnetwork_highlight.svg | 36 ++--- 3 files changed, 102 insertions(+), 60 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index d055fe98e..2804765fc 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -110,8 +110,8 @@ private void writeSvg(Graph graph, OutputStream svgOs) { drawHighlightedSection(graph, writer); } drawVoltageLevelNodes(graph, writer); - drawBranchEdges(graph, writer, false); - drawThreeWtEdges(graph, writer, false); + drawBranchEdges(graph, writer); + drawThreeWtEdges(graph, writer); drawThreeWtNodes(graph, writer); drawTextEdges(graph, writer); drawTextNodes(graph, writer); @@ -126,12 +126,12 @@ private void drawHighlightedSection(Graph graph, XMLStreamWriter writer) throws writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.HIGHLIGHT_CLASS); drawHighlighVoltageLevelNodes(graph, writer); - drawBranchEdges(graph, writer, true); - drawThreeWtEdges(graph, writer, true); + drawHighlightBranchEdges(graph, writer); + drawHighlightThreeWtEdges(graph, writer); writer.writeEndElement(); } - private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { + private void drawBranchEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); for (BranchEdge edge : graph.getBranchEdges()) { @@ -139,13 +139,22 @@ private void drawBranchEdges(Graph graph, XMLStreamWriter writer, boolean highli writeId(writer, edge); writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); insertName(writer, edge::getName); + drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE); + drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO); + drawEdgeCenter(writer, edge); + writer.writeEndElement(); + } + writer.writeEndElement(); + } - drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE, highlight); - drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO, highlight); - - if (!highlight) { - drawEdgeCenter(writer, edge); - } + private void drawHighlightBranchEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); + for (BranchEdge edge : graph.getBranchEdges()) { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); + drawHighlightHalfEdge(graph, writer, edge, BranchEdge.Side.ONE); + drawHighlightHalfEdge(graph, writer, edge, BranchEdge.Side.TWO); writer.writeEndElement(); } writer.writeEndElement(); @@ -246,7 +255,7 @@ private void drawConverterStation(XMLStreamWriter writer, BranchEdge edge) throw writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.HVDC_CLASS); } - private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer, boolean highlight) throws XMLStreamException { + private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { List threeWtEdges = graph.getThreeWtEdges(); if (threeWtEdges.isEmpty()) { return; @@ -255,12 +264,26 @@ private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer, boolean highl writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_EDGES_CLASS); for (ThreeWtEdge edge : threeWtEdges) { - drawThreeWtEdge(graph, writer, edge, highlight); + drawThreeWtEdge(graph, writer, edge); } writer.writeEndElement(); } - private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, boolean highlight) throws XMLStreamException { + private void drawHighlightThreeWtEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + List threeWtEdges = graph.getThreeWtEdges(); + if (threeWtEdges.isEmpty()) { + return; + } + + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_EDGES_CLASS); + for (ThreeWtEdge edge : threeWtEdges) { + drawHighlightThreeWtEdge(graph, writer, edge); + } + writer.writeEndElement(); + } + + private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { // the half edge is only drawn if visible, but if the edge is a TwoWtEdge, the transformer is still drawn if (!edge.isVisible(side) && !(edge.isTransformerEdge())) { return; @@ -271,7 +294,7 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, if (edge.isVisible(side)) { Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge, side); if (!graph.isLoop(edge)) { - drawHalfEdge(graph, writer, edge, side, edgeInfo, highlight); + drawHalfEdge(graph, writer, edge, side, edgeInfo); } else { drawLoopEdge(writer, edge, side, edgeInfo); } @@ -279,19 +302,34 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, writer.writeEndElement(); } - private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo, boolean highlight) throws XMLStreamException { - if (highlight) { - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, styleProvider.getHighlightSideEdgeStyleClasses(edge, side), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - } else { - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); - if (edgeInfo.isPresent()) { - drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); + private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo) throws XMLStreamException { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + if (edgeInfo.isPresent()) { + drawBranchEdgeInfo(graph, writer, edge, side, edgeInfo.get()); + } + } + + private void drawHighlightHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { + // the half edge is only drawn if visible, but if the edge is a TwoWtEdge, the transformer is still drawn + if (!edge.isVisible(side) && !(edge.isTransformerEdge())) { + return; + } + writer.writeStartElement(GROUP_ELEMENT_NAME); + writeStyleClasses(writer, styleProvider.getSideEdgeStyleClasses(edge, side)); + if (edge.isVisible(side)) { + if (!graph.isLoop(edge)) { + drawHighlighHalfEdge(graph, writer, edge, side); } } + writer.writeEndElement(); + } + + private void drawHighlighHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, styleProvider.getHighlightSideEdgeStyleClasses(edge, side), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); } private void drawLoopEdge(XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, Optional edgeInfo) throws XMLStreamException { @@ -322,29 +360,34 @@ private String getLoopPathString(BranchEdge edge, BranchEdge.Side side) { return String.format(Locale.US, "M%.2f,%.2f L%.2f,%.2f C%.2f,%.2f %.2f,%.2f %.2f,%.2f", points); } - private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge, boolean highlight) throws XMLStreamException { + private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { if (!edge.isVisible()) { return; } writer.writeStartElement(GROUP_ELEMENT_NAME); writeId(writer, edge); writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); + insertName(writer, edge::getName); + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); - if (highlight) { - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, styleProvider.getHighlightThreeWtEdgStyleClasses(edge), StyleProvider.STRETCHABLE_CLASS); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); - } else { - insertName(writer, edge::getName); - writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); - writeStyleClasses(writer, StyleProvider.EDGE_PATH_CLASS, StyleProvider.STRETCHABLE_CLASS); - writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); + Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge); + if (edgeInfo.isPresent()) { + drawThreeWtEdgeInfo(graph, writer, edge, edgeInfo.get()); + } + writer.writeEndElement(); + } - Optional edgeInfo = labelProvider.getEdgeInfo(graph, edge); - if (edgeInfo.isPresent()) { - drawThreeWtEdgeInfo(graph, writer, edge, edgeInfo.get()); - } + private void drawHighlightThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { + if (!edge.isVisible()) { + return; } + writer.writeStartElement(GROUP_ELEMENT_NAME); + writeStyleClasses(writer, styleProvider.getEdgeStyleClasses(edge)); + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writeStyleClasses(writer, styleProvider.getHighlightThreeWtEdgStyleClasses(edge), StyleProvider.STRETCHABLE_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); writer.writeEndElement(); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java index e786eb1c2..6decfe51c 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java @@ -151,8 +151,7 @@ private String getSubnetworkId(BranchEdge edge, Side side) { TwoSides lineSide = side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO; subnetworId = network.getLine(edge.getEquipmentId()).getTerminal(lineSide).getVoltageLevel().getParentNetwork().getId(); break; - case BranchEdge.TWO_WT_EDGE: - case BranchEdge.PST_EDGE: + case BranchEdge.TWO_WT_EDGE, BranchEdge.PST_EDGE: TwoSides twSide = side.equals(Side.ONE) ? TwoSides.ONE : TwoSides.TWO; subnetworId = network.getTwoWindingsTransformer(edge.getEquipmentId()).getTerminal(twSide).getVoltageLevel().getParentNetwork().getId(); break; diff --git a/network-area-diagram/src/test/resources/subnetwork_highlight.svg b/network-area-diagram/src/test/resources/subnetwork_highlight.svg index b934e472a..6feca2702 100644 --- a/network-area-diagram/src/test/resources/subnetwork_highlight.svg +++ b/network-area-diagram/src/test/resources/subnetwork_highlight.svg @@ -60,55 +60,55 @@ path.nad-arrow-in:not(.nad-state-in .nad-arrow-in) {visibility: hidden} - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + From cd690502b9e5f7ef2be41cb0e9c0b46c9bc0beef Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Fri, 31 Jan 2025 16:15:16 +0100 Subject: [PATCH 7/8] Fix sonar issues Signed-off-by: Giovanni Ferrari --- .../main/java/com/powsybl/nad/svg/SvgWriter.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index 2804765fc..1d62fca3e 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -278,7 +278,7 @@ private void drawHighlightThreeWtEdges(Graph graph, XMLStreamWriter writer) thro writer.writeStartElement(GROUP_ELEMENT_NAME); writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_EDGES_CLASS); for (ThreeWtEdge edge : threeWtEdges) { - drawHighlightThreeWtEdge(graph, writer, edge); + drawHighlightThreeWtEdge(writer, edge); } writer.writeEndElement(); } @@ -312,21 +312,18 @@ private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, } private void drawHighlightHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { - // the half edge is only drawn if visible, but if the edge is a TwoWtEdge, the transformer is still drawn if (!edge.isVisible(side) && !(edge.isTransformerEdge())) { return; } writer.writeStartElement(GROUP_ELEMENT_NAME); writeStyleClasses(writer, styleProvider.getSideEdgeStyleClasses(edge, side)); - if (edge.isVisible(side)) { - if (!graph.isLoop(edge)) { - drawHighlighHalfEdge(graph, writer, edge, side); - } + if (edge.isVisible(side) && !graph.isLoop(edge)) { + drawHighlighHalfEdge(writer, edge, side); } writer.writeEndElement(); } - private void drawHighlighHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { + private void drawHighlighHalfEdge(XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); writeStyleClasses(writer, styleProvider.getHighlightSideEdgeStyleClasses(edge, side), StyleProvider.STRETCHABLE_CLASS, StyleProvider.GLUED_CLASS + "-" + side.getNum()); writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); @@ -379,7 +376,7 @@ private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge ed writer.writeEndElement(); } - private void drawHighlightThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { + private void drawHighlightThreeWtEdge(XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { if (!edge.isVisible()) { return; } From 2333a90f019df22c889169eeb3403ba4d5e3859e Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Wed, 5 Feb 2025 10:36:56 +0100 Subject: [PATCH 8/8] Fix typo and increase code coverage. Signed-off-by: Giovanni Ferrari --- .../com/powsybl/nad/svg/SvgParameters.java | 10 +- .../java/com/powsybl/nad/svg/SvgWriter.java | 2 +- .../nad/svg/SubnetworkHighlightTest.java | 71 ++++- .../src/test/resources/3wt_metadata.json | 2 +- .../IEEE_14_bus_fictitious_metadata.json | 2 +- .../IEEE_14_bus_voltage_filter2_metadata.json | 2 +- .../IEEE_14_bus_voltage_filter5_metadata.json | 2 +- ...IEEE_14_bus_voltage_nofilter_metadata.json | 2 +- .../src/test/resources/hvdc_metadata.json | 2 +- .../test/resources/subnetwork_highlight.svg | 286 +++++++++++------- 10 files changed, 242 insertions(+), 139 deletions(-) diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java index d9a2b0ebd..f91d8d25b 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java @@ -55,7 +55,7 @@ public class SvgParameters { private EdgeInfoEnum edgeInfoDisplayed = EdgeInfoEnum.ACTIVE_POWER; private double pstArrowHeadSize = 8; private String undefinedValueSymbol = ""; - private boolean highlightSubnetwors; + private boolean highlightSubnetworks; public enum CssLocation { INSERTED_IN_SVG, EXTERNAL_IMPORTED, EXTERNAL_NO_IMPORT @@ -492,12 +492,12 @@ public SvgParameters setUndefinedValueSymbol(String undefinedValueSymbol) { return this; } - public boolean isHighlightSubnetwors() { - return highlightSubnetwors; + public boolean isHighlightSubnetworks() { + return highlightSubnetworks; } - public SvgParameters setHighlightSubnetwors(boolean highlightSubnetwors) { - this.highlightSubnetwors = highlightSubnetwors; + public SvgParameters setHighlightSubnetworks(boolean highlightSubnetworks) { + this.highlightSubnetworks = highlightSubnetworks; return this; } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java index 1d62fca3e..ced32325f 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -105,7 +105,7 @@ private void writeSvg(Graph graph, OutputStream svgOs) { XMLStreamWriter writer = XmlUtil.initializeWriter(true, INDENT, svgOs); addSvgRoot(graph, writer); addStyle(writer); - boolean higlightSubnetworks = this.svgParameters.isHighlightSubnetwors(); + boolean higlightSubnetworks = this.svgParameters.isHighlightSubnetworks(); if (higlightSubnetworks) { drawHighlightedSection(graph, writer); } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java index 5b6d42e14..927b751c8 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SubnetworkHighlightTest.java @@ -12,6 +12,7 @@ import com.powsybl.iidm.network.Country; import com.powsybl.iidm.network.DanglingLine; import com.powsybl.iidm.network.Generator; +import com.powsybl.iidm.network.HvdcLine; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.NetworkFactory; import com.powsybl.iidm.network.RatioTapChanger; @@ -19,6 +20,7 @@ import com.powsybl.iidm.network.TopologyKind; import com.powsybl.iidm.network.TwoWindingsTransformer; import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.VscConverterStation; import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory; import com.powsybl.nad.*; import com.powsybl.nad.layout.LayoutParameters; @@ -40,7 +42,7 @@ void setup() { setSvgParameters(new SvgParameters() .setSvgWidthAndHeightAdded(true) .setFixedWidth(800) - .setHighlightSubnetwors(true)); + .setHighlightSubnetworks(true)); } @Override @@ -94,7 +96,7 @@ public static Network createWithTieLines() { .setDanglingLine1(nhv1xnode1.getId()) .setDanglingLine2(xnode1nhv2.getId()) .add(); - DanglingLine nhv1xnode2 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV1) + network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV1) .newDanglingLine() .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE2_1) .setP0(0.0) @@ -106,7 +108,7 @@ public static Network createWithTieLines() { .setBus(EurostagTutorialExample1Factory.NHV1) .setPairingKey("XNODE2") .add(); - DanglingLine xnode2nhv2 = network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV2) + network.getVoltageLevel(EurostagTutorialExample1Factory.VLHV2) .newDanglingLine() .setId(EurostagTutorialExample1Factory.DANGLING_LINE_XNODE2_2) .setP0(0.0) @@ -118,23 +120,14 @@ public static Network createWithTieLines() { .setBus("NHV2") .setPairingKey("XNODE2") .add(); - network.newTieLine() - .setId(EurostagTutorialExample1Factory.NHV1_NHV2_2) - .setDanglingLine1(nhv1xnode2.getId()) - .setDanglingLine2(xnode2nhv2.getId()) - .add(); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getDanglingLine1().getTerminal() .setP(302.4440612792969) .setQ(98.74027252197266); + network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_1).getDanglingLine2().getTerminal() .setP(-300.43389892578125) .setQ(-137.18849182128906); - network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getDanglingLine1().getTerminal() - .setP(302.4440612792969) - .setQ(98.74027252197266); - network.getTieLine(EurostagTutorialExample1Factory.NHV1_NHV2_2).getDanglingLine2().getTerminal() - .setP(-300.43389892578125) - .setQ(-137.188491821289060); return network; } @@ -451,6 +444,56 @@ public static Network createwith3wt(NetworkFactory networkFactory) { .setBus(bus4.getId()) .add() .add(); + + VscConverterStation cs1 = vlhv3.newVscConverterStation() + .setId("C1") + .setName("Converter1") + .setConnectableBus("BUS_3") + .setBus("BUS_3") + .setLossFactor(1.1f) + .setVoltageSetpoint(405.0) + .setVoltageRegulatorOn(true) + .add(); + cs1.getTerminal() + .setP(100.0) + .setQ(50.0); + cs1.newReactiveCapabilityCurve() + .beginPoint() + .setP(5.0) + .setMinQ(0.0) + .setMaxQ(10.0) + .endPoint() + .beginPoint() + .setP(10.0) + .setMinQ(0.0) + .setMaxQ(10.0) + .endPoint() + .add(); + VscConverterStation cs2 = vlload.newVscConverterStation() + .setId("C2") + .setName("Converter2") + .setBus(nload.getId()) + .setLossFactor(1.1f) + .setReactivePowerSetpoint(123) + .setVoltageRegulatorOn(false) + .setRegulatingTerminal(cs1.getTerminal()) + .add(); + cs2.newMinMaxReactiveLimits() + .setMinQ(0.0) + .setMaxQ(10.0) + .add(); + + network0.newHvdcLine() + .setId("L") + .setName("HVDC") + .setConverterStationId1("C1") + .setConverterStationId2("C2") + .setR(1) + .setNominalV(400) + .setConvertersMode(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER) + .setMaxP(300.0) + .setActivePowerSetpoint(280) + .add(); return network0; } } diff --git a/network-area-diagram/src/test/resources/3wt_metadata.json b/network-area-diagram/src/test/resources/3wt_metadata.json index 7bdc3a43b..bc397268b 100644 --- a/network-area-diagram/src/test/resources/3wt_metadata.json +++ b/network-area-diagram/src/test/resources/3wt_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json index b56239649..1481058e6 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json index 3444f682b..c509d99ea 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json index e563d4760..e242f75ba 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json index 4b2f1bb75..12f3c7c83 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/hvdc_metadata.json b/network-area-diagram/src/test/resources/hvdc_metadata.json index 79836c148..00789962b 100644 --- a/network-area-diagram/src/test/resources/hvdc_metadata.json +++ b/network-area-diagram/src/test/resources/hvdc_metadata.json @@ -54,7 +54,7 @@ "edgeInfoDisplayed" : "ACTIVE_POWER", "pstArrowHeadSize" : 8.0, "undefinedValueSymbol" : "", - "highlightSubnetwors" : false + "highlightSubnetworks" : false }, "busNodes" : [ { "svgId" : "1", diff --git a/network-area-diagram/src/test/resources/subnetwork_highlight.svg b/network-area-diagram/src/test/resources/subnetwork_highlight.svg index 6feca2702..db07fe89d 100644 --- a/network-area-diagram/src/test/resources/subnetwork_highlight.svg +++ b/network-area-diagram/src/test/resources/subnetwork_highlight.svg @@ -1,5 +1,5 @@ - +