summaryrefslogtreecommitdiff
path: root/src/net/sourceforge/plantuml/posimo/LineRectIntersection.java
diff options
context:
space:
mode:
authorAndrew Shadura <andrew@shadura.me>2015-07-21 14:52:03 +0200
committerAndrew Shadura <andrew@shadura.me>2015-07-21 14:52:03 +0200
commit26b872bb194ec7622997914bba53309a94b64d20 (patch)
treea79b966bf55dd61702b900b8ba40be4d2b3403db /src/net/sourceforge/plantuml/posimo/LineRectIntersection.java
Imported Upstream version 8024
Diffstat (limited to 'src/net/sourceforge/plantuml/posimo/LineRectIntersection.java')
-rw-r--r--src/net/sourceforge/plantuml/posimo/LineRectIntersection.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/net/sourceforge/plantuml/posimo/LineRectIntersection.java b/src/net/sourceforge/plantuml/posimo/LineRectIntersection.java
new file mode 100644
index 0000000..29e318e
--- /dev/null
+++ b/src/net/sourceforge/plantuml/posimo/LineRectIntersection.java
@@ -0,0 +1,82 @@
+/* ========================================================================
+ * PlantUML : a free UML diagram generator
+ * ========================================================================
+ *
+ * (C) Copyright 2009-2014, Arnaud Roques
+ *
+ * Project Info: http://plantuml.sourceforge.net
+ *
+ * This file is part of PlantUML.
+ *
+ * Licensed under The MIT License (Massachusetts Institute of Technology License)
+ *
+ * See http://opensource.org/licenses/MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *
+ * Original Author: Arnaud Roques
+ */
+package net.sourceforge.plantuml.posimo;
+
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+public class LineRectIntersection {
+
+ private final Point2D inter;
+
+ public LineRectIntersection(Line2D line, Rectangle2D rect) {
+ final Point2D p1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
+ final Point2D p2 = new Point2D.Double(rect.getMaxX(), rect.getMinY());
+ final Point2D p3 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
+ final Point2D p4 = new Point2D.Double(rect.getMinX(), rect.getMaxY());
+
+ final Point2D inter1 = new LineSegmentIntersection(new Line2D.Double(p1, p2), line).getIntersection();
+ final Point2D inter2 = new LineSegmentIntersection(new Line2D.Double(p2, p3), line).getIntersection();
+ final Point2D inter3 = new LineSegmentIntersection(new Line2D.Double(p3, p4), line).getIntersection();
+ final Point2D inter4 = new LineSegmentIntersection(new Line2D.Double(p4, p1), line).getIntersection();
+
+ final Point2D o = line.getP1();
+ inter = getCloser(o, inter1, inter2, inter3, inter4);
+
+ }
+
+ public static Point2D getCloser(final Point2D o, final Point2D... other) {
+ double minDist = Double.MAX_VALUE;
+ Point2D result = null;
+
+ for (Point2D pt : other) {
+ if (pt != null) {
+ final double dist = pt.distanceSq(o);
+ if (dist < minDist) {
+ minDist = dist;
+ result = pt;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public final Point2D getIntersection() {
+ return inter;
+ }
+
+}