From 7db89c5f7150e3f209ac54dfc963af4f094edbfe Mon Sep 17 00:00:00 2001 From: Max Kissgen Date: Wed, 5 Oct 2022 10:06:18 +0200 Subject: [PATCH] Fix Some edges not being displayed in the SVG --- .../visualOutput/SvgVisualOutputAdapter.java | 1 - .../services/ocd/viewer/LayoutHandler.java | 14 ++++------- .../layouters/OrganicGraphLayouter.java | 24 +++---------------- 3 files changed, 7 insertions(+), 32 deletions(-) diff --git a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/adapters/visualOutput/SvgVisualOutputAdapter.java b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/adapters/visualOutput/SvgVisualOutputAdapter.java index 5cdef428..8c87509a 100644 --- a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/adapters/visualOutput/SvgVisualOutputAdapter.java +++ b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/adapters/visualOutput/SvgVisualOutputAdapter.java @@ -9,7 +9,6 @@ import i5.las2peer.services.ocd.graphs.CustomGraph; import org.graphstream.stream.file.FileSinkSVG; -//TODO: Check whether graphstream output acts similarly enough to yFiles output public class SvgVisualOutputAdapter extends AbstractVisualOutputAdapter { @Override diff --git a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/LayoutHandler.java b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/LayoutHandler.java index 763800d6..ce2c96e9 100644 --- a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/LayoutHandler.java +++ b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/LayoutHandler.java @@ -28,8 +28,6 @@ * @author Sebastian * */ -//TODO: Set that edges are always rendered before nodes (previously done in viewer defaults, now those methods arent needed except this one part) -//TODO: text-mode: normal to print labels //TODO: Currently we need to work solely with the ui.style attribute of elements since the SVG visualization of graphstream refuses to look at other attributes, we should change to use single attributes when it it is possible public class LayoutHandler { private static final Color CENTRALITY_COLOR = Color.BLUE; @@ -81,7 +79,8 @@ private void setLayoutDefaults(CustomGraph graph, double minNodeSize, double max */ double minDegree = graph.getMinWeightedInDegree(); double maxDegree = graph.getMaxWeightedInDegree(); - double scalingFactor = (maxNodeSize - minNodeSize) / (maxDegree - minDegree); + double degreeDifference = (maxDegree == minDegree) ? 1.0 : (maxDegree - minDegree); + double scalingFactor = (maxNodeSize - minNodeSize) / degreeDifference; while(nodesIt.hasNext()) { node = nodesIt.next(); double curNodeSize = minNodeSize + (graph.getWeightedInDegree(node) - minDegree) * scalingFactor; @@ -216,18 +215,13 @@ private void setCentralityLayoutDefaults(CustomGraph graph) { * Sets the view default attributes, such as the rendering order. * @param graph the graph view */ - //TODO: Check if yFiles viewer defaults are mimicked closely enough and add extra styling if not. private void setViewDefaults(CustomGraph graph) { -// DefaultGraph2DRenderer renderer = new DefaultGraph2DRenderer(); -// graph.setGraph2DRenderer(renderer); -// renderer.setDrawEdgesFirst(true); -// graph.fitContent(); graph.setAttribute("ui.stylesheet", "node {" + - " z-index: 1;" + + " z-index: 2;" + "}" + "edge {" + - " z-index: 0;" + + " z-index: 1;" + "}"); } diff --git a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/layouters/OrganicGraphLayouter.java b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/layouters/OrganicGraphLayouter.java index 3073a940..78211383 100644 --- a/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/layouters/OrganicGraphLayouter.java +++ b/rest_ocd_services/src/main/java/i5/las2peer/services/ocd/viewer/layouters/OrganicGraphLayouter.java @@ -21,11 +21,6 @@ public class OrganicGraphLayouter implements GraphLayouter { @Override public void doLayout(CustomGraph graph) { -// SmartOrganicLayouter layouter = new SmartOrganicLayouter(); -// layouter.setMinimalNodeDistance(45); -// layouter.setConsiderNodeLabelsEnabled(true); -// layouter.setNodeOverlapsAllowed(false); -// layouter.setCompactness(0.2); graph.setAttribute("ui.stylesheet", "graph {" + " padding: 2;" + @@ -47,38 +42,25 @@ public void doLayout(CustomGraph graph) { Edge edge = edgesIt.next(); edge.setAttribute("ui.style", edge.getAttribute("ui.style") + "fill-color: black; shape: line; size: 1.5;"); } -// ParallelEdgeLayouter parallelLayouter = new ParallelEdgeLayouter(layouter); -// parallelLayouter.setDirectedModeEnabled(true); -// parallelLayouter.setLineDistance(10); -// parallelLayouter.setLeadingEdgeAdjustmentEnabled(false); -// parallelLayouter.doLayout(graph); } else { Iterator edgesIt = graph.edges().iterator(); while(edgesIt.hasNext()) { Edge edge = edgesIt.next(); edge.setAttribute("ui.style", edge.getAttribute("ui.style") + "fill-color: black; shape: line; size: 1.5;"); } -// OrganicEdgeRouter router = new OrganicEdgeRouter(); -// router.setCoreLayouter(layouter); -// router.setEdgeNodeOverlapAllowed(false); -// router.setMinimalDistance(5); -// router.setRoutingAll(true); -// router.setUsingBends(false); -// router.doLayout(graph); } - //graph.layout.addAttributeSink(graph); graph.layout.shake(); graph.layout.compute(); - while (graph.layout.getStabilization() < 1.0) { + while (graph.layout.getStabilization() < 0.95) { graph.layout.compute(); } - //TODO:REMOVE + //For Debugging //System.setProperty("org.graphstream.ui", "swing"); //graph.display(); //while(true); - //TODO:REMOVE + //For Debugging } };