X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Futils%2FGeometryUtils.java;h=cdda4f45c2de18fe4132f6a034c31bcd26dfe799;hp=a3f4ec8bee57b770491b4a7da99a606928cf5fc7;hb=452670c58399d8054872655841ebb6e66d9c6b6e;hpb=2ed2f09de0043bbf98a5b727854bd93a02b204ab diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/GeometryUtils.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/GeometryUtils.java index a3f4ec8be..cdda4f45c 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/GeometryUtils.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/utils/GeometryUtils.java @@ -507,5 +507,75 @@ public final class GeometryUtils { //System.out.println("FIT TRANSFORM: " + at); return at; } - + + private static class UndefinedRectangle extends Rectangle2D { + + @Override + public void setRect(double x, double y, double w, double h) { + throw new UnsupportedOperationException("UndefinedRectangle is immutable"); + } + + @Override + public int outcode(double x, double y) { + return OUT_LEFT | OUT_TOP | OUT_RIGHT | OUT_BOTTOM; + } + + private Rectangle2D copy(Rectangle2D r) { + Rectangle2D dest; + if (r instanceof Float) { + dest = new Rectangle2D.Float(); + } else { + dest = new Rectangle2D.Double(); + } + dest.setFrame(r); + return dest; + } + + @Override + public Rectangle2D createIntersection(Rectangle2D r) { + return copy(r); + } + + @Override + public Rectangle2D createUnion(Rectangle2D r) { + return copy(r); + } + + @Override + public double getX() { + return java.lang.Double.NaN; + } + + @Override + public double getY() { + return java.lang.Double.NaN; + } + + @Override + public double getWidth() { + return 0; + } + + @Override + public double getHeight() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + } + + private static final UndefinedRectangle UNDEFINED_RECTANGLE = new UndefinedRectangle(); + + public static Rectangle2D undefinedRectangle() { + return UNDEFINED_RECTANGLE; + } + + public static boolean isUndefinedRectangle(Rectangle2D r) { + return r == UNDEFINED_RECTANGLE || (r.isEmpty() && Double.isNaN(r.getX()) && Double.isNaN(r.getY())); + } + }