X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fnodes%2FConnectionNode.java;h=927619e02100f452329638522af2c804eb669ffe;hp=128b0df90f931d871846dc71faf42d32cb57de2f;hb=bf75fd9;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java index 128b0df90..927619e02 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java @@ -14,9 +14,12 @@ package org.simantics.scenegraph.g2d.nodes; import java.awt.Color; import java.awt.Composite; import java.awt.Stroke; +import java.awt.geom.Point2D; +import org.simantics.diagram.connection.RouteGraph; import org.simantics.scenegraph.INode; import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.events.MouseEvent; import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode; import org.simantics.scenegraph.utils.InitValueSupport; import org.simantics.scenegraph.utils.NodeUtil; @@ -126,4 +129,25 @@ public class ConnectionNode extends SingleElementNode implements InitValueSuppor } } + @Override + protected boolean hitTest(MouseEvent event) { + if (!super.hitTest(event)) + return false; + + Point2D pos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); + double tolerance = 0.5; + // TODO: change tolerance based on zoom level + + for (IG2DNode child : getSortedNodes()) { + if (child instanceof RouteGraphNode) { + RouteGraphNode rgn = (RouteGraphNode) child; + RouteGraph rg = rgn.getRouteGraph(); + Object pick = rg.pickLine(pos.getX(), pos.getY(), tolerance); + if (pick != null) + return true; + } + } + return false; + } + }