Skip to content

Commit 132098b

Browse files
authored
Add scale factor in layout parameters (#776)
Signed-off-by: Nicolas Rol <nicolas.rol@rte-france.com>
1 parent d6511cf commit 132098b

14 files changed

Lines changed: 1091 additions & 21 deletions

network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayout.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ protected void nodesLayout(Graph graph, LayoutParameters layoutParameters) {
8686

8787
LayoutContext<Node, Edge> layoutContext = new LayoutContext<>(jgraphtGraph);
8888

89-
setInitialPositions(layoutContext, graph);
89+
double scaleFactor = SCALE * layoutParameters.getScaleFactor();
90+
setInitialPositions(layoutContext, graph, scaleFactor);
9091
Set<Node> fixedNodes = getNodesWithFixedPosition().stream()
9192
.map(graph::getNode)
9293
.flatMap(Optional::stream)
@@ -98,10 +99,10 @@ protected void nodesLayout(Graph graph, LayoutParameters layoutParameters) {
9899
jgraphtGraph.vertexSet().forEach(node -> {
99100
Vector2D p = layoutContext.getStablePosition(node);
100101
if (node instanceof TextNode texNode) {
101-
texNode.setPosition(SCALE * p.getX(), SCALE * p.getY() - layoutParameters.getTextNodeEdgeConnectionYShift());
102-
texNode.setEdgeConnection(new Point(SCALE * p.getX(), SCALE * p.getY()));
102+
texNode.setPosition(scaleFactor * p.getX(), scaleFactor * p.getY() - layoutParameters.getTextNodeEdgeConnectionYShift());
103+
texNode.setEdgeConnection(new Point(scaleFactor * p.getX(), scaleFactor * p.getY()));
103104
} else {
104-
node.setPosition(SCALE * p.getX(), SCALE * p.getY());
105+
node.setPosition(scaleFactor * p.getX(), scaleFactor * p.getY());
105106
}
106107
});
107108

@@ -110,15 +111,15 @@ protected void nodesLayout(Graph graph, LayoutParameters layoutParameters) {
110111
}
111112
}
112113

113-
private void setInitialPositions(LayoutContext<Node, Edge> layoutContext, Graph graph) {
114+
private void setInitialPositions(LayoutContext<Node, Edge> layoutContext, Graph graph, double scaleFactor) {
114115
Map<Node, com.powsybl.diagram.util.layout.geometry.Point> initialPoints = getInitialNodePositions().entrySet().stream()
115116
// Only accept positions for nodes in the graph
116117
.filter(nodePosition -> graph.getNode(nodePosition.getKey()).isPresent())
117118
.collect(Collectors.toMap(
118119
nodePosition -> graph.getNode(nodePosition.getKey()).orElseThrow(),
119120
nodePosition -> new com.powsybl.diagram.util.layout.geometry.Point(
120-
nodePosition.getValue().x() / SCALE,
121-
nodePosition.getValue().y() / SCALE)
121+
nodePosition.getValue().x() / scaleFactor,
122+
nodePosition.getValue().y() / scaleFactor)
122123
));
123124
layoutContext.setInitialPoints(initialPoints);
124125
}

network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutParameters.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class LayoutParameters {
2020
private double timeoutSeconds = 15;
2121
private double textNodeEdgeConnectionYShift = 25;
2222
private boolean injectionsAdded = false;
23+
private double scaleFactor = 1;
2324

2425
public LayoutParameters() {
2526
}
@@ -31,6 +32,7 @@ public LayoutParameters(LayoutParameters other) {
3132
this.timeoutSeconds = other.timeoutSeconds;
3233
this.textNodeEdgeConnectionYShift = other.textNodeEdgeConnectionYShift;
3334
this.injectionsAdded = other.injectionsAdded;
35+
this.scaleFactor = other.scaleFactor;
3436
}
3537

3638
public boolean isTextNodesForceLayout() {
@@ -86,4 +88,13 @@ public LayoutParameters setInjectionsAdded(boolean injectionsAdded) {
8688
this.injectionsAdded = injectionsAdded;
8789
return this;
8890
}
91+
92+
public double getScaleFactor() {
93+
return scaleFactor;
94+
}
95+
96+
public LayoutParameters setScaleFactor(double scaleFactor) {
97+
this.scaleFactor = scaleFactor;
98+
return this;
99+
}
89100
}

network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,19 @@
2222
*/
2323
class ForceLayoutTest extends AbstractTest {
2424

25+
private final LayoutParameters layoutParameters = new LayoutParameters().setTextNodesForceLayout(false);
26+
private DefaultLabelProvider.EdgeInfoEnum infoSideExternal = DefaultLabelProvider.EdgeInfoEnum.ACTIVE_POWER;
27+
private DefaultLabelProvider.EdgeInfoEnum infoMiddleSide1 = DefaultLabelProvider.EdgeInfoEnum.EMPTY;
28+
private DefaultLabelProvider.EdgeInfoEnum infoMiddleSide2 = DefaultLabelProvider.EdgeInfoEnum.EMPTY;
29+
private DefaultLabelProvider.EdgeInfoEnum infoSideInternal = DefaultLabelProvider.EdgeInfoEnum.EMPTY;
30+
private final SvgParameters svgParameters = new SvgParameters()
31+
.setInsertNameDesc(false)
32+
.setSvgWidthAndHeightAdded(false);
33+
2534
@BeforeEach
2635
void setup() {
27-
setLayoutParameters(new LayoutParameters().setTextNodesForceLayout(false));
28-
setSvgParameters(new SvgParameters()
29-
.setInsertNameDesc(false)
30-
.setSvgWidthAndHeightAdded(false));
36+
setLayoutParameters(layoutParameters);
37+
setSvgParameters(svgParameters);
3138
}
3239

3340
@Override
@@ -37,11 +44,28 @@ protected StyleProvider getStyleProvider(Network network) {
3744

3845
@Override
3946
protected LabelProvider getLabelProvider(Network network) {
40-
return new DefaultLabelProvider(network, getSvgParameters());
47+
return new DefaultLabelProvider.Builder()
48+
.setInfoSideExternal(infoSideExternal)
49+
.setInfoSideInternal(infoSideInternal)
50+
.setInfoMiddleSide1(infoMiddleSide1)
51+
.setInfoMiddleSide2(infoMiddleSide2)
52+
.build(network, getSvgParameters());
4153
}
4254

4355
@Test
4456
void testDiamond() {
4557
assertSvgEquals("/diamond-network.svg", LayoutNetworkFactory.createDiamond());
4658
}
59+
60+
@Test
61+
void testScale() {
62+
infoSideExternal = DefaultLabelProvider.EdgeInfoEnum.NAME;
63+
infoSideInternal = DefaultLabelProvider.EdgeInfoEnum.NAME;
64+
infoMiddleSide1 = DefaultLabelProvider.EdgeInfoEnum.NAME;
65+
infoMiddleSide2 = DefaultLabelProvider.EdgeInfoEnum.NAME;
66+
assertSvgEquals("/diamond-network-labels-scale100.svg", LayoutNetworkFactory.createDiamond());
67+
layoutParameters.setScaleFactor(2);
68+
svgParameters.setArrowShift(60);
69+
assertSvgEquals("/diamond-network-labels-scale200.svg", LayoutNetworkFactory.createDiamond());
70+
}
4771
}

network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ void test() {
2222
.setTextNodeFixedShift(50., 50.)
2323
.setMaxSteps(20)
2424
.setTimeoutSeconds(2)
25-
.setTextNodeEdgeConnectionYShift(30);
25+
.setTextNodeEdgeConnectionYShift(30)
26+
.setScaleFactor(100);
2627

2728
LayoutParameters layoutParameters1 = new LayoutParameters(layoutParameters0);
2829

@@ -32,5 +33,6 @@ void test() {
3233
assertEquals(layoutParameters0.getMaxSteps(), layoutParameters1.getMaxSteps());
3334
assertEquals(layoutParameters0.getTimeoutSeconds(), layoutParameters1.getTimeoutSeconds());
3435
assertEquals(layoutParameters0.getTextNodeEdgeConnectionYShift(), layoutParameters1.getTextNodeEdgeConnectionYShift(), 0);
36+
assertEquals(layoutParameters0.getScaleFactor(), layoutParameters1.getScaleFactor(), 0);
3537
}
3638
}

network-area-diagram/src/test/resources/3wt_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : false
11+
"injectionsAdded" : false,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : false
11+
"injectionsAdded" : false,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

network-area-diagram/src/test/resources/IEEE_14_bus_injections_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : true
11+
"injectionsAdded" : true,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter2_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : false
11+
"injectionsAdded" : false,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter5_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : false
11+
"injectionsAdded" : false,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

network-area-diagram/src/test/resources/IEEE_14_bus_voltage_nofilter_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"maxSteps" : 1000,
99
"timeoutSeconds" : 15.0,
1010
"textNodeEdgeConnectionYShift" : 25.0,
11-
"injectionsAdded" : false
11+
"injectionsAdded" : false,
12+
"scaleFactor" : 1.0
1213
},
1314
"svgParameters" : {
1415
"diagramPadding" : {

0 commit comments

Comments
 (0)