]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java
Moved RouteGraphConnectionClass to org.simantics.g2d.elementclass
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / RouteGraphUtils.java
index 054db497d2cf7a46f9d8b425cf84fa01eebdd7a0..d6a59a0cbc26a9284e0e656c2062c3b6fae4a2a1 100644 (file)
@@ -35,7 +35,6 @@ import org.simantics.db.common.utils.NameUtils;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.diagram.connection.ConnectionVisuals;
 import org.simantics.diagram.connection.RouteGraph;
-import org.simantics.diagram.connection.RouteGraphConnectionClass;
 import org.simantics.diagram.connection.RouteLine;
 import org.simantics.diagram.connection.RouteNode;
 import org.simantics.diagram.connection.RouteTerminal;
@@ -66,6 +65,7 @@ import org.simantics.g2d.element.ElementUtils;
 import org.simantics.g2d.element.IElement;
 import org.simantics.g2d.element.handler.EdgeVisuals.EdgeEnd;
 import org.simantics.g2d.element.handler.TerminalLayout;
+import org.simantics.g2d.elementclass.RouteGraphConnectionClass;
 import org.simantics.g2d.elementclass.FlagClass.Type;
 import org.simantics.layer0.Layer0;
 import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphChangeEvent;
@@ -110,12 +110,21 @@ public class RouteGraphUtils {
         RouteGraph rg = new RouteGraph();
 
         // Default capacity should be enough for common cases.
-        Set<EdgeResource> links = new THashSet<EdgeResource>();
-        Map<Object, RouteNode> nodeByData = new THashMap<Object, RouteNode>();
+        Set<EdgeResource> links = new THashSet<>();
+        Map<Object, RouteNode> nodeByData = new THashMap<>();
 
         // Load all route graph interior RouteNodes: route lines and points
         for (Resource interiorNode : graph.getObjects(connection, DIA.HasInteriorRouteNode)) {
             if (graph.isInstanceOf(interiorNode, DIA.RouteLine)) {
+                Collection<Resource> areConnected = graph.getObjects(interiorNode, DIA.AreConnected);
+                if (areConnected.size() < 2) {
+                    // Degenerated route line encountered, most likely due to a bug somewhere else.
+                    // Ignoring them because adding them to the RouteGraph structure would cause
+                    // problems during rendering.
+                    LOGGER.warn("Stray RouteLine found: " + NameUtils.getSafeName(graph, interiorNode));
+                    continue;
+                }
+
                 Boolean isHorizontal = graph.getRelatedValue(interiorNode, DIA.IsHorizontal, Bindings.BOOLEAN);
                 Double position = graph.getRelatedValue(interiorNode, DIA.HasPosition, Bindings.DOUBLE);
                 RouteLine line = rg.addLine(isHorizontal, position);
@@ -123,7 +132,7 @@ public class RouteGraphUtils {
 
                 nodeByData.put( interiorNode, line );
 
-                for (Resource connectedTo : graph.getObjects(interiorNode, DIA.AreConnected)) {
+                for (Resource connectedTo : areConnected) {
                     links.add( new EdgeResource(interiorNode, connectedTo) );
                 }
             } else if (graph.isInstanceOf(interiorNode, DIA.RoutePoint)) {
@@ -293,7 +302,7 @@ public class RouteGraphUtils {
 
             final ResourceTerminal rt = new ResourceTerminal(terminal);
             final TerminalLayout tl = te.getElementClass().getSingleItem(TerminalLayout.class);
-            AffineTransform terminalPos = tl.getTerminalPosition(element, rt);
+            AffineTransform terminalPos = tl.getTerminalPosition(te, rt);
 
             if (terminalPos != null) {
                 terminalTr.concatenate(terminalPos);
@@ -569,7 +578,7 @@ public class RouteGraphUtils {
 
         // Fixed style settings
         Color branchPointColor = Color.BLACK;
-        double branchPointRadius = 0.5;
+        double branchPointRadius = cv != null && cv.branchPointRadius != null ? cv.branchPointRadius : 0.5;
         double degenerateLineLength = 0.8;
         
         Color lineColor = cv != null ? cv.toColor() : null;