X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram.connection%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fconnection%2Fsplitting%2FSplittedRouteGraph.java;fp=bundles%2Forg.simantics.diagram.connection%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fconnection%2Fsplitting%2FSplittedRouteGraph.java;h=ae79dc019b3cb320f883315599a20952e2fb420d;hp=fe7dc25250edb5a4ac154cd2cb4a2e8ffa1b099c;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/splitting/SplittedRouteGraph.java b/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/splitting/SplittedRouteGraph.java index fe7dc2525..ae79dc019 100644 --- a/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/splitting/SplittedRouteGraph.java +++ b/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/splitting/SplittedRouteGraph.java @@ -1,122 +1,122 @@ -package org.simantics.diagram.connection.splitting; - -import gnu.trove.set.hash.THashSet; - -import java.awt.geom.Point2D; - -import org.simantics.diagram.connection.RouteGraph; -import org.simantics.diagram.connection.RouteLine; -import org.simantics.diagram.connection.RouteNode; -import org.simantics.diagram.connection.RouteTerminal; - -public class SplittedRouteGraph { - public final RouteLine splitLine; - public final THashSet interfaceNodes1; - public final THashSet lines1; // does not contain splitLine - public final THashSet terminals1; - public final THashSet interfaceNodes2; - public final THashSet lines2; // does not contain splitLine - public final THashSet terminals2; - - public SplittedRouteGraph(RouteLine splitLine, - THashSet interfaceNodes1, THashSet lines1, - THashSet terminals1, - THashSet interfaceNodes2, THashSet lines2, - THashSet terminals2) { - super(); - this.splitLine = splitLine; - this.interfaceNodes1 = interfaceNodes1; - this.lines1 = lines1; - this.terminals1 = terminals1; - this.interfaceNodes2 = interfaceNodes2; - this.lines2 = lines2; - this.terminals2 = terminals2; - } - - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - - b.append("splitLine = " + splitLine.getData() + "\n"); - - b.append("interfaceNodes1 ="); - for(RouteNode node : interfaceNodes1) - b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")"); - b.append("\n"); - - b.append("lines1 ="); - for(RouteLine node : lines1) - b.append(" " + node.getData()); - b.append("\n"); - - b.append("terminals1 ="); - for(RouteTerminal node : terminals1) - b.append(" " + node.getData()); - b.append("\n"); - - b.append("interfaceNodes2 ="); - for(RouteNode node : interfaceNodes2) - b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")"); - b.append("\n"); - - b.append("lines2 ="); - for(RouteLine node : lines2) - b.append(" " + node.getData()); - b.append("\n"); - - b.append("terminals2 ="); - for(RouteTerminal node : terminals2) - b.append(" " + node.getData()); - b.append("\n"); - - return b.toString(); - } - - public static RouteLine findNearestLine(RouteGraph rg, Point2D splitCanvasPos) { - double hi = 1000, lo = 1; - RouteLine nearestLine = null; - final double LIMIT = 0.5; - while (true) { - double tolerance = (hi + lo) * 0.5; - RouteLine line = rg.pickLine(splitCanvasPos.getX(), splitCanvasPos.getY(), tolerance); - double delta = (hi - lo) * 0.5; - if (delta < LIMIT) - return nearestLine; - if (line == null) { - lo = tolerance; - } else { - nearestLine = line; - hi = tolerance; - } - } - } - - /** - * @param point - * @param line - * @return the specified point instance snapped to the specified line - */ - public static Point2D snapToLine(Point2D point, RouteLine line) { -// line.print(System.out); -// for (RoutePoint rp : line.getPoints()) -// System.out.println("RP: " + rp.getX() + ", " + rp.getY()); - // Get exact intersection point on the line - if (line.isHorizontal()) { - point.setLocation( point.getX(), line.getPosition() ); - } else { - point.setLocation( line.getPosition(), point.getY() ); - } - return point; - } - - /** - * @param point - * @param line - * @return new {@link Point2D} instance with specified point snapped to specified line - */ - public static Point2D snappedToLine(Point2D point, RouteLine line) { - Point2D result = (Point2D) point.clone(); - return snapToLine(result, line); - } - -} +package org.simantics.diagram.connection.splitting; + +import gnu.trove.set.hash.THashSet; + +import java.awt.geom.Point2D; + +import org.simantics.diagram.connection.RouteGraph; +import org.simantics.diagram.connection.RouteLine; +import org.simantics.diagram.connection.RouteNode; +import org.simantics.diagram.connection.RouteTerminal; + +public class SplittedRouteGraph { + public final RouteLine splitLine; + public final THashSet interfaceNodes1; + public final THashSet lines1; // does not contain splitLine + public final THashSet terminals1; + public final THashSet interfaceNodes2; + public final THashSet lines2; // does not contain splitLine + public final THashSet terminals2; + + public SplittedRouteGraph(RouteLine splitLine, + THashSet interfaceNodes1, THashSet lines1, + THashSet terminals1, + THashSet interfaceNodes2, THashSet lines2, + THashSet terminals2) { + super(); + this.splitLine = splitLine; + this.interfaceNodes1 = interfaceNodes1; + this.lines1 = lines1; + this.terminals1 = terminals1; + this.interfaceNodes2 = interfaceNodes2; + this.lines2 = lines2; + this.terminals2 = terminals2; + } + + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + + b.append("splitLine = " + splitLine.getData() + "\n"); + + b.append("interfaceNodes1 ="); + for(RouteNode node : interfaceNodes1) + b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")"); + b.append("\n"); + + b.append("lines1 ="); + for(RouteLine node : lines1) + b.append(" " + node.getData()); + b.append("\n"); + + b.append("terminals1 ="); + for(RouteTerminal node : terminals1) + b.append(" " + node.getData()); + b.append("\n"); + + b.append("interfaceNodes2 ="); + for(RouteNode node : interfaceNodes2) + b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")"); + b.append("\n"); + + b.append("lines2 ="); + for(RouteLine node : lines2) + b.append(" " + node.getData()); + b.append("\n"); + + b.append("terminals2 ="); + for(RouteTerminal node : terminals2) + b.append(" " + node.getData()); + b.append("\n"); + + return b.toString(); + } + + public static RouteLine findNearestLine(RouteGraph rg, Point2D splitCanvasPos) { + double hi = 1000, lo = 1; + RouteLine nearestLine = null; + final double LIMIT = 0.5; + while (true) { + double tolerance = (hi + lo) * 0.5; + RouteLine line = rg.pickLine(splitCanvasPos.getX(), splitCanvasPos.getY(), tolerance); + double delta = (hi - lo) * 0.5; + if (delta < LIMIT) + return nearestLine; + if (line == null) { + lo = tolerance; + } else { + nearestLine = line; + hi = tolerance; + } + } + } + + /** + * @param point + * @param line + * @return the specified point instance snapped to the specified line + */ + public static Point2D snapToLine(Point2D point, RouteLine line) { +// line.print(System.out); +// for (RoutePoint rp : line.getPoints()) +// System.out.println("RP: " + rp.getX() + ", " + rp.getY()); + // Get exact intersection point on the line + if (line.isHorizontal()) { + point.setLocation( point.getX(), line.getPosition() ); + } else { + point.setLocation( line.getPosition(), point.getY() ); + } + return point; + } + + /** + * @param point + * @param line + * @return new {@link Point2D} instance with specified point snapped to specified line + */ + public static Point2D snappedToLine(Point2D point, RouteLine line) { + Point2D result = (Point2D) point.clone(); + return snapToLine(result, line); + } + +}