-package org.simantics.diagram.connection.splitting;\r
-\r
-import gnu.trove.set.hash.THashSet;\r
-\r
-import java.awt.geom.Point2D;\r
-\r
-import org.simantics.diagram.connection.RouteGraph;\r
-import org.simantics.diagram.connection.RouteLine;\r
-import org.simantics.diagram.connection.RouteNode;\r
-import org.simantics.diagram.connection.RouteTerminal;\r
-\r
-public class SplittedRouteGraph {\r
- public final RouteLine splitLine;\r
- public final THashSet<RouteNode> interfaceNodes1;\r
- public final THashSet<RouteLine> lines1; // does not contain splitLine\r
- public final THashSet<RouteTerminal> terminals1;\r
- public final THashSet<RouteNode> interfaceNodes2;\r
- public final THashSet<RouteLine> lines2; // does not contain splitLine\r
- public final THashSet<RouteTerminal> terminals2;\r
- \r
- public SplittedRouteGraph(RouteLine splitLine,\r
- THashSet<RouteNode> interfaceNodes1, THashSet<RouteLine> lines1,\r
- THashSet<RouteTerminal> terminals1,\r
- THashSet<RouteNode> interfaceNodes2, THashSet<RouteLine> lines2,\r
- THashSet<RouteTerminal> terminals2) {\r
- super();\r
- this.splitLine = splitLine;\r
- this.interfaceNodes1 = interfaceNodes1;\r
- this.lines1 = lines1;\r
- this.terminals1 = terminals1;\r
- this.interfaceNodes2 = interfaceNodes2;\r
- this.lines2 = lines2;\r
- this.terminals2 = terminals2;\r
- }\r
- \r
- @Override\r
- public String toString() {\r
- StringBuilder b = new StringBuilder();\r
- \r
- b.append("splitLine = " + splitLine.getData() + "\n");\r
- \r
- b.append("interfaceNodes1 =");\r
- for(RouteNode node : interfaceNodes1)\r
- b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")");\r
- b.append("\n");\r
- \r
- b.append("lines1 =");\r
- for(RouteLine node : lines1)\r
- b.append(" " + node.getData());\r
- b.append("\n");\r
- \r
- b.append("terminals1 =");\r
- for(RouteTerminal node : terminals1)\r
- b.append(" " + node.getData());\r
- b.append("\n");\r
- \r
- b.append("interfaceNodes2 =");\r
- for(RouteNode node : interfaceNodes2)\r
- b.append(" " + node.getData() + "(" + node.getClass().getSimpleName() + ")");\r
- b.append("\n");\r
- \r
- b.append("lines2 =");\r
- for(RouteLine node : lines2)\r
- b.append(" " + node.getData());\r
- b.append("\n");\r
- \r
- b.append("terminals2 =");\r
- for(RouteTerminal node : terminals2)\r
- b.append(" " + node.getData());\r
- b.append("\n");\r
- \r
- return b.toString();\r
- }\r
-\r
- public static RouteLine findNearestLine(RouteGraph rg, Point2D splitCanvasPos) {\r
- double hi = 1000, lo = 1;\r
- RouteLine nearestLine = null;\r
- final double LIMIT = 0.5;\r
- while (true) {\r
- double tolerance = (hi + lo) * 0.5;\r
- RouteLine line = rg.pickLine(splitCanvasPos.getX(), splitCanvasPos.getY(), tolerance);\r
- double delta = (hi - lo) * 0.5;\r
- if (delta < LIMIT)\r
- return nearestLine;\r
- if (line == null) {\r
- lo = tolerance;\r
- } else {\r
- nearestLine = line;\r
- hi = tolerance;\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * @param point\r
- * @param line\r
- * @return the specified point instance snapped to the specified line\r
- */\r
- public static Point2D snapToLine(Point2D point, RouteLine line) {\r
-// line.print(System.out);\r
-// for (RoutePoint rp : line.getPoints())\r
-// System.out.println("RP: " + rp.getX() + ", " + rp.getY());\r
- // Get exact intersection point on the line\r
- if (line.isHorizontal()) {\r
- point.setLocation( point.getX(), line.getPosition() );\r
- } else {\r
- point.setLocation( line.getPosition(), point.getY() );\r
- }\r
- return point;\r
- }\r
-\r
- /**\r
- * @param point\r
- * @param line\r
- * @return new {@link Point2D} instance with specified point snapped to specified line\r
- */\r
- public static Point2D snappedToLine(Point2D point, RouteLine line) {\r
- Point2D result = (Point2D) point.clone();\r
- return snapToLine(result, line);\r
- }\r
-\r
-}\r
+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<RouteNode> interfaceNodes1;
+ public final THashSet<RouteLine> lines1; // does not contain splitLine
+ public final THashSet<RouteTerminal> terminals1;
+ public final THashSet<RouteNode> interfaceNodes2;
+ public final THashSet<RouteLine> lines2; // does not contain splitLine
+ public final THashSet<RouteTerminal> terminals2;
+
+ public SplittedRouteGraph(RouteLine splitLine,
+ THashSet<RouteNode> interfaceNodes1, THashSet<RouteLine> lines1,
+ THashSet<RouteTerminal> terminals1,
+ THashSet<RouteNode> interfaceNodes2, THashSet<RouteLine> lines2,
+ THashSet<RouteTerminal> 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);
+ }
+
+}