X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fadapter%2FRouteGraphUtils.java;h=3ff98cd0b1cc115d33687764e650282c707623bb;hp=d6a59a0cbc26a9284e0e656c2062c3b6fae4a2a1;hb=e3f46ffc9d4a6930adc83ebb8e6730f19708cc94;hpb=08c2bc8c90c7342582fd792bbeeaa16d6c18f9b1 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 d6a59a0cb..3ff98cd0b 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 @@ -20,6 +20,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.Set; @@ -31,6 +32,7 @@ import org.simantics.db.Statement; import org.simantics.db.common.procedure.adapter.TransientCacheListener; import org.simantics.db.common.request.ResourceRead2; import org.simantics.db.common.request.UnaryRead; +import org.simantics.db.common.utils.ListUtils; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.diagram.connection.ConnectionVisuals; @@ -39,6 +41,7 @@ import org.simantics.diagram.connection.RouteLine; import org.simantics.diagram.connection.RouteNode; import org.simantics.diagram.connection.RouteTerminal; import org.simantics.diagram.connection.RouteTerminalPosition; +import org.simantics.diagram.connection.rendering.AggregateConnectionStyle; import org.simantics.diagram.connection.rendering.BasicConnectionStyle; import org.simantics.diagram.connection.rendering.ConnectionStyle; import org.simantics.diagram.connection.rendering.ExampleConnectionStyle; @@ -65,8 +68,8 @@ 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.g2d.elementclass.RouteGraphConnectionClass; import org.simantics.layer0.Layer0; import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphChangeEvent; import org.simantics.scenegraph.utils.GeometryUtils; @@ -543,13 +546,30 @@ public class RouteGraphUtils { * @return * @throws DatabaseException */ - protected static ConnectionStyle readConnectionStyle(ReadGraph graph, IModelingRules modelingRules, Resource connection, StructuralResource2 STR) throws DatabaseException { + protected static ConnectionStyle readConnectionStyle(ReadGraph graph, IModelingRules modelingRules, Resource connection, StructuralResource2 STR, DiagramResource DIA) throws DatabaseException { + Resource connectionStyle = graph.getPossibleObject(connection, DIA.HasConnectionStyle); Resource connectionType = null; - if (modelingRules != null) - connectionType = modelingRules.getConnectionType(graph, connection); - if (connectionType == null) - connectionType = graph.getPossibleObject(connection, STR.HasConnectionType); - return connectionType != null ? readConnectionStyleFromConnectionType(graph, connectionType) : DEFAULT_CONNECTION_STYLE; + if (connectionStyle == null) { + if (modelingRules != null) + connectionType = modelingRules.getConnectionType(graph, connection); + if (connectionType == null) + connectionType = graph.getPossibleObject(connection, STR.HasConnectionType); + connectionStyle = graph.getPossibleObject(connectionType, DIA.HasConnectionStyle); + } + if (connectionStyle != null) { + List lineStyles = ListUtils.toList(graph, connectionStyle); + if (lineStyles.size() != 1) { + AggregateConnectionStyle aggregate = new AggregateConnectionStyle(); + for (Resource connectionLine : ListUtils.toList(graph, connectionStyle)) { + aggregate.addStyle(readConnectionStyleFromConnectionType(graph, connectionLine)); + } + return aggregate; + } else { + return readConnectionStyleFromConnectionType(graph, lineStyles.get(0)); + } + } else { + return connectionType != null ? readConnectionStyleFromConnectionType(graph, connectionType) : DEFAULT_CONNECTION_STYLE; + } } protected static ConnectionStyle readConnectionStyleFromConnectionType(ReadGraph graph, Resource connectionType) throws DatabaseException { @@ -589,6 +609,7 @@ public class RouteGraphUtils { lineStroke = new BasicStroke(0.1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10, null, 0); Stroke routeLineStroke = GeometryUtils.scaleStrokeWidth(lineStroke, 2); double rounding = cv.rounding == null ? 0.0 : cv.rounding; + double offset = cv.offset == null ? 0.0 : cv.offset; return new BasicConnectionStyle( lineColor, @@ -597,7 +618,8 @@ public class RouteGraphUtils { lineStroke, routeLineStroke, degenerateLineLength, - rounding); + rounding, + offset); } public static void scheduleSynchronize(Session session, Resource connection, RouteGraphChangeEvent event) {