X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fdiagram%2Fparticipant%2Fpointertool%2FTerminalUtil.java;h=677c97f0f4fa0062779d9688ea718e39218f4508;hp=85f75a06638150f83af0fc4f413836a7f6a6d0b9;hb=2b0fe692f116091f8d65da664174c92591a077b8;hpb=043ed4538f5bdc16d299bc40c2dd8285a3120f9b diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/pointertool/TerminalUtil.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/pointertool/TerminalUtil.java index 85f75a066..677c97f0f 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/pointertool/TerminalUtil.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/pointertool/TerminalUtil.java @@ -44,7 +44,7 @@ public class TerminalUtil { private static final ThreadLocal> TERMINALS = new ThreadLocal>() { @Override protected ArrayList initialValue() { - return new ArrayList(); + return new ArrayList<>(); } }; @@ -54,7 +54,7 @@ public class TerminalUtil { private static final ThreadLocal> ELEMENTS = new ThreadLocal>() { @Override protected ArrayList initialValue() { - return new ArrayList(); + return new ArrayList<>(); } }; @@ -144,7 +144,7 @@ public class TerminalUtil { pickCenterY = bounds.getCenterY(); } - List result = new ArrayList(); + List result = new ArrayList<>(); ArrayList terminals = TERMINALS.get(); for (IElement e : elements) { @@ -160,8 +160,10 @@ public class TerminalUtil { { Shape terminalShape = getTerminalShape(tls, e, t); if ( terminalShape==null /* point terminal */ && !pickPointTerminals ) continue; - if ( terminalShape!=null /* are terminal */ && !pickAreaTerminals ) continue; - AffineTransform terminalToDiagram = getTerminalPosOnDiagram(e, t); + if ( terminalShape!=null /* area terminal */ && !pickAreaTerminals ) continue; + + AffineTransform terminalToElement = getTerminalPosOnElement0(e, t); + AffineTransform terminalToDiagram = concatenate(ElementUtils.getTransform(e), terminalToElement); // Pick distance will is set to 0 if there was no pick shape, // i.e. everything is picked. @@ -175,11 +177,10 @@ public class TerminalUtil { pickDist = Point2D.distance(pickCenterX, pickCenterY, terminalToDiagram.getTranslateX(), terminalToDiagram.getTranslateY()); } - AffineTransform terminalToElement = getTerminalPosOnElement(e, t); TerminalInfo ti = new TerminalInfo(); ti.e = e; ti.posDia = terminalToDiagram; - ti.posElem = terminalToElement; + ti.posElem = terminalToElement != null ? new AffineTransform(terminalToElement) : new AffineTransform(); ti.t = t; ti.shape = terminalShape; ti.distance = pickDist; @@ -224,8 +225,10 @@ public class TerminalUtil { tt.getTerminals(e, terminals); for (Terminal t : terminals) { + AffineTransform terminalToElement = getTerminalPosOnElement0(e, t); + AffineTransform terminalToDiagram = concatenate(ElementUtils.getTransform(e), terminalToElement); + Shape terminalShape = getTerminalShape(e, t); - AffineTransform terminalToDiagram = getTerminalPosOnDiagram(e, t); Shape pickTargetShape = terminalShape != null ? terminalShape : POINT_PICK_SHAPE; pickTargetShape = GeometryUtils.transformShape(pickTargetShape, terminalToDiagram); if (!GeometryUtils.intersects(pickShape, pickTargetShape)) continue; @@ -235,7 +238,7 @@ public class TerminalUtil { result.e = e; result.posDia = terminalToDiagram; - result.posElem = getTerminalPosOnElement(e, t); + result.posElem = terminalToElement != null ? new AffineTransform(terminalToElement) : new AffineTransform(); result.t = t; result.shape = terminalShape; result.distance = Math.sqrt(pickDist); @@ -300,11 +303,8 @@ public class TerminalUtil { */ public static AffineTransform getTerminalPosOnDiagram(IElement e, Terminal t) { - AffineTransform pos = getTerminalPosOnElement(e, t); - AffineTransform at = ElementUtils.getTransform(e); - AffineTransform result = new AffineTransform(at); - result.concatenate(pos); - return result; + AffineTransform pos = getTerminalPosOnElement0(e, t); + return concatenate(ElementUtils.getTransform(e), pos); } /** @@ -314,6 +314,18 @@ public class TerminalUtil { * @return Transform of a terminal */ public static AffineTransform getTerminalPosOnElement(IElement e, Terminal t) + { + AffineTransform tr = getTerminalPosOnElement0(e, t); + return tr != null ? new AffineTransform(tr) : null; + } + + /** + * Get position of a terminal in element + * @param e element + * @param t terminal + * @return Transform of a terminal + */ + private static AffineTransform getTerminalPosOnElement0(IElement e, Terminal t) { List tls = e.getElementClass().getItemsByClass(TerminalLayout.class); AffineTransform result = null; @@ -363,7 +375,7 @@ public class TerminalUtil { PickRequest req = new PickRequest(pickShape); DiagramUtils.pick(diagram, req, elements); - ArrayList bends = new ArrayList(); + ArrayList bends = new ArrayList<>(); Point2D bendPos = new Point2D.Double(); for (IElement e : diagram.getElements()) { @@ -430,7 +442,7 @@ public class TerminalUtil { } } - ArrayList result = new ArrayList(len); + ArrayList result = new ArrayList<>(len); for (int i = 0; i < len; ++i) { TerminalInfo ti = tis.get(i); if (ti.distance == nearest.distance @@ -444,4 +456,11 @@ public class TerminalUtil { return result; } + private static AffineTransform concatenate(AffineTransform a, AffineTransform b) { + AffineTransform result = new AffineTransform(a); + if (b != null) + result.concatenate(b); + return result; + } + }