private void setPosition(int pixelX, int pixelY, int level, boolean pixelPosInRasterBounds) { this.rasterPixelX = pixelX; this.rasterPixelY = pixelY; this.rasterLevel = level; this.pixelPosInRasterBounds = pixelPosInRasterBounds; final AffineTransform i2m = currentView.getBaseImageLayer().getImageToModelTransform(level); modelP = i2m.transform(new Point2D.Double(pixelX + 0.5, pixelY + 0.5), new Point2D.Double()); }
public void updateImage() { getBaseImageLayer().regenerate(); }
private static boolean isBaseImageLayerRef(ProductSceneView view, LayerRef ref) { return view.getBaseImageLayer().getId().equals(ref.id); }
private void drawCursor(Graphics2D graphics, Viewport viewport, PixelPos pixelPos) { AffineTransform i2mTransform = sceneView.getBaseImageLayer().getImageToModelTransform(); AffineTransform m2vTransform = viewport.getModelToViewTransform(); AffineTransform i2vTransform = new AffineTransform(m2vTransform); i2vTransform.concatenate(i2mTransform); Point centerPixel = new Point((int) Math.floor(pixelPos.x), (int) Math.floor(pixelPos.y)); Rectangle pixelImageRect = new Rectangle(centerPixel, new Dimension(1, 1)); Rectangle2D pixelViewRect = i2vTransform.createTransformedShape(pixelImageRect).getBounds2D(); graphics.setStroke(cursorStroke); graphics.setColor(cursorColor); graphics.setXORMode(Color.BLACK); graphics.draw(pixelViewRect); if (pixelViewRect.getBounds2D().getWidth() < MAX_CROSSHAIR_SIZE) { drawCrosshair(graphics, i2vTransform, centerPixel, pixelViewRect); } }
private void drawPixelBorder(final Graphics g, final int x, final int y, final int l) { if (g instanceof Graphics2D) { Graphics2D g2d = (Graphics2D) g; AffineTransform i2m = getBaseImageLayer().getImageToModelTransform(l); AffineTransform m2v = getLayerCanvas().getViewport().getModelToViewTransform(); Rectangle imageRect = new Rectangle(x, y, 1, 1); Shape modelRect = i2m.createTransformedShape(imageRect); Shape transformedShape = m2v.createTransformedShape(modelRect); g2d.draw(transformedShape); } }
/** * @return the visible image area in pixel coordinates */ public Rectangle getVisibleImageBounds() { final ImageLayer imageLayer = getBaseImageLayer(); if (imageLayer != null) { final RenderedImage image = imageLayer.getImage(); final Area imageArea = new Area(new Rectangle(0, 0, image.getWidth(), image.getHeight())); final Area visibleImageArea = new Area( imageLayer.getModelToImageTransform().createTransformedShape(getVisibleModelBounds())); imageArea.intersect(visibleImageArea); return imageArea.getBounds(); } return null; }
public AffineTransform getBaseImageToViewTransform() { AffineTransform viewToModelTransform = layerCanvas.getViewport().getViewToModelTransform(); AffineTransform modelToImageTransform = getBaseImageLayer().getModelToImageTransform(); viewToModelTransform.concatenate(modelToImageTransform); try { return viewToModelTransform.createInverse(); } catch (NoninvertibleTransformException e) { throw new RuntimeException(e); } }
@Override public void run() { ProductSceneView view; try { view = createSceneView(viewRef, productManager, applicationPreferences, pm); } catch (Exception e) { throw new IllegalStateException("Could not create scene", e); } views.add(view); for (int i = 0; i < viewRef.getLayerCount(); i++) { LayerRef ref = viewRef.getLayerRef(i); if (isBaseImageLayerRef(view, ref)) { // The BaseImageLayer is not restored by LayerRef, so we have to adjust // transparency and visibility manually view.getBaseImageLayer().setTransparency(ref.transparency); view.getBaseImageLayer().setVisible(ref.visible); } else { try { addLayerRef(view, view.getRootLayer(), ref, productManager); } catch (Exception e) { problems.add(e); } } } } });
final AffineTransform m2i = view.getBaseImageLayer().getModelToImageTransform();
private static BufferedImageRendering createRendering(ProductSceneView view, boolean fullScene, boolean geoReferenced, BufferedImage bufferedImage) { final Viewport vp1 = view.getLayerCanvas().getViewport(); final Viewport vp2 = new DefaultViewport(new Rectangle(bufferedImage.getWidth(), bufferedImage.getHeight()), vp1.isModelYAxisDown()); if (fullScene) { vp2.zoom(view.getBaseImageLayer().getModelBounds()); } else { setTransform(vp1, vp2); } final BufferedImageRendering imageRendering = new BufferedImageRendering(bufferedImage, vp2); if (geoReferenced) { // because image to model transform is stored with the exported image we have to invert // image to view transformation final AffineTransform m2iTransform = view.getBaseImageLayer().getModelToImageTransform(0); final AffineTransform v2mTransform = vp2.getViewToModelTransform(); v2mTransform.preConcatenate(m2iTransform); final AffineTransform v2iTransform = new AffineTransform(v2mTransform); final Graphics2D graphics2D = imageRendering.getGraphics(); v2iTransform.concatenate(graphics2D.getTransform()); graphics2D.setTransform(v2iTransform); } return imageRendering; }
@Override public void actionPerformed(ActionEvent e) { Mask mask = getMaskForm().getSelectedMask(); ImageType imageType = mask.getImageType(); ProductSceneView productSceneView = topComponent.getSelectedProductSceneView(); if (productSceneView != null) { Rectangle2D modelBounds; if (imageType == Mask.VectorDataType.INSTANCE) { modelBounds = handleVectorMask(mask); } else { modelBounds = handleImageMask(mask, productSceneView.getBaseImageLayer().getImageToModelTransform()); } if (modelBounds != null) { Viewport viewport = productSceneView.getViewport(); final AffineTransform m2vTransform = viewport.getModelToViewTransform(); final AffineTransform v2mTransform = viewport.getViewToModelTransform(); final Rectangle2D viewBounds = m2vTransform.createTransformedShape(modelBounds).getBounds2D(); viewBounds.setFrameFromDiagonal(viewBounds.getMinX() - 10, viewBounds.getMinY() - 10, viewBounds.getMaxX() + 10, viewBounds.getMaxY() + 10); final Shape transformedModelBounds = v2mTransform.createTransformedShape(viewBounds); viewport.zoom(transformedModelBounds.getBounds2D()); } else { Dialogs.showMessage("Zoom to Mask", "The selected mask is empty.", JOptionPane.INFORMATION_MESSAGE, null); } } }
final ImageLayer imageLayer = view.getBaseImageLayer(); final Rectangle2D modelBounds = imageLayer.getModelBounds(); Rectangle2D imageBounds = imageLayer.getModelToImageTransform().createTransformedShape(modelBounds).getBounds2D();
final Point2D modelCenter = thisViewport.getViewToModelTransform().transform(viewCenter, null); final PixelPos imageCenter = new PixelPos(); getBaseImageLayer().getModelToImageTransform().transform(modelCenter, imageCenter); final GeoPos geoCenter = new GeoPos(); thisGeoCoding.getGeoPos(imageCenter, geoCenter); thatGeoCoding.getPixelPos(geoCenter, imageCenter); if (imageCenter.isValid()) { thatView.getBaseImageLayer().getImageToModelTransform().transform(imageCenter, modelCenter); thatViewport.setZoomFactor(thisViewport.getZoomFactor(), modelCenter.getX(), modelCenter.getY()); return true;
this.rasterLevel = level; this.pixelPosValidInRaster = pixelPosValid; AffineTransform i2mTransform = currentView.getBaseImageLayer().getImageToModelTransform(level); Point2D modelP = i2mTransform.transform(new Point2D.Double(pixelX + 0.5, pixelY + 0.5), null); try { sceneY = Double.NaN; AffineTransform m2iTransform = view.getBaseImageLayer().getModelToImageTransform(); Point2D levelZeroP = m2iTransform.transform(modelP, null); levelZeroRasterX = floor(levelZeroP.getX());
public void updateNoDataImage() { // change configuration of layer ; not setting MultiLevelSource final String expression = getRaster().getValidMaskExpression(); final ImageLayer noDataLayer = (ImageLayer) getNoDataLayer(false); if (noDataLayer != null) { if (expression != null) { final Color color = noDataLayer.getConfiguration().getValue( NoDataLayerType.PROPERTY_NAME_COLOR); final MultiLevelSource multiLevelSource = ColoredMaskImageMultiLevelSource.create(getRaster().getProduct(), color, expression, true, getBaseImageLayer().getImageToModelTransform()); noDataLayer.setMultiLevelSource(multiLevelSource); } else { noDataLayer.setMultiLevelSource(MultiLevelSource.NULL); } } }
/** * Called after SNAP preferences have changed. * This behaviour is deprecated since we want to uswe separate style editors for each layers. * * @param configuration the configuration. */ public void appyLayerProperties(PropertyMap configuration) { setScrollBarsShown(configuration.getPropertyBool(PREFERENCE_KEY_IMAGE_SCROLL_BARS_SHOWN, false)); layerCanvas.setAntialiasing(true); layerCanvas.setNavControlShown(configuration.getPropertyBool(PREFERENCE_KEY_IMAGE_NAV_CONTROL_SHOWN, true)); layerCanvas.setBackground( configuration.getPropertyColor("image.background.color", DEFAULT_IMAGE_BACKGROUND_COLOR)); layerCanvasMouseHandler.setInvertZooming(configuration.getPropertyBool(PREFERENCE_KEY_INVERT_ZOOMING, false)); ImageLayer imageLayer = getBaseImageLayer(); if (imageLayer != null) { ProductSceneImage.applyBaseImageLayerStyle(configuration, imageLayer); } Layer noDataLayer = getNoDataLayer(false); if (noDataLayer != null) { ProductSceneImage.applyNoDataLayerStyle(configuration, noDataLayer); } Layer collectionLayer = getVectorDataCollectionLayer(false); if (collectionLayer != null) { ProductSceneImage.applyFigureLayerStyle(configuration, collectionLayer); } GraticuleLayer graticuleLayer = getGraticuleLayer(false); if (graticuleLayer != null) { ProductSceneImage.applyGraticuleLayerStyle(configuration, graticuleLayer); } }