]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Option set connection stroke scale 44/4544/1 private/solvo
authorJussi Koskela <jussi.koskela@semantum.fi>
Fri, 16 Oct 2020 07:33:49 +0000 (10:33 +0300)
committerJussi Koskela <jussi.koskela@semantum.fi>
Fri, 16 Oct 2020 07:33:49 +0000 (10:33 +0300)
gitlab #622

Change-Id: I547b51395c5832708df5c55ca4ce358c922da348

bundles/org.simantics.diagram.ontology/graph/Diagram.pgraph
bundles/org.simantics.diagram.ontology/graph/DiagramConnections.pgraph
bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/RouteGraphUtils.java

index a38de5bc95db19a77f425d3d8ea2e09087c3789f..52fc8db3fc4ab3df0fed0e46467e90e7d912e9ac 100644 (file)
@@ -180,3 +180,9 @@ DIA.ConnectionLineStyle <T L0.Entity
 
 DIA.HasConnectionStyle <R L0.IsRelatedTo : L0.FunctionalRelation
     L0.HasRange DIA.ConnectionStyle
+
+DIA.HasStrokeScale <R L0.HasProperty : SEL.GenericParameterType
+    L0.HasLabel "Stroke Scale"
+    L0.HasDescription "Scale of stroke."
+    L0.HasDomain DIA.Connection
+    L0.HasRange L0.Double
\ No newline at end of file
index 253eb7ed396a7f95c972f5a5df7f384a2b3c1ca6..4508cfe2623ab511c7720ce56e48a60017d15f2e 100644 (file)
@@ -47,6 +47,8 @@ DIA.Connection <T DIA.Element : L0.Type
     @L0.property DIA.HasBranchPoint
     @L0.property STR.HasConnectionType
     @L0.property DIA.Routing
+    @L0.assert DIA.HasStrokeScale 
+        1.0 : L0.Double
 
 DIA.BranchPoint <T DIA.InteriorRouteNode
     @L0.property DIA.Horizontal
index 3ff98cd0b1cc115d33687764e650282c707623bb..934b47980ae790cda5a1496a627b65bde48079d6 100644 (file)
@@ -30,6 +30,7 @@ import org.simantics.db.Resource;
 import org.simantics.db.Session;
 import org.simantics.db.Statement;
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
+import org.simantics.db.common.request.BinaryRead;
 import org.simantics.db.common.request.ResourceRead2;
 import org.simantics.db.common.request.UnaryRead;
 import org.simantics.db.common.utils.ListUtils;
@@ -549,6 +550,8 @@ public class RouteGraphUtils {
     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;
+        Double scale = graph.getPossibleRelatedValue(connection, DIA.HasStrokeScale);
+        if (scale == null) scale = 1.0;
         if (connectionStyle == null) {
             if (modelingRules != null)
                 connectionType = modelingRules.getConnectionType(graph, connection);
@@ -561,36 +564,47 @@ public class RouteGraphUtils {
             if (lineStyles.size() != 1) {
                 AggregateConnectionStyle aggregate = new AggregateConnectionStyle();
                 for (Resource connectionLine : ListUtils.toList(graph, connectionStyle)) {
-                    aggregate.addStyle(readConnectionStyleFromConnectionType(graph, connectionLine));
+                    aggregate.addStyle(readConnectionStyleFromConnectionType(graph, connectionLine, scale));
                 }
                 return aggregate;
             } else {
-                return readConnectionStyleFromConnectionType(graph, lineStyles.get(0));
+                return readConnectionStyleFromConnectionType(graph, lineStyles.get(0), scale);
             }
         } else {
-            return connectionType != null ? readConnectionStyleFromConnectionType(graph, connectionType) : DEFAULT_CONNECTION_STYLE;
+            return connectionType != null ? readConnectionStyleFromConnectionType(graph, connectionType, scale) : DEFAULT_CONNECTION_STYLE;
         }
     }
 
     protected static ConnectionStyle readConnectionStyleFromConnectionType(ReadGraph graph, Resource connectionType) throws DatabaseException {
-        return graph.syncRequest(new ReadConnectionStyleFromConnectionType(connectionType),
+        return readConnectionStyleFromConnectionType(graph, connectionType, 1.0);
+    }
+
+    protected static ConnectionStyle readConnectionStyleFromConnectionType(ReadGraph graph, Resource connectionType, double scale) throws DatabaseException {
+        return graph.syncRequest(new ReadConnectionStyleFromConnectionType(connectionType, scale),
                 TransientCacheListener.<ConnectionStyle>instance());
     }
 
     /**
      * A request for caching ConnectionStyle results.
      */
-    public static class ReadConnectionStyleFromConnectionType extends UnaryRead<Resource, ConnectionStyle> {
+    public static class ReadConnectionStyleFromConnectionType extends BinaryRead<Resource, Double, ConnectionStyle> {
         public ReadConnectionStyleFromConnectionType(Resource connectionType) {
-            super(connectionType);
+            this(connectionType, 1.0);
+        }
+        public ReadConnectionStyleFromConnectionType(Resource connectionType, Double scale) {
+            super(connectionType, scale);
         }
         @Override
         public ConnectionStyle perform(ReadGraph graph) throws DatabaseException {
-            return readConnectionStyleFromConnectionType0(graph, parameter);
+            return readConnectionStyleFromConnectionType0(graph, parameter, parameter2);
         }
     }
 
     protected static ConnectionStyle readConnectionStyleFromConnectionType0(ReadGraph graph, Resource connectionType) throws DatabaseException {
+        return readConnectionStyleFromConnectionType0(graph, connectionType, 1.0);
+    }
+
+    protected static ConnectionStyle readConnectionStyleFromConnectionType0(ReadGraph graph, Resource connectionType, double scale) throws DatabaseException {
         ConnectionVisuals cv = null;
         if (connectionType != null)
             cv = graph.syncRequest(DiagramRequests.getConnectionVisuals(connectionType),
@@ -607,9 +621,12 @@ public class RouteGraphUtils {
         Stroke lineStroke = cv != null ? cv.stroke : null;
         if (lineStroke == null)
             lineStroke = new BasicStroke(0.1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10, null, 0);
+        if (scale != 1.0) { 
+            lineStroke = GeometryUtils.scaleStroke(lineStroke, (float)scale);
+        }
         Stroke routeLineStroke = GeometryUtils.scaleStrokeWidth(lineStroke, 2);
         double rounding = cv.rounding == null ? 0.0 : cv.rounding;
-        double offset = cv.offset == null ? 0.0 : cv.offset;
+        double offset = cv.offset == null ? 0.0 : cv.offset * scale;
 
         return new BasicConnectionStyle(
                 lineColor,