X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fadapter%2FRouteGraphUtils.java;h=9338e917221be3fcd06222e80ebf39f3288a7751;hb=e10fdeba47f1c3dcbfb2c19da636eae96449df6a;hp=3127b431c7ce7178c5e656d1a745b79e13539a86;hpb=c8cce62f9952ab3f6db451d2f22d969b4e777eaa;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java index 3127b431c..9338e9172 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java @@ -42,6 +42,7 @@ import org.simantics.diagram.connection.RouteTerminal; import org.simantics.diagram.connection.RouteTerminalPosition; import org.simantics.diagram.connection.rendering.BasicConnectionStyle; import org.simantics.diagram.connection.rendering.ConnectionStyle; +import org.simantics.diagram.connection.rendering.ExampleConnectionStyle; import org.simantics.diagram.connection.rendering.StyledRouteGraphRenderer; import org.simantics.diagram.connection.rendering.arrows.ArrowLineEndStyle; import org.simantics.diagram.connection.rendering.arrows.ILineEndStyle; @@ -109,12 +110,21 @@ public class RouteGraphUtils { RouteGraph rg = new RouteGraph(); // Default capacity should be enough for common cases. - Set links = new THashSet(); - Map nodeByData = new THashMap(); + Set links = new THashSet<>(); + Map 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 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); @@ -122,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)) { @@ -523,6 +533,8 @@ public class RouteGraphUtils { } } + private static final ConnectionStyle DEFAULT_CONNECTION_STYLE = new BasicConnectionStyle(Color.BLACK, Color.BLACK, 3, ExampleConnectionStyle.SOLID, ExampleConnectionStyle.SOLID, 8); + /** * @param graph * @param canvas @@ -537,7 +549,7 @@ public class RouteGraphUtils { connectionType = modelingRules.getConnectionType(graph, connection); if (connectionType == null) connectionType = graph.getPossibleObject(connection, STR.HasConnectionType); - return readConnectionStyleFromConnectionType(graph, connectionType); + return connectionType != null ? readConnectionStyleFromConnectionType(graph, connectionType) : DEFAULT_CONNECTION_STYLE; } protected static ConnectionStyle readConnectionStyleFromConnectionType(ReadGraph graph, Resource connectionType) throws DatabaseException {