package org.iplantc.phyloviewer.server; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import org.iplantc.phyloviewer.server.render.Java2DGraphics; import org.iplantc.phyloviewer.shared.math.Box2D; import org.iplantc.phyloviewer.shared.math.Matrix33; import org.iplantc.phyloviewer.shared.math.Vector2; import org.iplantc.phyloviewer.shared.render.Camera; import org.iplantc.phyloviewer.shared.render.CameraCladogram; import org.junit.Test; import static org.junit.Assert.*; public class TestJava2DGraphics { double delta = 10E-14; @Test public void testAffineTransformFrom() throws NoninvertibleTransformException { // Tests creating an AffineTransform from a Matrix33. Also, compares results of Matrix33 // transform to AffineTransform Matrix33 matrix = new Matrix33(); AffineTransform transform = Java2DGraphics.affineTransformFrom(matrix); compareTransform(transform, matrix); compareTransform(transform.createInverse(), matrix.inverse()); double x = 23; double y = -29; matrix = Matrix33.makeScale(x, y); compareTransform(AffineTransform.getScaleInstance(x, y), matrix); compareTransform(Java2DGraphics.affineTransformFrom(matrix), matrix); matrix = Matrix33.makeTranslate(x, y); compareTransform(AffineTransform.getTranslateInstance(x, y), matrix); compareTransform(Java2DGraphics.affineTransformFrom(matrix), matrix); } @Test public void testIsCulled() { int width = 100; int height = 100; Camera camera = new CameraCladogram(); camera.setPannable(true, true); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = image.createGraphics(); Java2DGraphics javaGraphics = new Java2DGraphics(graphics); javaGraphics.setSize(width, height); javaGraphics.setViewMatrix(camera.getMatrix(width, height)); Box2D topBox = new Box2D(new Vector2(0, 0), new Vector2(1.0, 0.2)); Box2D bottomBox = new Box2D(new Vector2(0, 0.6), new Vector2(1.0, 0.8)); Box2D leftBox = new Box2D(new Vector2(0, 0), new Vector2(0.4, 1.0)); assertFalse(javaGraphics.isCulled(topBox)); assertFalse(javaGraphics.isCulled(bottomBox)); assertFalse(javaGraphics.isCulled(leftBox)); camera.pan(0, -0.5); // pan down javaGraphics.setViewMatrix(camera.getMatrix(width, height)); assertTrue(javaGraphics.isCulled(topBox)); assertFalse(javaGraphics.isCulled(bottomBox)); assertFalse(javaGraphics.isCulled(leftBox)); camera.reset(); camera.zoom(0.5, 0.5, 1.0, 2.0); // reset and zoom 2x in y direction, keeping the center of the // image stationary javaGraphics.setViewMatrix(camera.getMatrix(width, height)); assertTrue(javaGraphics.isCulled(topBox)); assertFalse(javaGraphics.isCulled(bottomBox)); assertFalse(javaGraphics.isCulled(leftBox)); camera.pan(0, 0.5); // pan up javaGraphics.setViewMatrix(camera.getMatrix(width, height)); assertFalse(javaGraphics.isCulled(topBox)); assertTrue(javaGraphics.isCulled(bottomBox)); assertFalse(javaGraphics.isCulled(leftBox)); camera.pan(-0.5, 0); // pan right javaGraphics.setViewMatrix(camera.getMatrix(width, height)); assertFalse(javaGraphics.isCulled(topBox)); assertTrue(javaGraphics.isCulled(bottomBox)); assertTrue(javaGraphics.isCulled(leftBox)); } private void compareTransform(AffineTransform transform, Matrix33 matrix) { assertEquals(transform.getScaleX(), matrix.getScaleX(), Double.MIN_VALUE); assertEquals(transform.getScaleY(), matrix.getScaleY(), Double.MIN_VALUE); assertEquals(transform.getShearX(), matrix.getShearX(), Double.MIN_VALUE); assertEquals(transform.getShearY(), matrix.getShearY(), Double.MIN_VALUE); assertEquals(transform.getTranslateX(), matrix.getTranslationX(), Double.MIN_VALUE); assertEquals(transform.getTranslateY(), matrix.getTranslationY(), Double.MIN_VALUE); double x = -42; double y = 11; Vector2 mxPoint = matrix.transform(new Vector2(x, y)); Point2D txPoint = transform.transform(new Point2D.Double(x, y), null); assertEquals(txPoint.getX(), mxPoint.getX(), Double.MIN_VALUE); assertEquals(txPoint.getY(), mxPoint.getY(), Double.MIN_VALUE); } @Test public void testGetColor() { Color color = Java2DGraphics.getColorFromHtmlString("#ffffff"); assertEquals(255, color.getRed()); assertEquals(255, color.getGreen()); assertEquals(255, color.getBlue()); color = Java2DGraphics.getColorFromHtmlString("#ff0000"); assertEquals(255, color.getRed()); assertEquals(0, color.getGreen()); assertEquals(0, color.getBlue()); color = Java2DGraphics.getColorFromHtmlString("#00ff00"); assertEquals(0, color.getRed()); assertEquals(255, color.getGreen()); assertEquals(0, color.getBlue()); color = Java2DGraphics.getColorFromHtmlString("#0000ff"); assertEquals(0, color.getRed()); assertEquals(0, color.getGreen()); assertEquals(255, color.getBlue()); } }