X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FLineUtilities.java;h=86e0bf7ed69ca9d1148f31c95fb6e1fd7c246f56;hb=08dc7080753f3ea35985e76e9effb9d3ff92c3b5;hp=73ad05851d9689c8a75a15adbd89367e825cac1f;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/LineUtilities.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/LineUtilities.java index 73ad05851..86e0bf7ed 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/LineUtilities.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/LineUtilities.java @@ -1,142 +1,142 @@ -package org.simantics.diagram.profile; -/* - * JFreeChart : a free chart library for the Java(tm) platform - * - * - * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors. - * - * Project Info: http://www.jfree.org/jfreechart/index.html - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, - * USA. - * - * [Java is a trademark or registered trademark of Sun Microsystems, Inc. - * in the United States and other countries.] - * - * ------------------ - * LineUtilities.java - * ------------------ - * (C) Copyright 2008, by Object Refinery Limited and Contributors. - * - * Original Author: David Gilbert (for Object Refinery Limited); - * Contributor(s): -; - * - * Changes - * ------- - * 05-Nov-2008 : Version 1 (DG); - * - */ - -import java.awt.geom.Line2D; -import java.awt.geom.Rectangle2D; - -/** - * Some utility methods for {@link Line2D} objects. - * - * @since 1.0.12 - */ -public class LineUtilities { - - /** - * Clips the specified line to the given rectangle. - * - * @param line the line (null not permitted). - * @param rect the clipping rectangle (null not permitted). - * - * @return true if the clipped line is visible, and - * false otherwise. - */ - public static boolean clipLine(Line2D line, Rectangle2D rect) { - - double x1 = line.getX1(); - double y1 = line.getY1(); - double x2 = line.getX2(); - double y2 = line.getY2(); - - double minX = rect.getMinX(); - double maxX = rect.getMaxX(); - double minY = rect.getMinY(); - double maxY = rect.getMaxY(); - - int f1 = rect.outcode(x1, y1); - int f2 = rect.outcode(x2, y2); - - while ((f1 | f2) != 0) { - if ((f1 & f2) != 0) { - return false; - } - double dx = (x2 - x1); - double dy = (y2 - y1); - // update (x1, y1), (x2, y2) and f1 and f2 using intersections - // then recheck - if (f1 != 0) { - // first point is outside, so we update it against one of the - // four sides then continue - if ((f1 & Rectangle2D.OUT_LEFT) == Rectangle2D.OUT_LEFT - && dx != 0.0) { - y1 = y1 + (minX - x1) * dy / dx; - x1 = minX; - } - else if ((f1 & Rectangle2D.OUT_RIGHT) == Rectangle2D.OUT_RIGHT - && dx != 0.0) { - y1 = y1 + (maxX - x1) * dy / dx; - x1 = maxX; - } - else if ((f1 & Rectangle2D.OUT_BOTTOM) == Rectangle2D.OUT_BOTTOM - && dy != 0.0) { - x1 = x1 + (maxY - y1) * dx / dy; - y1 = maxY; - } - else if ((f1 & Rectangle2D.OUT_TOP) == Rectangle2D.OUT_TOP - && dy != 0.0) { - x1 = x1 + (minY - y1) * dx / dy; - y1 = minY; - } - f1 = rect.outcode(x1, y1); - } - else if (f2 != 0) { - // second point is outside, so we update it against one of the - // four sides then continue - if ((f2 & Rectangle2D.OUT_LEFT) == Rectangle2D.OUT_LEFT - && dx != 0.0) { - y2 = y2 + (minX - x2) * dy / dx; - x2 = minX; - } - else if ((f2 & Rectangle2D.OUT_RIGHT) == Rectangle2D.OUT_RIGHT - && dx != 0.0) { - y2 = y2 + (maxX - x2) * dy / dx; - x2 = maxX; - } - else if ((f2 & Rectangle2D.OUT_BOTTOM) == Rectangle2D.OUT_BOTTOM - && dy != 0.0) { - x2 = x2 + (maxY - y2) * dx / dy; - y2 = maxY; - } - else if ((f2 & Rectangle2D.OUT_TOP) == Rectangle2D.OUT_TOP - && dy != 0.0) { - x2 = x2 + (minY - y2) * dx / dy; - y2 = minY; - } - f2 = rect.outcode(x2, y2); - } - } - - line.setLine(x1, y1, x2, y2); - return true; // the line is visible - if it wasn't, we'd have - // returned false from within the while loop above - - } - +package org.simantics.diagram.profile; +/* + * JFreeChart : a free chart library for the Java(tm) platform + * + * + * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors. + * + * Project Info: http://www.jfree.org/jfreechart/index.html + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * [Java is a trademark or registered trademark of Sun Microsystems, Inc. + * in the United States and other countries.] + * + * ------------------ + * LineUtilities.java + * ------------------ + * (C) Copyright 2008, by Object Refinery Limited and Contributors. + * + * Original Author: David Gilbert (for Object Refinery Limited); + * Contributor(s): -; + * + * Changes + * ------- + * 05-Nov-2008 : Version 1 (DG); + * + */ + +import java.awt.geom.Line2D; +import java.awt.geom.Rectangle2D; + +/** + * Some utility methods for {@link Line2D} objects. + * + * @since 1.0.12 + */ +public class LineUtilities { + + /** + * Clips the specified line to the given rectangle. + * + * @param line the line (null not permitted). + * @param rect the clipping rectangle (null not permitted). + * + * @return true if the clipped line is visible, and + * false otherwise. + */ + public static boolean clipLine(Line2D line, Rectangle2D rect) { + + double x1 = line.getX1(); + double y1 = line.getY1(); + double x2 = line.getX2(); + double y2 = line.getY2(); + + double minX = rect.getMinX(); + double maxX = rect.getMaxX(); + double minY = rect.getMinY(); + double maxY = rect.getMaxY(); + + int f1 = rect.outcode(x1, y1); + int f2 = rect.outcode(x2, y2); + + while ((f1 | f2) != 0) { + if ((f1 & f2) != 0) { + return false; + } + double dx = (x2 - x1); + double dy = (y2 - y1); + // update (x1, y1), (x2, y2) and f1 and f2 using intersections + // then recheck + if (f1 != 0) { + // first point is outside, so we update it against one of the + // four sides then continue + if ((f1 & Rectangle2D.OUT_LEFT) == Rectangle2D.OUT_LEFT + && dx != 0.0) { + y1 = y1 + (minX - x1) * dy / dx; + x1 = minX; + } + else if ((f1 & Rectangle2D.OUT_RIGHT) == Rectangle2D.OUT_RIGHT + && dx != 0.0) { + y1 = y1 + (maxX - x1) * dy / dx; + x1 = maxX; + } + else if ((f1 & Rectangle2D.OUT_BOTTOM) == Rectangle2D.OUT_BOTTOM + && dy != 0.0) { + x1 = x1 + (maxY - y1) * dx / dy; + y1 = maxY; + } + else if ((f1 & Rectangle2D.OUT_TOP) == Rectangle2D.OUT_TOP + && dy != 0.0) { + x1 = x1 + (minY - y1) * dx / dy; + y1 = minY; + } + f1 = rect.outcode(x1, y1); + } + else if (f2 != 0) { + // second point is outside, so we update it against one of the + // four sides then continue + if ((f2 & Rectangle2D.OUT_LEFT) == Rectangle2D.OUT_LEFT + && dx != 0.0) { + y2 = y2 + (minX - x2) * dy / dx; + x2 = minX; + } + else if ((f2 & Rectangle2D.OUT_RIGHT) == Rectangle2D.OUT_RIGHT + && dx != 0.0) { + y2 = y2 + (maxX - x2) * dy / dx; + x2 = maxX; + } + else if ((f2 & Rectangle2D.OUT_BOTTOM) == Rectangle2D.OUT_BOTTOM + && dy != 0.0) { + x2 = x2 + (maxY - y2) * dx / dy; + y2 = maxY; + } + else if ((f2 & Rectangle2D.OUT_TOP) == Rectangle2D.OUT_TOP + && dy != 0.0) { + x2 = x2 + (minY - y2) * dx / dy; + y2 = minY; + } + f2 = rect.outcode(x2, y2); + } + } + + line.setLine(x1, y1, x2, y2); + return true; // the line is visible - if it wasn't, we'd have + // returned false from within the while loop above + + } + } \ No newline at end of file