public boolean selectPlacemarks(PlacemarkGroup placemarkGroup, Placemark[] placemarks) { VectorDataLayer layer = selectVectorDataLayer(placemarkGroup.getVectorDataNode()); if (layer != null) { FigureCollection figureCollection = layer.getFigureCollection(); Figure[] figures = figureCollection.getFigures(); ArrayList<SimpleFeatureFigure> selectedFigures = new ArrayList<>(figures.length); HashSet<Placemark> placemarkSet = new HashSet<>(Arrays.asList(placemarks)); for (Figure figure : figures) { if (figure instanceof SimpleFeatureFigure) { SimpleFeatureFigure featureFigure = (SimpleFeatureFigure) figure; Placemark placemark = placemarkGroup.getPlacemark(featureFigure.getSimpleFeature()); if (placemarkSet.contains(placemark)) { selectedFigures.add(featureFigure); } } } figureEditor.getFigureSelection().removeAllFigures(); figureEditor.getFigureSelection().addFigures(selectedFigures.toArray(new Figure[selectedFigures.size()])); final int selectionStage = Math.min(selectedFigures.size(), 2); figureEditor.getFigureSelection().setSelectionStage(selectionStage); return true; } return false; }
@Override public void selectionChanged(SelectionChangeEvent event) { if (synchronizingPlacemarkSelectedState) { return; } final ProductSceneView sceneView = getSceneView(); if (sceneView != null) { Layer layer = sceneView.getSelectedLayer(); if (layer instanceof VectorDataLayer) { VectorDataLayer vectorDataLayer = (VectorDataLayer) layer; if (vectorDataLayer.getVectorDataNode() == getProduct().getPinGroup().getVectorDataNode() || vectorDataLayer.getVectorDataNode() == getProduct().getGcpGroup().getVectorDataNode()) { updateUIState(); } } } }
Layer getGcpLayer(boolean create) { final Product product = getProduct(); if (product != null) { final VectorDataNode vectorDataNode = product.getGcpGroup().getVectorDataNode(); final Layer vectorDataCollectionLayer = getVectorDataCollectionLayer(create); if (vectorDataCollectionLayer != null) { return LayerUtils.getChildLayer(getRootLayer(), LayerUtils.SEARCH_DEEP, VectorDataLayerFilterFactory.createNodeFilter(vectorDataNode)); } } return null; }
Layer getPinLayer(boolean create) { final Product product = getProduct(); if (product != null) { final VectorDataNode vectorDataNode = product.getPinGroup().getVectorDataNode(); final Layer vectorDataCollectionLayer = getVectorDataCollectionLayer(create); if (vectorDataCollectionLayer != null) { return LayerUtils.getChildLayer(getRootLayer(), LayerUtils.SEARCH_DEEP, VectorDataLayerFilterFactory.createNodeFilter(vectorDataNode)); } } return null; }
@Override public void mouseReleased(MouseEvent event) { if (started) { ProductSceneView sceneView = getProductSceneView(event); if (sceneView != null) { sceneView.selectVectorDataLayer(placemarkDescriptor.getPlacemarkGroup(sceneView.getProduct()).getVectorDataNode()); if (isSingleButton1Click(event)) { insertPlacemark(sceneView); } stopInteraction(event); } } }
private void insertPlacemark(ProductSceneView view) { Product product = view.getProduct(); final String[] uniqueNameAndLabel = PlacemarkNameFactory.createUniqueNameAndLabel(placemarkDescriptor, product); final String name = uniqueNameAndLabel[0]; final String label = uniqueNameAndLabel[1]; PixelPos rasterPos = new PixelPos(view.getCurrentPixelX() + 0.5f, view.getCurrentPixelY() + 0.5f); Point2D modelPos = view.getRaster().getImageToModelTransform().transform(rasterPos, new Point2D.Double()); Point2D scenePos = new Point2D.Double(); try { view.getRaster().getModelToSceneTransform().transform(modelPos, scenePos); final AffineTransform sceneToImage = Product.findImageToModelTransform(product.getSceneGeoCoding()).createInverse(); rasterPos = (PixelPos) sceneToImage.transform(modelPos, new PixelPos()); } catch (TransformException | NoninvertibleTransformException e) { Dialogs.showError("Could not place pin in image due to transformation exception: " + e.getMessage()); return; } final Placemark newPlacemark = Placemark.createPointPlacemark(placemarkDescriptor, name, label, "", rasterPos, null, product.getSceneGeoCoding()); PlacemarkGroup placemarkGroup = placemarkDescriptor.getPlacemarkGroup(product); String defaultStyleCss = placemarkGroup.getVectorDataNode().getDefaultStyleCss(); if(newPlacemark.getStyleCss().isEmpty()) { newPlacemark.setStyleCss(defaultStyleCss); } placemarkGroup.add(newPlacemark); UndoRedo.Manager undoManager = SnapApp.getDefault().getUndoManager(product); if (undoManager != null) { undoManager.addEdit(UndoablePlacemarkActionFactory.createUndoablePlacemarkInsertion(product, newPlacemark, placemarkDescriptor)); } }