@Override public MultiLevelImage createImage(final Mask mask) { final MultiLevelModel multiLevelModel = ImageManager.getMultiLevelModel(mask); final MultiLevelSource multiLevelSource = new AbstractMultiLevelSource(multiLevelModel) { @Override public RenderedImage createImage(int level) { return VirtualBandOpImage.createMask(getExpression(mask), mask.getProduct(), ResolutionLevel.create(getModel(), level)); } }; return new VirtualBandMultiLevelImage(multiLevelSource, getExpression(mask), mask.getProduct()) { @Override public void reset() { super.reset(); mask.fireProductNodeDataChanged(); } }; }
/** * Creates the image. * * @param mask The mask which requests creation of its image. * * @return The image. */ @Override public MultiLevelImage createImage(final Mask mask) { final MultiLevelModel multiLevelModel = ImageManager.getMultiLevelModel(mask); final MultiLevelSource multiLevelSource = new AbstractMultiLevelSource(multiLevelModel) { @Override public RenderedImage createImage(int level) { return VirtualBandOpImage.createMask(getExpression(mask), mask.getProduct(), ResolutionLevel.create(getModel(), level)); } }; return new VirtualBandMultiLevelImage(multiLevelSource, getExpression(mask), mask.getProduct()) { @Override public void reset() { super.reset(); mask.fireProductNodeDataChanged(); } }; }
@Override public RenderedImage createImage(int level) { return VirtualBandOpImage.createMask(getExpression(mask), mask.getProduct(), ResolutionLevel.create(getModel(), level)); } };
@Override public RenderedImage createImage(int level) { return VirtualBandOpImage.createMask(getExpression(mask), mask.getProduct(), ResolutionLevel.create(getModel(), level)); } };
@Override public boolean canTransferMask(Mask mask, Product product) { final String expression = getExpression(mask); if (StringUtils.isNullOrEmpty(expression)) { return false; } try { if (mask.getProduct() != null) { for (RasterDataNode raster : BandArithmetic.getRefRasters(expression, mask.getProduct())) { if (raster instanceof Mask) { if (!product.getMaskGroup().contains(raster.getName())) { Mask refMask = (Mask) raster; if (!canTransferMask(refMask, product)) { return false; } } } else { if (!product.containsRasterDataNode(raster.getName())) { return false; } } } } else { // the mask has not been added to a product yet BandArithmetic.getRefRasters(expression, product); } } catch (ParseException e) { return false; } return true; }
@Override public Mask transferMask(Mask mask, Product product) { if (canTransferMask(mask, product)) { String expression = getExpression(mask); final Map<Mask, Mask> translationMap = transferReferredMasks(expression, mask.getProduct(), product); expression = translateExpression(translationMap, expression); final String originalMaskName = mask.getName(); final String maskName = getAvailableMaskName(originalMaskName, product.getMaskGroup()); return product.addMask(maskName, expression, mask.getDescription(), mask.getImageColor(), mask.getImageTransparency()); } return null; }
private static Band createBandCopy(Product targetProduct, Mask mask) { String bandName = getAvaliableBandName("mask_" + mask.getName(), targetProduct); String maskName = getAvailableMaskName(mask.getName(), targetProduct.getMaskGroup()); int dataType = mask.getDataType(); Band band = targetProduct.addBand(bandName, dataType); String description = mask.getDescription() + " (from " + mask.getProduct().getDisplayName() + ")"; targetProduct.addMask(maskName, bandName, description, mask.getImageColor(), mask.getImageTransparency()); return band; }