/** {@inheritDoc} */ @Override public AffineTransform getScreenToWorldTransform() { paramsLock.readLock().lock(); try { if (mapContent != null) { return mapContent.getViewport().getScreenToWorld(); } else { return null; } } finally { paramsLock.readLock().unlock(); } }
/** Called after the base image has been dragged. Sets the new map area and transforms */ protected void afterImageMoved() { paramsLock.writeLock().lock(); try { int dx = imageOrigin.x; int dy = imageOrigin.y; DirectPosition2D newPos = new DirectPosition2D(dx, dy); mapContent.getViewport().getScreenToWorld().transform(newPos, newPos); ReferencedEnvelope env = new ReferencedEnvelope(mapContent.getViewport().getBounds()); env.translate(env.getMinimum(0) - newPos.x, env.getMaximum(1) - newPos.y); doSetDisplayArea(env); imageOrigin.setLocation(0, 0); baseImageMoved.set(false); } finally { paramsLock.writeLock().unlock(); } }
@Test public void boundsCtorSetNullScreenToWorld() { MapViewport vp = new MapViewport(WORLD_1_1); assertNull(vp.getScreenToWorld()); }
/** * Checks if two viewports have equal attributes other than their editable setting. * * @param vp1 first viewport * @param vp2 second viewport */ private void assertViewportsEqual(MapViewport vp1, MapViewport vp2) { assertEquals(vp1.getBounds(), vp2.getBounds()); assertEquals(vp1.getScreenArea(), vp2.getScreenArea()); assertEquals(vp1.getScreenToWorld(), vp2.getScreenToWorld()); assertEquals(vp1.isMatchingAspectRatio(), vp2.isMatchingAspectRatio()); }
/** * {@inheritDoc} */ @Override public AffineTransform getScreenToWorldTransform() { paramsLock.readLock().lock(); try { if (mapContent != null) { return mapContent.getViewport().getScreenToWorld(); } else { return null; } } finally { paramsLock.readLock().unlock(); } }
@Test public void coordinateTransform_MatchingAspectRatioDisabled() throws Exception { MapViewport vp = new MapViewport(false); // world and screen bounds with different aspect ratios final ReferencedEnvelope world = WORLD_1_1; final Rectangle screen = SCREEN_2_1; vp.setBounds(world); vp.setScreenArea(screen); double[] screenXY = { screen.getMinX(), screen.getMinY(), screen.getMaxX(), screen.getMaxY() }; double[] worldXY = new double[screenXY.length]; vp.getScreenToWorld().transform(screenXY, 0, worldXY, 0, screenXY.length / 2); assertEquals(world.getMinX(), worldXY[0], TOL); assertEquals(world.getMaxY(), worldXY[1], TOL); assertEquals(world.getMaxX(), worldXY[2], TOL); assertEquals(world.getMinY(), worldXY[3], TOL); }
@Test public void coordinateTransform_MatchingAspectRatioEnabled() throws Exception { MapViewport vp = new MapViewport(true); // world and screen bounds with different aspect ratios final Rectangle screen = SCREEN_2_1; vp.setBounds(WORLD_1_1); vp.setScreenArea(screen); ReferencedEnvelope actualWorld = vp.getBounds(); double[] screenXY = { screen.getMinX(), screen.getMinY(), screen.getMaxX(), screen.getMaxY() }; double[] worldXY = new double[screenXY.length]; vp.getScreenToWorld().transform(screenXY, 0, worldXY, 0, screenXY.length / 2); assertEquals(actualWorld.getMinX(), worldXY[0], TOL); assertEquals(actualWorld.getMaxY(), worldXY[1], TOL); assertEquals(actualWorld.getMaxX(), worldXY[2], TOL); assertEquals(actualWorld.getMinY(), worldXY[3], TOL); }
/** * Called after the base image has been dragged. Sets the new map area and * transforms */ protected void afterImageMoved() { paramsLock.writeLock().lock(); try { int dx = imageOrigin.x; int dy = imageOrigin.y; DirectPosition2D newPos = new DirectPosition2D(dx, dy); mapContent.getViewport().getScreenToWorld().transform(newPos, newPos); ReferencedEnvelope env = new ReferencedEnvelope(mapContent.getViewport().getBounds()); env.translate(env.getMinimum(0) - newPos.x, env.getMaximum(1) - newPos.y); doSetDisplayArea(env); imageOrigin.setLocation(0, 0); baseImageMoved.set(false); } finally { paramsLock.writeLock().unlock(); } }