X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fparticipant%2FRouteGraphConnectTool.java;h=f4add638742601fd3737cdee33fd44776e8a7f1b;hb=28438fa467ae60dd63515be2df724c6ff9c299c9;hp=d1ba2174143f17aec8d14e98cae838136793a6d7;hpb=059e997dd3e02030c3981f1a35e1d2848965109f;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java index d1ba21741..f4add6387 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/RouteGraphConnectTool.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Deque; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.simantics.Simantics; @@ -32,7 +33,6 @@ import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.diagram.connection.RouteGraph; -import org.simantics.diagram.connection.RouteGraphConnectionClass; import org.simantics.diagram.connection.RouteLine; import org.simantics.diagram.connection.RoutePoint; import org.simantics.diagram.connection.RouteTerminal; @@ -76,6 +76,7 @@ import org.simantics.g2d.element.handler.impl.BranchPointTerminal; import org.simantics.g2d.element.impl.Element; import org.simantics.g2d.elementclass.FlagClass; import org.simantics.g2d.elementclass.FlagHandler; +import org.simantics.g2d.elementclass.RouteGraphConnectionClass; import org.simantics.g2d.participant.TransformUtil; import org.simantics.g2d.utils.geom.DirectionSet; import org.simantics.scenegraph.g2d.G2DParentNode; @@ -502,29 +503,31 @@ public class RouteGraphConnectTool extends AbstractMode { endFlagNode.setTransform(AffineTransform.getTranslateInstance(mouseCanvasPos.getX(), mouseCanvasPos.getY())); } - TerminalInfo ti = pi.pickTerminal(me.controlPosition); - if (ti != null) { - Object canConnect = canConnect(ti.e, ti.t); - if (canConnect != null) { - connectionJudgment = (ConnectionJudgement) canConnect; + List tis = pi.pickTerminals(me.controlPosition); + tis = TerminalUtil.findNearestOverlappingTerminals(tis); + if (!tis.isEmpty()) { + for (TerminalInfo ti : tis) { + Object canConnect = canConnect(ti.e, ti.t); - if (!isEndingInFlag() || !TerminalUtil.isSameTerminal(ti, endTerminal)) { - controlPoints.getLast() - .setPosition(ti.posDia) - .setAttachedToTerminal(ti); + if (canConnect != null) { + connectionJudgment = (ConnectionJudgement) canConnect; - endTerminal = ti; + if (!isEndingInFlag() || !TerminalUtil.isSameTerminal(ti, endTerminal)) { + controlPoints.getLast().setPosition(ti.posDia).setAttachedToTerminal(ti); - connect(ti); - - } + endTerminal = ti; + + connect(ti); - // Make sure that we are ending with a flag if ALT is pressed - // and no end terminal is defined. - endWithoutTerminal(lastMouseCanvasPos, shouldEndWithFlag(me)); + } - updateSG(new Point2D.Double(ti.posDia.getTranslateX(), ti.posDia.getTranslateY())); - return false; + // Make sure that we are ending with a flag if ALT is pressed + // and no end terminal is defined. + endWithoutTerminal(lastMouseCanvasPos, shouldEndWithFlag(me)); + + updateSG(new Point2D.Double(ti.posDia.getTranslateX(), ti.posDia.getTranslateY())); + return false; + } } }