private void updateMaskForm(ProductSceneView view) { if (view == null) { final ProductNode selectedProductNode = SnapApp.getDefault().getSelectedProductNode(EXPLORER); if (selectedProductNode instanceof RasterDataNode) { final RasterDataNode rdn = (RasterDataNode) selectedProductNode; maskForm.reconfigureMaskTable(rdn.getProduct(), rdn); } else if (selectedProductNode instanceof Product) { final Product product = (Product) selectedProductNode; maskForm.reconfigureMaskTable(product, null); } else if (selectedProductNode != null && selectedProductNode.getProduct() != null) { maskForm.reconfigureMaskTable(selectedProductNode.getProduct(), null); } else { maskForm.clearMaskTable(); } } else { maskForm.reconfigureMaskTable(view.getProduct(), view.getRaster()); } }
@Override public void mouseClicked(final MouseEvent e) { if (e.getClickCount() == 2) { Action action = getDoubleClickAction(); if (action.isEnabled()) { action.actionPerformed(new ActionEvent(e.getSource(), e.getID(), null)); } } } });
@Override public void actionPerformed(ActionEvent e) { Mask[] selectedMasks = getMaskForm().getSelectedMasks(); getMaskForm().getMaskTable().clearSelection(); RasterDataNodeDeleter.deleteRasterDataNodes(selectedMasks); }
Dimension getTargetMaskSize() { RasterDataNode raster = getRaster(); if (raster != null) { return new Dimension(raster.getRasterWidth(), raster.getRasterHeight()); } Product product = getProduct(); if (product != null) { return new Dimension(product.getSceneRasterWidth(), product.getSceneRasterHeight()); } return null; } }
void addBandMathMask(String code) { Product product = getMaskForm().getProduct(); RasterDataNode[] refRasters; try { return; Dimension expectedSize = getMaskForm().getTargetMaskSize(); if (expectedSize != null && !ProductUtils.areRastersEqualInSize(expectedSize.width, expectedSize.height, refRasters)) { getMaskForm().addMask(mask); final RasterDataNode refRaster = getMaskForm().getRaster(); if (refRaster != null) { ProductUtils.copyImageGeometry(refRaster, mask, false);
public void initUI() { setLayout(new BorderLayout()); maskForm = createMaskForm(this, e -> { final ProductSceneView sceneView = getSelectedProductSceneView(); if (sceneView != null) { Mask selectedMask = maskForm.getSelectedMask(); if (selectedMask != null) { VectorDataNode vectorDataNode = Mask.VectorDataType.getVectorData(selectedMask); if (vectorDataNode != null) { sceneView.selectVectorDataLayer(vectorDataNode); } } } }); AbstractButton helpButton = maskForm.getHelpButton(); if (helpButton != null) { helpButton.addActionListener(e -> getHelpCtx().display()); helpButton.setName("helpButton"); } updateMaskForm(getSelectedProductSceneView()); SnapApp.getDefault().getProductManager().addListener(new MaskPTL()); SnapApp.getDefault().getSelectionSupport(Product.class).addHandler((oldValue, newValue) -> updateMaskForm(getSelectedProductSceneView())); maskForm.updateState(); setDisplayName(getTitle()); add(maskForm.createContentPanel(), BorderLayout.CENTER); }
RasterDataNode referencedRaster = getMaskForm().getProduct().getRasterDataNode(model.getRasterName()); if (referencedRaster == null) { Dialogs.showError(String.format("Raster '%s' not found.", model.getRasterName())); return; Dimension expectedSize = getMaskForm().getTargetMaskSize(); if (expectedSize != null && !ProductUtils.areRastersEqualInSize(expectedSize.width, expectedSize.height, referencedRaster)) { mask.setDescription(mask.getDescription().replace(oldText, newText)); }); getMaskForm().addMask(mask);
protected Mask createNewMask(Mask.ImageType type) { String maskName = getNewMaskName(getMaskForm().getProduct().getMaskGroup()); Dimension maskSize = getMaskForm().getTargetMaskSize(); Mask mask = new Mask(maskName, maskSize.width, maskSize.height, type); Preferences preferences = SnapApp.getDefault().getPreferences(); mask.setImageColor( StringUtils.parseColor(preferences.get("mask.color", StringUtils.formatColor(Mask.ImageType.DEFAULT_COLOR)))); mask.setImageTransparency(preferences.getDouble("mask.transparency", Mask.ImageType.DEFAULT_TRANSPARENCY)); return mask; }
@Override public void actionPerformed(ActionEvent e) { Window window = getWindow(e); final Product sourcProduct = getMaskForm().getProduct(); Mask[] selectedMasks = getMaskForm().getSelectedMasks(); Product[] allProducts = SnapApp.getDefault().getProductManager().getProducts(); final TransferMaskDialog dialog = new TransferMaskDialog(window, sourcProduct, allProducts, selectedMasks); if (dialog.show() == AbstractDialog.ID_OK) { Product[] maskPixelTargetProducts = dialog.getMaskPixelTargets(); copyMaskPixel(selectedMasks, sourcProduct, maskPixelTargetProducts); Product[] maskDefinitionTargetProducts = dialog.getMaskDefinitionTargets(); copyMaskDefinition(selectedMasks, maskDefinitionTargetProducts); } }
@Override public void productRemoved(ProductManager.Event event) { if (maskForm.getProduct() == event.getProduct()) { updateMaskForm(getSelectedProductSceneView()); } } }
@Override String getCode(ActionEvent e) { Mask[] selectedMasks = getMaskForm().getSelectedMasks(); StringBuilder code = new StringBuilder(); code.append(BandArithmetic.createExternalName(selectedMasks[0].getName())); if (selectedMasks.length > 1) { code.append(" && !("); code.append(createCodeFromSelection("||", selectedMasks, 1)); code.append(")"); } return code.toString(); }
@Override public void actionPerformed(ActionEvent e) { Mask selectedMask = getMaskForm().getSelectedMask(); final Mask mask = createNewMask(selectedMask.getImageType()); mask.setName("Copy_of_" + selectedMask.getName()); mask.setDescription(selectedMask.getDescription()); PropertyContainer selectedConfig = selectedMask.getImageConfig(); Property[] models = selectedConfig.getProperties(); for (Property model : models) { mask.getImageConfig().setValue(model.getDescriptor().getName(), model.getValue()); } getMaskForm().addMask(mask); }
@Override public void actionPerformed(ActionEvent e) { Window window = getWindow(e); Mask selectedMask = getMaskForm().getSelectedMask(); PropertyContainer selectedMaskConfig = selectedMask.getImageConfig(); ImageType type = selectedMask.getImageType(); if (type == Mask.BandMathsType.INSTANCE) { Product product = getMaskForm().getProduct(); ProductExpressionPane expressionPane = ProductExpressionPane.createBooleanExpressionPane( new Product[]{product}, product, null);
@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); } } }
protected String[] collectNamesOfRastersOfSameSize() { final Product product = getMaskForm().getProduct(); //todo [multisize_products] do not compare raster sizes final RasterDataNode referenceRaster = getMaskForm().getRaster(); final List<String> rangeRasterNames = new ArrayList<>(); final Band[] bands = product.getBands(); for (Band band : bands) { if (band.getRasterHeight() == referenceRaster.getRasterHeight() && band.getRasterWidth() == referenceRaster.getRasterWidth()) { rangeRasterNames.add(band.getName()); } } final TiePointGrid[] tiePointGrids = product.getTiePointGrids(); for (TiePointGrid tiePointGrid : tiePointGrids) { if (tiePointGrid.getRasterHeight() == referenceRaster.getRasterHeight() && tiePointGrid.getRasterWidth() == referenceRaster.getRasterWidth()) { rangeRasterNames.add(tiePointGrid.getName()); } } return rangeRasterNames.toArray(new String[rangeRasterNames.size()]); } }
private void importMasksFromXml(File file) { try { final SAXBuilder saxBuilder = new SAXBuilder(); final Document document = saxBuilder.build(file); final Element rootElement = document.getRootElement(); @SuppressWarnings({"unchecked"}) final List<Element> children = rootElement.getChildren(DimapProductConstants.TAG_MASK); final Product product = getMaskForm().getProduct(); for (final Element child : children) { final DimapPersistable persistable = DimapPersistence.getPersistable(child); if (persistable != null) { final Mask mask = (Mask) persistable.createObjectFromXml(child, product); addMaskToProductIfPossible(mask, product); } } } catch (Exception e) { showErrorDialog(String.format("Failed to import mask(s): %s", e.getMessage())); } }
@Override String getCode(ActionEvent e) { Mask[] selectedMasks = getMaskForm().getSelectedMasks(); List<Mask> reverseList = new ArrayList<>(Arrays.asList(selectedMasks)); Collections.reverse(reverseList); selectedMasks = reverseList.toArray(new Mask[selectedMasks.length]); StringBuilder code = new StringBuilder(); code.append(BandArithmetic.createExternalName(selectedMasks[0].getName())); if (selectedMasks.length > 1) { code.append(" && !("); code.append(createCodeFromSelection("||", selectedMasks, 1)); code.append(")"); } return code.toString(); }
private void importMasksFromBmdx(File file) { try { final SAXBuilder saxBuilder = new SAXBuilder(); final Document document = saxBuilder.build(file); final Element rootElement = document.getRootElement(); @SuppressWarnings({"unchecked"}) final List<Element> children = rootElement.getChildren(DimapProductConstants.TAG_BITMASK_DEFINITION); final Product product = getMaskForm().getProduct(); for (Element element : children) { Mask mask = Mask.BandMathsType.createFromBitmaskDef(element, product.getSceneRasterWidth(), product.getSceneRasterHeight()); product.getMaskGroup().add(mask); } } catch (Exception e) { showErrorDialog(String.format("Failed to import mask(s): %s", e.getMessage())); } }
@Override String getCode(ActionEvent e) { Mask[] selectedMasks = getMaskForm().getSelectedMasks(); return "!(" + createCodeFromSelection("||", selectedMasks, 0) + ")"; }
@Override String getCode(ActionEvent e) { Product product = getMaskForm().getProduct(); ProductExpressionPane expressionPane = ProductExpressionPane.createBooleanExpressionPane( new Product[]{product}, product, null); expressionPane.setEmptyExpressionAllowed(false); expressionPane.setCode(""); if (expressionPane.showModalDialog(null, "New Logical Band Maths Expression") == AbstractDialog.ID_OK) { final String code = expressionPane.getCode(); if (!code.isEmpty()) { return code; } } return null; }