From 578d71a4f85b2613b55878a5f5277e16e4a9798e Mon Sep 17 00:00:00 2001 From: Thomas ADAM Date: Thu, 6 Jul 2023 12:15:41 +0200 Subject: [PATCH] ZoneRawBuilder : horizontal case Signed-off-by: Thomas ADAM --- .../powsybl/sld/builders/RawGraphBuilder.java | 38 +- .../sld/builders/SubstationRawBuilder.java | 14 +- .../powsybl/sld/builders/ZoneRawBuilder.java | 25 + .../powsybl/sld/raw/TestCase12ZoneGraph.java | 308 ++++ .../resources/TestCase12ZoneGraphHRaw.svg | 1529 +++++++++++++++++ .../test/resources/TestCase13ZoneGraphH.svg | 6 +- .../test/resources/TestCase13ZoneGraphV.svg | 6 +- 7 files changed, 1907 insertions(+), 19 deletions(-) create mode 100644 single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/ZoneRawBuilder.java create mode 100644 single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase12ZoneGraph.java create mode 100644 single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12ZoneGraphHRaw.svg diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java index e5097b810..e4b142a1b 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java @@ -8,10 +8,7 @@ import com.powsybl.sld.model.graphs.*; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; /** * @author Geoffroy Jamgotchian @@ -22,6 +19,8 @@ public class RawGraphBuilder implements GraphBuilder { private final Map vlBuilders = new TreeMap<>(); private final Map ssBuilders = new TreeMap<>(); + private ZoneRawBuilder zBuilder; + public VoltageLevelRawBuilder createVoltageLevelBuilder(VoltageLevelInfos voltageLevelInfos, SubstationRawBuilder parentBuilder) { VoltageLevelRawBuilder vlBuilder = new VoltageLevelRawBuilder(voltageLevelInfos, parentBuilder, this::getVoltageLevelInfosFromId); if (parentBuilder != null) { @@ -36,7 +35,7 @@ public VoltageLevelRawBuilder createVoltageLevelBuilder(String vlId, double vlNo } public VoltageLevelRawBuilder createVoltageLevelBuilder(String vlId, double vlNominalV) { - return createVoltageLevelBuilder(new VoltageLevelInfos(vlId, vlId, vlNominalV), null); + return createVoltageLevelBuilder(vlId, vlNominalV, null); } public VoltageLevelInfos getVoltageLevelInfosFromId(String id) { @@ -46,12 +45,24 @@ public VoltageLevelInfos getVoltageLevelInfosFromId(String id) { return new VoltageLevelInfos("OTHER", "OTHER", 0); } - public SubstationRawBuilder createSubstationBuilder(String id) { - SubstationRawBuilder ssb = new SubstationRawBuilder(id); + public SubstationRawBuilder createSubstationBuilder(String id, ZoneRawBuilder parentBuilder) { + SubstationRawBuilder ssb = new SubstationRawBuilder(id, parentBuilder); + if (parentBuilder != null) { + parentBuilder.addSubstationBuilder(ssb); + } ssBuilders.put(id, ssb); return ssb; } + public SubstationRawBuilder createSubstationBuilder(String id) { + return createSubstationBuilder(id, null); + } + + public ZoneRawBuilder createZoneBuilder(List substationIds) { + zBuilder = new ZoneRawBuilder(substationIds); + return zBuilder; + } + @Override public VoltageLevelGraph buildVoltageLevelGraph(String id, Graph parentGraph) { return vlBuilders.get(id).getGraph(); @@ -62,15 +73,17 @@ public VoltageLevelGraph buildVoltageLevelGraph(String id) { return buildVoltageLevelGraph(id, null); } - // TODO: implement use of zoneGraph @Override - public SubstationGraph buildSubstationGraph(String id, ZoneGraph zoneGraph) { + public SubstationGraph buildSubstationGraph(String id, ZoneGraph parentGraph) { SubstationRawBuilder sGraphBuilder = ssBuilders.get(id); SubstationGraph ssGraph = sGraphBuilder.getGraph(); sGraphBuilder.voltageLevelBuilders.stream() .map(VoltageLevelRawBuilder::getGraph) .sorted(Comparator.comparingDouble(vlGraph -> -vlGraph.getVoltageLevelInfos().getNominalVoltage())) .forEach(ssGraph::addVoltageLevel); + if (parentGraph != null) { + parentGraph.addSubstation(ssGraph); + } return ssGraph; } @@ -79,8 +92,11 @@ public SubstationGraph buildSubstationGraph(String id) { return buildSubstationGraph(id, null); } - //TODO: buildZoneGraph + @Override public ZoneGraph buildZoneGraph(List substationIds) { - return null; + ZoneRawBuilder zGraphBuilder = zBuilder; + ZoneGraph zGraph = zGraphBuilder.getGraph(); + substationIds.forEach(id -> buildSubstationGraph(id, zGraph)); + return zGraph; } } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java index 6d70a0477..64a8287a4 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java @@ -17,14 +17,24 @@ public class SubstationRawBuilder { SubstationGraph substationGraph; List voltageLevelBuilders = new ArrayList<>(); - public SubstationRawBuilder(String id) { - substationGraph = SubstationGraph.create(id); + ZoneRawBuilder zBuilder; + + public SubstationRawBuilder(String id, ZoneRawBuilder parentBuilder) { + substationGraph = SubstationGraph.create(id, parentBuilder == null ? null : parentBuilder.getGraph()); } public SubstationGraph getGraph() { return substationGraph; } + public ZoneRawBuilder getSubstationBuilder() { + return zBuilder; + } + + public void setZoneRawBuilder(ZoneRawBuilder zoneBuilder) { + this.zBuilder = zoneBuilder; + } + public void addVlBuilder(VoltageLevelRawBuilder vlBuilder) { voltageLevelBuilders.add(vlBuilder); vlBuilder.setSubstationBuilder(this); diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/ZoneRawBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/ZoneRawBuilder.java new file mode 100644 index 000000000..7a1d7e571 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/ZoneRawBuilder.java @@ -0,0 +1,25 @@ +package com.powsybl.sld.builders; + +import com.powsybl.sld.model.graphs.ZoneGraph; + +import java.util.ArrayList; +import java.util.List; + +public class ZoneRawBuilder { + + ZoneGraph zoneGraph; + List substationRawBuilders = new ArrayList<>(); + + public ZoneRawBuilder(List ids) { + zoneGraph = ZoneGraph.create(ids); + } + + public ZoneGraph getGraph() { + return zoneGraph; + } + + public void addSubstationBuilder(SubstationRawBuilder ssBuilder) { + substationRawBuilders.add(ssBuilder); + ssBuilder.setZoneRawBuilder(this); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase12ZoneGraph.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase12ZoneGraph.java new file mode 100644 index 000000000..367d69f7a --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase12ZoneGraph.java @@ -0,0 +1,308 @@ +/** + * Copyright (c) 2020, 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/. + */ +package com.powsybl.sld.raw; + +import com.powsybl.sld.builders.SubstationRawBuilder; +import com.powsybl.sld.builders.VoltageLevelRawBuilder; +import com.powsybl.sld.builders.ZoneRawBuilder; +import com.powsybl.sld.layout.*; +import com.powsybl.sld.model.graphs.ZoneGraph; +import com.powsybl.sld.model.nodes.BusNode; +import com.powsybl.sld.model.nodes.FeederNode; +import com.powsybl.sld.model.nodes.SwitchNode; +import com.powsybl.sld.svg.styles.BasicStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static com.powsybl.sld.model.coordinate.Direction.BOTTOM; +import static com.powsybl.sld.model.coordinate.Direction.TOP; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/* + * @author Thomas Adam + */ +class TestCase12ZoneGraph extends AbstractTestCaseRaw { + + private static final String[] ZONE_ID = new String[]{"subst", "subst2"}; + + @BeforeEach + public void setUp() { + ZoneRawBuilder zb = rawGraphBuilder.createZoneBuilder(List.of(ZONE_ID)); + SubstationRawBuilder ssb1 = rawGraphBuilder.createSubstationBuilder("subst", zb); + VoltageLevelRawBuilder vlb1 = rawGraphBuilder.createVoltageLevelBuilder("vl1", 380, ssb1); + + BusNode bbs1 = vlb1.createBusBarSection("bbs1", 1, 1); + BusNode bbs2 = vlb1.createBusBarSection("bbs2", 1, 2); + BusNode bbs3 = vlb1.createBusBarSection("bbs3", 2, 1); + BusNode bbs4 = vlb1.createBusBarSection("bbs4", 2, 2); + + SwitchNode dsect11 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dsect11", false, false); + SwitchNode dtrct11 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "dtrct11", false, false); + SwitchNode dsect12 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dsect12", false, false); + vlb1.connectNode(bbs1, dsect11); + vlb1.connectNode(dsect11, dtrct11); + vlb1.connectNode(dtrct11, dsect12); + vlb1.connectNode(dsect12, bbs2); + + SwitchNode dsect21 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dsect21", false, false); + SwitchNode dtrct21 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "dtrct21", false, false); + SwitchNode dsect22 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dsect22", false, false); + vlb1.connectNode(bbs3, dsect21); + vlb1.connectNode(dsect21, dtrct21); + vlb1.connectNode(dtrct21, dsect22); + vlb1.connectNode(dsect22, bbs4); + + FeederNode load1 = vlb1.createLoad("load1", 0, TOP); + SwitchNode dload1 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dload1", false, false); + SwitchNode bload1 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bload1", false, false); + vlb1.connectNode(bbs1, dload1); + vlb1.connectNode(dload1, bload1); + vlb1.connectNode(load1, bload1); + + FeederNode gen1 = vlb1.createGenerator("gen1", 2, BOTTOM); + SwitchNode dgen1 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dgen1", false, false); + SwitchNode bgen1 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bgen1", false, false); + vlb1.connectNode(bbs3, dgen1); + vlb1.connectNode(dgen1, bgen1); + vlb1.connectNode(gen1, bgen1); + + FeederNode load2 = vlb1.createLoad("load2", 8, TOP); + SwitchNode dload2 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dload2", false, false); + SwitchNode bload2 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bload2", false, false); + vlb1.connectNode(bbs2, dload2); + vlb1.connectNode(dload2, bload2); + vlb1.connectNode(load2, bload2); + + FeederNode gen2 = vlb1.createGenerator("gen2", 12, BOTTOM); + SwitchNode dgen2 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dgen2", false, false); + SwitchNode bgen2 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bgen2", false, false); + vlb1.connectNode(bbs4, dgen2); + vlb1.connectNode(dgen2, bgen2); + vlb1.connectNode(gen2, bgen2); + + VoltageLevelRawBuilder vlb2 = rawGraphBuilder.createVoltageLevelBuilder("vl2", 225, ssb1); + + BusNode bbs5 = vlb2.createBusBarSection("bbs5", 1, 1); + BusNode bbs6 = vlb2.createBusBarSection("bbs6", 2, 1); + + SwitchNode dscpl1 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dscpl1", false, false); + SwitchNode ddcpl1 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "ddcpl1", false, false); + SwitchNode dscpl2 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dscpl2", false, false); + vlb2.connectNode(bbs5, dscpl1); + vlb2.connectNode(dscpl1, ddcpl1); + vlb2.connectNode(ddcpl1, dscpl2); + vlb2.connectNode(dscpl2, bbs6); + + FeederNode load3 = vlb2.createLoad("load3", 0, TOP); + SwitchNode dload3 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dload3", false, false); + SwitchNode bload3 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bload3", false, false); + vlb2.connectNode(bbs5, dload3); + vlb2.connectNode(load3, bload3); + vlb2.connectNode(bload3, dload3); + + FeederNode gen4 = vlb2.createGenerator("gen4", 2, BOTTOM); + SwitchNode dgen4 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dgen4", false, false); + SwitchNode bgen4 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bgen4", false, false); + vlb2.connectNode(bbs6, dgen4); + vlb2.connectNode(gen4, bgen4); + vlb2.connectNode(bgen4, dgen4); + + // third voltage level + VoltageLevelRawBuilder vlb3 = rawGraphBuilder.createVoltageLevelBuilder("vl3", 225, ssb1); + + BusNode bbs7 = vlb3.createBusBarSection("bbs7", 1, 1); + + FeederNode load4 = vlb3.createLoad("load4", 0, TOP); + SwitchNode dload4 = vlb3.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dload4", false, false); + SwitchNode bload4 = vlb3.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bload4", false, false); + vlb3.connectNode(bbs7, dload4); + vlb3.connectNode(bload4, load4); + vlb3.connectNode(bload4, dload4); + + /* + // two windings transformers between voltage levels + // + */ + + Map feeder2WTs1 = ssb1.createFeeder2WT("trf1", vlb1, vlb2, + 1, 1, TOP, TOP); + SwitchNode dtrf11 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf11", false, false); + SwitchNode btrf11 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf11", false, false); + vlb1.connectNode(bbs1, dtrf11); + vlb1.connectNode(dtrf11, btrf11); + vlb1.connectNode(btrf11, feeder2WTs1.get(vlb1)); + + SwitchNode dtrf21 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf21", false, false); + SwitchNode btrf21 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf21", false, false); + vlb2.connectNode(bbs5, dtrf21); + vlb2.connectNode(dtrf21, btrf21); + vlb2.connectNode(btrf21, feeder2WTs1.get(vlb2)); + + Map feeder2WTs2 = ssb1.createFeeder2WT("trf2", vlb1, vlb2, + 11, 7, TOP, BOTTOM); + SwitchNode dtrf12 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf12", false, false); + SwitchNode btrf12 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf12", false, false); + vlb1.connectNode(bbs2, dtrf12); + vlb1.connectNode(dtrf12, btrf12); + vlb1.connectNode(btrf12, feeder2WTs2.get(vlb1)); + + SwitchNode dtrf22 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf22", false, false); + SwitchNode btrf22 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf22", false, false); + vlb2.connectNode(bbs6, dtrf22); + vlb2.connectNode(dtrf22, btrf22); + vlb2.connectNode(btrf22, feeder2WTs2.get(vlb2)); + + Map feeder2WTs3 = ssb1.createFeeder2WT("trf3", vlb1, vlb2, + 3, 8, BOTTOM, BOTTOM); + + SwitchNode dtrf13 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf13", false, false); + SwitchNode btrf13 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf13", false, false); + vlb1.connectNode(bbs3, dtrf13); + vlb1.connectNode(dtrf13, btrf13); + vlb1.connectNode(btrf13, feeder2WTs3.get(vlb1)); + + SwitchNode dtrf23 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf23", false, false); + SwitchNode btrf23 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf23", false, false); + vlb2.connectNode(bbs6, dtrf23); + vlb2.connectNode(dtrf23, btrf23); + vlb2.connectNode(btrf23, feeder2WTs3.get(vlb2)); + + Map feeder2WTs4 = ssb1.createFeeder2WT("trf4", vlb1, vlb2, + 10, 3, BOTTOM, TOP); + + SwitchNode dtrf14 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf14", false, false); + SwitchNode btrf14 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf14", false, false); + vlb1.connectNode(bbs4, dtrf14); + vlb1.connectNode(dtrf14, btrf14); + vlb1.connectNode(btrf14, feeder2WTs4.get(vlb1)); + + SwitchNode dtrf24 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf24", false, false); + SwitchNode btrf24 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf24", false, false); + vlb2.connectNode(bbs5, dtrf24); + vlb2.connectNode(dtrf24, btrf24); + vlb2.connectNode(btrf24, feeder2WTs4.get(vlb2)); + + Map feeder2WTs5 = ssb1.createFeeder2WT("trf5", vlb1, vlb3, + 4, 1, TOP, BOTTOM); + + SwitchNode dtrf15 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf15", false, false); + SwitchNode btrf15 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf15", false, false); + vlb1.connectNode(bbs1, dtrf15); + vlb1.connectNode(dtrf15, btrf15); + vlb1.connectNode(btrf15, feeder2WTs5.get(vlb1)); + + SwitchNode dtrf25 = vlb3.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf25", false, false); + SwitchNode btrf25 = vlb3.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf25", false, false); + vlb3.connectNode(bbs7, dtrf25); + vlb3.connectNode(dtrf25, btrf25); + vlb3.connectNode(btrf25, feeder2WTs5.get(vlb3)); + /* + // three windings transformers between voltage levels + // + */ + + Map feeder3WTs6 = ssb1.createFeeder3WT("trf6", vlb1, vlb2, vlb3, + 5, 5, 2, TOP, TOP, TOP); + + SwitchNode dtrf16 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf16", false, false); + SwitchNode btrf16 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf16", false, false); + vlb1.connectNode(bbs1, dtrf16); + vlb1.connectNode(dtrf16, btrf16); + vlb1.connectNode(btrf16, feeder3WTs6.get(vlb1)); + + SwitchNode dtrf26 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf26", false, false); + SwitchNode btrf26 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf26", false, false); + vlb2.connectNode(bbs6, dtrf26); + vlb2.connectNode(dtrf26, btrf26); + vlb2.connectNode(btrf26, feeder3WTs6.get(vlb2)); + + SwitchNode dtrf36 = vlb3.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf36", false, false); + SwitchNode btrf36 = vlb3.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf36", false, false); + vlb3.connectNode(bbs7, dtrf36); + vlb3.connectNode(dtrf36, btrf36); + vlb3.connectNode(btrf36, feeder3WTs6.get(vlb3)); + + Map feeder3WTs7 = ssb1.createFeeder3WT("trf7", vlb1, vlb2, vlb3, + 6, 4, 3, BOTTOM, TOP, BOTTOM); + + SwitchNode dtrf17 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf17", false, false); + SwitchNode btrf17 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf17", false, false); + vlb1.connectNode(bbs3, dtrf17); + vlb1.connectNode(dtrf17, btrf17); + vlb1.connectNode(btrf17, feeder3WTs7.get(vlb1)); + + SwitchNode dtrf27 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf27", false, false); + SwitchNode btrf27 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf27", false, false); + vlb2.connectNode(bbs5, dtrf27); + vlb2.connectNode(dtrf27, btrf27); + vlb2.connectNode(btrf27, feeder3WTs7.get(vlb2)); + + SwitchNode dtrf37 = vlb3.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf37", false, false); + SwitchNode btrf37 = vlb3.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf37", false, false); + vlb3.connectNode(bbs7, dtrf37); + vlb3.connectNode(dtrf37, btrf37); + vlb3.connectNode(btrf37, feeder3WTs7.get(vlb3)); + + Map feeder3WTs8 = ssb1.createFeeder3WT("trf8", vlb1, vlb2, vlb3, + 9, 6, 4, TOP, BOTTOM, TOP); + + SwitchNode dtrf18 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf18", false, false); + SwitchNode btrf18 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf18", false, false); + vlb1.connectNode(bbs2, dtrf18); + vlb1.connectNode(dtrf18, btrf18); + vlb1.connectNode(btrf18, feeder3WTs8.get(vlb1)); + + SwitchNode dtrf28 = vlb2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf28", false, false); + SwitchNode btrf28 = vlb2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf28", false, false); + vlb2.connectNode(bbs6, dtrf28); + vlb2.connectNode(dtrf28, btrf28); + vlb2.connectNode(btrf28, feeder3WTs8.get(vlb2)); + + SwitchNode dtrf38 = vlb3.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dtrf38", false, false); + SwitchNode btrf38 = vlb3.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "btrf38", false, false); + vlb3.connectNode(bbs7, dtrf38); + vlb3.connectNode(dtrf38, btrf38); + vlb3.connectNode(btrf38, feeder3WTs8.get(vlb3)); + /* + // Creation of another substation, another voltageLevel and a line between the two substations + // + */ + + SubstationRawBuilder ssb2 = rawGraphBuilder.createSubstationBuilder("subst2", zb); + VoltageLevelRawBuilder vlsubst2 = rawGraphBuilder.createVoltageLevelBuilder("vlSubst2", 380, ssb2); + + BusNode bbs12 = vlsubst2.createBusBarSection("bbs1_2", 1, 1); + + SwitchNode dline112 = vlb1.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dline11_2", false, false); + SwitchNode bline112 = vlb1.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bline11_2", false, false); + + SwitchNode dline212 = vlsubst2.createSwitchNode(SwitchNode.SwitchKind.DISCONNECTOR, "dline21_2", false, false); + SwitchNode bline212 = vlsubst2.createSwitchNode(SwitchNode.SwitchKind.BREAKER, "bline21_2", false, false); + Map line1 = + ssb2.createLine("line1", vlb1, vlsubst2, 7, 1, TOP, TOP); + vlb1.connectNode(bbs1, dline112); + vlb1.connectNode(dline112, bline112); + vlb1.connectNode(bline112, line1.get(vlb1)); + vlsubst2.connectNode(bbs12, dline212); + vlsubst2.connectNode(dline212, bline212); + vlsubst2.connectNode(bline212, line1.get(vlsubst2)); + } + + @Test + void testH() { + ZoneGraph g = rawGraphBuilder.buildZoneGraph(List.of(ZONE_ID)); + + // Run horizontal zone layout + new HorizontalZoneLayoutFactory().create(g, new HorizontalSubstationLayoutFactory(), new PositionVoltageLevelLayoutFactory()).run(layoutParameters); + + assertEquals(toString("/TestCase12ZoneGraphHRaw.svg"), + toSVG(g, "/TestCase12ZoneGraphHRaw.svg", getRawLabelProvider(), new BasicStyleProvider())); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12ZoneGraphHRaw.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12ZoneGraphHRaw.svg new file mode 100644 index 000000000..ccb6e4062 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12ZoneGraphHRaw.svg @@ -0,0 +1,1529 @@ + + + + + + + vl1 + + + + bbs1 + + + + bbs2 + + + + bbs3 + + + + bbs4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + load1 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf1 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf5 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf61 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + line1 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + load2 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf2 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf81 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + gen1 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf3 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf71 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + gen2 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf4 + + + + vl2 + + + + bbs5 + + + + bbs6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + load3 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf1 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf4 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf72 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + gen4 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf2 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf3 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf62 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf82 + + + + vl3 + + + + bbs7 + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + + + + load4 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf5 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf63 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf73 + + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + trf83 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vlSubst2 + + + + bbs1_2 + + + + + + + + + + + + + + + + + + tata + + + + + + tutu + + + + + + + + + + + + + + + + + + line1 + + + + + + + diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphH.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphH.svg index cdaa171d0..6364bab55 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphH.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphH.svg @@ -88,9 +88,9 @@ .sld-vl0to30-9 {--sld-vl-color: #869D22} /* ----------------------------------------------------------------------- */ /* File : highlightLineStates.css ---------------------------------------- */ -.sld-feeder-disconnected {stroke: black} -.sld-feeder-connected-disconnected {stroke-dasharray: 3,3} -.sld-feeder-disconnected-connected {stroke: black; stroke-dasharray: 3,3} +.sld-wire.sld-feeder-disconnected {stroke: black} +.sld-wire.sld-feeder-connected-disconnected {stroke-dasharray: 3,3} +.sld-wire.sld-feeder-disconnected-connected {stroke: black; stroke-dasharray: 3,3} /* ----------------------------------------------------------------------- */ /* File : components.css ------------------------------------------------- */ /* Stroke black */ diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphV.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphV.svg index 897e5e966..f2dff4b40 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphV.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphV.svg @@ -88,9 +88,9 @@ .sld-vl0to30-9 {--sld-vl-color: #869D22} /* ----------------------------------------------------------------------- */ /* File : highlightLineStates.css ---------------------------------------- */ -.sld-feeder-disconnected {stroke: black} -.sld-feeder-connected-disconnected {stroke-dasharray: 3,3} -.sld-feeder-disconnected-connected {stroke: black; stroke-dasharray: 3,3} +.sld-wire.sld-feeder-disconnected {stroke: black} +.sld-wire.sld-feeder-connected-disconnected {stroke-dasharray: 3,3} +.sld-wire.sld-feeder-disconnected-connected {stroke: black; stroke-dasharray: 3,3} /* ----------------------------------------------------------------------- */ /* File : components.css ------------------------------------------------- */ /* Stroke black */