]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/DefinedElementTerminals.java
Dynamic terminals and connections
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / DefinedElementTerminals.java
index 6f83954e01b6163e10d1c748cbf57421b1159a82..33e831afcf1b69f638c6a3ce66699957273e9713 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.simantics.diagram.adapter;
 
+import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.util.Collection;
 
@@ -21,7 +22,6 @@ import org.simantics.g2d.element.handler.TerminalLayout;
 import org.simantics.g2d.element.handler.TerminalTopology;
 import org.simantics.g2d.element.handler.impl.ObjectTerminal;
 import org.simantics.g2d.element.handler.impl.Terminals;
-import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.g2d.IG2DNode;
 import org.simantics.scenegraph.g2d.nodes.SingleElementNode;
 import org.simantics.scenegraph.utils.NodeUtil;
@@ -72,7 +72,22 @@ public class DefinedElementTerminals extends Terminals {
         ObjectTerminal ti = terminalMap.get(t);
         if (ti == null)
             return null;
-        return new AffineTransform(ti.getTransform());
+        return ti.getTransform();
+    }
+    
+    @Override
+    public Shape getTerminalShape(IElement e, Terminal t) {
+        if (t instanceof ResourceTerminal) {
+            ResourceTerminal rt = (ResourceTerminal) t;
+            IG2DNode node = e.getHint(DefinedElementHandler.KEY_SG_NODE);
+            if (node != null) {
+                IG2DNode n = findResourceTerminalNode(node, rt);
+                if (n != null) {
+                    return n.getBoundsInLocal();
+                }
+            }
+        }
+        return super.getTerminalShape(e, t);
     }
 
 }
\ No newline at end of file