diff --git a/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java index 15a9fdfac..c212110e2 100644 --- a/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java +++ b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java @@ -56,9 +56,9 @@ public class ForceLayout { /** Deterministic randomness */ private final Random random = new Random(3L); - private static final int DEFAULT_MAX_STEPS = 1000; + private static final int DEFAULT_MAX_STEPS = 400; private static final double DEFAULT_MIN_ENERGY_THRESHOLD = 0.001; - private static final double DEFAULT_DELTA_TIME = 1; + private static final double DEFAULT_DELTA_TIME = 0.1; private static final double DEFAULT_REPULSION = 800.0; private static final double DEFAULT_FRICTION = 500; private static final double DEFAULT_MAX_SPEED = 100; @@ -146,14 +146,12 @@ public ForceLayout setFixedNodes(Set fixedNodes) { } private void initializePoints() { + int nbUnknownPositions = graph.vertexSet().size() - initialPoints.size(); + + // instead of generating initial points in the [0,1] interval apply a scale depending on the number of unknown positions + double scale = Math.sqrt(nbUnknownPositions) * 5; for (V vertex : graph.vertexSet()) { - Point p; - if (initialPoints.containsKey(vertex)) { - p = initialPoints.get(vertex); - } else { - p = new Point(random.nextDouble(), random.nextDouble()); - } - points.put(vertex, p); + points.put(vertex, initialPoints.getOrDefault(vertex, new Point(scale * random.nextDouble(), scale * random.nextDouble()))); } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java index 578038488..38579dc8e 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java @@ -97,7 +97,7 @@ private void setEdgeVisibility(Node node, BranchEdge branchEdge, BranchEdge.Side } private void computeSize(Graph graph) { - double[] dims = new double[4]; + double[] dims = new double[] {Double.MAX_VALUE, -Double.MAX_VALUE, Double.MAX_VALUE, -Double.MAX_VALUE}; Stream.concat(graph.getTextNodesStream(), graph.getNodesStream()).forEach(node -> { dims[0] = Math.min(dims[0], node.getX()); dims[1] = Math.max(dims[1], node.getX()); diff --git a/network-area-diagram/src/test/resources/3wt.svg b/network-area-diagram/src/test/resources/3wt.svg index 0b06af3ac..18ade1abf 100644 --- a/network-area-diagram/src/test/resources/3wt.svg +++ b/network-area-diagram/src/test/resources/3wt.svg @@ -1,5 +1,5 @@ - +